Skip to content

Commit b4eb8d8

Browse files
feat: Google Spanner Support
Replaces PR JSQLParser#1415, all credit goes to @s13o Re-arranged some recently added Tokens in alphabetical order Update Keywords
1 parent 42b429f commit b4eb8d8

File tree

6 files changed

+244
-17
lines changed

6 files changed

+244
-17
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2021 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.expression;
11+
12+
import net.sf.jsqlparser.schema.Table;
13+
14+
import java.util.Collections;
15+
import java.util.List;
16+
17+
public class SpannerInterleaveIn {
18+
19+
public enum OnDelete {
20+
CASCADE,
21+
NO_ACTION
22+
}
23+
24+
private Table table;
25+
private OnDelete onDelete;
26+
27+
public SpannerInterleaveIn() {
28+
29+
}
30+
31+
public SpannerInterleaveIn(Table table, OnDelete action) {
32+
setTable(table);
33+
setOnDelete(action);
34+
}
35+
36+
public SpannerInterleaveIn(List<String> nameParts) {
37+
this(new Table(nameParts), null);
38+
}
39+
40+
public SpannerInterleaveIn(String tableName) {
41+
this(Collections.singletonList(tableName));
42+
}
43+
44+
public Table getTable() {
45+
return table;
46+
}
47+
48+
public void setTable(Table table) {
49+
this.table = table;
50+
}
51+
52+
public OnDelete getOnDelete() {
53+
return onDelete;
54+
}
55+
56+
public void setOnDelete(OnDelete action) {
57+
this.onDelete = action;
58+
}
59+
60+
@Override
61+
public String toString() {
62+
return "INTERLEAVE IN PARENT " + getTable().getName() +
63+
(getOnDelete() == null ? "" : " ON DELETE " + (getOnDelete() == OnDelete.CASCADE ? "CASCADE" : "NO ACTION"));
64+
}
65+
66+
public SpannerInterleaveIn withTable(Table table) {
67+
this.setTable(table);
68+
return this;
69+
}
70+
71+
public SpannerInterleaveIn withOnDelete(OnDelete action) {
72+
this.setOnDelete(action);
73+
return this;
74+
}
75+
}

src/main/java/net/sf/jsqlparser/statement/create/table/CreateTable.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.List;
1616
import java.util.Optional;
1717

18+
import net.sf.jsqlparser.expression.SpannerInterleaveIn;
1819
import net.sf.jsqlparser.schema.Table;
1920
import net.sf.jsqlparser.statement.Statement;
2021
import net.sf.jsqlparser.statement.StatementVisitor;
@@ -38,6 +39,8 @@ public class CreateTable implements Statement {
3839

3940
private RowMovement rowMovement;
4041

42+
private SpannerInterleaveIn interleaveIn = null;
43+
4144
@Override
4245
public void accept(StatementVisitor statementVisitor) {
4346
statementVisitor.visit(this);
@@ -199,6 +202,9 @@ public String toString() {
199202
if (likeTable != null) {
200203
sql += " LIKE " + (selectParenthesis ? "(" : "") + likeTable.toString() + (selectParenthesis ? ")" : "");
201204
}
205+
if (interleaveIn != null) {
206+
sql += ", " + interleaveIn;
207+
}
202208
return sql;
203209
}
204210

@@ -299,4 +305,17 @@ public CreateTable addIndexes(Collection<? extends Index> indexes) {
299305
collection.addAll(indexes);
300306
return this.withIndexes(collection);
301307
}
308+
309+
public SpannerInterleaveIn getSpannerInterleaveIn() {
310+
return interleaveIn;
311+
}
312+
313+
public void setSpannerInterleaveIn(SpannerInterleaveIn spannerInterleaveIn) {
314+
this.interleaveIn = spannerInterleaveIn;
315+
}
316+
317+
public CreateTable withSpannerInterleaveIn(SpannerInterleaveIn spannerInterleaveIn) {
318+
this.interleaveIn = spannerInterleaveIn;
319+
return this;
320+
}
302321
}

src/main/java/net/sf/jsqlparser/util/deparser/CreateTableDeParser.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public void deParse(CreateTable createTable) {
120120
buffer.append(")");
121121
}
122122
}
123+
if (createTable.getSpannerInterleaveIn() != null) {
124+
buffer.append(", ").append(createTable.getSpannerInterleaveIn());
125+
}
123126
}
124127

125128
}

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
155155
| <K_BIT:"BIT">
156156
| <K_BOTH:"BOTH">
157157
| <K_BY:"BY">
158+
| <K_BYTES: "BYTES">
158159
| <K_CACHE: "CACHE">
159160
| <K_BUFFERS: "BUFFERS">
160161
| <K_BYTE: "BYTE">
@@ -163,8 +164,6 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
163164
| <K_CASE:"CASE">
164165
| <K_CASEWHEN:"CASEWHEN"> /* H2 casewhen function */
165166
| <K_CAST: "CAST">
166-
| <K_TRY_CAST: "TRY_CAST">
167-
| <K_SAFE_CAST: "SAFE_CAST">
168167
| <K_CHARACTER:"CHARACTER">
169168
| <K_CHANGE:"CHANGE">
170169
| <K_CHANGES:"CHANGES">
@@ -258,6 +257,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
258257
| <K_INNER:"INNER">
259258
| <K_STRAIGHT:"STRAIGHT_JOIN">
260259
| <K_INSERT:"INSERT">
260+
| <K_INTERLEAVE: "INTERLEAVE">
261261
| <K_INTERSECT:"INTERSECT">
262262
| <K_INTERVAL:"INTERVAL">
263263
| <K_INTO:"INTO">
@@ -325,6 +325,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
325325
| <K_OVERLAPS:"OVERLAPS">
326326
| <K_OPTIMIZE: "OPTIMIZE" >
327327
| <K_PARALLEL:"PARALLEL">
328+
| <K_PARENT:"PARENT">
328329
| <K_PARTITION:"PARTITION">
329330
| <K_PATH:"PATH">
330331
| <K_PERCENT:"PERCENT">
@@ -350,6 +351,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
350351
| <K_REGISTER: "REGISTER">
351352
| <K_RENAME:"RENAME">
352353
| <K_REPLACE:"REPLACE">
354+
| <K_RESET:"RESET">
355+
| <K_RESTART:"RESTART">
353356
| <K_RESUMABLE: "RESUMABLE">
354357
| <K_RESUME: "RESUME">
355358
| <K_RESTRICT: "RESTRICT">
@@ -359,6 +362,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
359362
| <K_ROLLBACK:"ROLLBACK">
360363
| <K_ROW: "ROW">
361364
| <K_ROWS: "ROWS">
365+
| <K_SAFE_CAST: "SAFE_CAST">
362366
| <K_SAVEPOINT: "SAVEPOINT">
363367
| <K_SCHEMA: "SCHEMA">
364368
| <K_SELECT: ("SELECT" | "SEL")>
@@ -367,8 +371,6 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
367371
| <K_SEPARATOR:"SEPARATOR">
368372
| <K_SESSION:"SESSION">
369373
| <K_SET:"SET">
370-
| <K_RESET:"RESET">
371-
| <K_RESTART:"RESTART">
372374
| <K_SETS:"SETS">
373375
| <K_SHOW : "SHOW">
374376
| <K_SHUTDOWN : "SHUTDOWN">
@@ -378,6 +380,8 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
378380
| <K_SKIP: "SKIP">
379381
| <K_SOME:"SOME">
380382
| <K_START:"START">
383+
| <K_STORED: "STORED">
384+
| <K_STRING: "STRING">
381385
| <K_SUSPEND:"SUSPEND">
382386
| <K_SWITCH: "SWITCH">
383387
| <K_SYNONYM:"SYNONYM">
@@ -399,6 +403,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
399403
| <K_TRAILING:"TRAILING">
400404
| <K_TRUNCATE:"TRUNCATE">
401405
| <K_TRUE:"TRUE">
406+
| <K_TRY_CAST: "TRY_CAST">
402407
| <K_TUMBLING:"TUMBLING">
403408
| <K_TYPE:"TYPE">
404409
| <K_UNBOUNDED: "UNBOUNDED">
@@ -1828,7 +1833,7 @@ String RelObjectNameWithoutValue() :
18281833
{ Token tk = null; }
18291834
{
18301835
( 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" )
18321837
{ return tk.image; }
18331838
}
18341839

@@ -5164,6 +5169,7 @@ CreateTable CreateTable():
51645169
List<String> parameter = new ArrayList<String>();
51655170
List<String> idxSpec = new ArrayList<String>();
51665171
Table fkTable = null;
5172+
SpannerInterleaveIn interleaveIn = null;
51675173
Select select = null;
51685174
Table likeTable = null;
51695175
CheckConstraint checkCs = null;
@@ -5336,6 +5342,7 @@ CreateTable CreateTable():
53365342
<K_LIKE> ( LOOKAHEAD("(" Table() ")") "(" likeTable=Table() { createTable.setLikeTable(likeTable, true); } ")"
53375343
| likeTable=Table() { createTable.setLikeTable(likeTable, false); } )
53385344
]
5345+
[ <K_COMMA> interleaveIn = SpannerInterleaveIn( ) { createTable.setSpannerInterleaveIn(interleaveIn); } ]
53395346
{
53405347
createTable.setTable(table);
53415348
if (indexes.size() > 0)
@@ -5352,6 +5359,25 @@ CreateTable CreateTable():
53525359
}
53535360
}
53545361

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+
53555381
ColDataType ColDataType():
53565382
{
53575383
ColDataType colDataType = new ColDataType();
@@ -5360,13 +5386,25 @@ ColDataType ColDataType():
53605386
List<String> argumentsStringList = new ArrayList<String>();
53615387
List<Integer> array = new ArrayList<Integer>();
53625388
List<String> name;
5389+
ColDataType arrayType;
53635390
}
53645391
{
53655392
(
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:"")); }
53685406
| ( 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> )
53705408
[ "." (tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>) ]
53715409
{ if (tk2!=null) colDataType.setDataType(tk.image + "." + tk2.image); else colDataType.setDataType(tk.image); }
53725410
| tk=<K_UNSIGNED> [LOOKAHEAD(2) tk2=<S_IDENTIFIER>]
@@ -5505,7 +5543,13 @@ List<String> CreateParameter():
55055543
)
55065544
{ param.add(retval); }
55075545
|
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); }
55095553
|
55105554
tk=<K_ON> { param.add(tk.image); }
55115555
|

0 commit comments

Comments
 (0)