feat: FlinkSQL supports auto complete (#115)

* feat: add antlr4-c3 dependencies

* feat: distinguish table, catalog and database from uid

* feat: move semicolon from sqlStatements to sqlStatement

* chore: move antlr4ts-cli to devDependencies

* feat: improve basic parser and support suggestions of token and syntax

* feat: implement suggest method in sql parsers

* test: flink sql suggestion test cases

* feat: optimize ts defination of suggestion

* feat: add split listener and optimize performance of auto-completion

* test: supplementary flink suggestion unit tests
This commit is contained in:
Hayden
2023-06-09 11:22:53 +08:00
committed by GitHub
parent 2637f90295
commit 1b02ff5d75
25 changed files with 4521 additions and 3418 deletions

View File

@ -9,12 +9,14 @@ statement
;
sqlStatements
: (sqlStatement SEMICOLON? | emptyStatement)*
: (sqlStatement | emptyStatement)*
;
sqlStatement
: ddlStatement | dmlStatement | describeStatement | explainStatement | useStatement | showStatememt
| loadStatement | unloadStatememt | setStatememt | resetStatememt | jarStatememt | dtAddStatement
: ddlStatement SEMICOLON? | dmlStatement SEMICOLON? | describeStatement SEMICOLON?
| explainStatement SEMICOLON? | useStatement SEMICOLON?| showStatememt SEMICOLON?
| loadStatement SEMICOLON?| unloadStatememt SEMICOLON?| setStatememt SEMICOLON?
| resetStatememt SEMICOLON?| jarStatememt SEMICOLON?| dtAddStatement SEMICOLON?
;
emptyStatement
@ -33,7 +35,7 @@ dmlStatement
// some statemen
describeStatement
: (KW_DESCRIBE | KW_DESC) uid
: (KW_DESCRIBE | KW_DESC) tablePath
;
explainStatement
@ -49,7 +51,9 @@ explainDetail
;
useStatement
: KW_USE KW_CATALOG? uid | useModuleStatement
: KW_USE KW_CATALOG catalogPath
| KW_USE databasePath
| useModuleStatement
;
useModuleStatement
@ -59,7 +63,7 @@ useModuleStatement
showStatememt
: KW_SHOW (KW_CATALOGS | KW_DATABASES | KW_VIEWS | KW_JARS)
| KW_SHOW KW_CURRENT (KW_CATALOG | KW_DATABASE)
| KW_SHOW KW_TABLES (( KW_FROM | KW_IN ) uid)? likePredicate?
| KW_SHOW KW_TABLES (( KW_FROM | KW_IN ) tablePath)? likePredicate?
| KW_SHOW KW_COLUMNS ( KW_FROM | KW_IN ) uid likePredicate?
| KW_SHOW KW_CREATE (KW_TABLE | KW_VIEW) uid
| KW_SHOW KW_USER? KW_FUNCTIONS
@ -106,7 +110,7 @@ createTable
;
simpleCreateTable
: KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? sourceTable
: KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? tablePathCreate
LR_BRACKET
columnOptionDefinition (COMMA columnOptionDefinition)*
(COMMA watermarkDefinition)?
@ -124,7 +128,7 @@ simpleCreateTable
* CTAS 不支持指定显示指定列,不支持创建分区表,临时表
*/
createTableAsSelect
: KW_CREATE KW_TABLE ifNotExists? sourceTable withOption (KW_AS queryStatement)?
: KW_CREATE KW_TABLE ifNotExists? tablePathCreate withOption (KW_AS queryStatement)?
;
columnOptionDefinition
@ -244,11 +248,7 @@ transformArgument
;
likeDefinition
: KW_LIKE sourceTable (LR_BRACKET likeOption* RR_BRACKET)?
;
sourceTable
: uid
: KW_LIKE tablePath (LR_BRACKET likeOption* RR_BRACKET)?
;
likeOption
@ -261,7 +261,7 @@ createCatalog
;
createDatabase
: KW_CREATE KW_DATABASE ifNotExists? uid commentSpec? withOption
: KW_CREATE KW_DATABASE ifNotExists? databasePathCreate commentSpec? withOption
;
createView
@ -269,7 +269,7 @@ createView
;
createFunction
: KW_CREATE (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifNotExists? uid KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? usingClause?
: KW_CREATE (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifNotExists? functionName KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? usingClause?
;
usingClause
@ -285,7 +285,7 @@ jarFileName
// it only includes rename, set key, add constraint, drop constraint, add unique
alterTable
: KW_ALTER KW_TABLE ifExists? uid (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique)
: KW_ALTER KW_TABLE ifExists? tablePath (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique)
;
renameDefinition
@ -317,7 +317,7 @@ alertView
;
alterDatabase
: KW_ALTER KW_DATABASE uid setKeyValueDefinition
: KW_ALTER KW_DATABASE databasePath setKeyValueDefinition
;
alterFunction
@ -328,15 +328,15 @@ alterFunction
// Drop statements
dropCatalog
: KW_DROP KW_CATALOG ifExists? uid
: KW_DROP KW_CATALOG ifExists? catalogPath
;
dropTable
: KW_DROP KW_TEMPORARY? KW_TABLE ifExists? uid
: KW_DROP KW_TEMPORARY? KW_TABLE ifExists? tablePath
;
dropDatabase
: KW_DROP KW_DATABASE ifExists? uid dropType=(KW_RESTRICT | KW_CASCADE)?
: KW_DROP KW_DATABASE ifExists? databasePath dropType=(KW_RESTRICT | KW_CASCADE)?
;
dropView
@ -344,7 +344,7 @@ dropView
;
dropFunction
: KW_DROP (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? uid
: KW_DROP (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? functionName
;
@ -356,7 +356,7 @@ insertStatement
;
insertSimpleStatement
: KW_INSERT (KW_INTO | KW_OVERWRITE) uid
: KW_INSERT (KW_INTO | KW_OVERWRITE) tablePath
(
insertPartitionDefinition? columnNameList? queryStatement
| valuesDefinition
@ -454,9 +454,7 @@ tablePrimary
| KW_UNNEST LR_BRACKET expression RR_BRACKET
;
tablePath
: uid
;
systemTimePeriod
: KW_FOR KW_SYSTEM_TIME KW_AS KW_OF dateTimeExpression
@ -827,6 +825,26 @@ whenClause
: KW_WHEN condition=expression KW_THEN result=expression
;
catalogPath
: uid
;
databasePath
: uid
;
databasePathCreate
: uid
;
tablePathCreate
: uid
;
tablePath
: uid
;
uid
: identifier (DOT identifier)*?
;