feat(flink): add drop/alter test add add part of queryStatement

This commit is contained in:
Erindcl 2020-11-04 18:03:41 +08:00
parent 158e235b01
commit 9fc91a572a
12 changed files with 4612 additions and 127 deletions

View File

@ -332,6 +332,7 @@ SINGLE_QUOTE_SYMB: '\'';
DOUBLE_QUOTE_SYMB: '"';
REVERSE_QUOTE_SYMB: '`';
COLON_SYMB: ':';
ASTERISK_SIGN: '*';
fragment ID_LITERAL: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*;

View File

@ -1,4 +1,4 @@
parser grammar FlinkSqlParser;
grammar FlinkSqlParser;
options { tokenVocab=FlinkSqlLexer; }
@ -27,7 +27,7 @@ ddlStatement
;
dmlStatement
: selectStatement | insertStatement
: queryStatement | insertStatement
;
@ -110,25 +110,74 @@ alterFunction
// Drop statements
dropTable
: DROP TABLE ifExists uid
: DROP TABLE ifExists? uid
;
dropDatabase
: DROP DATABASE ifExists uid dropType=(RESTRICT | CASCADE)?
: DROP DATABASE ifExists? uid dropType=(RESTRICT | CASCADE)?
;
dropView
: DROP TEMPORARY? VIEW ifExists uid
: DROP TEMPORARY? VIEW ifExists? uid
;
dropFunction
: DROP (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifExists uid
: DROP (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifExists? uid
;
// Select statements
queryStatement
: valuesDefinition
| (
selectStatement
| selectWithoutFromDefinition
// | queryStatement UNION ALL? queryStatement
// | queryStatement EXCEPT queryStatement
// | queryStatement INTERSECT queryStatement
) queryOrderByDefinition? queryLimitDefinition? queryOffsetDefinition? queryFetchDefinition?
;
selectStatement
: SELECT (ALL | DISTINCT)?
(ASTERISK_SIGN | projectItemDefinition (COMMA projectItemDefinition)*)
FROM tableExpression
;
projectItemDefinition // expression (AS? columnAlias)? | tableAlias . *
:
;
tableExpression
:
;
selectWithoutFromDefinition
:
;
queryOrderByDefinition
: ORDER BY orderItemDefition (COMMA orderItemDefition)*
;
orderItemDefition // expression (ASC | DESC)?
:
;
queryLimitDefinition
: LIMIT (countDefinition | ALL)
;
countDefinition
:
;
queryOffsetDefinition // OFFSET start (ROW | ROWS)
:
;
queryFetchDefinition // FETCH (FIRST | NEXT) countDefinition? (ROW | ROWS) ONLY
:
;
@ -153,7 +202,7 @@ valuesDefinition
: VALUES valuesRowDefinition (COMMA valuesRowDefinition)*
;
// TODO 匹配所有的值 任意value
// TODO 匹配所有的值 任意value 即:(val1 [, val2, ...])
valuesRowDefinition
: LR_BRACKET
.*?

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,4 @@
T__0=1
SPACE=1
SPEC_MYSQL_COMMENT=2
COMMENT_INPUT=3
@ -303,6 +304,7 @@ SINGLE_QUOTE_SYMB=302
DOUBLE_QUOTE_SYMB=303
REVERSE_QUOTE_SYMB=304
COLON_SYMB=305
','=1
'SELECT'=5
'FROM'=6
'ADD'=7
@ -590,7 +592,6 @@ COLON_SYMB=305
'.'=293
'('=294
')'=295
','=296
';'=297
'@'=298
'0'=299

View File

@ -0,0 +1,20 @@
token literal names:
null
','
token symbolic names:
null
null
rule names:
T__0
channel names:
DEFAULT_TOKEN_CHANNEL
HIDDEN
mode names:
DEFAULT_MODE
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 3, 7, 8, 1, 4, 2, 9, 2, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 6, 2, 3, 3, 2, 2, 2, 3, 5, 3, 2, 2, 2, 5, 6, 7, 46, 2, 2, 6, 4, 3, 2, 2, 2, 3, 2, 2]

View File

@ -0,0 +1,51 @@
// Generated from /Users/erindeng/Desktop/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.8
// jshint ignore: start
var antlr4 = require('antlr4/index');
var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964",
"\u0002\u0003\u0007\b\u0001\u0004\u0002\t\u0002\u0003\u0002\u0003\u0002",
"\u0002\u0002\u0003\u0003\u0003\u0003\u0002\u0002\u0002\u0006\u0002\u0003",
"\u0003\u0002\u0002\u0002\u0003\u0005\u0003\u0002\u0002\u0002\u0005\u0006",
"\u0007.\u0002\u0002\u0006\u0004\u0003\u0002\u0002\u0002\u0003\u0002",
"\u0002"].join("");
var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);
var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });
function FlinkSqlParserLexer(input) {
antlr4.Lexer.call(this, input);
this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache());
return this;
}
FlinkSqlParserLexer.prototype = Object.create(antlr4.Lexer.prototype);
FlinkSqlParserLexer.prototype.constructor = FlinkSqlParserLexer;
Object.defineProperty(FlinkSqlParserLexer.prototype, "atn", {
get : function() {
return atn;
}
});
FlinkSqlParserLexer.EOF = antlr4.Token.EOF;
FlinkSqlParserLexer.T__0 = 1;
FlinkSqlParserLexer.prototype.channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ];
FlinkSqlParserLexer.prototype.modeNames = [ "DEFAULT_MODE" ];
FlinkSqlParserLexer.prototype.literalNames = [ null, "','" ];
FlinkSqlParserLexer.prototype.symbolicNames = [ ];
FlinkSqlParserLexer.prototype.ruleNames = [ "T__0" ];
FlinkSqlParserLexer.prototype.grammarFileName = "FlinkSqlParser.g4";
exports.FlinkSqlParserLexer = FlinkSqlParserLexer;

View File

@ -0,0 +1,2 @@
T__0=1
','=1

View File

@ -2,7 +2,7 @@
// jshint ignore: start
var antlr4 = require('antlr4/index');
// This class defines a complete listener for a parse tree produced by FlinkSqlParser.
// This class defines a complete listener for a parse tree produced by FlinkSqlParserParser.
function FlinkSqlParserListener() {
antlr4.tree.ParseTreeListener.call(this);
return this;
@ -11,335 +11,335 @@ function FlinkSqlParserListener() {
FlinkSqlParserListener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);
FlinkSqlParserListener.prototype.constructor = FlinkSqlParserListener;
// Enter a parse tree produced by FlinkSqlParser#program.
// Enter a parse tree produced by FlinkSqlParserParser#program.
FlinkSqlParserListener.prototype.enterProgram = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#program.
// Exit a parse tree produced by FlinkSqlParserParser#program.
FlinkSqlParserListener.prototype.exitProgram = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#statement.
// Enter a parse tree produced by FlinkSqlParserParser#statement.
FlinkSqlParserListener.prototype.enterStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#statement.
// Exit a parse tree produced by FlinkSqlParserParser#statement.
FlinkSqlParserListener.prototype.exitStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#sqlStatements.
// Enter a parse tree produced by FlinkSqlParserParser#sqlStatements.
FlinkSqlParserListener.prototype.enterSqlStatements = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#sqlStatements.
// Exit a parse tree produced by FlinkSqlParserParser#sqlStatements.
FlinkSqlParserListener.prototype.exitSqlStatements = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#sqlStatement.
// Enter a parse tree produced by FlinkSqlParserParser#sqlStatement.
FlinkSqlParserListener.prototype.enterSqlStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#sqlStatement.
// Exit a parse tree produced by FlinkSqlParserParser#sqlStatement.
FlinkSqlParserListener.prototype.exitSqlStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#emptyStatement.
// Enter a parse tree produced by FlinkSqlParserParser#emptyStatement.
FlinkSqlParserListener.prototype.enterEmptyStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#emptyStatement.
// Exit a parse tree produced by FlinkSqlParserParser#emptyStatement.
FlinkSqlParserListener.prototype.exitEmptyStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#ddlStatement.
// Enter a parse tree produced by FlinkSqlParserParser#ddlStatement.
FlinkSqlParserListener.prototype.enterDdlStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#ddlStatement.
// Exit a parse tree produced by FlinkSqlParserParser#ddlStatement.
FlinkSqlParserListener.prototype.exitDdlStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#dmlStatement.
// Enter a parse tree produced by FlinkSqlParserParser#dmlStatement.
FlinkSqlParserListener.prototype.enterDmlStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#dmlStatement.
// Exit a parse tree produced by FlinkSqlParserParser#dmlStatement.
FlinkSqlParserListener.prototype.exitDmlStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#createTable.
// Enter a parse tree produced by FlinkSqlParserParser#createTable.
FlinkSqlParserListener.prototype.enterCreateTable = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#createTable.
// Exit a parse tree produced by FlinkSqlParserParser#createTable.
FlinkSqlParserListener.prototype.exitCreateTable = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#columnOptionDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#columnOptionDefinition.
FlinkSqlParserListener.prototype.enterColumnOptionDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#columnOptionDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#columnOptionDefinition.
FlinkSqlParserListener.prototype.exitColumnOptionDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#columnName.
// Enter a parse tree produced by FlinkSqlParserParser#columnName.
FlinkSqlParserListener.prototype.enterColumnName = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#columnName.
// Exit a parse tree produced by FlinkSqlParserParser#columnName.
FlinkSqlParserListener.prototype.exitColumnName = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#columnType.
// Enter a parse tree produced by FlinkSqlParserParser#columnType.
FlinkSqlParserListener.prototype.enterColumnType = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#columnType.
// Exit a parse tree produced by FlinkSqlParserParser#columnType.
FlinkSqlParserListener.prototype.exitColumnType = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#partitionDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#partitionDefinition.
FlinkSqlParserListener.prototype.enterPartitionDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#partitionDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#partitionDefinition.
FlinkSqlParserListener.prototype.exitPartitionDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#partitionColumnDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#partitionColumnDefinition.
FlinkSqlParserListener.prototype.enterPartitionColumnDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#partitionColumnDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#partitionColumnDefinition.
FlinkSqlParserListener.prototype.exitPartitionColumnDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#partitionColumnName.
// Enter a parse tree produced by FlinkSqlParserParser#partitionColumnName.
FlinkSqlParserListener.prototype.enterPartitionColumnName = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#partitionColumnName.
// Exit a parse tree produced by FlinkSqlParserParser#partitionColumnName.
FlinkSqlParserListener.prototype.exitPartitionColumnName = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#createDatabase.
// Enter a parse tree produced by FlinkSqlParserParser#createDatabase.
FlinkSqlParserListener.prototype.enterCreateDatabase = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#createDatabase.
// Exit a parse tree produced by FlinkSqlParserParser#createDatabase.
FlinkSqlParserListener.prototype.exitCreateDatabase = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#createView.
// Enter a parse tree produced by FlinkSqlParserParser#createView.
FlinkSqlParserListener.prototype.enterCreateView = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#createView.
// Exit a parse tree produced by FlinkSqlParserParser#createView.
FlinkSqlParserListener.prototype.exitCreateView = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#createFunction.
// Enter a parse tree produced by FlinkSqlParserParser#createFunction.
FlinkSqlParserListener.prototype.enterCreateFunction = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#createFunction.
// Exit a parse tree produced by FlinkSqlParserParser#createFunction.
FlinkSqlParserListener.prototype.exitCreateFunction = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#alterTable.
// Enter a parse tree produced by FlinkSqlParserParser#alterTable.
FlinkSqlParserListener.prototype.enterAlterTable = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#alterTable.
// Exit a parse tree produced by FlinkSqlParserParser#alterTable.
FlinkSqlParserListener.prototype.exitAlterTable = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#renameDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#renameDefinition.
FlinkSqlParserListener.prototype.enterRenameDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#renameDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#renameDefinition.
FlinkSqlParserListener.prototype.exitRenameDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#setKeyValueDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#setKeyValueDefinition.
FlinkSqlParserListener.prototype.enterSetKeyValueDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#setKeyValueDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#setKeyValueDefinition.
FlinkSqlParserListener.prototype.exitSetKeyValueDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#alterDatabase.
// Enter a parse tree produced by FlinkSqlParserParser#alterDatabase.
FlinkSqlParserListener.prototype.enterAlterDatabase = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#alterDatabase.
// Exit a parse tree produced by FlinkSqlParserParser#alterDatabase.
FlinkSqlParserListener.prototype.exitAlterDatabase = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#alterFunction.
// Enter a parse tree produced by FlinkSqlParserParser#alterFunction.
FlinkSqlParserListener.prototype.enterAlterFunction = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#alterFunction.
// Exit a parse tree produced by FlinkSqlParserParser#alterFunction.
FlinkSqlParserListener.prototype.exitAlterFunction = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#dropTable.
// Enter a parse tree produced by FlinkSqlParserParser#dropTable.
FlinkSqlParserListener.prototype.enterDropTable = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#dropTable.
// Exit a parse tree produced by FlinkSqlParserParser#dropTable.
FlinkSqlParserListener.prototype.exitDropTable = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#dropDatabase.
// Enter a parse tree produced by FlinkSqlParserParser#dropDatabase.
FlinkSqlParserListener.prototype.enterDropDatabase = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#dropDatabase.
// Exit a parse tree produced by FlinkSqlParserParser#dropDatabase.
FlinkSqlParserListener.prototype.exitDropDatabase = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#dropView.
// Enter a parse tree produced by FlinkSqlParserParser#dropView.
FlinkSqlParserListener.prototype.enterDropView = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#dropView.
// Exit a parse tree produced by FlinkSqlParserParser#dropView.
FlinkSqlParserListener.prototype.exitDropView = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#dropFunction.
// Enter a parse tree produced by FlinkSqlParserParser#dropFunction.
FlinkSqlParserListener.prototype.enterDropFunction = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#dropFunction.
// Exit a parse tree produced by FlinkSqlParserParser#dropFunction.
FlinkSqlParserListener.prototype.exitDropFunction = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#selectStatement.
// Enter a parse tree produced by FlinkSqlParserParser#selectStatement.
FlinkSqlParserListener.prototype.enterSelectStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#selectStatement.
// Exit a parse tree produced by FlinkSqlParserParser#selectStatement.
FlinkSqlParserListener.prototype.exitSelectStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#insertStatement.
// Enter a parse tree produced by FlinkSqlParserParser#insertStatement.
FlinkSqlParserListener.prototype.enterInsertStatement = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#insertStatement.
// Exit a parse tree produced by FlinkSqlParserParser#insertStatement.
FlinkSqlParserListener.prototype.exitInsertStatement = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#insertPartitionDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#insertPartitionDefinition.
FlinkSqlParserListener.prototype.enterInsertPartitionDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#insertPartitionDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#insertPartitionDefinition.
FlinkSqlParserListener.prototype.exitInsertPartitionDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#valuesDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#valuesDefinition.
FlinkSqlParserListener.prototype.enterValuesDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#valuesDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#valuesDefinition.
FlinkSqlParserListener.prototype.exitValuesDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#valuesRowDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#valuesRowDefinition.
FlinkSqlParserListener.prototype.enterValuesRowDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#valuesRowDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#valuesRowDefinition.
FlinkSqlParserListener.prototype.exitValuesRowDefinition = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#uidList.
// Enter a parse tree produced by FlinkSqlParserParser#uidList.
FlinkSqlParserListener.prototype.enterUidList = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#uidList.
// Exit a parse tree produced by FlinkSqlParserParser#uidList.
FlinkSqlParserListener.prototype.exitUidList = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#uid.
// Enter a parse tree produced by FlinkSqlParserParser#uid.
FlinkSqlParserListener.prototype.enterUid = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#uid.
// Exit a parse tree produced by FlinkSqlParserParser#uid.
FlinkSqlParserListener.prototype.exitUid = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#withOption.
// Enter a parse tree produced by FlinkSqlParserParser#withOption.
FlinkSqlParserListener.prototype.enterWithOption = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#withOption.
// Exit a parse tree produced by FlinkSqlParserParser#withOption.
FlinkSqlParserListener.prototype.exitWithOption = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#ifNotExists.
// Enter a parse tree produced by FlinkSqlParserParser#ifNotExists.
FlinkSqlParserListener.prototype.enterIfNotExists = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#ifNotExists.
// Exit a parse tree produced by FlinkSqlParserParser#ifNotExists.
FlinkSqlParserListener.prototype.exitIfNotExists = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#ifExists.
// Enter a parse tree produced by FlinkSqlParserParser#ifExists.
FlinkSqlParserListener.prototype.enterIfExists = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#ifExists.
// Exit a parse tree produced by FlinkSqlParserParser#ifExists.
FlinkSqlParserListener.prototype.exitIfExists = function(ctx) {
};
// Enter a parse tree produced by FlinkSqlParser#keyValueDefinition.
// Enter a parse tree produced by FlinkSqlParserParser#keyValueDefinition.
FlinkSqlParserListener.prototype.enterKeyValueDefinition = function(ctx) {
};
// Exit a parse tree produced by FlinkSqlParser#keyValueDefinition.
// Exit a parse tree produced by FlinkSqlParserParser#keyValueDefinition.
FlinkSqlParserListener.prototype.exitKeyValueDefinition = function(ctx) {
};

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
// jshint ignore: start
var antlr4 = require('antlr4/index');
// This class defines a complete generic visitor for a parse tree produced by FlinkSqlParser.
// This class defines a complete generic visitor for a parse tree produced by FlinkSqlParserParser.
function FlinkSqlParserVisitor() {
antlr4.tree.ParseTreeVisitor.call(this);
@ -12,223 +12,223 @@ function FlinkSqlParserVisitor() {
FlinkSqlParserVisitor.prototype = Object.create(antlr4.tree.ParseTreeVisitor.prototype);
FlinkSqlParserVisitor.prototype.constructor = FlinkSqlParserVisitor;
// Visit a parse tree produced by FlinkSqlParser#program.
// Visit a parse tree produced by FlinkSqlParserParser#program.
FlinkSqlParserVisitor.prototype.visitProgram = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#statement.
// Visit a parse tree produced by FlinkSqlParserParser#statement.
FlinkSqlParserVisitor.prototype.visitStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#sqlStatements.
// Visit a parse tree produced by FlinkSqlParserParser#sqlStatements.
FlinkSqlParserVisitor.prototype.visitSqlStatements = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#sqlStatement.
// Visit a parse tree produced by FlinkSqlParserParser#sqlStatement.
FlinkSqlParserVisitor.prototype.visitSqlStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#emptyStatement.
// Visit a parse tree produced by FlinkSqlParserParser#emptyStatement.
FlinkSqlParserVisitor.prototype.visitEmptyStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#ddlStatement.
// Visit a parse tree produced by FlinkSqlParserParser#ddlStatement.
FlinkSqlParserVisitor.prototype.visitDdlStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#dmlStatement.
// Visit a parse tree produced by FlinkSqlParserParser#dmlStatement.
FlinkSqlParserVisitor.prototype.visitDmlStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#createTable.
// Visit a parse tree produced by FlinkSqlParserParser#createTable.
FlinkSqlParserVisitor.prototype.visitCreateTable = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#columnOptionDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#columnOptionDefinition.
FlinkSqlParserVisitor.prototype.visitColumnOptionDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#columnName.
// Visit a parse tree produced by FlinkSqlParserParser#columnName.
FlinkSqlParserVisitor.prototype.visitColumnName = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#columnType.
// Visit a parse tree produced by FlinkSqlParserParser#columnType.
FlinkSqlParserVisitor.prototype.visitColumnType = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#partitionDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#partitionDefinition.
FlinkSqlParserVisitor.prototype.visitPartitionDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#partitionColumnDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#partitionColumnDefinition.
FlinkSqlParserVisitor.prototype.visitPartitionColumnDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#partitionColumnName.
// Visit a parse tree produced by FlinkSqlParserParser#partitionColumnName.
FlinkSqlParserVisitor.prototype.visitPartitionColumnName = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#createDatabase.
// Visit a parse tree produced by FlinkSqlParserParser#createDatabase.
FlinkSqlParserVisitor.prototype.visitCreateDatabase = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#createView.
// Visit a parse tree produced by FlinkSqlParserParser#createView.
FlinkSqlParserVisitor.prototype.visitCreateView = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#createFunction.
// Visit a parse tree produced by FlinkSqlParserParser#createFunction.
FlinkSqlParserVisitor.prototype.visitCreateFunction = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#alterTable.
// Visit a parse tree produced by FlinkSqlParserParser#alterTable.
FlinkSqlParserVisitor.prototype.visitAlterTable = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#renameDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#renameDefinition.
FlinkSqlParserVisitor.prototype.visitRenameDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#setKeyValueDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#setKeyValueDefinition.
FlinkSqlParserVisitor.prototype.visitSetKeyValueDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#alterDatabase.
// Visit a parse tree produced by FlinkSqlParserParser#alterDatabase.
FlinkSqlParserVisitor.prototype.visitAlterDatabase = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#alterFunction.
// Visit a parse tree produced by FlinkSqlParserParser#alterFunction.
FlinkSqlParserVisitor.prototype.visitAlterFunction = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#dropTable.
// Visit a parse tree produced by FlinkSqlParserParser#dropTable.
FlinkSqlParserVisitor.prototype.visitDropTable = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#dropDatabase.
// Visit a parse tree produced by FlinkSqlParserParser#dropDatabase.
FlinkSqlParserVisitor.prototype.visitDropDatabase = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#dropView.
// Visit a parse tree produced by FlinkSqlParserParser#dropView.
FlinkSqlParserVisitor.prototype.visitDropView = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#dropFunction.
// Visit a parse tree produced by FlinkSqlParserParser#dropFunction.
FlinkSqlParserVisitor.prototype.visitDropFunction = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#selectStatement.
// Visit a parse tree produced by FlinkSqlParserParser#selectStatement.
FlinkSqlParserVisitor.prototype.visitSelectStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#insertStatement.
// Visit a parse tree produced by FlinkSqlParserParser#insertStatement.
FlinkSqlParserVisitor.prototype.visitInsertStatement = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#insertPartitionDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#insertPartitionDefinition.
FlinkSqlParserVisitor.prototype.visitInsertPartitionDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#valuesDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#valuesDefinition.
FlinkSqlParserVisitor.prototype.visitValuesDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#valuesRowDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#valuesRowDefinition.
FlinkSqlParserVisitor.prototype.visitValuesRowDefinition = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#uidList.
// Visit a parse tree produced by FlinkSqlParserParser#uidList.
FlinkSqlParserVisitor.prototype.visitUidList = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#uid.
// Visit a parse tree produced by FlinkSqlParserParser#uid.
FlinkSqlParserVisitor.prototype.visitUid = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#withOption.
// Visit a parse tree produced by FlinkSqlParserParser#withOption.
FlinkSqlParserVisitor.prototype.visitWithOption = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#ifNotExists.
// Visit a parse tree produced by FlinkSqlParserParser#ifNotExists.
FlinkSqlParserVisitor.prototype.visitIfNotExists = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#ifExists.
// Visit a parse tree produced by FlinkSqlParserParser#ifExists.
FlinkSqlParserVisitor.prototype.visitIfExists = function(ctx) {
return this.visitChildren(ctx);
};
// Visit a parse tree produced by FlinkSqlParser#keyValueDefinition.
// Visit a parse tree produced by FlinkSqlParserParser#keyValueDefinition.
FlinkSqlParserVisitor.prototype.visitKeyValueDefinition = function(ctx) {
return this.visitChildren(ctx);
};

View File

@ -7,6 +7,6 @@ describe('FlinkSQL Lexer tests', () => {
const tokens = parser.getAllTokens(sql);
test('token counts', () => {
expect(tokens.length).toBe(7);
expect(tokens.length).toBe(6);
});
});

View File

@ -3,6 +3,7 @@ import SQLParser from '../../../src/parser/flinksql';
describe('FlinkSQL Syntax Tests', () => {
const parser = new SQLParser();
// Create statements
test('Test simple CreateTable Statement', () => {
const sql = `
CREATE TABLE Orders (
@ -13,7 +14,59 @@ describe('FlinkSQL Syntax Tests', () => {
);
`;
const result = parser.validate(sql);
console.log(result);
// TODO find parser error
expect(result.length).toBe(1);
});
test('Test simple CreateDatabase Statement', () => {
const sql = `
CREATE DATABASE IF NOT EXISTS dataApi
WITH (
"owner" = "admin"
);
`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
// test('Test simple CreateView Statement', () => {
// const sql = `
// CREATE TEMPORARY VIEW IF NOT EXISTS tempView
// AS ;
// `;
// const result = parser.validate(sql);
// expect(result.length).toBe(0);
// });
// Alter statements
test('Test simple AlterTable Statement', () => {
const sql = `ALTER TABLE Orders RENAME TO NewOrders;`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
test('Test simple AlterDatabase Statement', () => {
const sql = `ALTER DATABASE DataBase SET ("key1"="value1");`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
// Drop statements
test('Test simple DropTable Statement', () => {
const sql = `DROP TABLE IF EXISTS Orders;`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
test('Test simple DropDatabase Statement', () => {
const sql = `DROP DATABASE IF EXISTS Orders RESTRICT;`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
test('Test simple DropView Statement', () => {
const sql = `DROP TEMPORARY VIEW IF EXISTS Orders;`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
test('Test simple DropFunction Statement', () => {
const sql = `DROP TEMPORARY FUNCTION IF EXISTS Orders;`;
const result = parser.validate(sql);
expect(result.length).toBe(0);
});
});