Skip to content

Commit f7ba58e

Browse files
Merge pull request #21 from JasonHuang9527/hsuanhs/keyword
Add Spanner reserved keywords into the grammar.
2 parents 1d19b01 + 08c30c3 commit f7ba58e

9 files changed

Lines changed: 3355 additions & 1796 deletions

File tree

translator/CqlLexer.g4

Lines changed: 198 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -25,131 +25,205 @@ options {
2525

2626
fragment ALPHA: [A-Z];
2727

28-
// Keywords (Reference: https://cassandra.apache.org/doc/stable/cassandra/cql/appendices.html#appendix-A)
28+
// Keywords. If a keyword is non-reserved in Cassandra but reserved in Spanner,
29+
// it is marked as reserved. Reference:
30+
// Cassandra: https://cassandra.apache.org/doc/stable/cassandra/cql/appendices.html#appendix-A
31+
// Spanner: https://cloud.google.com/spanner/docs/reference/standard-sql/lexical#reserved_keywords
32+
//
2933
// When adding a new keyword, add entry to reservedKeyword or nonReservedKeyword in the CqlParser.g4.
30-
K_ADD : 'ADD'; // reserved
31-
K_AGGREGATE : 'AGGREGATE'; // non-reserved
32-
K_ALL : 'ALL'; // non-reserved
33-
K_ALLOW : 'ALLOW'; // reserved
34-
K_ALTER : 'ALTER'; // reserved
35-
K_AND : 'AND'; // reserved
36-
K_APPLY : 'APPLY'; // reserved
37-
K_AS : 'AS'; // non-reserved
38-
K_ASC : 'ASC'; // reserved
39-
K_ASCII : 'ASCII'; // non-reserved
40-
K_AUTHORIZE : 'AUTHORIZE'; // reserved
41-
K_BATCH : 'BATCH'; // reserved
42-
K_BEGIN : 'BEGIN'; // reserved
43-
K_BIGINT : 'BIGINT'; // non-reserved
44-
K_BLOB : 'BLOB'; // non-reserved
45-
K_BOOLEAN : 'BOOLEAN'; // non-reserved
46-
K_BY : 'BY'; // reserved
47-
K_CALLED : 'CALLED'; // non-reserved
48-
K_CLUSTERING : 'CLUSTERING'; // non-reserved
49-
K_COLUMNFAMILY : 'COLUMNFAMILY'; // reserved
50-
K_COMPACT : 'COMPACT'; // non-reserved
51-
K_CONTAINS : 'CONTAINS'; // non-reserved
52-
K_COUNT : 'COUNT'; // non-reserved
53-
K_COUNTER : 'COUNTER'; // non-reserved
54-
K_CREATE : 'CREATE'; // reserved
55-
K_CUSTOM : 'CUSTOM'; // non-reserved
56-
K_DATE : 'DATE'; // non-reserved
57-
K_DECIMAL : 'DECIMAL'; // non-reserved
58-
K_DELETE : 'DELETE'; // reserved
59-
K_DESC : 'DESC'; // reserved
60-
K_DESCRIBE : 'DESCRIBE'; // reserved
61-
K_DISTINCT : 'DISTINCT'; // non-reserved
62-
K_DOUBLE : 'DOUBLE'; // non-reserved
63-
K_DROP : 'DROP'; // reserved
64-
K_ENTRIES : 'ENTRIES'; // reserved
65-
K_EXECUTE : 'EXECUTE'; // reserved
66-
K_EXISTS : 'EXISTS'; // non-reserved
67-
K_FILTERING : 'FILTERING'; // non-reserved
68-
K_FINALFUNC : 'FINALFUNC'; // non-reserved
69-
K_FLOAT : 'FLOAT'; // non-reserved
70-
K_FROM : 'FROM'; // reserved
71-
K_FROZEN : 'FROZEN'; // non-reserved
72-
K_FULL : 'FULL'; // reserved
73-
K_FUNCTION : 'FUNCTION'; // non-reserved
74-
K_FUNCTIONS : 'FUNCTIONS'; // non-reserved
75-
K_GRANT : 'GRANT'; // reserved
76-
K_IF : 'IF'; // reserved
77-
K_IN : 'IN'; // reserved
78-
K_INDEX : 'INDEX'; // reserved
79-
K_INET : 'INET'; // non-reserved
80-
K_INFINITY : 'INFINITY'; // reserved
81-
K_INITCOND : 'INITCOND'; // non-reserved
82-
K_INPUT : 'INPUT'; // non-reserved
83-
K_INSERT : 'INSERT'; // reserved
84-
K_INT : 'INT'; // non-reserved
85-
K_INTO : 'INTO'; // reserved
86-
K_JSON : 'JSON'; // non-reserved
87-
K_KEY : 'KEY'; // non-reserved
88-
K_KEYS : 'KEYS'; // non-reserved
89-
K_KEYSPACE : 'KEYSPACE'; // reserved
90-
K_KEYSPACES : 'KEYSPACES'; // non-reserved
91-
K_LANGUAGE : 'LANGUAGE'; // non-reserved
92-
K_LIMIT : 'LIMIT'; // reserved
93-
K_LIST : 'LIST'; // non-reserved
94-
K_LOGIN : 'LOGIN'; // non-reserved
95-
K_MAP : 'MAP'; // non-reserved
96-
K_MODIFY : 'MODIFY'; // reserved
97-
K_NAN : 'NAN'; // reserved
98-
K_NOLOGIN : 'NOLOGIN'; // non-reserved
99-
K_NORECURSIVE : 'NORECURSIVE'; // reserved
100-
K_NOSUPERUSER : 'NOSUPERUSER'; // non-reserved
101-
K_NOT : 'NOT'; // reserved
102-
K_NULL : 'NULL'; // reserved
103-
K_OF : 'OF'; // reserved
104-
K_ON : 'ON'; // reserved
105-
K_OPTIONS : 'OPTIONS'; // non-reserved
106-
K_OR : 'OR'; // reserved
107-
K_ORDER : 'ORDER'; // reserved
108-
K_PASSWORD : 'PASSWORD'; // non-reserved
109-
K_PERMISSION : 'PERMISSION'; // non-reserved
110-
K_PERMISSIONS : 'PERMISSIONS'; // non-reserved
111-
K_PRIMARY : 'PRIMARY'; // reserved
112-
K_RENAME : 'RENAME'; // reserved
113-
K_REPLACE : 'REPLACE'; // reserved
114-
K_RETURNS : 'RETURNS'; // non-reserved
115-
K_REVOKE : 'REVOKE'; // reserved
116-
K_ROLE : 'ROLE'; // non-reserved
117-
K_ROLES : 'ROLES'; // non-reserved
118-
K_SCHEMA : 'SCHEMA'; // reserved
119-
K_SELECT : 'SELECT'; // reserved
120-
K_SET : 'SET'; // reserved
121-
K_SFUNC : 'SFUNC'; // non-reserved
122-
K_SMALLINT : 'SMALLINT'; // non-reserved
123-
K_STATIC : 'STATIC'; // non-reserved
124-
K_STORAGE : 'STORAGE'; // non-reserved
125-
K_STYPE : 'STYPE'; // non-reserved
126-
K_SUPERUSER : 'SUPERUSER'; // non-reserved
127-
K_TABLE : 'TABLE'; // reserved
128-
K_TEXT : 'TEXT'; // non-reserved
129-
K_TIME : 'TIME'; // non-reserved
130-
K_TIMESTAMP : 'TIMESTAMP'; // non-reserved
131-
K_TIMEUUID : 'TIMEUUID'; // non-reserved
132-
K_TINYINT : 'TINYINT'; // non-reserved
133-
K_TO : 'TO'; // reserved
134-
K_TOKEN : 'TOKEN'; // reserved
135-
K_TRIGGER : 'TRIGGER'; // non-reserved
136-
K_TRUNCATE : 'TRUNCATE'; // reserved
137-
K_TTL : 'TTL'; // non-reserved
138-
K_TUPLE : 'TUPLE'; // non-reserved
139-
K_TYPE : 'TYPE'; // non-reserved
140-
K_UNLOGGED : 'UNLOGGED'; // reserved
141-
K_UPDATE : 'UPDATE'; // reserved
142-
K_USE : 'USE'; // reserved
143-
K_USER : 'USER'; // non-reserved
144-
K_USERS : 'USERS'; // non-reserved
145-
K_USING : 'USING'; // reserved
146-
K_UUID : 'UUID'; // non-reserved
147-
K_VALUES : 'VALUES'; // non-reserved
148-
K_VARCHAR : 'VARCHAR'; // non-reserved
149-
K_VARINT : 'VARINT'; // non-reserved
150-
K_WHERE : 'WHERE'; // reserved
151-
K_WITH : 'WITH'; // reserved
152-
K_WRITETIME : 'WRITETIME'; // non-reserved
34+
K_ADD : 'ADD'; // reserved
35+
K_AGGREGATE : 'AGGREGATE'; // non-reserved
36+
K_ALL : 'ALL'; // reserved (non-reserved in Cassandra)
37+
K_ALLOW : 'ALLOW'; // reserved
38+
K_ALTER : 'ALTER'; // reserved
39+
K_AND : 'AND'; // reserved
40+
K_ANY : 'ANY'; // reserved
41+
K_APPLY : 'APPLY'; // reserved
42+
K_ARRAY : 'ARRAY'; // reserved
43+
K_AS : 'AS'; // reserved (non-reserved in Cassandra)
44+
K_ASC : 'ASC'; // reserved
45+
K_ASCII : 'ASCII'; // non-reserved
46+
K_ASSERT_ROWS_MODIFIED : 'ASSERT_ROWS_MODIFIED'; // reserved
47+
K_AT : 'AT'; // reserved
48+
K_AUTHORIZE : 'AUTHORIZE'; // reserved
49+
K_BATCH : 'BATCH'; // reserved
50+
K_BEGIN : 'BEGIN'; // reserved
51+
K_BETWEEN : 'BETWEEN'; // reserved
52+
K_BIGINT : 'BIGINT'; // non-reserved
53+
K_BLOB : 'BLOB'; // non-reserved
54+
K_BOOLEAN : 'BOOLEAN'; // non-reserved
55+
K_BY : 'BY'; // reserved
56+
K_CALLED : 'CALLED'; // non-reserved
57+
K_CASE : 'CASE'; // reserved
58+
K_CAST : 'CAST'; // reserved
59+
K_CLUSTERING : 'CLUSTERING'; // non-reserved
60+
K_COLLATE : 'COLLATE'; // reserved
61+
K_COLUMNFAMILY : 'COLUMNFAMILY'; // reserved
62+
K_COMPACT : 'COMPACT'; // non-reserved
63+
K_CONTAINS : 'CONTAINS'; // reserved (non-reserved in Cassandra)
64+
K_COUNT : 'COUNT'; // non-reserved
65+
K_COUNTER : 'COUNTER'; // non-reserved
66+
K_CREATE : 'CREATE'; // reserved
67+
K_CROSS : 'CROSS'; // reserved
68+
K_CUBE : 'CUBE'; // reserved
69+
K_CURRENT : 'CURRENT'; // reserved
70+
K_CUSTOM : 'CUSTOM'; // non-reserved
71+
K_DATE : 'DATE'; // non-reserved
72+
K_DECIMAL : 'DECIMAL'; // non-reserved
73+
K_DEFAULT : 'DEFAULT'; // reserved
74+
K_DEFINE : 'DEFINE'; // reserved
75+
K_DELETE : 'DELETE'; // reserved
76+
K_DESC : 'DESC'; // reserved
77+
K_DESCRIBE : 'DESCRIBE'; // reserved
78+
K_DISTINCT : 'DISTINCT'; // reserved (non-reserved in Cassandra)
79+
K_DOUBLE : 'DOUBLE'; // non-reserved
80+
K_DROP : 'DROP'; // reserved
81+
K_ELSE : 'ELSE'; // reserved
82+
K_END : 'END'; // reserved
83+
K_ENTRIES : 'ENTRIES'; // reserved
84+
K_ENUM : 'ENUM'; // reserved
85+
K_ESCAPE : 'ESCAPE'; // reserved
86+
K_EXCEPT : 'EXCEPT'; // reserved
87+
K_EXCLUDE : 'EXCLUDE'; // reserved
88+
K_EXECUTE : 'EXECUTE'; // reserved
89+
K_EXISTS : 'EXISTS'; // reserved (non-reserved in Cassandra)
90+
K_EXTRACT : 'EXTRACT'; // reserved
91+
K_FALSE : 'FALSE'; // reserved
92+
K_FETCH : 'FETCH'; // reserved
93+
K_FILTERING : 'FILTERING'; // non-reserved
94+
K_FINALFUNC : 'FINALFUNC'; // non-reserved
95+
K_FLOAT : 'FLOAT'; // non-reserved
96+
K_FOLLOWING : 'FOLLOWING'; // reserved
97+
K_FOR : 'FOR'; // reserved
98+
K_FROM : 'FROM'; // reserved
99+
K_FROZEN : 'FROZEN'; // non-reserved
100+
K_FULL : 'FULL'; // reserved
101+
K_FUNCTION : 'FUNCTION'; // non-reserved
102+
K_FUNCTIONS : 'FUNCTIONS'; // non-reserved
103+
K_GRANT : 'GRANT'; // reserved
104+
K_GROUP : 'GROUP'; // reserved
105+
K_GROUPING : 'GROUPING'; // reserved
106+
K_GROUPS : 'GROUPS'; // reserved
107+
K_HASH : 'HASH'; // reserved
108+
K_HAVING : 'HAVING'; // reserved
109+
K_IF : 'IF'; // reserved
110+
K_IGNORE : 'IGNORE'; // reserved
111+
K_IN : 'IN'; // reserved
112+
K_INDEX : 'INDEX'; // reserved
113+
K_INET : 'INET'; // non-reserved
114+
K_INFINITY : 'INFINITY'; // reserved
115+
K_INITCOND : 'INITCOND'; // non-reserved
116+
K_INNER : 'INNER'; // reserved
117+
K_INPUT : 'INPUT'; // non-reserved
118+
K_INSERT : 'INSERT'; // reserved
119+
K_INT : 'INT'; // non-reserved
120+
K_INTERSECT : 'INTERSECT'; // reserved
121+
K_INTERVAL : 'INTERVAL'; // reserved
122+
K_INTO : 'INTO'; // reserved
123+
K_IS : 'IS'; // reserved
124+
K_JOIN : 'JOIN'; // reserved
125+
K_JSON : 'JSON'; // non-reserved
126+
K_KEY : 'KEY'; // non-reserved
127+
K_KEYS : 'KEYS'; // non-reserved
128+
K_KEYSPACE : 'KEYSPACE'; // reserved
129+
K_KEYSPACES : 'KEYSPACES'; // non-reserved
130+
K_LANGUAGE : 'LANGUAGE'; // non-reserved
131+
K_LATERAL : 'LATERAL'; // reserved
132+
K_LEFT : 'LEFT'; // reserved
133+
K_LIKE : 'LIKE'; // reserved
134+
K_LIMIT : 'LIMIT'; // reserved
135+
K_LIST : 'LIST'; // non-reserved
136+
K_LOGIN : 'LOGIN'; // non-reserved
137+
K_LOOKUP : 'LOOKUP'; // reserved
138+
K_MAP : 'MAP'; // non-reserved
139+
K_MERGE : 'MERGE'; // reserved
140+
K_MODIFY : 'MODIFY'; // reserved
141+
K_NAN : 'NAN'; // reserved
142+
K_NATURAL : 'NATURAL'; // reserved
143+
K_NEW : 'NEW'; // reserved
144+
K_NO : 'NO'; // reserved
145+
K_NOLOGIN : 'NOLOGIN'; // non-reserved
146+
K_NORECURSIVE : 'NORECURSIVE'; // reserved
147+
K_NOSUPERUSER : 'NOSUPERUSER'; // non-reserved
148+
K_NOT : 'NOT'; // reserved
149+
K_NULL : 'NULL'; // reserved
150+
K_NULLS : 'NULLS'; // reserved
151+
K_OF : 'OF'; // reserved
152+
K_ON : 'ON'; // reserved
153+
K_OPTIONS : 'OPTIONS'; // non-reserved
154+
K_OR : 'OR'; // reserved
155+
K_ORDER : 'ORDER'; // reserved
156+
K_OUTER : 'OUTER'; // reserved
157+
K_OVER : 'OVER'; // reserved
158+
K_PARTITION : 'PARTITION'; // reserved
159+
K_PASSWORD : 'PASSWORD'; // non-reserved
160+
K_PERMISSION : 'PERMISSION'; // non-reserved
161+
K_PERMISSIONS : 'PERMISSIONS'; // non-reserved
162+
K_PRECEDING : 'PRECEDING'; // reserved
163+
K_PRIMARY : 'PRIMARY'; // reserved
164+
K_PROTO : 'PROTO'; // reserved
165+
K_QUALIFY : 'QUALIFY'; // reserved
166+
K_RANGE : 'RANGE'; // reserved
167+
K_RECURSIVE : 'RECURSIVE'; // reserved
168+
K_RENAME : 'RENAME'; // reserved
169+
K_REPLACE : 'REPLACE'; // reserved
170+
K_RESPECT : 'RESPECT'; // reserved
171+
K_RETURNS : 'RETURNS'; // non-reserved
172+
K_REVOKE : 'REVOKE'; // reserved
173+
K_RIGHT : 'RIGHT'; // reserved
174+
K_ROLE : 'ROLE'; // non-reserved
175+
K_ROLES : 'ROLES'; // non-reserved
176+
K_ROLLUP : 'ROLLUP'; // reserved
177+
K_ROWS : 'ROWS'; // reserved
178+
K_SCHEMA : 'SCHEMA'; // reserved
179+
K_SELECT : 'SELECT'; // reserved
180+
K_SET : 'SET'; // reserved
181+
K_SFUNC : 'SFUNC'; // non-reserved
182+
K_SMALLINT : 'SMALLINT'; // non-reserved
183+
K_SOME : 'SOME'; // reserved
184+
K_STATIC : 'STATIC'; // non-reserved
185+
K_STORAGE : 'STORAGE'; // non-reserved
186+
K_STRUCT : 'STRUCT'; // reserved
187+
K_STYPE : 'STYPE'; // non-reserved
188+
K_SUPERUSER : 'SUPERUSER'; // non-reserved
189+
K_TABLE : 'TABLE'; // reserved
190+
K_TABLESAMPLE : 'TABLESAMPLE'; // reserved
191+
K_TEXT : 'TEXT'; // non-reserved
192+
K_THEN : 'THEN'; // reserved
193+
K_TIME : 'TIME'; // non-reserved
194+
K_TIMESTAMP : 'TIMESTAMP'; // non-reserved
195+
K_TIMEUUID : 'TIMEUUID'; // non-reserved
196+
K_TINYINT : 'TINYINT'; // non-reserved
197+
K_TO : 'TO'; // reserved
198+
K_TOKEN : 'TOKEN'; // reserved
199+
K_TREAT : 'TREAT'; // reserved
200+
K_TRIGGER : 'TRIGGER'; // non-reserved
201+
K_TRUE : 'TRUE'; // reserved
202+
K_TRUNCATE : 'TRUNCATE'; // reserved
203+
K_TTL : 'TTL'; // non-reserved
204+
K_TUPLE : 'TUPLE'; // non-reserved
205+
K_TYPE : 'TYPE'; // non-reserved
206+
K_UNBOUNDED : 'UNBOUNDED'; // reserved
207+
K_UNION : 'UNION'; // reserved
208+
K_UNLOGGED : 'UNLOGGED'; // reserved
209+
K_UNNEST : 'UNNEST'; // reserved
210+
K_UPDATE : 'UPDATE'; // reserved
211+
K_USE : 'USE'; // reserved
212+
K_USER : 'USER'; // non-reserved
213+
K_USERS : 'USERS'; // non-reserved
214+
K_USING : 'USING'; // reserved
215+
K_UUID : 'UUID'; // non-reserved
216+
K_VALUES : 'VALUES'; // non-reserved
217+
K_VARCHAR : 'VARCHAR'; // non-reserved
218+
K_VARINT : 'VARINT'; // non-reserved
219+
K_WHEN : 'WHEN'; // reserved
220+
K_WHERE : 'WHERE'; // reserved
221+
K_WINDOW : 'WINDOW'; // reserved
222+
K_WITH : 'WITH'; // reserved
223+
K_WITHIN : 'WITHIN'; // reserved
224+
K_WRITETIME : 'WRITETIME'; // non-reserved
225+
// The official Cassandra and Spanner appendix does not contain the below
226+
// keywords, although they are recognized as such.
153227
K_MATERIALIZED : 'MATERIALIZED'; // reserved
154228
K_VIEW : 'VIEW'; // reserved
155229

0 commit comments

Comments
 (0)