Skip to content

Commit 4ae67c6

Browse files
authored
Merge pull request #7 from oracle/Bug-35950582
Bug 35950582, take 2
2 parents 295d8c8 + d2d041e commit 4ae67c6

File tree

8 files changed

+146
-37
lines changed

8 files changed

+146
-37
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oracle/quicksql",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"description": "Quick SQL to DDL translator and GUI",
55
"main": "src/index.js",
66
"type": "module",

src/tree.js

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,23 +1201,60 @@ let tree = (function(){
12011201
ret += 'insert into '+objName+' (\n';
12021202
let idColName = this.getGenIdColName();
12031203
if( idColName != null ) {
1204-
ret += tab + idColName +',\n';
1204+
ret += tab + idColName +',\n';
1205+
} else {
1206+
let pkNode = this.getExplicitPkNode();
1207+
if( pkNode != null ) {
1208+
ret += tab + pkNode.parseName() +',\n';
1209+
}
12051210
}
12061211
for( let fk in this.fks ) {
1207-
let parent = this.fks[fk];
1208-
ret += tab+singular(parent)+'_id,\n';
1212+
let parent = this.fks[fk];
1213+
let refNode = ddl.find(parent);
1214+
let _id = '';
1215+
if( refNode == null ) {
1216+
refNode = ddl.find(fk);
1217+
if( refNode.isMany2One() & !fk.endsWith('_id') ) {
1218+
parent = fk;
1219+
fk = singular(fk);
1220+
_id = '_id';
1221+
}
1222+
}
1223+
ret += tab+fk+_id+',\n';
12091224
}
12101225
for( let j = 0; j < this.children.length; j++ ) {
1211-
let child = this.children[j];
1212-
if( 0 == child.children.length )
1213-
ret += tab+child.parseName()+',\n';
1226+
let child = this.children[j];
1227+
if( idColName != null && child.parseName() == 'id' )
1228+
continue;
1229+
if (child.refId() == null ) {
1230+
if( child == this.getExplicitPkNode() )
1231+
continue; //ret += '--';
1232+
if( 0 == child.children.length )
1233+
ret += tab+child.parseName()+',\n';
1234+
}
12141235
}
12151236
if( ret.lastIndexOf(',\n') == ret.length-2 )
12161237
ret = ret.substr(0,ret.length-2)+'\n';
1238+
12171239
ret += ') values (\n';
1218-
if( ddl.optionEQvalue('Auto Primary Key','yes') ) {
1219-
ret += tab + (i+1)+ ',\n';
1240+
1241+
if( idColName != null ) {
1242+
ret += tab + (i+1)+ ',\n';
1243+
} else {
1244+
let pkNode = this.getExplicitPkNode();
1245+
if( pkNode != null ) {
1246+
const field = pkNode.parseName();
1247+
let tmp = getValue(ddl.data, null /*no name at level 0*/, field, this.parseName());
1248+
let v = -1;
1249+
if( elem != null )
1250+
v = elem[field];
1251+
if( tmp != null && tmp[i] != null ) {
1252+
v = tmp[i];
1253+
}
1254+
ret += tab + (v != null ? v : i+1)+ ',\n';
1255+
}
12201256
}
1257+
12211258
for( let fk in this.fks ) {
12221259
let ref = this.fks[fk];
12231260
let refNode = ddl.find(ref);
@@ -1246,23 +1283,29 @@ let tree = (function(){
12461283
}
12471284
for( let j = 0; j < this.children.length; j++ ) {
12481285
let child = this.children[j];
1249-
if( 0 == child.children.length ) {
1250-
let values = child.parseValues();
1251-
let cname = child.parseName();
1252-
if( elem != null ) {
1253-
let v = elem[cname];
1254-
if( v != null ) {
1286+
if( idColName != null && child.parseName() == 'id' )
1287+
continue;
1288+
if (child.refId() == null ) {
1289+
if( child == this.getExplicitPkNode() )
1290+
continue; //ret += '--';
1291+
if( 0 == child.children.length ) {
1292+
let values = child.parseValues();
1293+
let cname = child.parseName();
1294+
if( elem != null ) {
1295+
let v = elem[cname];
1296+
if( v != null ) {
1297+
values = [];
1298+
values[0] = v;
1299+
}
1300+
}
1301+
let tmp = getValue(ddl.data, null /*no name at level 0*/, cname, this.parseName());
1302+
if( tmp != null && tmp[i] != null ) {
12551303
values = [];
1256-
values[0] = v;
1257-
}
1258-
}
1259-
let tmp = getValue(ddl.data, null /*no name at level 0*/, cname, this.parseName());
1260-
if( tmp != null && tmp[i] != null ) {
1261-
values = [];
1262-
values[0] = tmp[i];
1304+
values[0] = tmp[i];
1305+
}
1306+
let datum = sample(objName, cname, child.parseType(), values);
1307+
ret += tab + translate(ddl.getOptionValue('Data Language'), datum)+',\n';
12631308
}
1264-
let datum = sample(objName, cname, child.parseType(), values);
1265-
ret += tab + translate(ddl.getOptionValue('Data Language'), datum)+',\n';
12661309
}
12671310
}
12681311
if( ret.lastIndexOf(',\n') == ret.length-2 )

test/DV/car_racing/1.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,24 @@ insert into team (
7171
commit;
7272

7373
insert into driver (
74-
team_id,
7574
driverid,
75+
team_id,
7676
name,
7777
points
7878
) values (
79-
302,
8079
103,
80+
302,
8181
'Charles Leclerc',
8282
192
8383
);
8484
insert into driver (
85-
team_id,
8685
driverid,
86+
team_id,
8787
name,
8888
points
8989
) values (
90-
302,
9190
104,
91+
302,
9292
'Carlos Sainz Jr',
9393
118
9494
);

test/DV/car_racing/2.sql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ select JSON {
8686
-- load data
8787

8888
insert into driver (
89-
teamInfo_id,
9089
driverId,
90+
teamInfo_id,
9191
name,
9292
points
9393
) values (
94-
301,
9594
101,
95+
301,
9696
'Max Verstappen',
9797
258
9898
);
@@ -110,25 +110,25 @@ insert into teamInfo (
110110
commit;
111111

112112
insert into race (
113+
driverRaceMapId,
113114
raceInfo_id,
114115
driver_id,
115-
driverRaceMapId,
116116
finalPosition
117117
) values (
118+
3,
118119
201,
119120
101,
120-
3,
121121
19
122122
);
123123
insert into race (
124+
driverRaceMapId,
124125
raceInfo_id,
125126
driver_id,
126-
driverRaceMapId,
127127
finalPosition
128128
) values (
129+
11,
129130
202,
130131
101,
131-
11,
132132
1
133133
);
134134

test/bugs/35950582.qsql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
team_members
2+
username
3+
projects /insert 2
4+
name
5+
project_lead /nn /references team_members /cascade

test/bugs/35950582.sql

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
-- create tables
2+
create table team_members (
3+
id number generated by default on null as identity
4+
constraint team_members_id_pk primary key,
5+
username varchar2(255 char)
6+
)
7+
;
8+
9+
create table projects (
10+
id number generated by default on null as identity
11+
constraint projects_id_pk primary key,
12+
project_lead number
13+
constraint projects_project_lead_fk
14+
references team_members on delete cascade not null,
15+
name varchar2(255 char)
16+
)
17+
;
18+
19+
-- table index
20+
create index projects_i1 on projects (project_lead);
21+
22+
-- load data
23+
-- load data
24+
25+
insert into projects (
26+
id,
27+
project_lead,
28+
name
29+
) values (
30+
1,
31+
1,
32+
'Corporate Portal'
33+
);
34+
35+
insert into projects (
36+
id,
37+
project_lead,
38+
name
39+
) values (
40+
2,
41+
1,
42+
'System Burst Performance Review'
43+
);
44+
45+
commit;
46+
47+
alter table projects
48+
modify id generated always as identity restart start with 3;
49+
50+
51+
-- Generated by Quick SQL Thursday October 26, 2023 21:59:23
52+
53+
/*
54+
team_members
55+
username
56+
projects /insert 2
57+
name
58+
project_lead /nn /references team_members
59+
60+
# settings = { semantics: "CHAR", language: "EN", APEX: true }
61+
*/

test/single_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import json2qsql from "../src/json2qsql.js";
55
import fs from "fs";
66

77
try {
8-
let file = '//erd/Bug35814250/4.qsql';//'DV/donuts.json';
8+
let file = '//DV/car_racing/2.qsql';//'DV/donuts.json';
99
let args = process.argv.slice(2);
1010
if( 0 < args.length )
1111
file = args[0];

test/star/sales_product_customers.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ create table customers (
3838
insert into sales (
3939
id,
4040
product_id,
41-
customer_id,
41+
customers_id,
4242
quantity
4343
) values (
4444
1,
@@ -49,7 +49,7 @@ insert into sales (
4949
insert into sales (
5050
id,
5151
product_id,
52-
customer_id,
52+
customers_id,
5353
quantity
5454
) values (
5555
2,

0 commit comments

Comments
 (0)