Feat/flink grammar (#73)
* feat: complete flink sql insert statement * feat: complete flink sql drop statement * feat: complete flink sql alert statement * feat: complete flink sql create statement, remove console log * feat: complete flink sql describe, show, explain, use statement * feat(flinksql): add statement, such as set, load * fix(flinksql): fix insert, add temporary table
This commit is contained in:
@ -51,6 +51,7 @@ CASE: 'CASE';
|
||||
WHEN: 'WHEN';
|
||||
THEN: 'THEN';
|
||||
ELSE: 'ELSE';
|
||||
BEGIN: 'BEGIN';
|
||||
END: 'END';
|
||||
JOIN: 'JOIN';
|
||||
CROSS: 'CROSS';
|
||||
@ -60,6 +61,7 @@ LEFT: 'LEFT';
|
||||
SEMI: 'SEMI';
|
||||
RIGHT: 'RIGHT';
|
||||
FULL: 'FULL';
|
||||
USER: 'USER';
|
||||
NATURAL: 'NATURAL';
|
||||
ON: 'ON';
|
||||
PIVOT: 'PIVOT';
|
||||
@ -83,11 +85,18 @@ TABLE: 'TABLE';
|
||||
DIRECTORY: 'DIRECTORY';
|
||||
VIEW: 'VIEW';
|
||||
REPLACE: 'REPLACE';
|
||||
EXECUTE: 'EXECUTE';
|
||||
STATEMENT: 'STATEMENT';
|
||||
INSERT: 'INSERT';
|
||||
DELETE: 'DELETE';
|
||||
REMOVE: 'REMOVE';
|
||||
INTO: 'INTO';
|
||||
DESCRIBE: 'DESCRIBE';
|
||||
EXPLAIN: 'EXPLAIN';
|
||||
PLAN: 'PLAN';
|
||||
CHANGELOG_MODE: 'CHANGELOG_MODE';
|
||||
JSON_EXECUTION_PLAN: 'JSON_EXECUTION_PLAN';
|
||||
ESTIMATED_COST: 'ESTIMATED_COST';
|
||||
FORMAT: 'FORMAT';
|
||||
LOGICAL: 'LOGICAL';
|
||||
CODEGEN: 'CODEGEN';
|
||||
@ -98,6 +107,8 @@ TABLES: 'TABLES';
|
||||
COLUMNS: 'COLUMNS';
|
||||
COLUMN: 'COLUMN';
|
||||
USE: 'USE';
|
||||
MODULE: 'MODULE';
|
||||
MODULES: 'MODULES';
|
||||
PARTITIONS: 'PARTITIONS';
|
||||
FUNCTIONS: 'FUNCTIONS';
|
||||
DROP: 'DROP';
|
||||
@ -209,6 +220,7 @@ RECOVER: 'RECOVER';
|
||||
EXPORT: 'EXPORT';
|
||||
IMPORT: 'IMPORT';
|
||||
LOAD: 'LOAD';
|
||||
UNLOAD: 'UNLOAD';
|
||||
ROLE: 'ROLE';
|
||||
ROLES: 'ROLES';
|
||||
COMPACTIONS: 'COMPACTIONS';
|
||||
@ -236,8 +248,13 @@ GENERATED: 'GENERATED';
|
||||
WATERMARKS: 'WATERMARKS';
|
||||
CATALOG: 'CATALOG';
|
||||
LANGUAGE: 'LANGUAGE';
|
||||
JAVA: 'JAVA';
|
||||
SCALA: 'SCALA';
|
||||
PYTHON: 'PYTHON';
|
||||
JAR: 'JAR';
|
||||
CATALOGS: 'CATALOGS';
|
||||
VIEWS: 'VIEWS';
|
||||
JARS: 'JARS';
|
||||
PRIMARY: 'PRIMARY';
|
||||
KEY: 'KEY';
|
||||
PERIOD: 'PERIOD';
|
||||
@ -329,6 +346,7 @@ BIT_STRING: BIT_STRING_L;
|
||||
ID_LITERAL: ID_LITERAL_FRAG;
|
||||
PLUS_ID_LITERAL: PLUS_ID_LITERAL_FRAG;
|
||||
|
||||
fragment JAR_FILE_PARTTARN: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`';
|
||||
fragment EXPONENT_NUM_PART: 'E' [-+]? DEC_DIGIT+;
|
||||
fragment ID_LITERAL_FRAG: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*;
|
||||
fragment PLUS_ID_LITERAL_FRAG: [A-Z_0-9a-z*@#^$%&{}]*?[A-Z_a-z*@#^$%&{}]+?[A-Z_0-9a-z*@#^$%&{}]*;
|
||||
|
@ -14,6 +14,7 @@ sqlStatements
|
||||
|
||||
sqlStatement
|
||||
: ddlStatement | dmlStatement | describeStatement | explainStatement | useStatement | showStatememt
|
||||
| loadStatement | unloadStatememt | setStatememt | resetStatememt | jarStatememt
|
||||
;
|
||||
|
||||
emptyStatement
|
||||
@ -22,35 +23,77 @@ emptyStatement
|
||||
|
||||
ddlStatement
|
||||
: createTable | createDatabase | createView | createFunction | createCatalog
|
||||
| alterTable | alterDatabase | alterFunction
|
||||
| dropTable | dropDatabase | dropView | dropFunction
|
||||
| alterTable | alertView | alterDatabase | alterFunction
|
||||
| dropCatalog | dropTable | dropDatabase | dropView | dropFunction
|
||||
;
|
||||
|
||||
dmlStatement
|
||||
: queryStatement | insertStatement
|
||||
;
|
||||
|
||||
// some statemen
|
||||
describeStatement
|
||||
: DESCRIBE uid
|
||||
: (DESCRIBE | DESC) uid
|
||||
;
|
||||
|
||||
explainStatement
|
||||
: EXPLAIN identifier FOR dmlStatement
|
||||
: EXPLAIN (explainDetails | PLAN FOR)? (dmlStatement | insertSimpleStatement | insertMulStatement)
|
||||
;
|
||||
|
||||
explainDetails
|
||||
: explainDetail (COMMA explainDetail)*
|
||||
;
|
||||
|
||||
explainDetail
|
||||
: CHANGELOG_MODE | JSON_EXECUTION_PLAN | ESTIMATED_COST
|
||||
;
|
||||
|
||||
useStatement
|
||||
: USE CATALOG? uid
|
||||
: USE CATALOG? uid | useModuleStatement
|
||||
;
|
||||
|
||||
useModuleStatement
|
||||
: USE MODULES uid (COMMA uid)*
|
||||
;
|
||||
|
||||
showStatememt
|
||||
: SHOW (CATALOGS | DATABASES | TABLES | FUNCTIONS | VIEWS)
|
||||
: SHOW (CATALOGS | DATABASES | VIEWS | JARS)
|
||||
| SHOW CURRENT (CATALOG | DATABASE)
|
||||
| SHOW TABLES (( FROM | IN ) uid)? likePredicate?
|
||||
| SHOW COLUMNS ( FROM | IN ) uid likePredicate?
|
||||
| SHOW CREATE (TABLE | VIEW) uid
|
||||
| SHOW USER? FUNCTIONS
|
||||
| SHOW FULL? MODULES
|
||||
;
|
||||
|
||||
loadStatement
|
||||
: LOAD MODULE uid (WITH tablePropertyList)?
|
||||
;
|
||||
|
||||
unloadStatememt
|
||||
: UNLOAD MODULE uid
|
||||
;
|
||||
|
||||
setStatememt
|
||||
: SET (tableProperty)?
|
||||
;
|
||||
|
||||
resetStatememt
|
||||
: RESET tablePropertyKey?
|
||||
;
|
||||
|
||||
jarStatememt
|
||||
: (ADD | REMOVE) JAR jarFileName
|
||||
;
|
||||
|
||||
// Create statements
|
||||
|
||||
createTable
|
||||
: CREATE TABLE ifNotExists? sourceTable
|
||||
: (simpleCreateTable | createTableAsSelect)
|
||||
;
|
||||
|
||||
simpleCreateTable
|
||||
: CREATE TEMPORARY? TABLE ifNotExists? sourceTable
|
||||
LR_BRACKET
|
||||
columnOptionDefinition (COMMA columnOptionDefinition)*
|
||||
(COMMA watermarkDefinition)?
|
||||
@ -63,6 +106,14 @@ createTable
|
||||
likeDefinition?
|
||||
;
|
||||
|
||||
/*
|
||||
* 详见 https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/dev/table/sql/create/#as-select_statement
|
||||
* CTAS 不支持指定显示指定列,不支持创建分区表,临时表
|
||||
*/
|
||||
createTableAsSelect
|
||||
: CREATE TABLE ifNotExists? sourceTable withOption (AS queryStatement)?
|
||||
;
|
||||
|
||||
columnOptionDefinition
|
||||
: physicalColumnDefinition
|
||||
| metadataColumnDefinition
|
||||
@ -204,7 +255,15 @@ createView
|
||||
;
|
||||
|
||||
createFunction
|
||||
: CREATE (TEMPORARY|TEMPORARY SYSTEM) FUNCTION ifNotExists? uid AS identifier (LANGUAGE identifier)?
|
||||
: CREATE (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifNotExists? uid AS identifier (LANGUAGE (JAVA|SCALA|PYTHON))? usingClause?
|
||||
;
|
||||
|
||||
usingClause
|
||||
: USING JAR jarFileName (COMMA JAR jarFileName)*
|
||||
;
|
||||
|
||||
jarFileName
|
||||
: STRING_LITERAL
|
||||
;
|
||||
|
||||
// Alter statements
|
||||
@ -221,19 +280,27 @@ setKeyValueDefinition
|
||||
: SET tablePropertyList
|
||||
;
|
||||
|
||||
alertView
|
||||
: ALTER VIEW uid (renameDefinition | AS queryStatement)
|
||||
;
|
||||
|
||||
alterDatabase
|
||||
: ALTER DATABASE uid setKeyValueDefinition
|
||||
;
|
||||
|
||||
alterFunction
|
||||
: ALTER (TEMPORARY|TEMPORARY SYSTEM) FUNCTION ifExists? uid AS identifier (LANGUAGE identifier)?
|
||||
: ALTER (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifExists? uid AS identifier (LANGUAGE (JAVA|SCALA|PYTHON))?
|
||||
;
|
||||
|
||||
|
||||
// Drop statements
|
||||
|
||||
dropCatalog
|
||||
: DROP CATALOG ifExists? uid
|
||||
;
|
||||
|
||||
dropTable
|
||||
: DROP TABLE ifExists? uid
|
||||
: DROP TEMPORARY? TABLE ifExists? uid
|
||||
;
|
||||
|
||||
dropDatabase
|
||||
@ -252,9 +319,13 @@ dropFunction
|
||||
// Insert statements
|
||||
|
||||
insertStatement
|
||||
: (EXECUTE? insertSimpleStatement) | insertMulStatementCompatibility | (EXECUTE insertMulStatement)
|
||||
;
|
||||
|
||||
insertSimpleStatement
|
||||
: INSERT (INTO | OVERWRITE) uid
|
||||
(
|
||||
insertPartitionDefinition? queryStatement
|
||||
insertPartitionDefinition? insertColumnListDefinition? queryStatement
|
||||
| valuesDefinition
|
||||
)
|
||||
;
|
||||
@ -263,6 +334,10 @@ insertPartitionDefinition
|
||||
: PARTITION tablePropertyList
|
||||
;
|
||||
|
||||
insertColumnListDefinition
|
||||
: LR_BRACKET columnNameList RR_BRACKET
|
||||
;
|
||||
|
||||
valuesDefinition
|
||||
: VALUES valuesRowDefinition (COMMA valuesRowDefinition)*
|
||||
;
|
||||
@ -273,6 +348,14 @@ valuesRowDefinition
|
||||
RR_BRACKET
|
||||
;
|
||||
|
||||
insertMulStatementCompatibility
|
||||
: BEGIN STATEMENT SET SEMICOLON (insertSimpleStatement SEMICOLON)+ END
|
||||
;
|
||||
|
||||
insertMulStatement
|
||||
: STATEMENT SET BEGIN (insertSimpleStatement SEMICOLON)+ END
|
||||
;
|
||||
|
||||
|
||||
// Select statements
|
||||
|
||||
@ -438,6 +521,11 @@ predicate
|
||||
| IS NOT? kind=DISTINCT FROM right=valueExpression
|
||||
;
|
||||
|
||||
likePredicate
|
||||
: NOT? kind=LIKE quantifier=(ANY | ALL) ('('')' | '(' expression (',' expression)* ')')
|
||||
| NOT? kind=LIKE pattern=valueExpression
|
||||
;
|
||||
|
||||
valueExpression
|
||||
: primaryExpression #valueExpressionDefault
|
||||
| operator=('-' | '+' | '~') valueExpression #arithmeticUnary
|
||||
@ -1115,6 +1203,7 @@ nonReserved
|
||||
| UNSET
|
||||
| UNNEST
|
||||
| USE
|
||||
| USER
|
||||
| VALUES
|
||||
| VARBINARY
|
||||
| VARCHAR
|
||||
|
Reference in New Issue
Block a user