@@ -876,21 +876,40 @@ proc parseIfNotExists(p: var SqlParser, k: SqlNodeKind): SqlNode =
876
876
else :
877
877
result = newNode(k)
878
878
879
+
880
+ proc parseForeignKey(p: var SqlParser): SqlNode =
881
+ getTok(p)
882
+ eat(p, " key" )
883
+ result = newNode(nkForeignKey)
884
+
885
+ var n = newNode(nkColumnList)
886
+ parseParIdentList(p, n)
887
+ result .add(n)
888
+
889
+
890
+ eat(p, " references" )
891
+ var m = newNode(nkReferences)
892
+
893
+ expectIdent(p)
894
+ m.add(newNode(nkIdent, p.tok.literal))
895
+ getTok(p)
896
+
897
+ var l = newNode(nkColumnList)
898
+ parseParIdentList(p, l)
899
+
900
+ m.add(l)
901
+
902
+ result .add(m)
903
+
904
+
879
905
proc parseTableConstraint(p: var SqlParser): SqlNode =
880
906
if isKeyw(p, " primary" ):
881
907
getTok(p)
882
908
eat(p, " key" )
883
909
result = newNode(nkPrimaryKey)
884
910
parseParIdentList(p, result )
885
911
elif isKeyw(p, " foreign" ):
886
- getTok(p)
887
- eat(p, " key" )
888
- result = newNode(nkForeignKey)
889
- parseParIdentList(p, result )
890
- eat(p, " references" )
891
- var m = newNode(nkReferences)
892
- m.add(parseColumnReference(p))
893
- result .add(m)
912
+ result = parseForeignKey(p)
894
913
elif isKeyw(p, " unique" ):
895
914
getTok(p)
896
915
eat(p, " key" )
@@ -1324,7 +1343,7 @@ proc ra(n: SqlNode, s: var SqlWriter) =
1324
1343
rs(n, s)
1325
1344
of nkForeignKey:
1326
1345
s.addKeyw(" foreign key" )
1327
- rs(n, s)
1346
+ rs(n, s, " " , " " , " " )
1328
1347
of nkNotNull:
1329
1348
s.addKeyw(" not null" )
1330
1349
of nkNull:
@@ -1360,7 +1379,7 @@ proc ra(n: SqlNode, s: var SqlWriter) =
1360
1379
s.add(')' )
1361
1380
of nkReferences:
1362
1381
s.addKeyw(" references" )
1363
- ra(n.sons[ 0 ] , s)
1382
+ rs(n , s, " " , " " , " " )
1364
1383
of nkDefault:
1365
1384
s.addKeyw(" default" )
1366
1385
ra(n.sons[0 ], s)
0 commit comments