@@ -155,6 +155,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
155
155
| <K_BIT:"BIT">
156
156
| <K_BOTH:"BOTH">
157
157
| <K_BY:"BY">
158
+ | <K_BYTES: "BYTES">
158
159
| <K_CACHE: "CACHE">
159
160
| <K_BUFFERS: "BUFFERS">
160
161
| <K_BYTE: "BYTE">
@@ -163,8 +164,6 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
163
164
| <K_CASE:"CASE">
164
165
| <K_CASEWHEN:"CASEWHEN"> /* H2 casewhen function */
165
166
| <K_CAST: "CAST">
166
- | <K_TRY_CAST: "TRY_CAST">
167
- | <K_SAFE_CAST: "SAFE_CAST">
168
167
| <K_CHARACTER:"CHARACTER">
169
168
| <K_CHANGE:"CHANGE">
170
169
| <K_CHANGES:"CHANGES">
@@ -258,6 +257,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
258
257
| <K_INNER:"INNER">
259
258
| <K_STRAIGHT:"STRAIGHT_JOIN">
260
259
| <K_INSERT:"INSERT">
260
+ | <K_INTERLEAVE: "INTERLEAVE">
261
261
| <K_INTERSECT:"INTERSECT">
262
262
| <K_INTERVAL:"INTERVAL">
263
263
| <K_INTO:"INTO">
@@ -325,6 +325,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
325
325
| <K_OVERLAPS:"OVERLAPS">
326
326
| <K_OPTIMIZE: "OPTIMIZE" >
327
327
| <K_PARALLEL:"PARALLEL">
328
+ | <K_PARENT:"PARENT">
328
329
| <K_PARTITION:"PARTITION">
329
330
| <K_PATH:"PATH">
330
331
| <K_PERCENT:"PERCENT">
@@ -350,6 +351,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
350
351
| <K_REGISTER: "REGISTER">
351
352
| <K_RENAME:"RENAME">
352
353
| <K_REPLACE:"REPLACE">
354
+ | <K_RESET:"RESET">
355
+ | <K_RESTART:"RESTART">
353
356
| <K_RESUMABLE: "RESUMABLE">
354
357
| <K_RESUME: "RESUME">
355
358
| <K_RESTRICT: "RESTRICT">
@@ -359,6 +362,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
359
362
| <K_ROLLBACK:"ROLLBACK">
360
363
| <K_ROW: "ROW">
361
364
| <K_ROWS: "ROWS">
365
+ | <K_SAFE_CAST: "SAFE_CAST">
362
366
| <K_SAVEPOINT: "SAVEPOINT">
363
367
| <K_SCHEMA: "SCHEMA">
364
368
| <K_SELECT: ("SELECT" | "SEL")>
@@ -367,8 +371,6 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
367
371
| <K_SEPARATOR:"SEPARATOR">
368
372
| <K_SESSION:"SESSION">
369
373
| <K_SET:"SET">
370
- | <K_RESET:"RESET">
371
- | <K_RESTART:"RESTART">
372
374
| <K_SETS:"SETS">
373
375
| <K_SHOW : "SHOW">
374
376
| <K_SHUTDOWN : "SHUTDOWN">
@@ -378,6 +380,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
378
380
| <K_SKIP: "SKIP">
379
381
| <K_SOME:"SOME">
380
382
| <K_START:"START">
383
+ | <K_STORED: "STORED">
384
+ | <K_STRING: "STRING">
381
385
| <K_SUSPEND:"SUSPEND">
382
386
| <K_SWITCH: "SWITCH">
383
387
| <K_SYNONYM:"SYNONYM">
@@ -399,6 +403,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
399
403
| <K_TRAILING:"TRAILING">
400
404
| <K_TRUNCATE:"TRUNCATE">
401
405
| <K_TRUE:"TRUE">
406
+ | <K_TRY_CAST: "TRY_CAST">
402
407
| <K_TUMBLING:"TUMBLING">
403
408
| <K_TYPE:"TYPE">
404
409
| <K_UNBOUNDED: "UNBOUNDED">
@@ -1828,7 +1833,7 @@ String RelObjectNameWithoutValue() :
1828
1833
{ Token tk = null; }
1829
1834
{
1830
1835
( tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER> | tk=<K_DATE_LITERAL> | tk=<K_DATETIMELITERAL> | tk=<K_STRING_FUNCTION_NAME> | tk=<K_ISOLATION> | tk=<K_TIME_KEY_EXPR>
1831
- | tk="ACTION" | tk="ACTIVE" | tk="ADD" | tk="ADVANCE" | tk="ADVISE" | tk="AGAINST" | tk="ALGORITHM" | tk="ALTER" | tk="ANALYZE" | tk="APPLY" | tk="ARCHIVE" | tk="ARRAY" | tk="ASC" | tk="AT" | tk="AUTHORIZATION" | tk="BEGIN" | tk="BINARY" | tk="BIT" | tk="BUFFERS" | tk="BY" | tk="BYTE" | tk="CACHE" | tk="CALL" | tk="CASCADE" | tk="CASE" | tk="CAST" | tk="CHANGE" | tk="CHANGES" | tk="CHAR" | tk="CHARACTER" | tk="CHECKPOINT" | tk="CLOSE" | tk="COLLATE" | tk="COLUMN" | tk="COLUMNS" | tk="COMMENT" | tk="COMMIT" | tk="CONFLICT" | tk="CONSTRAINTS" | tk="COSTS" | tk="CS" | tk="CYCLE" | tk="DATABASE" | tk="DDL" | tk="DECLARE" | tk="DEFAULT" | tk="DEFERRABLE" | tk="DELAYED" | tk="DELETE" | tk="DESC" | tk="DESCRIBE" | tk="DISABLE" | tk="DISCONNECT" | tk="DIV" | tk="DML" | tk="DO" | tk="DROP" | tk="DUMP" | tk="DUPLICATE" | tk="EMIT" | tk="ENABLE" | tk="END" | tk="ESCAPE" | tk="EXCLUDE" | tk="EXEC" | tk="EXECUTE" | tk="EXPLAIN" | tk="EXTENDED" | tk="EXTRACT" | tk="FALSE" | tk="FILTER" | tk="FIRST" | tk="FLUSH" | tk="FN" | tk="FOLLOWING" | tk="FORMAT" | tk="FULLTEXT" | tk="FUNCTION" | tk="GLOBAL" | tk="GRANT" | tk="GUARD" | tk="HISTORY" | tk="HOPPING" | tk="INCLUDE" | tk="INCREMENT" | tk="INDEX" | tk="INSERT" | tk="INVALIDATE" | tk="ISNULL" | tk="JSON" | tk="KEEP" | tk="KEY" | tk="KEYS" | tk="LAST" | tk="LEADING" | tk="LINK" | tk="LOCAL" | tk="LOCKED" | tk="LOG" | tk="MATCH" | tk="MATCHED" | tk="MATERIALIZED" | tk="MAXVALUE" | tk="MERGE" | tk="MINVALUE" | tk="MODIFY" | tk="MOVEMENT" | tk="NEXT" | tk="NO" | tk="NOCACHE" | tk="NOKEEP" | tk="NOLOCK" | tk="NOMAXVALUE" | tk="NOMINVALUE" | tk="NOORDER" | tk="NOTHING" | tk="NOVALIDATE" | tk="NOWAIT" | tk="NULLS" | tk="OF" | tk="OFF" | tk="OPEN" | tk="OVER" | tk="OVERLAPS" | tk="PARALLEL" | tk="PARTITION" | tk="PATH" | tk="PERCENT" | tk="PLACING" | tk="PRECEDING" | tk="PRECISION" | tk="PRIMARY" | tk="PRIOR" | tk="PURGE" | tk="QUERY" | tk="QUICK" | tk="QUIESCE" | tk="RANGE" | tk="READ" | tk="RECYCLEBIN" | tk="REFERENCES" | tk="REGISTER" | tk="RENAME" | tk="REPLACE" | tk="RESET" | tk="RESTART" | tk="RESTRICT" | tk="RESTRICTED" | tk="RESUMABLE" | tk="RESUME" | tk="RLIKE" | tk="ROLLBACK" | tk="ROW" | tk="ROWS" | tk="RR" | tk="RS" | tk="SAVEPOINT" | tk="SCHEMA" | tk="SEPARATOR" | tk="SEQUENCE" | tk="SESSION" | tk="SETS" | tk="SHOW" | tk="SHUTDOWN" | tk="SIBLINGS" | tk="SIGNED" | tk="SIMILAR" | tk="SIZE" | tk="SKIP" | tk="SUSPEND" | tk="SWITCH" | tk="SYNONYM" | tk="SYSTEM" | tk="TABLE" | tk="TABLESPACE" | tk="TEMP" | tk="TEMPORARY" | tk="THEN" | tk="TIMEOUT" | tk="TIMESTAMPTZ" | tk="TO" | tk="TRUE" | tk="TRUNCATE" | tk="TUMBLING" | tk="TYPE" | tk="UNLOGGED" | tk="UNQIESCE" | tk="UNQUIESCE" | tk="UNSIGNED" | tk="UPDATE" | tk="UPSERT" | tk="UR" | tk="USER" | tk="VALIDATE" | tk="VERBOSE" | tk="VIEW" | tk="WAIT" | tk="WITHIN" | tk="WITHOUT" | tk="WORK" | tk="XML" | tk="XMLAGG" | tk="XMLTEXT" | tk="YAML" | tk="ZONE" )
1836
+ | tk="ACTION" | tk="ACTIVE" | tk="ADD" | tk="ADVANCE" | tk="ADVISE" | tk="AGAINST" | tk="ALGORITHM" | tk="ALTER" | tk="ANALYZE" | tk="APPLY" | tk="ARCHIVE" | tk="ARRAY" | tk="ASC" | tk="AT" | tk="AUTHORIZATION" | tk="BEGIN" | tk="BINARY" | tk="BIT" | tk="BUFFERS" | tk="BY" | tk="BYTE" | tk="BYTES" | tk="CACHE" | tk="CALL" | tk="CASCADE" | tk="CASE" | tk="CAST" | tk="CHANGE" | tk="CHANGES" | tk="CHAR" | tk="CHARACTER" | tk="CHECKPOINT" | tk="CLOSE" | tk="COLLATE" | tk="COLUMN" | tk="COLUMNS" | tk="COMMENT" | tk="COMMIT" | tk="CONFLICT" | tk="CONSTRAINTS" | tk="COSTS" | tk="CS" | tk="CYCLE" | tk="DATABASE" | tk="DDL" | tk="DECLARE" | tk="DEFAULT" | tk="DEFERRABLE" | tk="DELAYED" | tk="DELETE" | tk="DESC" | tk="DESCRIBE" | tk="DISABLE" | tk="DISCONNECT" | tk="DIV" | tk="DML" | tk="DO" | tk="DROP" | tk="DUMP" | tk="DUPLICATE" | tk="EMIT" | tk="ENABLE" | tk="END" | tk="ESCAPE" | tk="EXCLUDE" | tk="EXEC" | tk="EXECUTE" | tk="EXPLAIN" | tk="EXTENDED" | tk="EXTRACT" | tk="FALSE" | tk="FILTER" | tk="FIRST" | tk="FLUSH" | tk="FN" | tk="FOLLOWING" | tk="FORMAT" | tk="FULLTEXT" | tk="FUNCTION" | tk="GLOBAL" | tk="GRANT" | tk="GUARD" | tk="HISTORY" | tk="HOPPING" | tk="INCLUDE" | tk="INCREMENT" | tk="INDEX" | tk="INSERT" | tk="INTERLEAVE" | tk="INVALIDATE" | tk="ISNULL" | tk="JSON" | tk="KEEP" | tk="KEY" | tk="KEYS" | tk="LAST" | tk="LEADING" | tk="LINK" | tk="LOCAL" | tk="LOCKED" | tk="LOG" | tk="MATCH" | tk="MATCHED" | tk="MATERIALIZED" | tk="MAXVALUE" | tk="MERGE" | tk="MINVALUE" | tk="MODIFY" | tk="MOVEMENT" | tk="NEXT" | tk="NO" | tk="NOCACHE" | tk="NOKEEP" | tk="NOLOCK" | tk="NOMAXVALUE" | tk="NOMINVALUE" | tk="NOORDER" | tk="NOTHING" | tk="NOVALIDATE" | tk="NOWAIT" | tk="NULLS" | tk="OF" | tk="OFF" | tk="OPEN" | tk="OVER" | tk="OVERLAPS" | tk="PARALLEL" | tk="PARENT" | tk="PARTITION" | tk="PATH" | tk="PERCENT" | tk="PLACING" | tk="PRECEDING" | tk="PRECISION" | tk="PRIMARY" | tk="PRIOR" | tk="PURGE" | tk="QUERY" | tk="QUICK" | tk="QUIESCE" | tk="RANGE" | tk="READ" | tk="RECYCLEBIN" | tk="REFERENCES" | tk="REGISTER" | tk="RENAME" | tk="REPLACE" | tk="RESET" | tk="RESTART" | tk="RESTRICT" | tk="RESTRICTED" | tk="RESUMABLE" | tk="RESUME" | tk="RLIKE" | tk="ROLLBACK" | tk="ROW" | tk="ROWS" | tk="RR" | tk="RS" | tk="SAVEPOINT" | tk="SCHEMA" | tk="SEPARATOR" | tk="SEQUENCE" | tk="SESSION" | tk="SETS" | tk="SHOW" | tk="SHUTDOWN" | tk="SIBLINGS" | tk="SIGNED" | tk="SIMILAR" | tk="SIZE" | tk="SKIP" | tk="STORED" | tk="STRING" | tk="SUSPEND" | tk="SWITCH" | tk="SYNONYM" | tk="SYSTEM" | tk="TABLE" | tk="TABLESPACE" | tk="TEMP" | tk="TEMPORARY" | tk="THEN" | tk="TIMEOUT" | tk="TIMESTAMPTZ" | tk="TO" | tk="TRUE" | tk="TRUNCATE" | tk="TUMBLING" | tk="TYPE" | tk="UNLOGGED" | tk="UNQIESCE" | tk="UNQUIESCE" | tk="UNSIGNED" | tk="UPDATE" | tk="UPSERT" | tk="UR" | tk="USER" | tk="VALIDATE" | tk="VERBOSE" | tk="VIEW" | tk="WAIT" | tk="WITHIN" | tk="WITHOUT" | tk="WORK" | tk="XML" | tk="XMLAGG" | tk="XMLTEXT" | tk="YAML" | tk="ZONE" )
1832
1837
{ return tk.image; }
1833
1838
}
1834
1839
@@ -5164,6 +5169,7 @@ CreateTable CreateTable():
5164
5169
List<String> parameter = new ArrayList<String>();
5165
5170
List<String> idxSpec = new ArrayList<String>();
5166
5171
Table fkTable = null;
5172
+ SpannerInterleaveIn interleaveIn = null;
5167
5173
Select select = null;
5168
5174
Table likeTable = null;
5169
5175
CheckConstraint checkCs = null;
@@ -5336,6 +5342,7 @@ CreateTable CreateTable():
5336
5342
<K_LIKE> ( LOOKAHEAD("(" Table() ")") "(" likeTable=Table() { createTable.setLikeTable(likeTable, true); } ")"
5337
5343
| likeTable=Table() { createTable.setLikeTable(likeTable, false); } )
5338
5344
]
5345
+ [ <K_COMMA> interleaveIn = SpannerInterleaveIn( ) { createTable.setSpannerInterleaveIn(interleaveIn); } ]
5339
5346
{
5340
5347
createTable.setTable(table);
5341
5348
if (indexes.size() > 0)
@@ -5352,6 +5359,25 @@ CreateTable CreateTable():
5352
5359
}
5353
5360
}
5354
5361
5362
+ SpannerInterleaveIn SpannerInterleaveIn():
5363
+ {
5364
+ Table table = null;
5365
+ SpannerInterleaveIn.OnDelete action = null;
5366
+ }
5367
+ {
5368
+ <K_INTERLEAVE> <K_IN> <K_PARENT> table = Table()
5369
+ [
5370
+ <K_ON> <K_DELETE>
5371
+ (
5372
+ <K_NO> <K_ACTION> { action = SpannerInterleaveIn.OnDelete.NO_ACTION; }
5373
+ | <K_CASCADE> { action = SpannerInterleaveIn.OnDelete.CASCADE; }
5374
+ )
5375
+ ]
5376
+ {
5377
+ return new SpannerInterleaveIn(table, action);
5378
+ }
5379
+ }
5380
+
5355
5381
ColDataType ColDataType():
5356
5382
{
5357
5383
ColDataType colDataType = new ColDataType();
@@ -5360,13 +5386,25 @@ ColDataType ColDataType():
5360
5386
List<String> argumentsStringList = new ArrayList<String>();
5361
5387
List<Integer> array = new ArrayList<Integer>();
5362
5388
List<String> name;
5389
+ ColDataType arrayType;
5363
5390
}
5364
5391
{
5365
5392
(
5366
- (tk=<K_CHARACTER> | tk=<K_BIT>) [tk2=<K_VARYING>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
5367
- | tk=<K_DOUBLE> [LOOKAHEAD(2) tk2=<K_PRECISION>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
5393
+ tk=<K_ARRAY_LITERAL> (
5394
+ ("<" arrayType = ColDataType() ">") {
5395
+ colDataType.setDataType("ARRAY<" + arrayType.getDataType() + ">");
5396
+ }
5397
+ )
5398
+ |
5399
+ LOOKAHEAD(2) (
5400
+ tk=<K_BYTES> "(" (tk2=<S_LONG> | tk2=<S_IDENTIFIER>) ")"
5401
+ | tk=<K_STRING> "(" (tk2=<S_LONG> | tk2=<S_IDENTIFIER>) ")"
5402
+ | tk=<K_JSON> "(" (tk2=<S_LONG> | tk2=<S_IDENTIFIER>) ")"
5403
+ ) { colDataType.setDataType(tk.image + " (" + tk2.image + ")"); }
5404
+ | (tk=<K_CHARACTER> | tk=<K_BIT>) [tk2=<K_VARYING>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
5405
+ | tk=<K_DOUBLE> [LOOKAHEAD(2) tk2=<K_PRECISION>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
5368
5406
| ( tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_DATE_LITERAL> | tk=<K_XML> | tk=<K_INTERVAL>
5369
- | tk=<DT_ZONE> | tk=<K_CHAR> | tk=<K_SET> | tk=<K_BINARY> | tk=<K_JSON> )
5407
+ | tk=<DT_ZONE> | tk=<K_CHAR> | tk=<K_SET> | tk=<K_BINARY> | tk=<K_JSON> | tk=<K_STRING> )
5370
5408
[ "." (tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>) ]
5371
5409
{ if (tk2!=null) colDataType.setDataType(tk.image + "." + tk2.image); else colDataType.setDataType(tk.image); }
5372
5410
| tk=<K_UNSIGNED> [LOOKAHEAD(2) tk2=<S_IDENTIFIER>]
@@ -5505,7 +5543,13 @@ List<String> CreateParameter():
5505
5543
)
5506
5544
{ param.add(retval); }
5507
5545
|
5508
- tk=<K_AS> { param.add(tk.image); }
5546
+ tk=<K_AS> (
5547
+ ("(" exp = Expression() ")") { param.add("AS"); param.add("(" + exp.toString() + ")");}
5548
+ |
5549
+ { param.add(tk.image);}
5550
+ )
5551
+ |
5552
+ tk=<K_STORED> { param.add(tk.image); }
5509
5553
|
5510
5554
tk=<K_ON> { param.add(tk.image); }
5511
5555
|
0 commit comments