Skip to content

Commit 239d454

Browse files
Tables in any order with fk declarations postponed
1 parent 433663e commit 239d454

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+505
-317
lines changed

dist/quick-sql.js

Lines changed: 222 additions & 212 deletions
Large diffs are not rendered by default.

dist/quick-sql.umd.cjs

Lines changed: 49 additions & 47 deletions
Large diffs are not rendered by default.

src/ddl.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export const quicksql = (function () {
3636
overridesettings: {label: 'Ignore toDDL() second parameter', value:'no',check:['yes','no']},
3737
prefix: {label: 'Object Prefix', value:'' },
3838
//ondelete: {label: 'On Delete', value:'Cascade',check:['restrict','cascade','set null']},
39-
pk: { label: 'Primary Key Maintenance', value: identityDataType, check: [identityDataType, guid,'SEQ', 'NONE']},
39+
pk: { label: 'Primary Key Maintenance', value: guid, check: [identityDataType, guid,'SEQ', 'NONE']},
4040
prefixpkwithtname: {label:'Prefix primary keys with table name', value:'no',check:['yes','no']},
4141
rowkey: {label: 'Alphanumeric Row Identifier', value:'no',check:['yes','no']},
4242
rowversion: {label: 'Row Version Number', value:'no',check:['yes','no']},
@@ -74,6 +74,7 @@ export const quicksql = (function () {
7474
this.errors = null;
7575
this.options = JSON.parse(JSON.stringify(defaultOptions));
7676
this.input = fullInput;
77+
this.postponedAlters = [];
7778

7879
this.getOptionValue = function( kEy ) {
7980
const key = kEy.toLowerCase();
@@ -369,6 +370,10 @@ export const quicksql = (function () {
369370
output += this.forest[i].toDDL()+'\n';
370371
}
371372

373+
for ( let i = 0; i < this.postponedAlters.length; i++ ) {
374+
output += this.postponedAlters[i]+'\n';
375+
}
376+
372377
let j = 0;
373378
for( let i = 0; i < descendants.length; i++ ) {
374379
let trigger = descendants[i].generateTrigger();

src/json2qsql.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ var json2qsql = (function () {
142142
let output = tc.output(name+signature(obj), obj, 0);
143143

144144
//output += "\n\ndv "+name+"_dv "+name +"";
145-
output += '\n\n#settings = { genpk: false, drop: true }';
145+
output += '\n\n#settings = { genpk: false, drop: true, pk: identityDataType }';
146146

147147
output += '\n\n#flattened = \n';
148148
const tableContent = {};

src/tree.js

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -741,27 +741,34 @@ let tree = (function(){
741741
}
742742
}
743743
pad = tab+' '.repeat(this.maxChildNameLen() - fk.length);
744-
ret += tab + fk + _id + pad + type + '\n';
745-
ret += tab + tab+' '.repeat(this.maxChildNameLen()) + 'constraint '+objName+'_'+fk+'_fk\n';
746-
let onDelete = '';
747-
if( this.isOption('cascade'))
748-
onDelete = ' on delete cascade';
749-
else if( this.isOption('setnull'))
750-
onDelete = ' on delete set null';
751-
let notNull = '';
752-
for( let c in this.children ) {
753-
let child = this.children[c];
754-
if( fk == child.parseName() ) {
755-
if( child.isOption('nn') || child.isOption('notnull') )
756-
notNull = ' NOT NULL'.toLowerCase();
757-
if( child.isOption('cascade') )
758-
onDelete = ' on delete cascade';
759-
else if( this.isOption('setnull'))
760-
onDelete = ' on delete set null';
761-
break;
744+
ret += tab + fk + _id + pad + type;
745+
if( refNode.line < this.line || refNode.isMany2One() ) {
746+
ret += tab + tab+' '.repeat(this.maxChildNameLen()) + 'constraint '+objName+'_'+fk+'_fk\n';
747+
let onDelete = '';
748+
if( this.isOption('cascade'))
749+
onDelete = ' on delete cascade';
750+
else if( this.isOption('setnull'))
751+
onDelete = ' on delete set null';
752+
let notNull = '';
753+
for( let c in this.children ) {
754+
let child = this.children[c];
755+
if( fk == child.parseName() ) {
756+
if( child.isOption('nn') || child.isOption('notnull') )
757+
notNull = ' NOT NULL'.toLowerCase();
758+
if( child.isOption('cascade') )
759+
onDelete = ' on delete cascade';
760+
else if( this.isOption('setnull'))
761+
onDelete = ' on delete set null';
762+
break;
763+
}
762764
}
765+
ret += tab + tab+' '.repeat(this.maxChildNameLen()) + 'references '+ddl.objPrefix()+parent+onDelete+notNull+',\n';
766+
} else {
767+
ret += ',\n';
768+
const alter = 'alter table '+objName+' add constraint '+objName+'_'+fk+'_fk foreign key ('+fk+') references '+ddl.objPrefix()+parent+';\n'
769+
if( !ddl.postponedAlters.includes(alter) )
770+
ddl.postponedAlters.push(alter);
763771
}
764-
ret += tab + tab+' '.repeat(this.maxChildNameLen()) + 'references '+ddl.objPrefix()+parent+onDelete+notNull+',\n';
765772
}
766773

767774
if( ddl.optionEQvalue('rowkey',true) || this.isOption('rowkey') ) {

test/Bug35756025/2.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
create table bug35756025 (
2-
id number generated by default on null as identity
2+
id number default on null to_number(sys_guid(), 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
33
constraint bug35756025_id_pk primary key,
44
deptno number,
55
dname varchar2(14 char),

test/Bug35756025/3.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
create table bug35756025 (
2-
id number generated by default on null as identity
2+
id number default on null to_number(sys_guid(), 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
33
constraint bug35756025_id_pk primary key,
44
deptno number not null,
55
dname varchar2(14 char),

test/Bug35756025/4.qsql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
bug35756025
22
deptno num /nn /pk
33
dname vc14
4-
loc vc13
4+
loc vc13
5+
6+
#pk: identityDataType

test/JSON/car_racing/1.qsql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ team /insert 1
77
name
88
points num
99

10-
#settings = { genpk: false, drop: true }
10+
#settings = { genpk: false, drop: true, pk: identityDataType }
1111

1212
#flattened =
1313
{

test/JSON/car_racing/2.qsql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ driver /insert 2
1212
name
1313
finalPosition num
1414

15-
#settings = { genpk: false, drop: true }
15+
#settings = { genpk: false, drop: true, pk: identityDataType }
1616

1717
#flattened =
1818
{

0 commit comments

Comments
 (0)