feat(flink): add drop/alter test add add part of queryStatement
This commit is contained in:
parent
158e235b01
commit
9fc91a572a
@ -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]*;
|
@ -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
@ -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
|
||||
|
20
src/lib/flinksql/FlinkSqlParserLexer.interp
Normal file
20
src/lib/flinksql/FlinkSqlParserLexer.interp
Normal 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]
|
51
src/lib/flinksql/FlinkSqlParserLexer.js
Normal file
51
src/lib/flinksql/FlinkSqlParserLexer.js
Normal 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;
|
||||
|
2
src/lib/flinksql/FlinkSqlParserLexer.tokens
Normal file
2
src/lib/flinksql/FlinkSqlParserLexer.tokens
Normal file
@ -0,0 +1,2 @@
|
||||
T__0=1
|
||||
','=1
|
@ -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) {
|
||||
};
|
||||
|
||||
|
4308
src/lib/flinksql/FlinkSqlParserParser.js
Normal file
4308
src/lib/flinksql/FlinkSqlParserParser.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
};
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user