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

@ -1,4 +1,4 @@
// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT
// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT
import { ATN } from "antlr4ts/atn/ATN";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT
// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT
import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener";
@ -84,7 +84,6 @@ import { TransformListContext } from "./FlinkSqlParser";
import { TransformContext } from "./FlinkSqlParser";
import { TransformArgumentContext } from "./FlinkSqlParser";
import { LikeDefinitionContext } from "./FlinkSqlParser";
import { SourceTableContext } from "./FlinkSqlParser";
import { LikeOptionContext } from "./FlinkSqlParser";
import { CreateCatalogContext } from "./FlinkSqlParser";
import { CreateDatabaseContext } from "./FlinkSqlParser";
@ -127,7 +126,6 @@ import { FromClauseContext } from "./FlinkSqlParser";
import { TableExpressionContext } from "./FlinkSqlParser";
import { TableReferenceContext } from "./FlinkSqlParser";
import { TablePrimaryContext } from "./FlinkSqlParser";
import { TablePathContext } from "./FlinkSqlParser";
import { SystemTimePeriodContext } from "./FlinkSqlParser";
import { DateTimeExpressionContext } from "./FlinkSqlParser";
import { InlineDataValueClauseContext } from "./FlinkSqlParser";
@ -192,6 +190,11 @@ import { IdentifierContext } from "./FlinkSqlParser";
import { UnquotedIdentifierContext } from "./FlinkSqlParser";
import { QuotedIdentifierContext } from "./FlinkSqlParser";
import { WhenClauseContext } from "./FlinkSqlParser";
import { CatalogPathContext } from "./FlinkSqlParser";
import { DatabasePathContext } from "./FlinkSqlParser";
import { DatabasePathCreateContext } from "./FlinkSqlParser";
import { TablePathCreateContext } from "./FlinkSqlParser";
import { TablePathContext } from "./FlinkSqlParser";
import { UidContext } from "./FlinkSqlParser";
import { WithOptionContext } from "./FlinkSqlParser";
import { IfNotExistsContext } from "./FlinkSqlParser";
@ -1177,17 +1180,6 @@ export interface FlinkSqlParserListener extends ParseTreeListener {
*/
exitLikeDefinition?: (ctx: LikeDefinitionContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.sourceTable`.
* @param ctx the parse tree
*/
enterSourceTable?: (ctx: SourceTableContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.sourceTable`.
* @param ctx the parse tree
*/
exitSourceTable?: (ctx: SourceTableContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.likeOption`.
* @param ctx the parse tree
@ -1650,17 +1642,6 @@ export interface FlinkSqlParserListener extends ParseTreeListener {
*/
exitTablePrimary?: (ctx: TablePrimaryContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
*/
enterTablePath?: (ctx: TablePathContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
*/
exitTablePath?: (ctx: TablePathContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.systemTimePeriod`.
* @param ctx the parse tree
@ -2365,6 +2346,61 @@ export interface FlinkSqlParserListener extends ParseTreeListener {
*/
exitWhenClause?: (ctx: WhenClauseContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.catalogPath`.
* @param ctx the parse tree
*/
enterCatalogPath?: (ctx: CatalogPathContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.catalogPath`.
* @param ctx the parse tree
*/
exitCatalogPath?: (ctx: CatalogPathContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.databasePath`.
* @param ctx the parse tree
*/
enterDatabasePath?: (ctx: DatabasePathContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.databasePath`.
* @param ctx the parse tree
*/
exitDatabasePath?: (ctx: DatabasePathContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.databasePathCreate`.
* @param ctx the parse tree
*/
enterDatabasePathCreate?: (ctx: DatabasePathCreateContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.databasePathCreate`.
* @param ctx the parse tree
*/
exitDatabasePathCreate?: (ctx: DatabasePathCreateContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.tablePathCreate`.
* @param ctx the parse tree
*/
enterTablePathCreate?: (ctx: TablePathCreateContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.tablePathCreate`.
* @param ctx the parse tree
*/
exitTablePathCreate?: (ctx: TablePathCreateContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
*/
enterTablePath?: (ctx: TablePathContext) => void;
/**
* Exit a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
*/
exitTablePath?: (ctx: TablePathContext) => void;
/**
* Enter a parse tree produced by `FlinkSqlParser.uid`.
* @param ctx the parse tree

View File

@ -1,4 +1,4 @@
// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT
// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT
import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor";
@ -84,7 +84,6 @@ import { TransformListContext } from "./FlinkSqlParser";
import { TransformContext } from "./FlinkSqlParser";
import { TransformArgumentContext } from "./FlinkSqlParser";
import { LikeDefinitionContext } from "./FlinkSqlParser";
import { SourceTableContext } from "./FlinkSqlParser";
import { LikeOptionContext } from "./FlinkSqlParser";
import { CreateCatalogContext } from "./FlinkSqlParser";
import { CreateDatabaseContext } from "./FlinkSqlParser";
@ -127,7 +126,6 @@ import { FromClauseContext } from "./FlinkSqlParser";
import { TableExpressionContext } from "./FlinkSqlParser";
import { TableReferenceContext } from "./FlinkSqlParser";
import { TablePrimaryContext } from "./FlinkSqlParser";
import { TablePathContext } from "./FlinkSqlParser";
import { SystemTimePeriodContext } from "./FlinkSqlParser";
import { DateTimeExpressionContext } from "./FlinkSqlParser";
import { InlineDataValueClauseContext } from "./FlinkSqlParser";
@ -192,6 +190,11 @@ import { IdentifierContext } from "./FlinkSqlParser";
import { UnquotedIdentifierContext } from "./FlinkSqlParser";
import { QuotedIdentifierContext } from "./FlinkSqlParser";
import { WhenClauseContext } from "./FlinkSqlParser";
import { CatalogPathContext } from "./FlinkSqlParser";
import { DatabasePathContext } from "./FlinkSqlParser";
import { DatabasePathCreateContext } from "./FlinkSqlParser";
import { TablePathCreateContext } from "./FlinkSqlParser";
import { TablePathContext } from "./FlinkSqlParser";
import { UidContext } from "./FlinkSqlParser";
import { WithOptionContext } from "./FlinkSqlParser";
import { IfNotExistsContext } from "./FlinkSqlParser";
@ -825,13 +828,6 @@ export interface FlinkSqlParserVisitor<Result> extends ParseTreeVisitor<Result>
*/
visitLikeDefinition?: (ctx: LikeDefinitionContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.sourceTable`.
* @param ctx the parse tree
* @return the visitor result
*/
visitSourceTable?: (ctx: SourceTableContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.likeOption`.
* @param ctx the parse tree
@ -1126,13 +1122,6 @@ export interface FlinkSqlParserVisitor<Result> extends ParseTreeVisitor<Result>
*/
visitTablePrimary?: (ctx: TablePrimaryContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
* @return the visitor result
*/
visitTablePath?: (ctx: TablePathContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.systemTimePeriod`.
* @param ctx the parse tree
@ -1581,6 +1570,41 @@ export interface FlinkSqlParserVisitor<Result> extends ParseTreeVisitor<Result>
*/
visitWhenClause?: (ctx: WhenClauseContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.catalogPath`.
* @param ctx the parse tree
* @return the visitor result
*/
visitCatalogPath?: (ctx: CatalogPathContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.databasePath`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDatabasePath?: (ctx: DatabasePathContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.databasePathCreate`.
* @param ctx the parse tree
* @return the visitor result
*/
visitDatabasePathCreate?: (ctx: DatabasePathCreateContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.tablePathCreate`.
* @param ctx the parse tree
* @return the visitor result
*/
visitTablePathCreate?: (ctx: TablePathCreateContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.tablePath`.
* @param ctx the parse tree
* @return the visitor result
*/
visitTablePath?: (ctx: TablePathContext) => Result;
/**
* Visit a parse tree produced by `FlinkSqlParser.uid`.
* @param ctx the parse tree