Skip to content

Commit 07eac76

Browse files
committed
fixed more statements
1 parent 8db01eb commit 07eac76

File tree

3 files changed

+98
-26
lines changed

3 files changed

+98
-26
lines changed

jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/parser/ClickHouseLexer.g4

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ BOTH : B O T H;
4141
BY : B Y;
4242
CACHE : C A C H E ;
4343
CACHES : C A C H E S ;
44+
CANCEL : C A N C E L;
4445
CASE : C A S E;
4546
CAST : C A S T;
47+
CHANGEABLE_IN_READONLY : C H A N G E A B L E UNDERSCORE I N UNDERSCORE R E A D O N L Y;
4648
CHANGED : C H A N G E D;
4749
CHECK : C H E C K;
48-
CHANGEABLE_IN_READONLY : C H A N G E A B L E UNDERSCORE I N UNDERSCORE R E A D O N L Y;
4950
CLEANUP : C L E A N U P;
5051
CLEAR : C L E A R;
5152
CLIENT : C L I E N T ;
@@ -60,15 +61,17 @@ COLUMN : C O L U M N;
6061
COLUMNS : C O L U M N S ;
6162
COMMENT : C O M M E N T;
6263
COMPILED : C O M P I L E D ;
64+
CONDITION : C O N D I T I O N;
6365
CONFIG : C O N F I G ;
6466
CONNECTIONS : C O N N E C T I O N S ;
65-
CONSTRAINT : C O N S T R A I N T;
6667
CONST : C O N S T;
68+
CONSTRAINT : C O N S T R A I N T;
6769
CREATE : C R E A T E;
6870
CROSS : C R O S S;
6971
CUBE : C U B E;
7072
CURRENT : C U R R E N T;
7173
CURRENT_USER : C U R R E N T '_' U S E R;
74+
CUSTOM : C U S T O M;
7275
DATABASE : D A T A B A S E;
7376
DATABASES : D A T A B A S E S;
7477
DATE : D A T E;
@@ -129,13 +132,15 @@ GRANT : G R A N T;
129132
GRANTS : G R A N T S;
130133
GRANULARITY : G R A N U L A R I T Y;
131134
GROUP : G R O U P;
135+
GRPC : G R P C;
132136
HAVING : H A V I N G;
133137
HDFS : H D F S;
134138
HIERARCHICAL : H I E R A R C H I C A L;
135139
HIVE : H I V E;
136140
HOST : H O S T;
137141
HOUR : H O U R;
138142
HTTP : H T T P;
143+
HTTPS : H T T P S;
139144
IDENTIFIED : I D E N T I F I E D;
140145
ID : I D;
141146
IF : I F;
@@ -145,8 +150,8 @@ INDEXES : I N D E X E S;
145150
INDEX : I N D E X;
146151
INDICES : I N D I C E S;
147152
INF : I N F | I N F I N I T Y;
148-
IN : I N;
149153
INHERIT : I N H E R I T;
154+
IN : I N;
150155
INJECTIVE : I N J E C T I V E;
151156
INNER : I N N E R;
152157
INSERT : I N S E R T;
@@ -161,16 +166,17 @@ JEMALLOC : J E M A L L O C ;
161166
JOIN : J O I N;
162167
KAFKA : K A F K A;
163168
KERBEROS : K E R B E R O S;
169+
KEYED : K E Y E D;
164170
KEY : K E Y;
165171
KEYS : K E Y S;
166-
KEYED : K E Y E D;
167172
KILL : K I L L;
168173
LAST : L A S T;
169174
LAYOUT : L A Y O U T;
170175
LDAP : L D A P;
171176
LEADING : L E A D I N G;
172177
LEFT : L E F T;
173178
LIFETIME : L I F E T I M E;
179+
LIGHTWEIGHT : L I G H T W E I G H T;
174180
LIKE : L I K E;
175181
LIMIT : L I M I T;
176182
LIMITS : L I M I T S;
@@ -211,8 +217,8 @@ NULLS : N U L L S;
211217
NULL_SQL : N U L L; // conflicts with macro NULL
212218
ODBC : O D B C;
213219
OFFSET : O F F S E T;
214-
ON : O N;
215220
ONLY : O N L Y;
221+
ON : O N;
216222
OPTIMIZE : O P T I M I Z E;
217223
OPTION : O P T I O N;
218224
ORDER : O R D E R;
@@ -233,27 +239,31 @@ POLICIES : P O L I C I E S ;
233239
POLICY : P O L I C Y;
234240
POPULATE : P O P U L A T E;
235241
POSTGRES : P O S T G R E S;
242+
POSTGRESQL : P O S T G R E S Q L;
236243
PRECEDING : P R E C E D I N G;
237244
PREWHERE : P R E W H E R E;
238245
PRIMARY : P R I M A R Y;
239246
PROCESSLIST : P R O C E S S L I S T;
240247
PROFILE : P R O F I L E;
241248
PROFILES : P R O F I L E S;
242249
PROJECTION : P R O J E C T I O N;
250+
PROMETHEUS : P R O M E T H E U S;
251+
PROXY : P R O X Y;
243252
PULLING : P U L L I N G ;
244-
RANDOMIZED : R A N D O M I Z E D;
245-
REVOKE : R E V O K E;
253+
PULL : P U L L;
246254
QUARTER : Q U A R T E R;
255+
QUERIES : Q U E R I E S;
256+
QUERY_SQL : Q U E R Y; // conflicts with '?'
247257
QUEUE : Q U E U E ;
248258
QUEUES : Q U E U E S ;
249-
QUERY_SQL : Q U E R Y; // conflicts with '?'
250259
QUOTA : Q U O T A;
251260
QUOTAS : Q U O T A S ;
252261
RABBITMQ : R A B B I T M Q;
262+
RANDOMIZED : R A N D O M I Z E D;
253263
RANGE : R A N G E;
254264
READINESS : R E A D I N E S S;
255-
REALM : R E A L M;
256265
READONLY : R E A D O N L Y;
266+
REALM : R E A L M;
257267
REDIS : R E D I S;
258268
REDUCE : R E D U C E ;
259269
REFRESH : R E F R E S H ;
@@ -264,12 +274,14 @@ REMOVE : R E M O V E;
264274
RENAME : R E N A M E;
265275
REPLACE : R E P L A C E;
266276
REPLICA : R E P L I C A;
277+
REPLICAS : R E P L I C A S;
267278
REPLICATED : R E P L I C A T E D;
268279
REPLICATION : R E P L I C A T I O N ;
269280
RESOURCE : R E S O U R C E ;
270281
RESTART : R E S T A R T;
271282
RESTORE : R E S T O R E ;
272283
RESTRICTIVE : R E S T R I C T I V E;
284+
REVOKE : R E V O K E;
273285
RIGHT : R I G H T;
274286
ROLE : R O L E;
275287
ROLES : R O L E S ;
@@ -283,6 +295,7 @@ SCRAM_SHA256_HASH : S C R A M '_' S H A '2' '5' '6' '_' H A S H;
283295
SCRAM_SHA256_PASSWORD : S C R A M '_' S H A '2' '5' '6' '_' P A S S W O R D;
284296
SECOND : S E C O N D;
285297
SECRETS : S E C R E T S ;
298+
SECURE : S E C U R E;
286299
SECURITY : S E C U R I T Y;
287300
SELECT : S E L E C T;
288301
SEMI : S E M I;
@@ -293,6 +306,7 @@ SETTING : S E T T I N G;
293306
SETTINGS : S E T T I N G S;
294307
SHA256_HASH : S H A '2' '5' '6' '_' H A S H;
295308
SHA256_PASSWORD : S H A '2' '5' '6' '_' P A S S W O R D;
309+
SHARD : S H A R D;
296310
SHARDS : S H A R D S;
297311
SHOW : S H O W;
298312
SHUTDOWN : S H U T D O W N ;
@@ -305,12 +319,15 @@ SSL_CERTIFICATE : S S L '_' C E R T I F I C A T E;
305319
START : S T A R T;
306320
STATISTICS : S T A T I S T I C S ;
307321
STOP : S T O P;
322+
STRICT : S T R I C T;
308323
SUBSTRING : S U B S T R I N G;
309324
SYNC : S Y N C;
310325
SYNTAX : S Y N T A X;
311326
SYSTEM : S Y S T E M;
312327
TABLES : T A B L E S;
313328
TABLE : T A B L E;
329+
TAG : T A G;
330+
TCP : T C P;
314331
TEMPORARY : T E M P O R A R Y;
315332
TEST : T E S T;
316333
THEN : T H E N;
@@ -359,6 +376,7 @@ WITH : W I T H;
359376
WORKLOAD : W O R K L O A D;
360377
WRITABLE : W R I T A B L E;
361378
YEAR : Y E A R | Y Y Y Y;
379+
ZKPATH : Z K P A T H;
362380

363381
JSON_FALSE : 'false';
364382
JSON_TRUE : 'true';

jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/parser/ClickHouseParser.g4

Lines changed: 69 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ partitionClause
124124

125125
// ATTACH statement
126126
attachStmt
127-
: ATTACH DICTIONARY tableIdentifier clusterClause? # AttachDictionaryStmt
127+
: ATTACH TABLE (IF NOT EXISTS)? tableIdentifier clusterClause?
128+
| ATTACH DICTIONARY (IF NOT EXISTS)? tableIdentifier clusterClause?
129+
| ATTACH DATABASE (IF NOT EXISTS)? databaseIdentifier engineExpr? clusterClause?
128130
;
129131

130132
// CHECK statement
@@ -138,8 +140,8 @@ checkStmt
138140
// CREATE statement
139141

140142
createStmt
141-
: (ATTACH | CREATE) DATABASE (IF NOT EXISTS)? databaseIdentifier clusterClause? engineExpr? # CreateDatabaseStmt
142-
| (ATTACH | CREATE (OR REPLACE)? | REPLACE) DICTIONARY (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? dictionarySchemaClause
143+
: CREATE DATABASE (IF NOT EXISTS)? databaseIdentifier clusterClause? engineExpr? # CreateDatabaseStmt
144+
| (CREATE (OR REPLACE)? | REPLACE) DICTIONARY (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? dictionarySchemaClause
143145
dictionaryEngineClause sourceClause layoutClause lifetimeClause dictionarySettingsClause? (COMMENT literal)? # CreateDictionaryStmt
144146
| (ATTACH | CREATE) LIVE VIEW (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? (
145147
WITH TIMEOUT DECIMAL_LITERAL?
@@ -148,7 +150,7 @@ createStmt
148150
destinationClause
149151
| engineClause POPULATE?
150152
) subqueryClause # CreateMaterializedViewStmt
151-
| (ATTACH | CREATE (OR REPLACE)? | REPLACE) TEMPORARY? TABLE (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? tableSchemaClause?
153+
| (ATTACH | CREATE (OR REPLACE)? | REPLACE) TEMPORARY? TABLE (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? tableSchemaClause
152154
engineClause? subqueryClause? # CreateTableStmt
153155
| (ATTACH | CREATE) (OR REPLACE)? VIEW (IF NOT EXISTS)? tableIdentifier alias? uuidClause? clusterClause? tableSchemaClause? subqueryClause #
154156
CreateViewStmt
@@ -432,7 +434,13 @@ killStmt
432434
// OPTIMIZE statement
433435

434436
optimizeStmt
435-
: OPTIMIZE TABLE tableIdentifier clusterClause? partitionClause? FINAL? DEDUPLICATE?
437+
: OPTIMIZE TABLE tableIdentifier clusterClause? partitionClause? FINAL? DEDUPLICATE? optimizeByExpr?
438+
;
439+
440+
optimizeByExpr
441+
: BY ASTERISK (EXCEPT LPAREN? (identifier (COMMA identifier)*) RPAREN? )?
442+
| BY identifier (COMMA identifier)*
443+
| BY COLUMNS LPAREN literal RPAREN (EXCEPT LPAREN? (identifier (COMMA identifier)*) RPAREN? )?
436444
;
437445

438446
// RENAME statement
@@ -640,7 +648,7 @@ winFrameBound
640648

641649
// EXCHANGE statement
642650
exchangeStmt
643-
: EXCHANGE (TABLES|DICTIONARIES) tableIdentifier AND tableIdentifier clusterClause?
651+
: EXCHANGE (TABLES | DICTIONARIES) tableIdentifier AND tableIdentifier clusterClause?
644652
;
645653

646654

@@ -917,12 +925,12 @@ systemPrivilege
917925
// SHOW statements
918926

919927
showStmt
920-
: SHOW CREATE? (TEMPORARY? TABLE | DICTIONARY | VIEW | DATABASE) tableIdentifier (INTO OUTFILE literal)? (FORMAT identifier) # showCreateStmt
928+
: SHOW CREATE? (TEMPORARY? TABLE | DICTIONARY | VIEW | DATABASE) tableIdentifier (INTO OUTFILE literal)? (FORMAT identifier)? # showCreateStmt
921929
| SHOW DATABASES (NOT? (LIKE | ILIKE) literal) (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showDatabasesStmt
922-
| SHOW FULL? TEMPORARY? TABLES ((FROM | IN) identifier)? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showTablesStmt
923-
| SHOW EXTENDED? FULL? COLUMNS ((FROM | IN) identifier (FROM | IN) identifier)? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showColumnsStmt
924-
| SHOW DICTIONARIES ((FROM | IN) identifier)? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showDictionariesStmt
925-
| SHOW EXTENDED? (INDEX | INDEXES | INDICES | KEYS ) (FROM | IN) identifier ((FROM | IN) identifier)? (WHERE columnExpr) (INTO OUTFILE filename)? (FORMAT identifier)? # showIndexStmt
930+
| SHOW FULL? TEMPORARY? TABLES showFromDbClause? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showTablesStmt
931+
| SHOW EXTENDED? FULL? COLUMNS showFromTableFromDbClause? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showColumnsStmt
932+
| SHOW DICTIONARIES showFromDbClause? (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showDictionariesStmt
933+
| SHOW EXTENDED? (INDEX | INDEXES | INDICES | KEYS ) (FROM | IN) identifier showFromTableFromDbClause? (WHERE columnExpr)? (INTO OUTFILE filename)? (FORMAT identifier)? # showIndexStmt
926934
| SHOW PROCESSLIST (INTO OUTFILE filename)? (FORMAT identifier)? # showProcessListStmt
927935
| SHOW GRANTS (FOR identifier (COMMA identifier)*)? (WITH IMPLICIT)? FINAL? # showGrantsStmt
928936
| SHOW CREATE USER ((identifier (COMMA identifier)*) | CURRENT_USER) # showCreateUserStmt
@@ -947,16 +955,60 @@ showStmt
947955
| SHOW MERGES (NOT? (LIKE | ILIKE) literal)? (LIMIT numberLiteral)? (INTO OUTFILE filename)? (FORMAT identifier)? # showMergesStmt
948956
;
949957

958+
showFromDbClause
959+
: ((FROM | IN) identifier)
960+
;
961+
962+
showFromTableFromDbClause
963+
: ((FROM | IN) identifier) showFromDbClause?
964+
;
965+
950966
// SYSTEM statements
951967

952968
systemStmt
953969
: SYSTEM FLUSH DISTRIBUTED tableIdentifier
954-
| SYSTEM FLUSH LOGS
955-
| SYSTEM RELOAD DICTIONARIES
970+
| SYSTEM RELOAD DICTIONARIES clusterClause? identifier?
956971
| SYSTEM RELOAD DICTIONARY tableIdentifier
957-
| SYSTEM (START | STOP) (DISTRIBUTED SENDS | FETCHES | TTL? MERGES) tableIdentifier
958-
| SYSTEM (START | STOP) REPLICATED SENDS
959-
| SYSTEM SYNC REPLICA tableIdentifier
972+
| SYSTEM RELOAD MODEL clusterClause? identifier?
973+
| SYSTEM RELOAD FUNCTIONS clusterClause?
974+
| SYSTEM RELOAD FUNCTION clusterClause? identifier
975+
| SYSTEM RELOAD ASYNCHRONOUS METRICS clusterClause?
976+
| SYSTEM DROP DNS CACHE
977+
| SYSTEM DROP MARK CACHE
978+
| SYSTEM DROP REPLICA literal (FROM SHARD literal)? (FROM (TABLE tableIdentifier) | (FROM DATABASE identifier) | (ZKPATH literal))?
979+
| SYSTEM DROP UNCOMPRESSED CACHE
980+
| SYSTEM DROP COMPILED EXPRESSION CACHE
981+
| SYSTEM DROP QUERY CONDITION CACHE
982+
| SYSTEM DROP QUERY CACHE (TAG literal)?
983+
| SYSTEM DROP FORMAT SCHEMA CACHE (FOR literal)?
984+
| SYSTEM FLUSH LOGS
985+
| SYSTEM RELOAD CONFIG clusterClause?
986+
| SYSTEM RELOAD USERS clusterClause?
987+
| SYSTEM SHUTDOWN
988+
| SYSTEM KILL
989+
| SYSTEM (START | FLUSH | STOP) (DISTRIBUTED SENDS? | FETCHES | TTL? MERGES) tableIdentifier clusterClause? settingsClause?
990+
| SYSTEM (START | STOP) LISTEN clusterClause? (QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM literal)
991+
| SYSTEM (START | STOP) MERGES clusterClause? ((ON VOLUME identifier) | tableIdentifier)?
992+
| SYSTEM (START | STOP) TTL MERGES clusterClause? tableIdentifier?
993+
| SYSTEM (START | STOP) MOVES clusterClause? tableIdentifier?
994+
| SYSTEM UNFREEZE WITH NAME literal
995+
| SYSTEM WAIT LOADING PARTS clusterClause? tableIdentifier?
996+
| SYSTEM (START | STOP) FETCHES clusterClause? tableIdentifier?
997+
| SYSTEM (START | STOP) REPLICATED SENDS clusterClause? tableIdentifier?
998+
| SYSTEM (START | STOP) REPLICATION QUEUES clusterClause? tableIdentifier?
999+
| SYSTEM (START | STOP) PULLING REPLICATION LOG clusterClause? tableIdentifier?
1000+
| SYSTEM SYNC REPLICA clusterClause? tableIdentifier? (IF EXISTS)? (STRICT | LIGHTWEIGHT | FROM literal | PULL)?
1001+
| SYSTEM SYNC DATABASE REPLICA identifier
1002+
| SYSTEM RESTART REPLICA clusterClause? tableIdentifier?
1003+
| SYSTEM RESTORE DATABASE? REPLICA identifier clusterClause?
1004+
| SYSTEM RESTART REPLICAS
1005+
| SYSTEM DROP FILESYSTEM CACHE clusterClause?
1006+
| SYSTEM SYNC FILE CACHE clusterClause?
1007+
| SYSTEM (LOAD | UNLOAD) PRIMARY KEY tableIdentifier?
1008+
| SYSTEM REFRESH VIEW tableIdentifier
1009+
| SYSTEM REPLICATED? (START | STOP) ((VIEW tableIdentifier) | VIEWS)
1010+
| SYSTEM CANCEL VIEW tableIdentifier
1011+
| SYSTEM WAIT VIEW tableIdentifier
9601012
;
9611013

9621014
// TRUNCATE statements
@@ -1343,6 +1395,7 @@ keyword
13431395
| WHERE
13441396
| WINDOW
13451397
| WITH
1398+
| QUERIES
13461399
;
13471400

13481401
keywordForAlias

jdbc-v2/src/test/java/com/clickhouse/jdbc/internal/SqlParserTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ public Object[][] testMiscStmtDp() {
448448

449449
@Test(dataProvider = "testStatementWithoutResultSetDP")
450450
public void testStatementsForResultSet(String sql, int args, boolean hasResultSet) {
451+
System.out.println("sql: " + sql);
451452
SqlParser parser = new SqlParser();
452453
{
453454
ParsedPreparedStatement stmt = parser.parsePreparedStatement(sql);
@@ -557,7 +558,7 @@ public static Object[][] testStatementWithoutResultSetDP() {
557558
{"CREATE FUNCTION test_func ON CLUSTER `cluster` AS (x, y) -> y * x", 0, false},
558559
{"CREATE USER IF NOT EXISTS `user`", 0, false},
559560
{"CREATE USER IF NOT EXISTS `user` ON CLUSTER `cluster`", 0, false},
560-
{"CREATE ROLE IF NOT EXISTS `role1` ON CLUSTER", 0, false},
561+
{"CREATE ROLE IF NOT EXISTS `role1` ON CLUSTER 'cluster'", 0, false},
561562
{"CREATE ROW POLICY pol1 ON mydb.table1 USING b=1 TO mira, peter", 0, false},
562563
{"CREATE ROW POLICY pol2 ON mydb.table1 USING c=2 TO peter, antonio", 0, false},
563564
{"CREATE ROW POLICY pol2 ON mydb.table1 USING c=2 AS RESTRICTIVE TO peter, antonio", 0, false},

0 commit comments

Comments
 (0)