@@ -297,7 +297,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
297297| <K_MOVEMENT: "MOVEMENT">
298298| <K_NATURAL:"NATURAL">
299299| <K_NEXT:"NEXT">
300- | <K_NEXTVAL: ( (("NEXTVAL")(" ")+("FOR")) | ( ("NEXT")(" ")+("VALUE") (" ")+("FOR") ) )>
300+ | <K_NEXTVAL: ( (("NEXTVAL")(( " ")+("FOR"))? ) | ( ("NEXT")(" ")+("VALUE") (" ")+("FOR") ) )>
301301| <K_NO:"NO">
302302| <K_NOCACHE:"NOCACHE">
303303| <K_NOCYCLE:"NOCYCLE">
@@ -1689,6 +1689,10 @@ Column Column() #Column :
16891689}
16901690{
16911691 data = RelObjectNameList()
1692+
1693+ // @todo: we better should return a SEQUENCE instead of a COLUMN
1694+ [ "." <K_NEXTVAL> { data.add("nextval"); } ]
1695+
16921696 [ LOOKAHEAD(2) arrayConstructor = ArrayConstructor(false) ]
16931697 {
16941698 Column col = new Column(data);
@@ -2163,6 +2167,8 @@ SelectItem SelectItem() #SelectItem:
21632167 Alias alias = null;
21642168}
21652169{
2170+ // @fixme: Oracle's SEQUENCE.nextval is parsed as COLUMN with a name part nextval
2171+ // @todo: parse a proper SEQUENCE instead of a COLUMN
21662172 (
21672173 "*" { expression = new AllColumns(); }
21682174 |
@@ -5339,121 +5345,136 @@ List<String> CreateParameter():
53395345 Expression exp = null;
53405346 List<String> param = new ArrayList<String>();
53415347 ColDataType colDataType;
5348+ Function function;
53425349}
53435350{
5351+ (
5352+ // Postgres: nextval('public.actor_actor_id_seq'::regclass)
5353+ ( <K_NEXTVAL> "(" tk=<S_CHAR_LITERAL> "::" tk2=<S_IDENTIFIER> ")" )
5354+ {
5355+ param.add("NextVal( " + tk.image + "::" + tk2.image + ")" );
5356+ }
5357+ |
53445358 (
5345- (((tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { identifier.append(tk.image); }
5346- ["." (tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>) { identifier.append("."); identifier.append(tk2.image); }])
5347- { param.add(identifier.toString()); })
5348- |
5349- tk=<K_NULL> { param.add(tk.image); }
5350- |
5351- tk=<K_NOT> { param.add(tk.image); }
5352- |
5353- tk=<K_PRIMARY> { param.add(tk.image); }
5354- |
5355- tk=<K_DEFAULT> { param.add(tk.image); }
5356- |
5357- tk=<K_FOREIGN> { param.add(tk.image); }
5358- |
5359- tk=<K_REFERENCES> { param.add(tk.image); }
5360- |
5361- tk=<K_KEY> { param.add(tk.image); }
5362- |
5363- tk=<S_CHAR_LITERAL> { param.add(tk.image); }
5364- |
5365- ("+" {retval = "+";} | "-" {retval = "-";})?
5366- (
5367- tk=<S_LONG> { retval += tk.image; }
5368- |
5369- tk=<S_DOUBLE> { retval += tk.image; }
5370- )
5371- { param.add(retval); }
5372- |
5373- tk=<K_AS> (
5374- ("(" exp = Expression() ")") { param.add("AS"); param.add("(" + exp.toString() + ")");}
5375- |
5376- { param.add(tk.image);}
5377- )
5378- |
5379- tk=<K_STORED> { param.add(tk.image); }
5380- |
5381- tk=<K_ON> { param.add(tk.image); }
5382- |
5383- tk=<K_COMMIT> { param.add(tk.image); }
5384- |
5385- tk=<K_DROP> { param.add(tk.image); }
5386- |
5387- tk=<K_ROWS> { param.add(tk.image); }
5388- |
5389- tk=<K_UNIQUE> { param.add(tk.image); }
5390- |
5391- tk=<K_CASCADE> { param.add(tk.image); }
5392- |
5393- tk=<K_DELETE> { param.add(tk.image); }
5394- |
5395- tk=<K_UPDATE> { param.add(tk.image); }
5396- |
5397- tk=<K_TIME_KEY_EXPR> { param.add(new TimeKeyExpression(tk.image).toString()); }
5398- |
5399- "=" { param.add("="); }
5400- |
5401- LOOKAHEAD(3) <K_USING> <K_INDEX> <K_TABLESPACE> retval=RelObjectName() { param.add("USING"); param.add("INDEX"); param.add("TABLESPACE"); param.add(retval); }
5402- |
5403- <K_TABLESPACE> retval=RelObjectName() { param.add("TABLESPACE"); param.add(retval); }
5404- |
5405- retval=AList() { param.add(retval); }
5406- |
5407- <K_CHECK> ("(" exp = Expression() ")") { param.add("CHECK"); param.add("(" + exp.toString() + ")");}
5408- |
5409- tk=<K_CONSTRAINT> { param.add(tk.image); }
5410- |
5411- tk=<K_WITH> { param.add(tk.image); }
5412- |
5413- tk=<K_EXCLUDE> { param.add(tk.image); }
5414- |
5415- tk=<K_WHERE> { param.add(tk.image); }
5416- |
5417- tk=<K_UNSIGNED> { param.add(tk.image); }
5418- |
5419- tk=<K_TEMP> { param.add(tk.image); }
5420- |
5421- tk=<K_TEMPORARY> { param.add(tk.image); }
5422- |
5423- tk=<K_PARTITION> { param.add(tk.image); }
5424- |
5425- tk=<K_BY> { param.add(tk.image); }
5426- |
5427- tk=<K_IN> { param.add(tk.image); }
5428- |
5429- tk=<K_TYPE> { param.add(tk.image); }
5430- |
5431- tk=<K_COMMENT> { param.add(tk.image); }
5432- |
5433- tk=<K_USING> { param.add(tk.image); }
5434- |
5435- tk=<K_COLLATE> { param.add(tk.image); }
5436- |
5437- tk=<K_ASC> { param.add(tk.image); }
5438- |
5439- tk=<K_DESC> { param.add(tk.image); }
5440- |
5441- tk=<K_TRUE> { param.add(tk.image); }
5442- |
5443- tk=<K_FALSE> { param.add(tk.image); }
5444- |
5445- tk=<K_PARALLEL> { param.add(tk.image); }
5446- |
5447- tk=<K_BINARY> { param.add(tk.image); }
5448- |
5449- tk=<K_START> { param.add(tk.image); }
5450- |
5451- (tk=<K_CHARACTER> tk2=<K_SET>) { param.add(tk.image); param.add(tk2.image);}
5452- |
5453- (<K_ARRAY_LITERAL> exp=ArrayConstructor(true)) { param.add(exp.toString()); }
5359+ (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
5360+ { identifier.append(tk.image); }
5361+
5362+ [
5363+ "."
5364+ (tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>)
5365+ { identifier.append("."); identifier.append(tk2.image); }
5366+ ]
5367+ { param.add(identifier.toString()); }
5368+ )
5369+ |
5370+ tk=<K_NULL> { param.add(tk.image); }
5371+ |
5372+ tk=<K_NOT> { param.add(tk.image); }
5373+ |
5374+ tk=<K_PRIMARY> { param.add(tk.image); }
5375+ |
5376+ tk=<K_DEFAULT> { param.add(tk.image); }
5377+ |
5378+ tk=<K_FOREIGN> { param.add(tk.image); }
5379+ |
5380+ tk=<K_REFERENCES> { param.add(tk.image); }
5381+ |
5382+ tk=<K_KEY> { param.add(tk.image); }
5383+ |
5384+ tk=<S_CHAR_LITERAL> { param.add(tk.image); }
5385+ |
5386+ ("+" {retval = "+";} | "-" {retval = "-";})?
5387+ (
5388+ tk=<S_LONG> { retval += tk.image; }
5389+ |
5390+ tk=<S_DOUBLE> { retval += tk.image; }
5391+ )
5392+ { param.add(retval); }
5393+ |
5394+ tk=<K_AS> (
5395+ ("(" exp = Expression() ")") { param.add("AS"); param.add("(" + exp.toString() + ")");}
54545396 |
5455- tk="::" colDataType = ColDataType() { param.add(tk.image); param.add(colDataType.toString()); }
5397+ { param.add(tk.image);}
54565398 )
5399+ |
5400+ tk=<K_STORED> { param.add(tk.image); }
5401+ |
5402+ tk=<K_ON> { param.add(tk.image); }
5403+ |
5404+ tk=<K_COMMIT> { param.add(tk.image); }
5405+ |
5406+ tk=<K_DROP> { param.add(tk.image); }
5407+ |
5408+ tk=<K_ROWS> { param.add(tk.image); }
5409+ |
5410+ tk=<K_UNIQUE> { param.add(tk.image); }
5411+ |
5412+ tk=<K_CASCADE> { param.add(tk.image); }
5413+ |
5414+ tk=<K_DELETE> { param.add(tk.image); }
5415+ |
5416+ tk=<K_UPDATE> { param.add(tk.image); }
5417+ |
5418+ tk=<K_TIME_KEY_EXPR> { param.add(new TimeKeyExpression(tk.image).toString()); }
5419+ |
5420+ "=" { param.add("="); }
5421+ |
5422+ LOOKAHEAD(3) <K_USING> <K_INDEX> <K_TABLESPACE> retval=RelObjectName() { param.add("USING"); param.add("INDEX"); param.add("TABLESPACE"); param.add(retval); }
5423+ |
5424+ <K_TABLESPACE> retval=RelObjectName() { param.add("TABLESPACE"); param.add(retval); }
5425+ |
5426+ retval=AList() { param.add(retval); }
5427+ |
5428+ <K_CHECK> ("(" exp = Expression() ")") { param.add("CHECK"); param.add("(" + exp.toString() + ")");}
5429+ |
5430+ tk=<K_CONSTRAINT> { param.add(tk.image); }
5431+ |
5432+ tk=<K_WITH> { param.add(tk.image); }
5433+ |
5434+ tk=<K_EXCLUDE> { param.add(tk.image); }
5435+ |
5436+ tk=<K_WHERE> { param.add(tk.image); }
5437+ |
5438+ tk=<K_UNSIGNED> { param.add(tk.image); }
5439+ |
5440+ tk=<K_TEMP> { param.add(tk.image); }
5441+ |
5442+ tk=<K_TEMPORARY> { param.add(tk.image); }
5443+ |
5444+ tk=<K_PARTITION> { param.add(tk.image); }
5445+ |
5446+ tk=<K_BY> { param.add(tk.image); }
5447+ |
5448+ tk=<K_IN> { param.add(tk.image); }
5449+ |
5450+ tk=<K_TYPE> { param.add(tk.image); }
5451+ |
5452+ tk=<K_COMMENT> { param.add(tk.image); }
5453+ |
5454+ tk=<K_USING> { param.add(tk.image); }
5455+ |
5456+ tk=<K_COLLATE> { param.add(tk.image); }
5457+ |
5458+ tk=<K_ASC> { param.add(tk.image); }
5459+ |
5460+ tk=<K_DESC> { param.add(tk.image); }
5461+ |
5462+ tk=<K_TRUE> { param.add(tk.image); }
5463+ |
5464+ tk=<K_FALSE> { param.add(tk.image); }
5465+ |
5466+ tk=<K_PARALLEL> { param.add(tk.image); }
5467+ |
5468+ tk=<K_BINARY> { param.add(tk.image); }
5469+ |
5470+ tk=<K_START> { param.add(tk.image); }
5471+ |
5472+ (tk=<K_CHARACTER> tk2=<K_SET>) { param.add(tk.image); param.add(tk2.image);}
5473+ |
5474+ (<K_ARRAY_LITERAL> exp=ArrayConstructor(true)) { param.add(exp.toString()); }
5475+ |
5476+ tk="::" colDataType = ColDataType() { param.add(tk.image); param.add(colDataType.toString()); }
5477+ )
54575478 {return param;}
54585479}
54595480
0 commit comments