@@ -741,27 +741,34 @@ let tree = (function(){
741
741
}
742
742
}
743
743
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
+ }
762
764
}
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 ) ;
763
771
}
764
- ret += tab + tab + ' ' . repeat ( this . maxChildNameLen ( ) ) + 'references ' + ddl . objPrefix ( ) + parent + onDelete + notNull + ',\n' ;
765
772
}
766
773
767
774
if ( ddl . optionEQvalue ( 'rowkey' , true ) || this . isOption ( 'rowkey' ) ) {
@@ -1650,6 +1657,7 @@ let tree = (function(){
1650
1657
1651
1658
if ( poundDirective == null && t . value == '#' ) {
1652
1659
poundDirective = '' ;
1660
+ lineNo ++ ;
1653
1661
continue ;
1654
1662
}
1655
1663
if ( poundDirective != null ) {
0 commit comments