diff --git a/sql/pom.xml b/sql/pom.xml index 7327c64244..6f435713d4 100644 --- a/sql/pom.xml +++ b/sql/pom.xml @@ -27,5 +27,6 @@ trino tsql informix-sql + starrocks diff --git a/sql/starrocks/StarRocksLexer.g4 b/sql/starrocks/StarRocksLexer.g4 new file mode 100644 index 0000000000..2902fc4478 --- /dev/null +++ b/sql/starrocks/StarRocksLexer.g4 @@ -0,0 +1,564 @@ +// Copyright 2021-present StarRocks, Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +// $antlr-format alignColons trailing, alignLabels true, alignLexerCommands true, alignSemicolons ownLine, alignTrailers true +// $antlr-format alignTrailingComments true, allowShortBlocksOnASingleLine true, allowShortRulesOnASingleLine true, columnLimit 150 +// $antlr-format maxEmptyLinesToKeep 1, minEmptyLines 0, reflowComments false, singleLineOverrulesHangingColon true, useTab false + +lexer grammar StarRocksLexer; + +options { + caseInsensitive = true; +} +tokens { + CONCAT +} + +ACCESS : 'ACCESS'; +ACTIVE : 'ACTIVE'; +ADD : 'ADD'; +ADMIN : 'ADMIN'; +AFTER : 'AFTER'; +AGGREGATE : 'AGGREGATE'; +ALL : 'ALL'; +ALTER : 'ALTER'; +ANALYZE : 'ANALYZE'; +AND : 'AND'; +ANTI : 'ANTI'; +APPLY : 'APPLY'; +ARRAY : 'ARRAY'; +ARRAY_AGG : 'ARRAY_AGG'; +ARRAY_AGG_DISTINCT : 'ARRAY_AGG_DISTINCT'; +AS : 'AS'; +ASC : 'ASC'; +ASYNC : 'ASYNC'; +AUTHORS : 'AUTHORS'; +AUTHENTICATION : 'AUTHENTICATION'; +AUTO_INCREMENT : 'AUTO_INCREMENT'; +AVG : 'AVG'; +BACKEND : 'BACKEND'; +BACKENDS : 'BACKENDS'; +BACKUP : 'BACKUP'; +BASE : 'BASE'; +BEGIN : 'BEGIN'; +BETWEEN : 'BETWEEN'; +BIGINT : 'BIGINT'; +BINARY : 'BINARY'; +BITMAP : 'BITMAP'; +BITMAP_UNION : 'BITMAP_UNION'; +BLACKHOLE : 'BLACKHOLE'; +BLACKLIST : 'BLACKLIST'; +BODY : 'BODY'; +BOOLEAN : 'BOOLEAN'; +BOTH : 'BOTH'; +BROKER : 'BROKER'; +BUCKETS : 'BUCKETS'; +BUILTIN : 'BUILTIN'; +BY : 'BY'; +CACHE : 'CACHE'; +CANCEL : 'CANCEL'; +CASE : 'CASE'; +CAST : 'CAST'; +CATALOG : 'CATALOG'; +CATALOGS : 'CATALOGS'; +CEIL : 'CEIL'; +CHAIN : 'CHAIN'; +CHAR : 'CHAR'; +CHARACTER : 'CHARACTER'; +CHARSET : 'CHARSET'; +CHECK : 'CHECK'; +CLEAN : 'CLEAN'; +CLEAR : 'CLEAR'; +CLUSTER : 'CLUSTER'; +CLUSTERS : 'CLUSTERS'; +COLLATE : 'COLLATE'; +COLLATION : 'COLLATION'; +COLUMN : 'COLUMN'; +COLUMNS : 'COLUMNS'; +COMMENT : 'COMMENT'; +COMMIT : 'COMMIT'; +COMMITTED : 'COMMITTED'; +COMPACT : 'COMPACT'; +COMPACTION : 'COMPACTION'; +COMPUTE : 'COMPUTE'; +CONFIG : 'CONFIG'; +CONNECTION : 'CONNECTION'; +CONSISTENT : 'CONSISTENT'; +CONVERT : 'CONVERT'; +COSTS : 'COSTS'; +COUNT : 'COUNT'; +CREATE : 'CREATE'; +CROSS : 'CROSS'; +CUBE : 'CUBE'; +CUME_DIST : 'CUME_DIST'; +CUMULATIVE : 'CUMULATIVE'; +CURRENT : 'CURRENT'; +CURRENT_DATE : 'CURRENT_DATE'; +CURRENT_ROLE : 'CURRENT_ROLE'; +CURRENT_TIME : 'CURRENT_TIME'; +CURRENT_TIMESTAMP : 'CURRENT_TIMESTAMP'; +CURRENT_USER : 'CURRENT_USER'; +DATA : 'DATA'; +DATACACHE : 'DATACACHE'; +DATABASE : 'DATABASE'; +DATABASES : 'DATABASES'; +DATE : 'DATE'; +DATETIME : 'DATETIME'; +DAY : 'DAY'; +DEALLOCATE : 'DEALLOCATE'; +DECIMAL : 'DECIMAL'; +DECIMALV2 : 'DECIMALV2'; +DECIMAL32 : 'DECIMAL32'; +DECIMAL64 : 'DECIMAL64'; +DECIMAL128 : 'DECIMAL128'; +DECOMMISSION : 'DECOMMISSION'; +DEFAULT : 'DEFAULT'; +DELETE : 'DELETE'; +DENSE_RANK : 'DENSE_RANK'; +DEFERRED : 'DEFERRED'; +DICTIONARY : 'DICTIONARY'; +DICTIONARY_GET : 'DICTIONARY_GET'; +NTILE : 'NTILE'; +DESC : 'DESC'; +DESCRIBE : 'DESCRIBE'; +DISABLE : 'DISABLE'; +DISTINCT : 'DISTINCT'; +DISTRIBUTED : 'DISTRIBUTED'; +DISTRIBUTION : 'DISTRIBUTION'; +DOUBLE : 'DOUBLE'; +DROP : 'DROP'; +DUAL : 'DUAL'; +DUPLICATE : 'DUPLICATE'; +DYNAMIC : 'DYNAMIC'; +ELSE : 'ELSE'; +ENABLE : 'ENABLE'; +ENCLOSE : 'ENCLOSE'; +END : 'END'; +ENGINE : 'ENGINE'; +ENGINES : 'ENGINES'; +ERRORS : 'ERRORS'; +ESCAPE : 'ESCAPE'; +EVENTS : 'EVENTS'; +EXCEPT : 'EXCEPT'; +EXECUTE : 'EXECUTE'; +EXISTS : 'EXISTS'; +EXPLAIN : 'EXPLAIN'; +EXPORT : 'EXPORT'; +EXTERNAL : 'EXTERNAL'; +EXTRACT : 'EXTRACT'; +EVERY : 'EVERY'; +FAILPOINT : 'FAILPOINT'; +FAILPOINTS : 'FAILPOINTS'; +FALSE : 'FALSE'; +FIELDS : 'FIELDS'; +FILE : 'FILE'; +FILES : 'FILES'; +FILTER : 'FILTER'; +FIRST : 'FIRST'; +FIRST_VALUE : 'FIRST_VALUE'; +FLOAT : 'FLOAT'; +FLOOR : 'FLOOR'; +FN : 'FN'; +FOLLOWING : 'FOLLOWING'; +FOLLOWER : 'FOLLOWER'; +FOR : 'FOR'; +FORCE : 'FORCE'; +FORMAT : 'FORMAT'; +FREE : 'FREE'; +FROM : 'FROM'; +FRONTEND : 'FRONTEND'; +FRONTENDS : 'FRONTENDS'; +FULL : 'FULL'; +FUNCTION : 'FUNCTION'; +FUNCTIONS : 'FUNCTIONS'; +GLOBAL : 'GLOBAL'; +GRANT : 'GRANT'; +GRANTS : 'GRANTS'; +GROUP : 'GROUP'; +GROUPS : 'GROUPS'; +GROUPING : 'GROUPING'; +GROUPING_ID : 'GROUPING_ID'; +GROUP_CONCAT : 'GROUP_CONCAT'; +HASH : 'HASH'; +HAVING : 'HAVING'; +HELP : 'HELP'; +HISTOGRAM : 'HISTOGRAM'; +HLL : 'HLL'; +HLL_UNION : 'HLL_UNION'; +HOST : 'HOST'; +HOUR : 'HOUR'; +HUB : 'HUB'; +IDENTIFIED : 'IDENTIFIED'; +IF : 'IF'; +IMPERSONATE : 'IMPERSONATE'; +IMMEDIATE : 'IMMEDIATE'; +IGNORE : 'IGNORE'; +IMAGE : 'IMAGE'; +IN : 'IN'; +INACTIVE : 'INACTIVE'; +INCREMENTAL : 'INCREMENTAL'; +INDEX : 'INDEX'; +INDEXES : 'INDEXES'; +INFILE : 'INFILE'; +INNER : 'INNER'; +INSTALL : 'INSTALL'; +INSERT : 'INSERT'; +INT : 'INT'; +INTEGER : 'INTEGER'; +INTEGRATION : 'INTEGRATION'; +INTEGRATIONS : 'INTEGRATIONS'; +INTERMEDIATE : 'INTERMEDIATE'; +INTERSECT : 'INTERSECT'; +INTERVAL : 'INTERVAL'; +INTO : 'INTO'; +GIN : 'GIN'; +OVERWRITE : 'OVERWRITE'; +IS : 'IS'; +ISOLATION : 'ISOLATION'; +JOB : 'JOB'; +JOIN : 'JOIN'; +JSON : 'JSON'; +KEY : 'KEY'; +KEYS : 'KEYS'; +KILL : 'KILL'; +LABEL : 'LABEL'; +LAG : 'LAG'; +LARGEINT : 'LARGEINT'; +LAST : 'LAST'; +LAST_VALUE : 'LAST_VALUE'; +LATERAL : 'LATERAL'; +LEAD : 'LEAD'; +LEFT : 'LEFT'; +LESS : 'LESS'; +LEVEL : 'LEVEL'; +LIKE : 'LIKE'; +LIMIT : 'LIMIT'; +LIST : 'LIST'; +LOAD : 'LOAD'; +LOCAL : 'LOCAL'; +LOCALTIME : 'LOCALTIME'; +LOCALTIMESTAMP : 'LOCALTIMESTAMP'; +LOCATION : 'LOCATION'; +LOCATIONS : 'LOCATIONS'; +LOGS : 'LOGS'; +LOGICAL : 'LOGICAL'; +MANUAL : 'MANUAL'; +MAP : 'MAP'; +MAPPING : 'MAPPING'; +MAPPINGS : 'MAPPINGS'; +MASKING : 'MASKING'; +MATCH : 'MATCH'; +MATERIALIZED : 'MATERIALIZED'; +MAX : 'MAX'; +MAXVALUE : 'MAXVALUE'; +MERGE : 'MERGE'; +MICROSECOND : 'MICROSECOND'; +MILLISECOND : 'MILLISECOND'; +MIN : 'MIN'; +MINUTE : 'MINUTE'; +MINUS : 'MINUS'; +META : 'META'; +MOD : 'MOD'; +MODE : 'MODE'; +MODIFY : 'MODIFY'; +MONTH : 'MONTH'; +NAME : 'NAME'; +NAMES : 'NAMES'; +NEGATIVE : 'NEGATIVE'; +NGRAMBF : 'NGRAMBF'; +NO : 'NO'; +NODE : 'NODE'; +NODES : 'NODES'; +NONE : 'NONE'; +NOT : 'NOT'; +NULL_ : 'NULL'; +NULLS : 'NULLS'; +NUMBER : 'NUMBER'; +NUMERIC : 'NUMERIC'; +OBSERVER : 'OBSERVER'; +OF : 'OF'; +OFFSET : 'OFFSET'; +ON : 'ON'; +ONLY : 'ONLY'; +OPEN : 'OPEN'; +OPERATE : 'OPERATE'; +OPTIMIZE : 'OPTIMIZE'; +OPTIMIZER : 'OPTIMIZER'; +OPTION : 'OPTION'; +OR : 'OR'; +ORDER : 'ORDER'; +OUTER : 'OUTER'; +OUTFILE : 'OUTFILE'; +OVER : 'OVER'; +PARAMETER : '?'; +PARTITION : 'PARTITION'; +PARTITIONS : 'PARTITIONS'; +PASSWORD : 'PASSWORD'; +PATH : 'PATH'; +PAUSE : 'PAUSE'; +PENDING : 'PENDING'; +PERCENT_RANK : 'PERCENT_RANK'; +PERCENTILE : 'PERCENTILE'; +PERCENTILE_UNION : 'PERCENTILE_UNION'; +PLUGIN : 'PLUGIN'; +PLUGINS : 'PLUGINS'; +PIPE : 'PIPE'; +PIPES : 'PIPES'; +PIVOT : 'PIVOT'; +POLICY : 'POLICY'; +POLICIES : 'POLICIES'; +PRECEDING : 'PRECEDING'; +PREPARE : 'PREPARE'; +PRIMARY : 'PRIMARY'; +PRIORITY : 'PRIORITY'; +PRIVILEGES : 'PRIVILEGES'; +PROBABILITY : 'PROBABILITY'; +PROC : 'PROC'; +PROCEDURE : 'PROCEDURE'; +PROCESSLIST : 'PROCESSLIST'; +PROFILE : 'PROFILE'; +PROFILELIST : 'PROFILELIST'; +PROPERTIES : 'PROPERTIES'; +PROPERTY : 'PROPERTY'; +QUALIFY : 'QUALIFY'; +QUARTER : 'QUARTER'; +QUERY : 'QUERY'; +QUERIES : 'QUERIES'; +QUEUE : 'QUEUE'; +QUOTA : 'QUOTA'; +RANDOM : 'RANDOM'; +RANGE : 'RANGE'; +RANK : 'RANK'; +READ : 'READ'; +REASON : 'REASON'; +RECOVER : 'RECOVER'; +REFRESH : 'REFRESH'; +REWRITE : 'REWRITE'; +REGEXP : 'REGEXP'; +RELEASE : 'RELEASE'; +REMOVE : 'REMOVE'; +RENAME : 'RENAME'; +REPAIR : 'REPAIR'; +REPEATABLE : 'REPEATABLE'; +REPLACE : 'REPLACE'; +REPLACE_IF_NOT_NULL : 'REPLACE_IF_NOT_NULL'; +REPLICA : 'REPLICA'; +REPOSITORY : 'REPOSITORY'; +REPOSITORIES : 'REPOSITORIES'; +RESOURCE : 'RESOURCE'; +RESOURCES : 'RESOURCES'; +RESTORE : 'RESTORE'; +RESUME : 'RESUME'; +RETURNS : 'RETURNS'; +RETRY : 'RETRY'; +REVOKE : 'REVOKE'; +REVERT : 'REVERT'; +RIGHT : 'RIGHT'; +RLIKE : 'RLIKE'; +ROLE : 'ROLE'; +ROLES : 'ROLES'; +ROLLBACK : 'ROLLBACK'; +ROLLUP : 'ROLLUP'; +ROUTINE : 'ROUTINE'; +ROW : 'ROW'; +ROWS : 'ROWS'; +ROW_NUMBER : 'ROW_NUMBER'; +RULE : 'RULE'; +RULES : 'RULES'; +RUNNING : 'RUNNING'; +SAMPLE : 'SAMPLE'; +SCHEDULE : 'SCHEDULE'; +SCHEDULER : 'SCHEDULER'; +SCHEMA : 'SCHEMA'; +SCHEMAS : 'SCHEMAS'; +SECOND : 'SECOND'; +SECURITY : 'SECURITY'; +SELECT : 'SELECT'; +SEMI : 'SEMI'; +SEPARATOR : 'SEPARATOR'; +SERIALIZABLE : 'SERIALIZABLE'; +SESSION : 'SESSION'; +SET : 'SET'; +SETS : 'SETS'; +SET_VAR : 'SET_VAR'; +SIGNED : 'SIGNED'; +SKIP_HEADER : 'SKIP_HEADER'; +SHOW : 'SHOW'; +SMALLINT : 'SMALLINT'; +SNAPSHOT : 'SNAPSHOT'; +SQLBLACKLIST : 'SQLBLACKLIST'; +START : 'START'; +STATS : 'STATS'; +STATUS : 'STATUS'; +STOP : 'STOP'; +STORAGE : 'STORAGE'; +STREAM : 'STREAM'; +STRING : 'STRING'; +TEXT : 'TEXT'; +SUBMIT : 'SUBMIT'; +SUM : 'SUM'; +SUSPEND : 'SUSPEND'; +SYNC : 'SYNC'; +SYSTEM : 'SYSTEM'; +SYSTEM_TIME : 'SYSTEM_TIME'; +SWAP : 'SWAP'; +STRUCT : 'STRUCT'; +TABLE : 'TABLE'; +TABLES : 'TABLES'; +TABLET : 'TABLET'; +TABLETS : 'TABLETS'; +TASK : 'TASK'; +TEMPORARY : 'TEMPORARY'; +TERMINATED : 'TERMINATED'; +THAN : 'THAN'; +THEN : 'THEN'; +TIME : 'TIME'; +TIMES : 'TIMES'; +TIMESTAMP : 'TIMESTAMP'; +TIMESTAMPADD : 'TIMESTAMPADD'; +TIMESTAMPDIFF : 'TIMESTAMPDIFF'; +TINYINT : 'TINYINT'; +TRANSACTION : 'TRANSACTION'; +TO : 'TO'; +TRACE : 'TRACE'; +TRIGGERS : 'TRIGGERS'; +TRIM_SPACE : 'TRIM_SPACE'; +TRUE : 'TRUE'; +TRUNCATE : 'TRUNCATE'; +TYPE : 'TYPE'; +TYPES : 'TYPES'; +UNBOUNDED : 'UNBOUNDED'; +UNCOMMITTED : 'UNCOMMITTED'; +UNION : 'UNION'; +UNIQUE : 'UNIQUE'; +UNINSTALL : 'UNINSTALL'; +UNSET : 'UNSET'; +UNSIGNED : 'UNSIGNED'; +UPDATE : 'UPDATE'; +USAGE : 'USAGE'; +USE : 'USE'; +USER : 'USER'; +USERS : 'USERS'; +USING : 'USING'; +VALUE : 'VALUE'; +VALUES : 'VALUES'; +VARBINARY : 'VARBINARY'; +VARCHAR : 'VARCHAR'; +VARIABLES : 'VARIABLES'; +VERBOSE : 'VERBOSE'; +VERSION : 'VERSION'; +VIEW : 'VIEW'; +VIEWS : 'VIEWS'; +VOLUME : 'VOLUME'; +VOLUMES : 'VOLUMES'; +WAREHOUSE : 'WAREHOUSE'; +WAREHOUSES : 'WAREHOUSES'; +WARNINGS : 'WARNINGS'; +WEEK : 'WEEK'; +WHEN : 'WHEN'; +WHERE : 'WHERE'; +WHITELIST : 'WHITELIST'; +WITH : 'WITH'; +WORK : 'WORK'; +WRITE : 'WRITE'; +YEAR : 'YEAR'; +LOCK : 'LOCK'; +UNLOCK : 'UNLOCK'; +LOW_PRIORITY : 'LOW_PRIORITY'; +DISK : 'DISK'; +FIELD : 'FIELD'; + +EQ : '='; +NEQ : '<>' | '!='; +LT : '<'; +LTE : '<='; +GT : '>'; +GTE : '>='; +EQ_FOR_NULL : '<=>'; +ARRAY_ELEMENT : '[*]'; + +PLUS_SYMBOL : '+'; +MINUS_SYMBOL : '-'; +ASTERISK_SYMBOL : '*'; +SLASH_SYMBOL : '/'; +PERCENT_SYMBOL : '%'; + +LOGICAL_OR : '||'; +LOGICAL_AND : '&&'; +LOGICAL_NOT : '!'; + +INT_DIV : 'DIV'; +BITAND : '&'; +BITOR : '|'; +BITXOR : '^'; +BITNOT : '~'; +BIT_SHIFT_LEFT : 'BITSHIFTLEFT'; +BIT_SHIFT_RIGHT : 'BITSHIFTRIGHT'; +BIT_SHIFT_RIGHT_LOGICAL : 'BITSHIFTRIGHTLOGICAL'; + +ARROW : '->'; +AT : '@'; + +INTEGER_VALUE: DIGIT+; + +DECIMAL_VALUE: DIGIT+ '.' DIGIT* | '.' DIGIT+; + +DOUBLE_VALUE: DIGIT+ ('.' DIGIT*)? EXPONENT | '.' DIGIT+ EXPONENT; + +SINGLE_QUOTED_TEXT: '\'' ('\\' . | '\'\'' | ~('\'' | '\\'))* '\''; + +DOUBLE_QUOTED_TEXT: '"' ('\\' . | '""' | ~('"' | '\\'))* '"'; + +BINARY_SINGLE_QUOTED_TEXT: 'X\'' (~('\'' | '\\'))* '\''; + +BINARY_DOUBLE_QUOTED_TEXT: 'X"' (~('"' | '\\'))* '"'; + +LETTER_IDENTIFIER: (LETTER | '_') (LETTER | DIGIT | '_')*; + +DIGIT_IDENTIFIER: DIGIT (LETTER | DIGIT | '_')+; + +BACKQUOTED_IDENTIFIER: '`' ( ~'`' | '``')* '`'; + +// Prevent recognize string: .123somelatin AS ((.123), DECIMAL_LITERAL), ((somelatin), IDENTIFIER) +// it must recoginze: .123somelatin AS ((.), DOT), (123somelatin, IDENTIFIER) +DOT_IDENTIFIER: '.' DIGIT_IDENTIFIER; + +fragment EXPONENT: 'E' [+-]? DIGIT+; + +fragment DIGIT: [0-9]; + +fragment LETTER: [a-z_$\u0080-\uffff]; + +SIMPLE_COMMENT: '--' ~[\r\n]* '\r'? '\n'? -> channel(HIDDEN); + +BRACKETED_COMMENT: '/*' ([ \r\n\t\u3000]* | ~'+' .*?) '*/' -> channel(HIDDEN); + +OPTIMIZER_HINT: '/*+' .*? '*/' -> channel(2); + +SEMICOLON: ';'; + +DOTDOTDOT: '...'; + +COLON : ':'; +LEFT_PAREN : '('; +RIGHT_PAREN : ')'; +COMMA : ','; +DOT : '.'; +LEFT_BRACKET : '['; +RIGHT_BRACKET : ']'; +LEFT_BRACE : '{'; +RIGHT_BRACE : '}'; + +WS: [ \r\n\t\u3000]+ -> channel(HIDDEN); \ No newline at end of file diff --git a/sql/starrocks/StarRocksParser.g4 b/sql/starrocks/StarRocksParser.g4 new file mode 100644 index 0000000000..9345629421 --- /dev/null +++ b/sql/starrocks/StarRocksParser.g4 @@ -0,0 +1,3068 @@ +// Copyright 2021-present StarRocks, Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +// $antlr-format alignColons hanging, alignSemicolons hanging, alignTrailingComments true, allowShortBlocksOnASingleLine true +// $antlr-format allowShortRulesOnASingleLine false, columnLimit 150, maxEmptyLinesToKeep 1, minEmptyLines 1, reflowComments false, useTab false + +parser grammar StarRocksParser; + +options { + tokenVocab = StarRocksLexer; +} + +sqlStatements + : singleStatement+ EOF + ; + +singleStatement + : (statement (SEMICOLON | EOF)) + | emptyStatement + ; + +emptyStatement + : SEMICOLON + ; + +statement + // Query Statement + : queryStatement + + // Database Statement + | useDatabaseStatement + | useCatalogStatement + | setCatalogStatement + | showDatabasesStatement + | alterDbQuotaStatement + | createDbStatement + | dropDbStatement + | showCreateDbStatement + | alterDatabaseRenameStatement + | recoverDbStmt + | showDataStmt + + // Table Statement + | createTableStatement + | createTableAsSelectStatement + | createTableLikeStatement + | showCreateTableStatement + | dropTableStatement + | cleanTemporaryTableStatement + | recoverTableStatement + | truncateTableStatement + | showTableStatement + | descTableStatement + | showTableStatusStatement + | showColumnStatement + | refreshTableStatement + | alterTableStatement + | cancelAlterTableStatement + | showAlterStatement + | showTemporaryTablesStatement + + // View Statement + | createViewStatement + | alterViewStatement + | dropViewStatement + + // Partition Statement + | showPartitionsStatement + | recoverPartitionStatement + + // Index Statement + | createIndexStatement + | dropIndexStatement + | showIndexStatement + + // Task Statement + | submitTaskStatement + | dropTaskStatement + + // Materialized View Statement + | createMaterializedViewStatement + | showMaterializedViewsStatement + | dropMaterializedViewStatement + | alterMaterializedViewStatement + | refreshMaterializedViewStatement + | cancelRefreshMaterializedViewStatement + + // Catalog Statement + | createExternalCatalogStatement + | dropExternalCatalogStatement + | showCatalogsStatement + | showCreateExternalCatalogStatement + | alterCatalogStatement + + // DML Statement + | insertStatement + | updateStatement + | deleteStatement + + // Routine Statement + | createRoutineLoadStatement + | alterRoutineLoadStatement + | stopRoutineLoadStatement + | resumeRoutineLoadStatement + | pauseRoutineLoadStatement + | showRoutineLoadStatement + | showRoutineLoadTaskStatement + | showCreateRoutineLoadStatement + + // StreamLoad Statement + | showStreamLoadStatement + + // Admin Statement + | adminSetConfigStatement + | adminSetReplicaStatusStatement + | adminShowConfigStatement + | adminShowReplicaDistributionStatement + | adminShowReplicaStatusStatement + | adminRepairTableStatement + | adminCancelRepairTableStatement + | adminCheckTabletsStatement + | adminSetPartitionVersion + | killStatement + | syncStatement + | executeScriptStatement + + // Cluster Management Statement + | alterSystemStatement + | cancelAlterSystemStatement + | showComputeNodesStatement + + // Analyze Statement + | analyzeStatement + | dropStatsStatement + | createAnalyzeStatement + | dropAnalyzeJobStatement + | analyzeHistogramStatement + | dropHistogramStatement + | showAnalyzeStatement + | showStatsMetaStatement + | showHistogramMetaStatement + | killAnalyzeStatement + + // Profile Statement + | analyzeProfileStatement + + // Resource Group Statement + | createResourceGroupStatement + | dropResourceGroupStatement + | alterResourceGroupStatement + | showResourceGroupStatement + | showResourceGroupUsageStatement + + // External Resource Statement + | createResourceStatement + | alterResourceStatement + | dropResourceStatement + | showResourceStatement + + // UDF Statement + | showFunctionsStatement + | dropFunctionStatement + | createFunctionStatement + + // Load Statement + | loadStatement + | showLoadStatement + | showLoadWarningsStatement + | cancelLoadStatement + | alterLoadStatement + + // Show Statement + | showAuthorStatement + | showBackendsStatement + | showBrokerStatement + | showCharsetStatement + | showCollationStatement + | showDeleteStatement + | showDynamicPartitionStatement + | showEventsStatement + | showEnginesStatement + | showFrontendsStatement + | showPluginsStatement + | showRepositoriesStatement + | showOpenTableStatement + | showPrivilegesStatement + | showProcedureStatement + | showProcStatement + | showProcesslistStatement + | showProfilelistStatement + | showRunningQueriesStatement + | showStatusStatement + | showTabletStatement + | showTransactionStatement + | showTriggersStatement + | showUserPropertyStatement + | showVariablesStatement + | showWarningStatement + | helpStatement + + // authz Statement + | createUserStatement + | dropUserStatement + | alterUserStatement + | showUserStatement + | showAuthenticationStatement + | executeAsStatement + | createRoleStatement + | alterRoleStatement + | dropRoleStatement + | showRolesStatement + | grantRoleStatement + | revokeRoleStatement + | setRoleStatement + | setDefaultRoleStatement + | grantPrivilegeStatement + | revokePrivilegeStatement + | showGrantsStatement + + // Backup Restore Statement + | backupStatement + | cancelBackupStatement + | showBackupStatement + | restoreStatement + | cancelRestoreStatement + | showRestoreStatement + | showSnapshotStatement + | createRepositoryStatement + | dropRepositoryStatement + + // Sql BlackList And WhiteList Statement + | addSqlBlackListStatement + | delSqlBlackListStatement + | showSqlBlackListStatement + | showWhiteListStatement + + // Backend BlackList + | addBackendBlackListStatement + | delBackendBlackListStatement + | showBackendBlackListStatement + + // Data Cache management statement + | createDataCacheRuleStatement + | showDataCacheRulesStatement + | dropDataCacheRuleStatement + | clearDataCacheRulesStatement + | dataCacheSelectStatement + + // Export Statement + | exportStatement + | cancelExportStatement + | showExportStatement + + // Plugin Statement + | installPluginStatement + | uninstallPluginStatement + + // File Statement + | createFileStatement + | dropFileStatement + | showSmallFilesStatement + + // Set Statement + | setStatement + | setUserPropertyStatement + + // Storage Volume Statement + | createStorageVolumeStatement + | alterStorageVolumeStatement + | dropStorageVolumeStatement + | showStorageVolumesStatement + | descStorageVolumeStatement + | setDefaultStorageVolumeStatement + + // Pipe Statement + | createPipeStatement + | dropPipeStatement + | alterPipeStatement + | showPipeStatement + | descPipeStatement + + // Compaction Statement + | cancelCompactionStatement + + // FailPoint Statement + | updateFailPointStatusStatement + | showFailPointStatement + + // prepare_stmt + | prepareStatement + | executeStatement + | deallocateStatement + + // Dictionary Statement + | createDictionaryStatement + | dropDictionaryStatement + | refreshDictionaryStatement + | showDictionaryStatement + | cancelRefreshDictionaryStatement + + // Unsupported Statement + | unsupportedStatement + ; + +// ---------------------------------------- DataBase Statement --------------------------------------------------------- + +useDatabaseStatement + : USE qualifiedName + ; + +useCatalogStatement + : USE string_ + ; + +setCatalogStatement + : SET CATALOG identifierOrString + ; + +showDatabasesStatement + : SHOW DATABASES ((FROM | IN) catalog = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + | SHOW SCHEMAS ((LIKE pattern = string_) | (WHERE expression))? + ; + +alterDbQuotaStatement + : ALTER DATABASE identifier SET DATA QUOTA identifier + | ALTER DATABASE identifier SET REPLICA QUOTA INTEGER_VALUE + ; + +createDbStatement + : CREATE (DATABASE | SCHEMA) (IF NOT EXISTS)? (catalog = identifier DOT)? database = identifier charsetDesc? collateDesc? properties? + ; + +dropDbStatement + : DROP (DATABASE | SCHEMA) (IF EXISTS)? (catalog = identifier DOT)? database = identifier FORCE? + ; + +showCreateDbStatement + : SHOW CREATE (DATABASE | SCHEMA) identifier + ; + +alterDatabaseRenameStatement + : ALTER DATABASE identifier RENAME identifier + ; + +recoverDbStmt + : RECOVER (DATABASE | SCHEMA) identifier + ; + +showDataStmt + : SHOW DATA + | SHOW DATA FROM qualifiedName + ; + +// ------------------------------------------- Table Statement --------------------------------------------------------- + +createTableStatement + : CREATE (TEMPORARY | EXTERNAL)? TABLE (IF NOT EXISTS)? qualifiedName LEFT_PAREN columnDesc ( + COMMA columnDesc + )* (COMMA indexDesc)* RIGHT_PAREN engineDesc? charsetDesc? keyDesc? comment? partitionDesc? distributionDesc? orderByDesc? rollupDesc? properties? + extProperties? + ; + +columnDesc + : identifier type charsetName? KEY? aggDesc? (NULL_ | NOT NULL_)? ( + defaultDesc + | AUTO_INCREMENT + | generatedColumnDesc + )? comment? + ; + +charsetName + : CHAR SET identifier + | CHARSET identifier + | CHARACTER SET identifier + ; + +defaultDesc + : DEFAULT ( + string_ + | NULL_ + | CURRENT_TIMESTAMP + | LEFT_PAREN qualifiedName LEFT_PAREN RIGHT_PAREN RIGHT_PAREN + ) + ; + +generatedColumnDesc + : AS expression + ; + +indexDesc + : INDEX indexName = identifier identifierList (indexType propertyList?)? comment? + ; + +engineDesc + : ENGINE EQ identifier + ; + +charsetDesc + : DEFAULT? (CHAR SET | CHARSET | CHARACTER SET) EQ? identifierOrString + ; + +collateDesc + : DEFAULT? COLLATE EQ? identifierOrString + ; + +keyDesc + : (AGGREGATE | UNIQUE | PRIMARY | DUPLICATE) KEY identifierList + ; + +orderByDesc + : ORDER BY identifierList + ; + +aggDesc + : SUM + | MAX + | MIN + | REPLACE + | HLL_UNION + | BITMAP_UNION + | PERCENTILE_UNION + | REPLACE_IF_NOT_NULL + ; + +rollupDesc + : ROLLUP LEFT_PAREN rollupItem (COMMA rollupItem)* RIGHT_PAREN + ; + +rollupItem + : rollupName = identifier identifierList (dupKeys)? (fromRollup)? properties? + ; + +dupKeys + : DUPLICATE KEY identifierList + ; + +fromRollup + : FROM identifier + ; + +orReplace + : (OR REPLACE)? + ; + +ifNotExists + : (IF NOT EXISTS)? + ; + +createTableAsSelectStatement + : CREATE TEMPORARY? TABLE (IF NOT EXISTS)? qualifiedName ( + LEFT_PAREN ( + identifier (COMMA identifier)* (COMMA indexDesc)* + | indexDesc (COMMA indexDesc)* + ) RIGHT_PAREN + )? keyDesc? comment? partitionDesc? distributionDesc? orderByDesc? properties? AS queryStatement + ; + +dropTableStatement + : DROP TEMPORARY? TABLE (IF EXISTS)? qualifiedName FORCE? + ; + +cleanTemporaryTableStatement + : CLEAN TEMPORARY TABLE ON SESSION string_ + ; + +alterTableStatement + : ALTER TABLE qualifiedName alterClause (COMMA alterClause)* + | ALTER TABLE qualifiedName ADD ROLLUP rollupItem (COMMA rollupItem)* + | ALTER TABLE qualifiedName DROP ROLLUP identifier (COMMA identifier)* + ; + +createIndexStatement + : CREATE INDEX indexName = identifier ON qualifiedName identifierList (indexType propertyList?)? comment? + ; + +dropIndexStatement + : DROP INDEX indexName = identifier ON qualifiedName + ; + +indexType + : USING (BITMAP | GIN | NGRAMBF) + ; + +showTableStatement + : SHOW FULL? TABLES ((FROM | IN) db = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +showTemporaryTablesStatement + : SHOW TEMPORARY TABLES ((FROM | IN) db = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +showCreateTableStatement + : SHOW CREATE (TABLE | VIEW | MATERIALIZED VIEW) table = qualifiedName + ; + +showColumnStatement + : SHOW FULL? (COLUMNS | FIELDS) ((FROM | IN) table = qualifiedName) ( + (FROM | IN) db = qualifiedName + )? ((LIKE pattern = string_) | (WHERE expression))? + ; + +showTableStatusStatement + : SHOW TABLE STATUS ((FROM | IN) db = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +refreshTableStatement + : REFRESH EXTERNAL TABLE qualifiedName ( + PARTITION LEFT_PAREN string_ (COMMA string_)* RIGHT_PAREN + )? + ; + +showAlterStatement + : SHOW ALTER TABLE (COLUMN | ROLLUP | OPTIMIZE) ((FROM | IN) db = qualifiedName)? ( + WHERE expression + )? (ORDER BY sortItem (COMMA sortItem)*)? (limitElement)? + | SHOW ALTER MATERIALIZED VIEW ((FROM | IN) db = qualifiedName)? (WHERE expression)? ( + ORDER BY sortItem (COMMA sortItem)* + )? (limitElement)? + ; + +descTableStatement + : (DESC | DESCRIBE) table = qualifiedName ALL? + ; + +createTableLikeStatement + : CREATE (TEMPORARY | EXTERNAL)? TABLE (IF NOT EXISTS)? qualifiedName partitionDesc? distributionDesc? properties? LIKE qualifiedName + ; + +showIndexStatement + : SHOW (INDEX | INDEXES | KEY | KEYS) ((FROM | IN) table = qualifiedName) ( + (FROM | IN) db = qualifiedName + )? + ; + +recoverTableStatement + : RECOVER TABLE qualifiedName + ; + +truncateTableStatement + : TRUNCATE TABLE qualifiedName partitionNames? + ; + +cancelAlterTableStatement + : CANCEL ALTER TABLE (COLUMN | ROLLUP | OPTIMIZE)? FROM qualifiedName ( + LEFT_PAREN INTEGER_VALUE (COMMA INTEGER_VALUE)* RIGHT_PAREN + )? + | CANCEL ALTER MATERIALIZED VIEW FROM qualifiedName + ; + +showPartitionsStatement + : SHOW TEMPORARY? PARTITIONS FROM table = qualifiedName (WHERE expression)? ( + ORDER BY sortItem (COMMA sortItem)* + )? limitElement? + ; + +recoverPartitionStatement + : RECOVER PARTITION identifier FROM table = qualifiedName + ; + +// ------------------------------------------- View Statement ---------------------------------------------------------- + +createViewStatement + : CREATE (OR REPLACE)? VIEW (IF NOT EXISTS)? qualifiedName ( + LEFT_PAREN columnNameWithComment (COMMA columnNameWithComment)* RIGHT_PAREN + )? comment? AS queryStatement + ; + +alterViewStatement + : ALTER VIEW qualifiedName ( + LEFT_PAREN columnNameWithComment (COMMA columnNameWithComment)* RIGHT_PAREN + )? AS queryStatement + ; + +dropViewStatement + : DROP VIEW (IF EXISTS)? qualifiedName + ; + +columnNameWithComment + : columnName = identifier comment? + ; + +// ------------------------------------------- Task Statement ---------------------------------------------------------- + +submitTaskStatement + : SUBMIT TASK qualifiedName? taskClause* AS ( + createTableAsSelectStatement + | insertStatement + | dataCacheSelectStatement + ) + ; + +taskClause + : properties + | taskScheduleDesc + ; + +dropTaskStatement + : DROP TASK qualifiedName FORCE? + ; + +taskScheduleDesc + : SCHEDULE (START LEFT_PAREN string_ RIGHT_PAREN)? EVERY LEFT_PAREN taskInterval RIGHT_PAREN + ; + +// ------------------------------------------- Materialized View Statement --------------------------------------------- + +createMaterializedViewStatement + : CREATE MATERIALIZED VIEW (IF NOT EXISTS)? mvName = qualifiedName ( + LEFT_PAREN columnNameWithComment (COMMA columnNameWithComment)* (COMMA indexDesc)* RIGHT_PAREN + )? comment? materializedViewDesc* AS queryStatement + ; + +materializedViewDesc + : (PARTITION BY primaryExpression) + | distributionDesc + | orderByDesc + | refreshSchemeDesc + | properties + ; + +showMaterializedViewsStatement + : SHOW MATERIALIZED VIEWS ((FROM | IN) db = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +dropMaterializedViewStatement + : DROP MATERIALIZED VIEW (IF EXISTS)? mvName = qualifiedName + ; + +alterMaterializedViewStatement + : ALTER MATERIALIZED VIEW mvName = qualifiedName ( + refreshSchemeDesc + | tableRenameClause + | modifyPropertiesClause + | swapTableClause + ) + | ALTER MATERIALIZED VIEW mvName = qualifiedName statusDesc + ; + +refreshMaterializedViewStatement + : REFRESH MATERIALIZED VIEW mvName = qualifiedName (PARTITION partitionRangeDesc)? FORCE? ( + WITH (SYNC | ASYNC) MODE + )? + ; + +cancelRefreshMaterializedViewStatement + : CANCEL REFRESH MATERIALIZED VIEW mvName = qualifiedName FORCE? + ; + +// ------------------------------------------- Admin Statement --------------------------------------------------------- + +adminSetConfigStatement + : ADMIN SET FRONTEND CONFIG LEFT_PAREN property RIGHT_PAREN + ; + +adminSetReplicaStatusStatement + : ADMIN SET REPLICA STATUS properties + ; + +adminShowConfigStatement + : ADMIN SHOW FRONTEND CONFIG (LIKE pattern = string_)? + ; + +adminShowReplicaDistributionStatement + : ADMIN SHOW REPLICA DISTRIBUTION FROM qualifiedName partitionNames? + ; + +adminShowReplicaStatusStatement + : ADMIN SHOW REPLICA STATUS FROM qualifiedName partitionNames? (WHERE where = expression)? + ; + +adminRepairTableStatement + : ADMIN REPAIR TABLE qualifiedName partitionNames? + ; + +adminCancelRepairTableStatement + : ADMIN CANCEL REPAIR TABLE qualifiedName partitionNames? + ; + +adminCheckTabletsStatement + : ADMIN CHECK tabletList PROPERTIES LEFT_PAREN property RIGHT_PAREN + ; + +adminSetPartitionVersion + : ADMIN SET TABLE qualifiedName PARTITION LEFT_PAREN ( + partitionName = identifierOrString + | partitionId = INTEGER_VALUE + ) RIGHT_PAREN VERSION TO version = INTEGER_VALUE + ; + +killStatement + : KILL (CONNECTION? | QUERY) INTEGER_VALUE + ; + +syncStatement + : SYNC + ; + +// ------------------------------------------- Cluster Management Statement --------------------------------------------- + +alterSystemStatement + : ALTER SYSTEM alterClause + ; + +cancelAlterSystemStatement + : CANCEL DECOMMISSION BACKEND string_ (COMMA string_)* + ; + +showComputeNodesStatement + : SHOW COMPUTE NODES + ; + +// ------------------------------------------- Catalog Statement ------------------------------------------------------- + +createExternalCatalogStatement + : CREATE EXTERNAL CATALOG (IF NOT EXISTS)? catalogName = identifierOrString comment? properties + ; + +showCreateExternalCatalogStatement + : SHOW CREATE CATALOG catalogName = identifierOrString + ; + +dropExternalCatalogStatement + : DROP CATALOG (IF EXISTS)? catalogName = identifierOrString + ; + +showCatalogsStatement + : SHOW CATALOGS + ; + +alterCatalogStatement + : ALTER CATALOG catalogName = identifierOrString modifyPropertiesClause + ; + +// ---------------------------------------- Storage Volume Statement --------------------------------------------------- + +createStorageVolumeStatement + : CREATE STORAGE VOLUME (IF NOT EXISTS)? storageVolumeName = identifierOrString typeDesc locationsDesc comment? properties? + ; + +typeDesc + : TYPE EQ identifier + ; + +locationsDesc + : LOCATIONS EQ stringList + ; + +showStorageVolumesStatement + : SHOW STORAGE VOLUMES (LIKE pattern = string_)? + ; + +dropStorageVolumeStatement + : DROP STORAGE VOLUME (IF EXISTS)? storageVolumeName = identifierOrString + ; + +alterStorageVolumeStatement + : ALTER STORAGE VOLUME identifierOrString alterStorageVolumeClause ( + COMMA alterStorageVolumeClause + )* + ; + +alterStorageVolumeClause + : modifyStorageVolumeCommentClause + | modifyStorageVolumePropertiesClause + ; + +modifyStorageVolumePropertiesClause + : SET propertyList + ; + +modifyStorageVolumeCommentClause + : COMMENT '=' string_ + ; + +descStorageVolumeStatement + : (DESC | DESCRIBE) STORAGE VOLUME identifierOrString + ; + +setDefaultStorageVolumeStatement + : SET identifierOrString AS DEFAULT STORAGE VOLUME + ; + +// ------------------------------------------- FailPoint Statement ----------------------------------------------------- + +updateFailPointStatusStatement + : ADMIN DISABLE FAILPOINT string_ (ON BACKEND string_)? + | ADMIN ENABLE FAILPOINT string_ (WITH INTEGER_VALUE TIMES)? (ON BACKEND string_)? + | ADMIN ENABLE FAILPOINT string_ (WITH DECIMAL_VALUE PROBABILITY)? (ON BACKEND string_)? + ; + +showFailPointStatement + : SHOW FAILPOINTS ((LIKE pattern = string_))? (ON BACKEND string_)? + ; + +// ------------------------------------------- Dictionary Statement ----------------------------------------------------- + +createDictionaryStatement + : CREATE DICTIONARY dictionaryName USING qualifiedName LEFT_PAREN dictionaryColumnDesc ( + COMMA dictionaryColumnDesc + )* RIGHT_PAREN properties? + ; + +dropDictionaryStatement + : DROP DICTIONARY qualifiedName CACHE? + ; + +refreshDictionaryStatement + : REFRESH DICTIONARY qualifiedName + ; + +showDictionaryStatement + : SHOW DICTIONARY qualifiedName? + ; + +cancelRefreshDictionaryStatement + : CANCEL REFRESH DICTIONARY qualifiedName + ; + +dictionaryColumnDesc + : qualifiedName KEY + | qualifiedName VALUE + ; + +dictionaryName + : qualifiedName + ; + +// ------------------------------------------- Alter Clause ------------------------------------------------------------ + +alterClause + //Alter system clause + : addFrontendClause + | dropFrontendClause + | modifyFrontendHostClause + | addBackendClause + | dropBackendClause + | decommissionBackendClause + | modifyBackendClause + | addComputeNodeClause + | dropComputeNodeClause + | modifyBrokerClause + | alterLoadErrorUrlClause + | createImageClause + | cleanTabletSchedQClause + | decommissionDiskClause + | cancelDecommissionDiskClause + | disableDiskClause + | cancelDisableDiskClause + + //Alter table clause + | createIndexClause + | dropIndexClause + | tableRenameClause + | swapTableClause + | modifyPropertiesClause + | addColumnClause + | addColumnsClause + | dropColumnClause + | modifyColumnClause + | columnRenameClause + | reorderColumnsClause + | rollupRenameClause + | compactionClause + | modifyCommentClause + | optimizeClause + | addFieldClause + | dropFieldClause + + //Alter partition clause + | addPartitionClause + | dropPartitionClause + | distributionClause + | truncatePartitionClause + | modifyPartitionClause + | replacePartitionClause + | partitionRenameClause + ; + +// ---------Alter system clause--------- + +addFrontendClause + : ADD (FOLLOWER | OBSERVER) string_ + ; + +dropFrontendClause + : DROP (FOLLOWER | OBSERVER) string_ + ; + +modifyFrontendHostClause + : MODIFY FRONTEND HOST string_ TO string_ + ; + +addBackendClause + : ADD BACKEND string_ (COMMA string_)* + ; + +dropBackendClause + : DROP BACKEND string_ (COMMA string_)* FORCE? + ; + +decommissionBackendClause + : DECOMMISSION BACKEND string_ (COMMA string_)* + ; + +modifyBackendClause + : MODIFY BACKEND HOST string_ TO string_ + | MODIFY BACKEND string_ SET propertyList + ; + +addComputeNodeClause + : ADD COMPUTE NODE string_ (COMMA string_)* + ; + +dropComputeNodeClause + : DROP COMPUTE NODE string_ (COMMA string_)* + ; + +modifyBrokerClause + : ADD BROKER identifierOrString string_ (COMMA string_)* + | DROP BROKER identifierOrString string_ (COMMA string_)* + | DROP ALL BROKER identifierOrString + ; + +alterLoadErrorUrlClause + : SET LOAD ERRORS HUB properties? + ; + +createImageClause + : CREATE IMAGE + ; + +cleanTabletSchedQClause + : CLEAN TABLET SCHEDULER QUEUE + ; + +decommissionDiskClause + : DECOMMISSION DISK string_ (COMMA string_)* ON BACKEND string_ + ; + +cancelDecommissionDiskClause + : CANCEL DECOMMISSION DISK string_ (COMMA string_)* ON BACKEND string_ + ; + +disableDiskClause + : DISABLE DISK string_ (COMMA string_)* ON BACKEND string_ + ; + +cancelDisableDiskClause + : CANCEL DISABLE DISK string_ (COMMA string_)* ON BACKEND string_ + ; + +// ---------Alter table clause--------- + +createIndexClause + : ADD INDEX indexName = identifier identifierList (indexType propertyList?)? comment? + ; + +dropIndexClause + : DROP INDEX indexName = identifier + ; + +tableRenameClause + : RENAME identifier + ; + +swapTableClause + : SWAP WITH identifier + ; + +modifyPropertiesClause + : SET propertyList + ; + +modifyCommentClause + : COMMENT '=' string_ + ; + +optimizeClause + : partitionNames? keyDesc? partitionDesc? orderByDesc? distributionDesc? + ; + +addColumnClause + : ADD COLUMN columnDesc (FIRST | AFTER identifier)? ((TO | IN) rollupName = identifier)? properties? + ; + +addColumnsClause + : ADD COLUMN LEFT_PAREN columnDesc (COMMA columnDesc)* RIGHT_PAREN ( + (TO | IN) rollupName = identifier + )? properties? + ; + +dropColumnClause + : DROP COLUMN identifier (FROM rollupName = identifier)? properties? + ; + +modifyColumnClause + : MODIFY COLUMN columnDesc (FIRST | AFTER identifier)? (FROM rollupName = identifier)? properties? + ; + +columnRenameClause + : RENAME COLUMN oldColumn = identifier TO newColumn = identifier + ; + +reorderColumnsClause + : ORDER BY identifierList (FROM rollupName = identifier)? properties? + ; + +rollupRenameClause + : RENAME ROLLUP rollupName = identifier newRollupName = identifier + ; + +compactionClause + : (BASE | CUMULATIVE)? COMPACT (identifier | identifierList)? + ; + +subfieldName + : identifier + | ARRAY_ELEMENT + ; + +nestedFieldName + : subfieldName (DOT_IDENTIFIER | DOT subfieldName)* + ; + +addFieldClause + : MODIFY COLUMN identifier ADD FIELD subfieldDesc (FIRST | AFTER identifier)? properties? + ; + +dropFieldClause + : MODIFY COLUMN identifier DROP FIELD nestedFieldName properties? + ; + +// ---------Alter partition clause--------- + +addPartitionClause + : ADD TEMPORARY? (singleRangePartition | PARTITIONS multiRangePartition) distributionDesc? properties? + | ADD TEMPORARY? (singleItemListPartitionDesc | multiItemListPartitionDesc) distributionDesc? properties? + ; + +dropPartitionClause + : DROP TEMPORARY? PARTITION (IF EXISTS)? identifier FORCE? + ; + +truncatePartitionClause + : TRUNCATE partitionNames + ; + +modifyPartitionClause + : MODIFY PARTITION (identifier | identifierList | LEFT_PAREN ASTERISK_SYMBOL RIGHT_PAREN) SET propertyList + | MODIFY PARTITION distributionDesc + ; + +replacePartitionClause + : REPLACE parName = partitionNames WITH tempParName = partitionNames properties? + ; + +partitionRenameClause + : RENAME PARTITION parName = identifier newParName = identifier + ; + +// ------------------------------------------- DML Statement ----------------------------------------------------------- + +insertStatement + : explainDesc? INSERT (INTO | OVERWRITE) ( + qualifiedName + | (FILES propertyList) + | (BLACKHOLE LEFT_PAREN RIGHT_PAREN) + ) partitionNames? (WITH LABEL label = identifier)? columnAliases? ( + queryStatement + | (VALUES expressionsWithDefault (COMMA expressionsWithDefault)*) + ) + ; + +updateStatement + : explainDesc? withClause? UPDATE qualifiedName SET assignmentList fromClause ( + WHERE where = expression + )? + ; + +deleteStatement + : explainDesc? withClause? DELETE FROM qualifiedName partitionNames? (USING using = relations)? ( + WHERE where = expression + )? + ; + +// ------------------------------------------- Routine Statement ----------------------------------------------------------- +createRoutineLoadStatement + : CREATE ROUTINE LOAD (db = qualifiedName DOT)? name = identifier ON table = qualifiedName ( + loadProperties (COMMA loadProperties)* + )? jobProperties? FROM source = identifier dataSourceProperties? + ; + +alterRoutineLoadStatement + : ALTER ROUTINE LOAD FOR (db = qualifiedName DOT)? name = identifier ( + loadProperties (COMMA loadProperties)* + )? jobProperties? dataSource? + ; + +dataSource + : FROM source = identifier dataSourceProperties + ; + +loadProperties + : colSeparatorProperty + | rowDelimiterProperty + | importColumns + | WHERE expression + | partitionNames + ; + +colSeparatorProperty + : COLUMNS TERMINATED BY string_ + ; + +rowDelimiterProperty + : ROWS TERMINATED BY string_ + ; + +importColumns + : COLUMNS columnProperties + ; + +columnProperties + : LEFT_PAREN (qualifiedName | assignment) (COMMA (qualifiedName | assignment))* RIGHT_PAREN + ; + +jobProperties + : properties + ; + +dataSourceProperties + : propertyList + ; + +stopRoutineLoadStatement + : STOP ROUTINE LOAD FOR (db = qualifiedName DOT)? name = identifier + ; + +resumeRoutineLoadStatement + : RESUME ROUTINE LOAD FOR (db = qualifiedName DOT)? name = identifier + ; + +pauseRoutineLoadStatement + : PAUSE ROUTINE LOAD FOR (db = qualifiedName DOT)? name = identifier + ; + +showRoutineLoadStatement + : SHOW ALL? ROUTINE LOAD (FOR (db = qualifiedName DOT)? name = identifier)? ( + FROM db = qualifiedName + )? (WHERE expression)? (ORDER BY sortItem (COMMA sortItem)*)? (limitElement)? + ; + +showRoutineLoadTaskStatement + : SHOW ROUTINE LOAD TASK (FROM db = qualifiedName)? WHERE expression + ; + +showCreateRoutineLoadStatement + : SHOW CREATE ROUTINE LOAD (db = qualifiedName DOT)? name = identifier + ; + +showStreamLoadStatement + : SHOW ALL? STREAM LOAD (FOR (db = qualifiedName DOT)? name = identifier)? ( + FROM db = qualifiedName + )? (WHERE expression)? (ORDER BY sortItem (COMMA sortItem)*)? (limitElement)? + ; + +// ------------------------------------------- Analyze Statement ------------------------------------------------------- + +analyzeStatement + : ANALYZE (FULL | SAMPLE)? TABLE qualifiedName ( + LEFT_PAREN qualifiedName (COMMA qualifiedName)* RIGHT_PAREN + )? (WITH (SYNC | ASYNC) MODE)? properties? + ; + +dropStatsStatement + : DROP STATS qualifiedName + ; + +analyzeHistogramStatement + : ANALYZE TABLE qualifiedName UPDATE HISTOGRAM ON qualifiedName (COMMA qualifiedName)* ( + WITH (SYNC | ASYNC) MODE + )? (WITH bucket = INTEGER_VALUE BUCKETS)? properties? + ; + +dropHistogramStatement + : ANALYZE TABLE qualifiedName DROP HISTOGRAM ON qualifiedName (COMMA qualifiedName)* + ; + +createAnalyzeStatement + : CREATE ANALYZE (FULL | SAMPLE)? ALL properties? + | CREATE ANALYZE (FULL | SAMPLE)? DATABASE db = identifier properties? + | CREATE ANALYZE (FULL | SAMPLE)? TABLE qualifiedName ( + LEFT_PAREN qualifiedName (COMMA qualifiedName)* RIGHT_PAREN + )? properties? + ; + +dropAnalyzeJobStatement + : DROP ANALYZE INTEGER_VALUE + ; + +showAnalyzeStatement + : SHOW ANALYZE (JOB | STATUS)? (WHERE expression)? + ; + +showStatsMetaStatement + : SHOW STATS META (WHERE expression)? + ; + +showHistogramMetaStatement + : SHOW HISTOGRAM META (WHERE expression)? + ; + +killAnalyzeStatement + : KILL ANALYZE INTEGER_VALUE + ; + +// ----------------------------------------- Analyze Profile Statement ------------------------------------------------- + +analyzeProfileStatement + : ANALYZE PROFILE FROM string_ + | ANALYZE PROFILE FROM string_ COMMA INTEGER_VALUE (COMMA INTEGER_VALUE)* + ; + +// ------------------------------------------- Work Group Statement ---------------------------------------------------- + +createResourceGroupStatement + : CREATE RESOURCE GROUP (IF NOT EXISTS)? (OR REPLACE)? identifier ( + TO classifier (COMMA classifier)* + )? WITH LEFT_PAREN property (COMMA property)* RIGHT_PAREN + ; + +dropResourceGroupStatement + : DROP RESOURCE GROUP identifier + ; + +alterResourceGroupStatement + : ALTER RESOURCE GROUP identifier ADD classifier (COMMA classifier)* + | ALTER RESOURCE GROUP identifier DROP LEFT_PAREN INTEGER_VALUE (COMMA INTEGER_VALUE)* RIGHT_PAREN + | ALTER RESOURCE GROUP identifier DROP ALL + | ALTER RESOURCE GROUP identifier WITH LEFT_PAREN property (COMMA property)* RIGHT_PAREN + ; + +showResourceGroupStatement + : SHOW RESOURCE GROUP identifier + | SHOW RESOURCE GROUPS ALL? + ; + +showResourceGroupUsageStatement + : SHOW USAGE RESOURCE GROUP identifier + | SHOW USAGE RESOURCE GROUPS + ; + +createResourceStatement + : CREATE EXTERNAL? RESOURCE resourceName = identifierOrString properties? + ; + +alterResourceStatement + : ALTER RESOURCE resourceName = identifierOrString SET properties + ; + +dropResourceStatement + : DROP RESOURCE resourceName = identifierOrString + ; + +showResourceStatement + : SHOW RESOURCES + ; + +classifier + : LEFT_PAREN expressionList RIGHT_PAREN + ; + +// ------------------------------------------- UDF Statement ---------------------------------------------------- + +showFunctionsStatement + : SHOW FULL? (BUILTIN | GLOBAL)? FUNCTIONS ((FROM | IN) db = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +dropFunctionStatement + : DROP GLOBAL? FUNCTION qualifiedName LEFT_PAREN typeList RIGHT_PAREN + ; + +createFunctionStatement + : CREATE GLOBAL? functionType = (TABLE | AGGREGATE)? FUNCTION qualifiedName LEFT_PAREN typeList RIGHT_PAREN RETURNS returnType = type ( + INTERMEDIATE intermediateType = type + )? properties? + ; + +typeList + : type? (COMMA type)* (COMMA DOTDOTDOT)? + ; + +// ------------------------------------------- Load Statement ---------------------------------------------------------- + +loadStatement + : LOAD LABEL label = labelName data = dataDescList? broker = brokerDesc? ( + BY system = identifierOrString + )? (PROPERTIES props = propertyList)? + | LOAD LABEL label = labelName data = dataDescList? resource = resourceDesc ( + PROPERTIES props = propertyList + )? + ; + +labelName + : (db = identifier DOT)? label = identifier + ; + +dataDescList + : LEFT_PAREN dataDesc (COMMA dataDesc)* RIGHT_PAREN + ; + +dataDesc + : DATA INFILE srcFiles = stringList NEGATIVE? INTO TABLE dstTableName = identifier partitions = partitionNames? ( + COLUMNS TERMINATED BY colSep = string_ + )? (ROWS TERMINATED BY rowSep = string_)? format = fileFormat? (formatPropsField = formatProps)? colList = columnAliases? ( + COLUMNS FROM PATH AS colFromPath = identifierList + )? (SET colMappingList = classifier)? (WHERE where = expression)? + | DATA FROM TABLE srcTableName = identifier NEGATIVE? INTO TABLE dstTableName = identifier partitions = partitionNames? ( + SET colMappingList = classifier + )? (WHERE where = expression)? + ; + +formatProps + : LEFT_PAREN (SKIP_HEADER '=' INTEGER_VALUE)? (TRIM_SPACE '=' booleanValue)? ( + ENCLOSE '=' encloseCharacter = string_ + )? (ESCAPE '=' escapeCharacter = string_)? RIGHT_PAREN + ; + +brokerDesc + : WITH BROKER props = propertyList? + | WITH BROKER name = identifierOrString props = propertyList? + ; + +resourceDesc + : WITH RESOURCE name = identifierOrString props = propertyList? + ; + +showLoadStatement + : SHOW LOAD (ALL)? (FROM identifier)? (WHERE expression)? (ORDER BY sortItem (COMMA sortItem)*)? limitElement? + ; + +showLoadWarningsStatement + : SHOW LOAD WARNINGS (FROM identifier)? (WHERE expression)? limitElement? + | SHOW LOAD WARNINGS ON string_ + ; + +cancelLoadStatement + : CANCEL LOAD (FROM identifier)? (WHERE expression)? + ; + +alterLoadStatement + : ALTER LOAD FOR (db = qualifiedName DOT)? name = identifier jobProperties? + ; + +// ------------------------------------------- Compaction Statement ---------------------------------------------------------- + +cancelCompactionStatement + : CANCEL COMPACTION WHERE expression + ; + +// ------------------------------------------- Show Statement ---------------------------------------------------------- + +showAuthorStatement + : SHOW AUTHORS + ; + +showBackendsStatement + : SHOW BACKENDS + ; + +showBrokerStatement + : SHOW BROKER + ; + +showCharsetStatement + : SHOW (CHAR SET | CHARSET | CHARACTER SET) ((LIKE pattern = string_) | (WHERE expression))? + ; + +showCollationStatement + : SHOW COLLATION ((LIKE pattern = string_) | (WHERE expression))? + ; + +showDeleteStatement + : SHOW DELETE ((FROM | IN) db = qualifiedName)? + ; + +showDynamicPartitionStatement + : SHOW DYNAMIC PARTITION TABLES ((FROM | IN) db = qualifiedName)? + ; + +showEventsStatement + : SHOW EVENTS ((FROM | IN) catalog = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +showEnginesStatement + : SHOW ENGINES + ; + +showFrontendsStatement + : SHOW FRONTENDS + ; + +showPluginsStatement + : SHOW PLUGINS + ; + +showRepositoriesStatement + : SHOW REPOSITORIES + ; + +showOpenTableStatement + : SHOW OPEN TABLES + ; + +showPrivilegesStatement + : SHOW PRIVILEGES + ; + +showProcedureStatement + : SHOW (PROCEDURE | FUNCTION) STATUS ((LIKE pattern = string_) | (WHERE where = expression))? + ; + +showProcStatement + : SHOW PROC path = string_ + ; + +showProcesslistStatement + : SHOW FULL? PROCESSLIST (FOR string_)? + ; + +showProfilelistStatement + : SHOW PROFILELIST (LIMIT limit = INTEGER_VALUE)? + ; + +showRunningQueriesStatement + : SHOW RUNNING QUERIES (LIMIT limit = INTEGER_VALUE)? + ; + +showStatusStatement + : SHOW varType? STATUS ((LIKE pattern = string_) | (WHERE expression))? + ; + +showTabletStatement + : SHOW TABLET INTEGER_VALUE + | SHOW (TABLET | TABLETS) FROM qualifiedName partitionNames? (WHERE expression)? ( + ORDER BY sortItem (COMMA sortItem)* + )? (limitElement)? + ; + +showTransactionStatement + : SHOW TRANSACTION ((FROM | IN) db = qualifiedName)? (WHERE expression)? + ; + +showTriggersStatement + : SHOW FULL? TRIGGERS ((FROM | IN) catalog = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +showUserPropertyStatement + : SHOW PROPERTY (FOR string_)? (LIKE string_)? + ; + +showVariablesStatement + : SHOW varType? VARIABLES ((LIKE pattern = string_) | (WHERE expression))? + ; + +showWarningStatement + : SHOW (WARNINGS | ERRORS) (limitElement)? + ; + +helpStatement + : HELP identifierOrString + ; + +// ------------------------------------------- Authz Statement ----------------------------------------------------- + +createUserStatement + : CREATE USER (IF NOT EXISTS)? user authOption? (DEFAULT ROLE roleList)? + ; + +dropUserStatement + : DROP USER (IF EXISTS)? user + ; + +alterUserStatement + : ALTER USER (IF EXISTS)? user authOption + | ALTER USER (IF EXISTS)? user DEFAULT ROLE (NONE | ALL | roleList) + ; + +showUserStatement + : SHOW (USER | USERS) + ; + +showAuthenticationStatement + : SHOW ALL AUTHENTICATION # showAllAuthentication + | SHOW AUTHENTICATION (FOR user)? # showAuthenticationForUser + ; + +executeAsStatement + : EXECUTE AS user (WITH NO REVERT)? + ; + +createRoleStatement + : CREATE ROLE (IF NOT EXISTS)? roleList comment? + ; + +alterRoleStatement + : ALTER ROLE (IF EXISTS)? roleList SET COMMENT '=' string_ + ; + +dropRoleStatement + : DROP ROLE (IF EXISTS)? roleList + ; + +showRolesStatement + : SHOW ROLES + ; + +grantRoleStatement + : GRANT identifierOrStringList TO USER? user # grantRoleToUser + | GRANT identifierOrStringList TO ROLE identifierOrString # grantRoleToRole + ; + +revokeRoleStatement + : REVOKE identifierOrStringList FROM USER? user # revokeRoleFromUser + | REVOKE identifierOrStringList FROM ROLE identifierOrString # revokeRoleFromRole + ; + +setRoleStatement + : SET ROLE DEFAULT + | SET ROLE NONE + | SET ROLE ALL (EXCEPT roleList)? + | SET ROLE roleList + ; + +setDefaultRoleStatement + : SET DEFAULT ROLE (NONE | ALL | roleList) TO user + ; + +grantRevokeClause + : (USER? user | ROLE identifierOrString) + ; + +grantPrivilegeStatement + : GRANT IMPERSONATE ON USER user (COMMA user)* TO grantRevokeClause (WITH GRANT OPTION)? # grantOnUser + | GRANT privilegeTypeList ON privObjectNameList TO grantRevokeClause (WITH GRANT OPTION)? # grantOnTableBrief + | GRANT privilegeTypeList ON GLOBAL? FUNCTION privFunctionObjectNameList TO grantRevokeClause ( + WITH GRANT OPTION + )? # grantOnFunc + | GRANT privilegeTypeList ON SYSTEM TO grantRevokeClause (WITH GRANT OPTION)? # grantOnSystem + | GRANT privilegeTypeList ON privObjectType privObjectNameList TO grantRevokeClause ( + WITH GRANT OPTION + )? # grantOnPrimaryObj + | GRANT privilegeTypeList ON ALL privObjectTypePlural ( + IN isAll = ALL DATABASES + | IN DATABASE identifierOrString + )? TO grantRevokeClause (WITH GRANT OPTION)? # grantOnAll + ; + +revokePrivilegeStatement + : REVOKE IMPERSONATE ON USER user (COMMA user)* FROM grantRevokeClause # revokeOnUser + | REVOKE privilegeTypeList ON privObjectNameList FROM grantRevokeClause # revokeOnTableBrief + | REVOKE privilegeTypeList ON GLOBAL? FUNCTION privFunctionObjectNameList FROM grantRevokeClause # revokeOnFunc + | REVOKE privilegeTypeList ON SYSTEM FROM grantRevokeClause # revokeOnSystem + | REVOKE privilegeTypeList ON privObjectType privObjectNameList FROM grantRevokeClause # revokeOnPrimaryObj + | REVOKE privilegeTypeList ON ALL privObjectTypePlural ( + IN isAll = ALL DATABASES + | IN DATABASE identifierOrString + )? FROM grantRevokeClause # revokeOnAll + ; + +showGrantsStatement + : SHOW GRANTS + | SHOW GRANTS FOR USER? user + | SHOW GRANTS FOR ROLE identifierOrString + ; + +authOption + : IDENTIFIED BY PASSWORD? string_ # authWithoutPlugin + | IDENTIFIED WITH identifierOrString ((BY | AS) string_)? # authWithPlugin + ; + +privObjectName + : identifierOrStringOrStar (DOT identifierOrStringOrStar)? + ; + +privObjectNameList + : privObjectName (COMMA privObjectName)* + ; + +privFunctionObjectNameList + : qualifiedName LEFT_PAREN typeList RIGHT_PAREN ( + COMMA qualifiedName LEFT_PAREN typeList RIGHT_PAREN + )* + ; + +privilegeTypeList + : privilegeType (COMMA privilegeType)* + ; + +privilegeType + : ALL PRIVILEGES? + | ALTER + | APPLY + | BLACKLIST + | CREATE ( + DATABASE + | TABLE + | VIEW + | FUNCTION + | GLOBAL FUNCTION + | MATERIALIZED VIEW + | RESOURCE + | RESOURCE GROUP + | EXTERNAL CATALOG + | STORAGE VOLUME + | PIPE + ) + | DELETE + | DROP + | EXPORT + | FILE + | IMPERSONATE + | INSERT + | GRANT + | NODE + | OPERATE + | PLUGIN + | REPOSITORY + | REFRESH + | SELECT + | UPDATE + | USAGE + ; + +privObjectType + : CATALOG + | DATABASE + | MATERIALIZED VIEW + | RESOURCE + | RESOURCE GROUP + | STORAGE VOLUME + | SYSTEM + | TABLE + | VIEW + | PIPE + ; + +privObjectTypePlural + : CATALOGS + | DATABASES + | FUNCTIONS + | GLOBAL FUNCTIONS + | MATERIALIZED VIEWS + | POLICIES + | RESOURCES + | RESOURCE GROUPS + | STORAGE VOLUMES + | TABLES + | USERS + | VIEWS + | PIPES + ; + +// ---------------------------------------- Backup Restore Statement --------------------------------------------------- + +backupStatement + : BACKUP SNAPSHOT qualifiedName TO identifier ( + ON LEFT_PAREN tableDesc (COMMA tableDesc)* RIGHT_PAREN + )? (PROPERTIES propertyList)? + ; + +cancelBackupStatement + : CANCEL BACKUP ((FROM | IN) identifier)? + ; + +showBackupStatement + : SHOW BACKUP ((FROM | IN) identifier)? + ; + +restoreStatement + : RESTORE SNAPSHOT qualifiedName FROM identifier ( + ON LEFT_PAREN restoreTableDesc (COMMA restoreTableDesc)* RIGHT_PAREN + )? (PROPERTIES propertyList)? + ; + +cancelRestoreStatement + : CANCEL RESTORE ((FROM | IN) identifier)? + ; + +showRestoreStatement + : SHOW RESTORE ((FROM | IN) identifier)? (WHERE where = expression)? + ; + +showSnapshotStatement + : SHOW SNAPSHOT ON identifier (WHERE expression)? + ; + +createRepositoryStatement + : CREATE (READ ONLY)? REPOSITORY repoName = identifier WITH BROKER brokerName = identifierOrString? ON LOCATION location = string_ ( + PROPERTIES propertyList + )? + ; + +dropRepositoryStatement + : DROP REPOSITORY identifier + ; + +// ------------------------------------ Sql BlackList And WhiteList Statement ------------------------------------------ + +addSqlBlackListStatement + : ADD SQLBLACKLIST string_ + ; + +delSqlBlackListStatement + : DELETE SQLBLACKLIST INTEGER_VALUE (COMMA INTEGER_VALUE)* + ; + +showSqlBlackListStatement + : SHOW SQLBLACKLIST + ; + +showWhiteListStatement + : SHOW WHITELIST + ; + +// ------------------------------------ backend BlackList Statement --------------------------------------------------- + +addBackendBlackListStatement + : ADD BACKEND BLACKLIST INTEGER_VALUE (COMMA INTEGER_VALUE)* + ; + +delBackendBlackListStatement + : DELETE BACKEND BLACKLIST INTEGER_VALUE (COMMA INTEGER_VALUE)* + ; + +showBackendBlackListStatement + : SHOW BACKEND BLACKLIST + ; + +// -------------------------------------- DataCache Management Statement -------------------------------------------- + +dataCacheTarget + : identifierOrStringOrStar DOT identifierOrStringOrStar DOT identifierOrStringOrStar + ; + +createDataCacheRuleStatement + : CREATE DATACACHE RULE dataCacheTarget (WHERE expression)? PRIORITY '=' MINUS_SYMBOL? INTEGER_VALUE properties? + ; + +showDataCacheRulesStatement + : SHOW DATACACHE RULES + ; + +dropDataCacheRuleStatement + : DROP DATACACHE RULE INTEGER_VALUE + ; + +clearDataCacheRulesStatement + : CLEAR DATACACHE RULES + ; + +dataCacheSelectStatement + : CACHE SELECT selectItem (COMMA selectItem)* FROM qualifiedName (WHERE where = expression)? properties? + ; + +// ------------------------------------------- Export Statement -------------------------------------------------------- + +exportStatement + : EXPORT TABLE tableDesc columnAliases? TO string_ (WITH (SYNC | ASYNC) MODE)? properties? brokerDesc? + ; + +cancelExportStatement + : CANCEL EXPORT ((FROM | IN) catalog = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? + ; + +showExportStatement + : SHOW EXPORT ((FROM | IN) catalog = qualifiedName)? ( + (LIKE pattern = string_) + | (WHERE expression) + )? (ORDER BY sortItem (COMMA sortItem)*)? (limitElement)? + ; + +// ------------------------------------------- Plugin Statement -------------------------------------------------------- + +installPluginStatement + : INSTALL PLUGIN FROM identifierOrString properties? + ; + +uninstallPluginStatement + : UNINSTALL PLUGIN identifierOrString + ; + +// ------------------------------------------- File Statement ---------------------------------------------------------- + +createFileStatement + : CREATE FILE string_ ((FROM | IN) catalog = qualifiedName)? properties + ; + +dropFileStatement + : DROP FILE string_ ((FROM | IN) catalog = qualifiedName)? properties + ; + +showSmallFilesStatement + : SHOW FILE ((FROM | IN) catalog = qualifiedName)? + ; + +// -------------------------------------------- Pipe Statement --------------------------------------------------------- + +createPipeStatement + : CREATE orReplace PIPE ifNotExists qualifiedName properties? AS insertStatement + ; + +dropPipeStatement + : DROP PIPE (IF EXISTS)? qualifiedName + ; + +alterPipeClause + : SUSPEND + | RESUME + | RETRY ALL + | RETRY FILE fileName = string_ + | SET propertyList + ; + +alterPipeStatement + : ALTER PIPE qualifiedName alterPipeClause + ; + +descPipeStatement + : (DESC | DESCRIBE) PIPE qualifiedName + ; + +showPipeStatement + : SHOW PIPES ((LIKE pattern = string_) | (WHERE expression) | (FROM qualifiedName))? ( + ORDER BY sortItem (COMMA sortItem)* + )? limitElement? + ; + +// ------------------------------------------- Set Statement ----------------------------------------------------------- + +setStatement + : SET setVar (COMMA setVar)* + ; + +setVar + : (CHAR SET | CHARSET | CHARACTER SET) (identifierOrString | DEFAULT) # setNames + | NAMES (charset = identifierOrString | DEFAULT) ( + COLLATE (collate = identifierOrString | DEFAULT) + )? # setNames + | PASSWORD '=' (string_ | PASSWORD LEFT_PAREN string_ RIGHT_PAREN) # setPassword + | PASSWORD FOR user '=' (string_ | PASSWORD LEFT_PAREN string_ RIGHT_PAREN) # setPassword + | userVariable '=' expression # setUserVar + | varType? identifier '=' setExprOrDefault # setSystemVar + | systemVariable '=' setExprOrDefault # setSystemVar + | varType? TRANSACTION transaction_characteristics # setTransaction + ; + +transaction_characteristics + : transaction_access_mode + | isolation_level + | transaction_access_mode COMMA isolation_level + | isolation_level COMMA transaction_access_mode + ; + +transaction_access_mode + : READ ONLY + | READ WRITE + ; + +isolation_level + : ISOLATION LEVEL isolation_types + ; + +isolation_types + : READ UNCOMMITTED + | READ COMMITTED + | REPEATABLE READ + | SERIALIZABLE + ; + +setExprOrDefault + : DEFAULT + | ON + | ALL + | expression + ; + +setUserPropertyStatement + : SET PROPERTY (FOR string_)? userPropertyList + ; + +roleList + : identifierOrString (COMMA identifierOrString)* + ; + +executeScriptStatement + : ADMIN EXECUTE ON (FRONTEND | INTEGER_VALUE) string_ + ; + +unsupportedStatement + : START TRANSACTION (WITH CONSISTENT SNAPSHOT)? + | BEGIN WORK? + | COMMIT WORK? (AND NO? CHAIN)? (NO? RELEASE)? + | ROLLBACK WORK? (AND NO? CHAIN)? (NO? RELEASE)? + | LOCK TABLES lock_item (COMMA lock_item)* + | UNLOCK TABLES + ; + +lock_item + : identifier (AS? alias = identifier)? lock_type + ; + +lock_type + : READ LOCAL? + | LOW_PRIORITY? WRITE + ; + +// ------------------------------------------- Query Statement --------------------------------------------------------- + +queryStatement + : (explainDesc | optimizerTrace)? queryRelation outfile? + ; + +queryRelation + : withClause? queryNoWith + ; + +withClause + : WITH commonTableExpression (COMMA commonTableExpression)* + ; + +queryNoWith + : queryPrimary (ORDER BY sortItem (COMMA sortItem)*)? (limitElement)? + ; + +temporalClause + : AS OF expression + | FOR SYSTEM_TIME AS OF TIMESTAMP string_ + | FOR SYSTEM_TIME BETWEEN expression AND expression + | FOR SYSTEM_TIME FROM expression TO expression + | FOR SYSTEM_TIME ALL + | FOR VERSION AS OF expression + ; + +queryPrimary + : querySpecification # queryPrimaryDefault + | subquery # queryWithParentheses + | left = queryPrimary operator = INTERSECT setQuantifier? right = queryPrimary # setOperation + | left = queryPrimary operator = (UNION | EXCEPT | MINUS) setQuantifier? right = queryPrimary # setOperation + ; + +subquery + : LEFT_PAREN queryRelation RIGHT_PAREN + ; + +rowConstructor + : LEFT_PAREN expressionList RIGHT_PAREN + ; + +sortItem + : expression ordering = (ASC | DESC)? (NULLS nullOrdering = (FIRST | LAST))? + ; + +limitElement + : LIMIT limit = (INTEGER_VALUE | PARAMETER) (OFFSET offset = (INTEGER_VALUE | PARAMETER))? + | LIMIT offset = (INTEGER_VALUE | PARAMETER) COMMA limit = (INTEGER_VALUE | PARAMETER) + ; + +querySpecification + : SELECT setQuantifier? selectItem (COMMA selectItem)* fromClause ( + (WHERE where = expression)? (GROUP BY groupingElement)? (HAVING having = expression)? ( + QUALIFY qualifyFunction = selectItem comparisonOperator limit = INTEGER_VALUE + )? + ) + ; + +fromClause + : (FROM relations pivotClause?)? # from + | FROM DUAL # dual + ; + +groupingElement + : ROLLUP LEFT_PAREN (expressionList)? RIGHT_PAREN # rollup + | CUBE LEFT_PAREN (expressionList)? RIGHT_PAREN # cube + | GROUPING SETS LEFT_PAREN groupingSet (COMMA groupingSet)* RIGHT_PAREN # multipleGroupingSets + | expressionList # singleGroupingSet + ; + +groupingSet + : LEFT_PAREN expression? (COMMA expression)* RIGHT_PAREN + ; + +commonTableExpression + : name = identifier (columnAliases)? AS LEFT_PAREN queryRelation RIGHT_PAREN + ; + +setQuantifier + : DISTINCT + | ALL + ; + +selectItem + : expression (AS? (identifier | string_))? # selectSingle + | qualifiedName DOT ASTERISK_SYMBOL # selectAll + | ASTERISK_SYMBOL # selectAll + ; + +relations + : relation (COMMA LATERAL? relation)* + ; + +relation + : relationPrimary joinRelation* + | LEFT_PAREN relationPrimary joinRelation* RIGHT_PAREN + ; + +relationPrimary + : qualifiedName temporalClause? partitionNames? tabletList? replicaList? ( + AS? alias = identifier + )? bracketHint? # tableAtom + | LEFT_PAREN VALUES rowConstructor (COMMA rowConstructor)* RIGHT_PAREN ( + AS? alias = identifier columnAliases? + )? # inlineTable + | subquery (AS? alias = identifier columnAliases?)? # subqueryWithAlias + | qualifiedName LEFT_PAREN expressionList RIGHT_PAREN (AS? alias = identifier columnAliases?)? # tableFunction + | TABLE LEFT_PAREN qualifiedName LEFT_PAREN argumentList RIGHT_PAREN RIGHT_PAREN ( + AS? alias = identifier columnAliases? + )? # normalizedTableFunction + | FILES propertyList (AS? alias = identifier columnAliases?)? # fileTableFunction + | LEFT_PAREN relations RIGHT_PAREN # parenthesizedRelation + ; + +pivotClause + : PIVOT LEFT_PAREN pivotAggregationExpression (COMMA pivotAggregationExpression)* FOR ( + identifier + | identifierList + ) IN LEFT_PAREN pivotValue (COMMA pivotValue)* RIGHT_PAREN RIGHT_PAREN + ; + +pivotAggregationExpression + : functionCall (AS? (identifier | string_))? + ; + +pivotValue + : (literalExpression | literalExpressionList) (AS? (identifier | string_))? + ; + +argumentList + : expressionList + ; + +joinRelation + : crossOrInnerJoinType bracketHint? LATERAL? rightRelation = relationPrimary joinCriteria? + | outerAndSemiJoinType bracketHint? LATERAL? rightRelation = relationPrimary joinCriteria + ; + +crossOrInnerJoinType + : JOIN + | INNER JOIN + | CROSS + | CROSS JOIN + ; + +outerAndSemiJoinType + : LEFT JOIN + | RIGHT JOIN + | FULL JOIN + | LEFT OUTER JOIN + | RIGHT OUTER JOIN + | FULL OUTER JOIN + | LEFT SEMI JOIN + | RIGHT SEMI JOIN + | LEFT ANTI JOIN + | RIGHT ANTI JOIN + ; + +bracketHint + : LEFT_BRACKET identifier (COMMA identifier)* RIGHT_BRACKET + | LEFT_BRACKET identifier '|' primaryExpression literalExpressionList RIGHT_BRACKET + ; + +hintMap + : k = identifierOrString '=' v = literalExpression + ; + +joinCriteria + : ON expression + | USING LEFT_PAREN identifier (COMMA identifier)* RIGHT_PAREN + ; + +columnAliases + : LEFT_PAREN identifier (COMMA identifier)* RIGHT_PAREN + ; + +// partitionNames should not support string, it should be identifier here only for compatibility with historical bugs +partitionNames + : TEMPORARY? (PARTITION | PARTITIONS) LEFT_PAREN identifierOrString (COMMA identifierOrString)* RIGHT_PAREN + | TEMPORARY? (PARTITION | PARTITIONS) identifierOrString + | keyPartitions + ; + +keyPartitions + : PARTITION LEFT_PAREN keyPartition (COMMA keyPartition)* RIGHT_PAREN # keyPartitionList + ; + +tabletList + : TABLET LEFT_PAREN INTEGER_VALUE (COMMA INTEGER_VALUE)* RIGHT_PAREN + ; + +prepareStatement + : PREPARE identifier FROM prepareSql + ; + +prepareSql + : statement + | SINGLE_QUOTED_TEXT + ; + +executeStatement + : EXECUTE identifier (USING '@' identifierOrString (COMMA '@' identifierOrString)*)? + ; + +deallocateStatement + : (DEALLOCATE | DROP) PREPARE identifier + ; + +replicaList + : REPLICA LEFT_PAREN INTEGER_VALUE (COMMA INTEGER_VALUE)* RIGHT_PAREN + ; + +// ------------------------------------------- Expression -------------------------------------------------------------- + +/** + * Operator precedences are shown in the following list, from highest precedence to the lowest. + * + * ! + * - (unary minus), ~ (unary bit inversion) + * ^ + * *, /, DIV, %, MOD + * -, + + * & + * | + * = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP + * BETWEEN, CASE WHEN + * NOT + * AND, && + * XOR + * OR, || + * = (assignment) + */ + +expressionsWithDefault + : LEFT_PAREN expressionOrDefault (COMMA expressionOrDefault)* RIGHT_PAREN + ; + +expressionOrDefault + : expression + | DEFAULT + ; + +mapExpressionList + : mapExpression (COMMA mapExpression)* + ; + +mapExpression + : key = expression COLON value = expression + ; + +expressionSingleton + : expression EOF + ; + +expression + : (BINARY)? booleanExpression # expressionDefault + | NOT expression # logicalNot + | left = expression operator = (AND | LOGICAL_AND) right = expression # logicalBinary + | left = expression operator = (OR | LOGICAL_OR) right = expression # logicalBinary + ; + +expressionList + : expression (COMMA expression)* + ; + +booleanExpression + : predicate # booleanExpressionDefault + | booleanExpression IS NOT? NULL_ # isNull + | left = booleanExpression comparisonOperator right = predicate # comparison + | booleanExpression comparisonOperator LEFT_PAREN queryRelation RIGHT_PAREN # scalarSubquery + ; + +predicate + : valueExpression (predicateOperations[$valueExpression.ctx])? + | tupleInSubquery + ; + +tupleInSubquery + : LEFT_PAREN expression (COMMA expression)+ RIGHT_PAREN NOT? IN LEFT_PAREN queryRelation RIGHT_PAREN + ; + +predicateOperations[ParserRuleContext value] + : NOT? IN LEFT_PAREN queryRelation RIGHT_PAREN # inSubquery + | NOT? IN LEFT_PAREN expressionList RIGHT_PAREN # inList + | NOT? BETWEEN lower = valueExpression AND upper = predicate # between + | NOT? (LIKE | RLIKE | REGEXP) pattern = valueExpression # like + ; + +valueExpression + : primaryExpression # valueExpressionDefault + | left = valueExpression operator = BITXOR right = valueExpression # arithmeticBinary + | left = valueExpression operator = ( + ASTERISK_SYMBOL + | SLASH_SYMBOL + | PERCENT_SYMBOL + | INT_DIV + | MOD + ) right = valueExpression # arithmeticBinary + | left = valueExpression operator = (PLUS_SYMBOL | MINUS_SYMBOL) right = valueExpression # arithmeticBinary + | left = valueExpression operator = BITAND right = valueExpression # arithmeticBinary + | left = valueExpression operator = BITOR right = valueExpression # arithmeticBinary + | left = valueExpression operator = BIT_SHIFT_LEFT right = valueExpression # arithmeticBinary + | left = valueExpression operator = BIT_SHIFT_RIGHT right = valueExpression # arithmeticBinary + | left = valueExpression operator = BIT_SHIFT_RIGHT_LOGICAL right = valueExpression # arithmeticBinary + ; + +primaryExpression + : userVariable # userVariableExpression + | systemVariable # systemVariableExpression + | DICTIONARY_GET LEFT_PAREN expressionList RIGHT_PAREN # dictionaryGetExpr + | functionCall # functionCallExpression + | LEFT_BRACE FN functionCall RIGHT_BRACE # odbcFunctionCallExpression + | primaryExpression COLLATE (identifier | string_) # collate + | literalExpression # literal + | columnReference # columnRef + | base = primaryExpression (DOT_IDENTIFIER | DOT fieldName = identifier) # dereference + | left = primaryExpression CONCAT right = primaryExpression # concat + | operator = (MINUS_SYMBOL | PLUS_SYMBOL | BITNOT) primaryExpression # arithmeticUnary + | operator = LOGICAL_NOT primaryExpression # arithmeticUnary + | LEFT_PAREN expression RIGHT_PAREN # parenthesizedExpression + | EXISTS LEFT_PAREN queryRelation RIGHT_PAREN # exists + | subquery # subqueryExpression + | CAST LEFT_PAREN expression AS type RIGHT_PAREN # cast + | CONVERT LEFT_PAREN expression COMMA type RIGHT_PAREN # convert + | CASE caseExpr = expression whenClause+ (ELSE elseExpression = expression)? END # simpleCase + | CASE whenClause+ (ELSE elseExpression = expression)? END # searchedCase + | arrayType? LEFT_BRACKET (expressionList)? RIGHT_BRACKET # arrayConstructor + | mapType LEFT_BRACE (mapExpressionList)? RIGHT_BRACE # mapConstructor + | MAP LEFT_BRACE (mapExpressionList)? RIGHT_BRACE # mapConstructor + | value = primaryExpression LEFT_BRACKET index = valueExpression RIGHT_BRACKET # collectionSubscript + | primaryExpression LEFT_BRACKET start = INTEGER_VALUE? COLON end = INTEGER_VALUE? RIGHT_BRACKET # arraySlice + | primaryExpression ARROW string_ # arrowExpression + | (identifier | identifierList) '->' expression # lambdaFunctionExpr + | identifierList '->' LEFT_PAREN (expressionList)? RIGHT_PAREN # lambdaFunctionExpr + | left = primaryExpression NOT? MATCH right = primaryExpression # matchExpr + ; + +literalExpression + : NULL_ # nullLiteral + | booleanValue # booleanLiteral + | number # numericLiteral + | (DATE | DATETIME) string_ # dateLiteral + | string_ # stringLiteral + | interval # intervalLiteral + | unitBoundary # unitBoundaryLiteral + | binary # binaryLiteral + | PARAMETER # Parameter + ; + +functionCall + : EXTRACT LEFT_PAREN identifier FROM valueExpression RIGHT_PAREN # extract + | GROUPING LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN # groupingOperation + | GROUPING_ID LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN # groupingOperation + | informationFunctionExpression # informationFunction + | specialDateTimeExpression # specialDateTime + | specialFunctionExpression # specialFunction + | aggregationFunction over? # aggregationFunctionCall + | windowFunction over # windowFunctionCall + | qualifiedName LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN over? # simpleFunctionCall + ; + +aggregationFunction + : AVG LEFT_PAREN setQuantifier? expression RIGHT_PAREN + | COUNT LEFT_PAREN ASTERISK_SYMBOL? RIGHT_PAREN + | COUNT LEFT_PAREN (setQuantifier bracketHint?)? (expression (COMMA expression)*)? RIGHT_PAREN + | MAX LEFT_PAREN setQuantifier? expression RIGHT_PAREN + | MIN LEFT_PAREN setQuantifier? expression RIGHT_PAREN + | SUM LEFT_PAREN setQuantifier? expression RIGHT_PAREN + | ARRAY_AGG LEFT_PAREN setQuantifier? expression (ORDER BY sortItem (COMMA sortItem)*)? RIGHT_PAREN + | ARRAY_AGG_DISTINCT LEFT_PAREN expression (ORDER BY sortItem (COMMA sortItem)*)? RIGHT_PAREN + | GROUP_CONCAT LEFT_PAREN setQuantifier? expression (COMMA expression)* ( + ORDER BY sortItem (COMMA sortItem)* + )? (SEPARATOR expression)? RIGHT_PAREN + ; + +userVariable + : AT identifierOrString + ; + +systemVariable + : AT AT (varType DOT)? identifier + ; + +columnReference + : identifier + ; + +informationFunctionExpression + : name = CATALOG LEFT_PAREN RIGHT_PAREN + | name = DATABASE LEFT_PAREN RIGHT_PAREN + | name = SCHEMA LEFT_PAREN RIGHT_PAREN + | name = USER LEFT_PAREN RIGHT_PAREN + | name = CURRENT_USER (LEFT_PAREN RIGHT_PAREN)? + | name = CURRENT_ROLE (LEFT_PAREN RIGHT_PAREN)? + ; + +specialDateTimeExpression + : name = CURRENT_DATE (LEFT_PAREN RIGHT_PAREN)? + | name = CURRENT_TIME (LEFT_PAREN RIGHT_PAREN)? + | name = CURRENT_TIMESTAMP (LEFT_PAREN RIGHT_PAREN)? + | name = LOCALTIME (LEFT_PAREN RIGHT_PAREN)? + | name = LOCALTIMESTAMP (LEFT_PAREN RIGHT_PAREN)? + ; + +specialFunctionExpression + : CHAR LEFT_PAREN expression RIGHT_PAREN + | DAY LEFT_PAREN expression RIGHT_PAREN + | HOUR LEFT_PAREN expression RIGHT_PAREN + | IF LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN + | LEFT LEFT_PAREN expression COMMA expression RIGHT_PAREN + | LIKE LEFT_PAREN expression COMMA expression RIGHT_PAREN + | MINUTE LEFT_PAREN expression RIGHT_PAREN + | MOD LEFT_PAREN expression COMMA expression RIGHT_PAREN + | MONTH LEFT_PAREN expression RIGHT_PAREN + | QUARTER LEFT_PAREN expression RIGHT_PAREN + | REGEXP LEFT_PAREN expression COMMA expression RIGHT_PAREN + | REPLACE LEFT_PAREN (expression (COMMA expression)*)? RIGHT_PAREN + | RIGHT LEFT_PAREN expression COMMA expression RIGHT_PAREN + | RLIKE LEFT_PAREN expression COMMA expression RIGHT_PAREN + | SECOND LEFT_PAREN expression RIGHT_PAREN + | TIMESTAMPADD LEFT_PAREN unitIdentifier COMMA expression COMMA expression RIGHT_PAREN + | TIMESTAMPDIFF LEFT_PAREN unitIdentifier COMMA expression COMMA expression RIGHT_PAREN + //| WEEK LEFT_PAREN expression RIGHT_PAREN TODO: Support week(expr) function + | YEAR LEFT_PAREN expression RIGHT_PAREN + | PASSWORD LEFT_PAREN string_ RIGHT_PAREN + | FLOOR LEFT_PAREN expression RIGHT_PAREN + | CEIL LEFT_PAREN expression RIGHT_PAREN + ; + +windowFunction + : name = ROW_NUMBER LEFT_PAREN RIGHT_PAREN + | name = RANK LEFT_PAREN RIGHT_PAREN + | name = DENSE_RANK LEFT_PAREN RIGHT_PAREN + | name = CUME_DIST LEFT_PAREN RIGHT_PAREN + | name = PERCENT_RANK LEFT_PAREN RIGHT_PAREN + | name = NTILE LEFT_PAREN expression? RIGHT_PAREN + | name = LEAD LEFT_PAREN (expression ignoreNulls? (COMMA expression)*)? RIGHT_PAREN ignoreNulls? + | name = LAG LEFT_PAREN (expression ignoreNulls? (COMMA expression)*)? RIGHT_PAREN ignoreNulls? + | name = FIRST_VALUE LEFT_PAREN (expression ignoreNulls? (COMMA expression)*)? RIGHT_PAREN ignoreNulls? + | name = LAST_VALUE LEFT_PAREN (expression ignoreNulls? (COMMA expression)*)? RIGHT_PAREN ignoreNulls? + ; + +whenClause + : WHEN condition = expression THEN result = expression + ; + +over + : OVER LEFT_PAREN ( + bracketHint? PARTITION BY partition += expression (COMMA partition += expression)* + )? (ORDER BY sortItem (COMMA sortItem)*)? windowFrame? RIGHT_PAREN + ; + +ignoreNulls + : IGNORE NULLS + ; + +windowFrame + : frameType = RANGE start = frameBound + | frameType = ROWS start = frameBound + | frameType = RANGE BETWEEN start = frameBound AND end = frameBound + | frameType = ROWS BETWEEN start = frameBound AND end = frameBound + ; + +frameBound + : UNBOUNDED boundType = PRECEDING # unboundedFrame + | UNBOUNDED boundType = FOLLOWING # unboundedFrame + | CURRENT ROW # currentRowBound + | expression boundType = (PRECEDING | FOLLOWING) # boundedFrame + ; + +// ------------------------------------------- COMMON AST -------------------------------------------------------------- + +tableDesc + : qualifiedName partitionNames? + ; + +restoreTableDesc + : qualifiedName partitionNames? (AS identifier)? + ; + +explainDesc + : (DESC | DESCRIBE | EXPLAIN) (LOGICAL | ANALYZE | VERBOSE | COSTS | SCHEDULER)? + ; + +optimizerTrace + : TRACE (ALL | LOGS | TIMES | VALUES | REASON) identifier? + ; + +partitionDesc + : PARTITION BY RANGE identifierList LEFT_PAREN (rangePartitionDesc (COMMA rangePartitionDesc)*)? RIGHT_PAREN + | PARTITION BY RANGE primaryExpression LEFT_PAREN ( + rangePartitionDesc (COMMA rangePartitionDesc)* + )? RIGHT_PAREN + | PARTITION BY LIST? identifierList LEFT_PAREN (listPartitionDesc (COMMA listPartitionDesc)*)? RIGHT_PAREN + | PARTITION BY LIST? identifierList + | PARTITION BY functionCall LEFT_PAREN (rangePartitionDesc (COMMA rangePartitionDesc)*)? RIGHT_PAREN + | PARTITION BY functionCall + ; + +listPartitionDesc + : singleItemListPartitionDesc + | multiItemListPartitionDesc + ; + +singleItemListPartitionDesc + : PARTITION (IF NOT EXISTS)? identifier VALUES IN listPartitionValueList propertyList? + ; + +multiItemListPartitionDesc + : PARTITION (IF NOT EXISTS)? identifier VALUES IN LEFT_PAREN listPartitionValueList ( + COMMA listPartitionValueList + )* RIGHT_PAREN propertyList? + ; + +listPartitionValueList + : LEFT_PAREN listPartitionValue (COMMA listPartitionValue)* RIGHT_PAREN + ; + +listPartitionValue + : NULL_ + | string_ + ; + +stringList + : LEFT_PAREN string_ (COMMA string_)* RIGHT_PAREN + ; + +literalExpressionList + : LEFT_PAREN literalExpression (COMMA literalExpression)* RIGHT_PAREN + ; + +rangePartitionDesc + : singleRangePartition + | multiRangePartition + ; + +singleRangePartition + : PARTITION (IF NOT EXISTS)? identifier VALUES partitionKeyDesc propertyList? + ; + +multiRangePartition + : START LEFT_PAREN string_ RIGHT_PAREN END LEFT_PAREN string_ RIGHT_PAREN EVERY LEFT_PAREN interval RIGHT_PAREN + | START LEFT_PAREN string_ RIGHT_PAREN END LEFT_PAREN string_ RIGHT_PAREN EVERY LEFT_PAREN INTEGER_VALUE RIGHT_PAREN + ; + +partitionRangeDesc + : START LEFT_PAREN string_ RIGHT_PAREN END LEFT_PAREN string_ RIGHT_PAREN + ; + +partitionKeyDesc + : LESS THAN (MAXVALUE | partitionValueList) + | LEFT_BRACKET partitionValueList COMMA partitionValueList RIGHT_PAREN + ; + +partitionValueList + : LEFT_PAREN partitionValue (COMMA partitionValue)* RIGHT_PAREN + ; + +keyPartition + : partitionColName = identifier '=' partitionColValue = literalExpression + ; + +partitionValue + : MAXVALUE + | string_ + ; + +distributionClause + : DISTRIBUTED BY HASH identifierList (BUCKETS INTEGER_VALUE)? + | DISTRIBUTED BY HASH identifierList + ; + +distributionDesc + : DISTRIBUTED BY HASH identifierList (BUCKETS INTEGER_VALUE)? + | DISTRIBUTED BY HASH identifierList + | DISTRIBUTED BY RANDOM (BUCKETS INTEGER_VALUE)? + ; + +refreshSchemeDesc + : REFRESH (IMMEDIATE | DEFERRED)? ( + ASYNC + | ASYNC (START LEFT_PAREN string_ RIGHT_PAREN)? EVERY LEFT_PAREN interval RIGHT_PAREN + | INCREMENTAL + | MANUAL + ) + ; + +statusDesc + : ACTIVE + | INACTIVE + ; + +properties + : PROPERTIES LEFT_PAREN property (COMMA property)* RIGHT_PAREN + ; + +extProperties + : BROKER properties + ; + +propertyList + : LEFT_PAREN property (COMMA property)* RIGHT_PAREN + ; + +userPropertyList + : property (COMMA property)* + ; + +property + : key = string_ '=' value = string_ + ; + +varType + : GLOBAL + | LOCAL + | SESSION + | VERBOSE + ; + +comment + : COMMENT string_ + ; + +outfile + : INTO OUTFILE file = string_ fileFormat? properties? + ; + +fileFormat + : FORMAT AS (identifier | string_) + ; + +string_ + : SINGLE_QUOTED_TEXT + | DOUBLE_QUOTED_TEXT + ; + +binary + : BINARY_SINGLE_QUOTED_TEXT + | BINARY_DOUBLE_QUOTED_TEXT + ; + +comparisonOperator + : EQ + | NEQ + | LT + | LTE + | GT + | GTE + | EQ_FOR_NULL + ; + +booleanValue + : TRUE + | FALSE + ; + +interval + : INTERVAL value = expression from = unitIdentifier + ; + +taskInterval + : INTERVAL value = expression from = taskUnitIdentifier + ; + +taskUnitIdentifier + : DAY + | HOUR + | MINUTE + | SECOND + ; + +unitIdentifier + : YEAR + | MONTH + | WEEK + | DAY + | HOUR + | MINUTE + | SECOND + | QUARTER + | MILLISECOND + | MICROSECOND + ; + +unitBoundary + : FLOOR + | CEIL + ; + +type + : baseType + | decimalType + | arrayType + | structType + | mapType + ; + +arrayType + : ARRAY '<' type '>' + ; + +mapType + : MAP '<' type COMMA type '>' + ; + +subfieldDesc + : (identifier | nestedFieldName) type + ; + +subfieldDescs + : subfieldDesc (COMMA subfieldDesc)* + ; + +structType + : STRUCT '<' subfieldDescs '>' + ; + +typeParameter + : LEFT_PAREN INTEGER_VALUE RIGHT_PAREN + ; + +baseType + : BOOLEAN + | TINYINT typeParameter? + | SMALLINT typeParameter? + | SIGNED INT? + | SIGNED INTEGER? + | UNSIGNED INT? + | UNSIGNED INTEGER? + | INT typeParameter? + | INTEGER typeParameter? + | BIGINT typeParameter? + | LARGEINT typeParameter? + | FLOAT + | DOUBLE + | DATE + | DATETIME + | TIME + | CHAR typeParameter? + | VARCHAR typeParameter? + | STRING + | TEXT + | BITMAP + | HLL + | PERCENTILE + | JSON + | VARBINARY typeParameter? + | BINARY typeParameter? + ; + +decimalType + : (DECIMAL | DECIMALV2 | DECIMAL32 | DECIMAL64 | DECIMAL128 | NUMERIC | NUMBER) ( + LEFT_PAREN precision = INTEGER_VALUE (COMMA scale = INTEGER_VALUE)? RIGHT_PAREN + )? + ; + +qualifiedName + : identifier (DOT_IDENTIFIER | DOT identifier)* + ; + +identifier + : LETTER_IDENTIFIER # unquotedIdentifier + | nonReserved # unquotedIdentifier + | DIGIT_IDENTIFIER # digitIdentifier + | BACKQUOTED_IDENTIFIER # backQuotedIdentifier + ; + +identifierList + : LEFT_PAREN identifier (COMMA identifier)* RIGHT_PAREN + ; + +identifierOrString + : identifier + | string_ + ; + +identifierOrStringList + : identifierOrString (COMMA identifierOrString)* + ; + +identifierOrStringOrStar + : ASTERISK_SYMBOL + | identifier + | string_ + ; + +user + : identifierOrString # userWithoutHost + | identifierOrString '@' identifierOrString # userWithHost + | identifierOrString '@' LEFT_BRACKET identifierOrString RIGHT_BRACKET # userWithHostAndBlanket + ; + +assignment + : identifier EQ expressionOrDefault + ; + +assignmentList + : assignment (COMMA assignment)* + ; + +number + : DECIMAL_VALUE # decimalValue + | DOUBLE_VALUE # doubleValue + | INTEGER_VALUE # integerValue + ; + +nonReserved + : ACCESS + | ACTIVE + | AFTER + | AGGREGATE + | APPLY + | ASYNC + | AUTHORS + | AVG + | ADMIN + | ANTI + | AUTHENTICATION + | AUTO_INCREMENT + | ARRAY_AGG + | ARRAY_AGG_DISTINCT + | BACKEND + | BACKENDS + | BACKUP + | BEGIN + | BITMAP_UNION + | BLACKLIST + | BLACKHOLE + | BINARY + | BODY + | BOOLEAN + | BROKER + | BUCKETS + | BUILTIN + | BASE + | CACHE + | CAST + | CANCEL + | CATALOG + | CATALOGS + | CEIL + | CHAIN + | CHARSET + | CLEAN + | CLEAR + | CLUSTER + | CLUSTERS + | CURRENT + | COLLATION + | COLUMNS + | CUME_DIST + | CUMULATIVE + | COMMENT + | COMMIT + | COMMITTED + | COMPUTE + | CONNECTION + | CONSISTENT + | COSTS + | COUNT + | CONFIG + | COMPACT + | DATA + | DATE + | DATACACHE + | DATETIME + | DAY + | DECOMMISSION + | DISABLE + | DISK + | DISTRIBUTION + | DUPLICATE + | DYNAMIC + | DISTRIBUTED + | DICTIONARY + | DICTIONARY_GET + | DEALLOCATE + | ENABLE + | END + | ENGINE + | ENGINES + | ERRORS + | EVENTS + | EXECUTE + | EXTERNAL + | EXTRACT + | EVERY + | ENCLOSE + | ESCAPE + | EXPORT + | FAILPOINT + | FAILPOINTS + | FIELDS + | FILE + | FILTER + | FIRST + | FLOOR + | FOLLOWING + | FORMAT + | FN + | FRONTEND + | FRONTENDS + | FOLLOWER + | FREE + | FUNCTIONS + | GLOBAL + | GRANTS + | GROUP_CONCAT + | HASH + | HISTOGRAM + | HELP + | HLL_UNION + | HOST + | HOUR + | HUB + | IDENTIFIED + | IMAGE + | IMPERSONATE + | INACTIVE + | INCREMENTAL + | INDEXES + | INSTALL + | INTEGRATION + | INTEGRATIONS + | INTERMEDIATE + | INTERVAL + | ISOLATION + | JOB + | LABEL + | LAST + | LESS + | LEVEL + | LIST + | LOCAL + | LOCATION + | LOGS + | LOGICAL + | LOW_PRIORITY + | LOCK + | LOCATIONS + | MANUAL + | MAP + | MAPPING + | MAPPINGS + | MASKING + | MATCH + | MAPPINGS + | MATERIALIZED + | MAX + | META + | MIN + | MINUTE + | MODE + | MODIFY + | MONTH + | MERGE + | MINUS + | NAME + | NAMES + | NEGATIVE + | NO + | NODE + | NODES + | NONE + | NULLS + | NUMBER + | NUMERIC + | OBSERVER + | OF + | OFFSET + | ONLY + | OPTIMIZER + | OPEN + | OPERATE + | OPTION + | OVERWRITE + | PARTITIONS + | PASSWORD + | PATH + | PAUSE + | PENDING + | PERCENTILE_UNION + | PIVOT + | PLUGIN + | PLUGINS + | POLICY + | POLICIES + | PERCENT_RANK + | PRECEDING + | PRIORITY + | PROC + | PROCESSLIST + | PROFILE + | PROFILELIST + | PRIVILEGES + | PROBABILITY + | PROPERTIES + | PROPERTY + | PIPE + | PIPES + | QUARTER + | QUERY + | QUERIES + | QUEUE + | QUOTA + | QUALIFY + | REASON + | REMOVE + | REWRITE + | RANDOM + | RANK + | RECOVER + | REFRESH + | REPAIR + | REPEATABLE + | REPLACE_IF_NOT_NULL + | REPLICA + | REPOSITORY + | REPOSITORIES + | RESOURCE + | RESOURCES + | RESTORE + | RESUME + | RETURNS + | RETRY + | REVERT + | ROLE + | ROLES + | ROLLUP + | ROLLBACK + | ROUTINE + | ROW + | RUNNING + | RULE + | RULES + | SAMPLE + | SCHEDULE + | SCHEDULER + | SECOND + | SECURITY + | SEPARATOR + | SERIALIZABLE + | SEMI + | SESSION + | SETS + | SIGNED + | SNAPSHOT + | SQLBLACKLIST + | START + | STREAM + | SUM + | STATUS + | STOP + | SKIP_HEADER + | SWAP + | STORAGE + | STRING + | STRUCT + | STATS + | SUBMIT + | SUSPEND + | SYNC + | SYSTEM_TIME + | TABLES + | TABLET + | TABLETS + | TASK + | TEMPORARY + | TIMESTAMP + | TIMESTAMPADD + | TIMESTAMPDIFF + | THAN + | TIME + | TIMES + | TRANSACTION + | TRACE + | TRIM_SPACE + | TRIGGERS + | TRUNCATE + | TYPE + | TYPES + | UNBOUNDED + | UNCOMMITTED + | UNSET + | UNINSTALL + | USAGE + | USER + | USERS + | UNLOCK + | VALUE + | VARBINARY + | VARIABLES + | VIEW + | VIEWS + | VERBOSE + | VERSION + | VOLUME + | VOLUMES + | WARNINGS + | WEEK + | WHITELIST + | WORK + | WRITE + | WAREHOUSE + | WAREHOUSES + | YEAR + | DOTDOTDOT + | NGRAMBF + | FIELD + | ARRAY_ELEMENT + ; \ No newline at end of file diff --git a/sql/starrocks/desc.xml b/sql/starrocks/desc.xml new file mode 100644 index 0000000000..6ddee00578 --- /dev/null +++ b/sql/starrocks/desc.xml @@ -0,0 +1,14 @@ + + + + + ^4.10 + + + sqlStatements + + + Java + \ No newline at end of file diff --git a/sql/starrocks/examples/alter_load_test.sql b/sql/starrocks/examples/alter_load_test.sql new file mode 100644 index 0000000000..9ed409b1f4 --- /dev/null +++ b/sql/starrocks/examples/alter_load_test.sql @@ -0,0 +1,5 @@ +ALTER LOAD FOR test_db.label1 +PROPERTIES +( + 'priority'='HIGHEST' +); \ No newline at end of file diff --git a/sql/starrocks/examples/select_test.sql b/sql/starrocks/examples/select_test.sql new file mode 100644 index 0000000000..c0abe0c26d --- /dev/null +++ b/sql/starrocks/examples/select_test.sql @@ -0,0 +1,2 @@ +with t1 as (select 1),t2 as (select 2) +select * from t1 union all select * from t2; \ No newline at end of file diff --git a/sql/starrocks/examples/truncate_test.sql b/sql/starrocks/examples/truncate_test.sql new file mode 100644 index 0000000000..7ec71a932f --- /dev/null +++ b/sql/starrocks/examples/truncate_test.sql @@ -0,0 +1 @@ +TRUNCATE TABLE example_db.tbl; \ No newline at end of file diff --git a/sql/starrocks/pom.xml b/sql/starrocks/pom.xml new file mode 100644 index 0000000000..0a0f41a7cc --- /dev/null +++ b/sql/starrocks/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + starrocks + jar + StarRocks grammar + + org.antlr.grammars + sqlparent + 1.0-SNAPSHOT + + + + + + org.antlr + antlr4-maven-plugin + ${antlr.version} + + ${basedir} + + + StarRocksLexer.g4 + StarRocksParser.g4 + + true + true + + + + + antlr4 + + + + + + com.khubla.antlr + antlr4test-maven-plugin + ${antlr4test-maven-plugin.version} + + true + true + sqlStatements + StarRocks + + examples + + + + + test + + + + + + + + \ No newline at end of file