@@ -182,6 +182,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
182182| <K_FOREIGN:"FOREIGN">
183183| <K_CONSTRAINT:"CONSTRAINT">
184184| <K_REFERENCES:"REFERENCES">
185+ | <K_CHECK:"CHECK">
185186| <K_CHARACTER:"CHARACTER">
186187| <K_VARYING:"VARYING">
187188| <K_START:"START">
@@ -1537,6 +1538,20 @@ First First():
15371538 }
15381539}
15391540
1541+
1542+ Expression MandatoryExpression() #Expression :
1543+ {
1544+ Expression retval = null;
1545+ }
1546+ {
1547+ (
1548+ LOOKAHEAD(3) retval=OrExpression() | "(" retval=MandatoryExpression() ")" {retval = new Parenthesis(retval); }
1549+ )
1550+
1551+ { return retval; }
1552+ }
1553+
1554+
15401555Expression Expression() #Expression :
15411556{
15421557 Expression retval = null;
@@ -2572,6 +2587,7 @@ CreateTable CreateTable():
25722587 String parameter = null;
25732588 Table fkTable = null;
25742589 Select select = null;
2590+ CheckConstraint checkCs = null;
25752591}
25762592{
25772593 <K_CREATE>
@@ -2650,7 +2666,7 @@ CreateTable CreateTable():
26502666 }
26512667 )
26522668 |
2653- (
2669+ LOOKAHEAD(3) (
26542670 {
26552671 fkIndex = new ForeignKeyIndex();
26562672 }
@@ -2671,6 +2687,17 @@ CreateTable CreateTable():
26712687 [LOOKAHEAD(2) (<K_ON> <K_UPDATE> (<K_CASCADE> {fkIndex.setOnUpdateReferenceOption("CASCADE");}|<K_NO> <K_ACTION> {fkIndex.setOnUpdateReferenceOption("NO ACTION");}))]
26722688 )
26732689 |
2690+ LOOKAHEAD(3)(
2691+ [<K_CONSTRAINT> sk3 = RelObjectName()]
2692+ {Expression exp = null;}
2693+ <K_CHECK> ("(" exp = Expression() ")")* {
2694+ checkCs = new CheckConstraint();
2695+ checkCs.setName(sk3);
2696+ checkCs.setExpression(exp);
2697+ indexes.add(checkCs);
2698+ }
2699+ )
2700+ |
26742701 (
26752702 columnName=RelObjectName()
26762703
@@ -2951,7 +2978,7 @@ Alter AlterTable():
29512978 (
29522979 <K_CONSTRAINT> sk3=RelObjectName()
29532980
2954- ( ( tk=<K_FOREIGN> tk2=<K_KEY>
2981+ ( ( tk=<K_FOREIGN> tk2=<K_KEY>
29552982 columnNames=ColumnsNamesList()
29562983 {
29572984 fkIndex = new ForeignKeyIndex();
@@ -2976,7 +3003,16 @@ Alter AlterTable():
29763003 index.setColumnsNames(columnNames);
29773004 alter.setIndex(index);
29783005 }
2979- ) )
3006+ )
3007+ |
3008+ (
3009+ <K_CHECK> {Expression exp = null;} ("(" exp = Expression() ")")* {
3010+ CheckConstraint checkCs = new CheckConstraint();
3011+ checkCs.setName(sk3);
3012+ checkCs.setExpression(exp);
3013+ alter.setIndex(checkCs);
3014+ }
3015+ ) )
29803016 )
29813017 )
29823018 )
0 commit comments