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

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