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:
nankaNULL
2023-02-27 19:03:32 +08:00
committed by GitHub
parent 11915b155d
commit 4f02f9aca0
17 changed files with 9354 additions and 5804 deletions

View File

@ -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*@#^$%&{}]*;

View File

@ -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