@@ -124,7 +124,9 @@ partitionClause
124124
125125// ATTACH statement
126126attachStmt
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
140142createStmt
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
434436optimizeStmt
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
642650exchangeStmt
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
919927showStmt
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
952968systemStmt
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
13481401keywordForAlias
0 commit comments