feat(flinksql): add some lexer
This commit is contained in:
parent
b7df08f012
commit
6082c2b151
@ -299,10 +299,37 @@ ROW: 'ROW';
|
|||||||
NULL: 'NULL';
|
NULL: 'NULL';
|
||||||
|
|
||||||
|
|
||||||
// single character Keywords
|
// Operators. Comparation
|
||||||
|
|
||||||
EQUAL: '=';
|
EQUAL_SYMBOL: '=';
|
||||||
|
GREATER_SYMBOL: '>';
|
||||||
|
LESS_SYMBOL: '<';
|
||||||
|
EXCLAMATION_SYMBOL: '!';
|
||||||
|
|
||||||
|
|
||||||
|
// Operators. Bit
|
||||||
|
|
||||||
|
BIT_NOT_OP: '~';
|
||||||
|
BIT_OR_OP: '|';
|
||||||
|
BIT_AND_OP: '&';
|
||||||
|
BIT_XOR_OP: '^';
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors symbols
|
||||||
|
|
||||||
|
DOT: '.';
|
||||||
|
LR_BRACKET: '(';
|
||||||
|
RR_BRACKET: ')';
|
||||||
COMMA: ',';
|
COMMA: ',';
|
||||||
|
SEMICOLON: ';';
|
||||||
|
AT_SIGN: '@';
|
||||||
|
ZERO_DECIMAL: '0';
|
||||||
|
ONE_DECIMAL: '1';
|
||||||
|
TWO_DECIMAL: '2';
|
||||||
|
SINGLE_QUOTE_SYMB: '\'';
|
||||||
|
DOUBLE_QUOTE_SYMB: '"';
|
||||||
|
REVERSE_QUOTE_SYMB: '`';
|
||||||
|
COLON_SYMB: ':';
|
||||||
|
|
||||||
|
|
||||||
fragment ID_LITERAL: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*;
|
fragment ID_LITERAL: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*;
|
||||||
|
@ -5,13 +5,21 @@ options { tokenVocab=FlinkSqlLexer; }
|
|||||||
program: statement EOF;
|
program: statement EOF;
|
||||||
|
|
||||||
statement
|
statement
|
||||||
: sqlStatement EOF
|
: sqlStatements EOF
|
||||||
|
;
|
||||||
|
|
||||||
|
sqlStatements
|
||||||
|
: (sqlStatement SEMICOLON | emptyStatement)*
|
||||||
;
|
;
|
||||||
|
|
||||||
sqlStatement
|
sqlStatement
|
||||||
: ddlStatement | dmlStatement
|
: ddlStatement | dmlStatement
|
||||||
;
|
;
|
||||||
|
|
||||||
|
emptyStatement
|
||||||
|
: SEMICOLON
|
||||||
|
;
|
||||||
|
|
||||||
ddlStatement
|
ddlStatement
|
||||||
: createTable | createDatabase | createView | createFunction
|
: createTable | createDatabase | createView | createFunction
|
||||||
| alterTable | alterDatabase | alterFunction
|
| alterTable | alterDatabase | alterFunction
|
||||||
@ -24,13 +32,13 @@ dmlStatement
|
|||||||
|
|
||||||
createTable
|
createTable
|
||||||
: CREATE TABLE tableName
|
: CREATE TABLE tableName
|
||||||
(
|
LR_BRACKET
|
||||||
columnOptionDefinition (',' columnOptionDefinition)*
|
columnOptionDefinition (COMMA columnOptionDefinition)*
|
||||||
)
|
RR_BRACKET
|
||||||
partitionDefinition?
|
partitionDefinition?
|
||||||
WITH (
|
WITH LR_BRACKET
|
||||||
withOptionDefinition (',' withOptionDefinition)*
|
withOptionDefinition (COMMA withOptionDefinition)*
|
||||||
)
|
RR_BRACKET
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +75,7 @@ partitionColumnName
|
|||||||
;
|
;
|
||||||
|
|
||||||
withOptionDefinition
|
withOptionDefinition
|
||||||
: REVERSE_QUOTE_ID EQUAL REVERSE_QUOTE_ID
|
: REVERSE_QUOTE_ID EQUAL_SYMBOL REVERSE_QUOTE_ID
|
||||||
;
|
;
|
||||||
|
|
||||||
createDatabase
|
createDatabase
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -280,8 +280,27 @@ BOOLEAN=279
|
|||||||
RAW=280
|
RAW=280
|
||||||
ROW=281
|
ROW=281
|
||||||
NULL=282
|
NULL=282
|
||||||
EQUAL=283
|
EQUAL_SYMBOL=283
|
||||||
COMMA=284
|
GREATER_SYMBOL=284
|
||||||
|
LESS_SYMBOL=285
|
||||||
|
EXCLAMATION_SYMBOL=286
|
||||||
|
BIT_NOT_OP=287
|
||||||
|
BIT_OR_OP=288
|
||||||
|
BIT_AND_OP=289
|
||||||
|
BIT_XOR_OP=290
|
||||||
|
DOT=291
|
||||||
|
LR_BRACKET=292
|
||||||
|
RR_BRACKET=293
|
||||||
|
COMMA=294
|
||||||
|
SEMICOLON=295
|
||||||
|
AT_SIGN=296
|
||||||
|
ZERO_DECIMAL=297
|
||||||
|
ONE_DECIMAL=298
|
||||||
|
TWO_DECIMAL=299
|
||||||
|
SINGLE_QUOTE_SYMB=300
|
||||||
|
DOUBLE_QUOTE_SYMB=301
|
||||||
|
REVERSE_QUOTE_SYMB=302
|
||||||
|
COLON_SYMB=303
|
||||||
'SELECT'=5
|
'SELECT'=5
|
||||||
'FROM'=6
|
'FROM'=6
|
||||||
'ADD'=7
|
'ADD'=7
|
||||||
@ -558,4 +577,23 @@ COMMA=284
|
|||||||
'ROW'=281
|
'ROW'=281
|
||||||
'NULL'=282
|
'NULL'=282
|
||||||
'='=283
|
'='=283
|
||||||
','=284
|
'>'=284
|
||||||
|
'<'=285
|
||||||
|
'!'=286
|
||||||
|
'~'=287
|
||||||
|
'|'=288
|
||||||
|
'&'=289
|
||||||
|
'^'=290
|
||||||
|
'.'=291
|
||||||
|
'('=292
|
||||||
|
')'=293
|
||||||
|
','=294
|
||||||
|
';'=295
|
||||||
|
'@'=296
|
||||||
|
'0'=297
|
||||||
|
'1'=298
|
||||||
|
'2'=299
|
||||||
|
'\''=300
|
||||||
|
'"'=301
|
||||||
|
'`'=302
|
||||||
|
':'=303
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -280,8 +280,27 @@ BOOLEAN=279
|
|||||||
RAW=280
|
RAW=280
|
||||||
ROW=281
|
ROW=281
|
||||||
NULL=282
|
NULL=282
|
||||||
EQUAL=283
|
EQUAL_SYMBOL=283
|
||||||
COMMA=284
|
GREATER_SYMBOL=284
|
||||||
|
LESS_SYMBOL=285
|
||||||
|
EXCLAMATION_SYMBOL=286
|
||||||
|
BIT_NOT_OP=287
|
||||||
|
BIT_OR_OP=288
|
||||||
|
BIT_AND_OP=289
|
||||||
|
BIT_XOR_OP=290
|
||||||
|
DOT=291
|
||||||
|
LR_BRACKET=292
|
||||||
|
RR_BRACKET=293
|
||||||
|
COMMA=294
|
||||||
|
SEMICOLON=295
|
||||||
|
AT_SIGN=296
|
||||||
|
ZERO_DECIMAL=297
|
||||||
|
ONE_DECIMAL=298
|
||||||
|
TWO_DECIMAL=299
|
||||||
|
SINGLE_QUOTE_SYMB=300
|
||||||
|
DOUBLE_QUOTE_SYMB=301
|
||||||
|
REVERSE_QUOTE_SYMB=302
|
||||||
|
COLON_SYMB=303
|
||||||
'SELECT'=5
|
'SELECT'=5
|
||||||
'FROM'=6
|
'FROM'=6
|
||||||
'ADD'=7
|
'ADD'=7
|
||||||
@ -558,4 +577,23 @@ COMMA=284
|
|||||||
'ROW'=281
|
'ROW'=281
|
||||||
'NULL'=282
|
'NULL'=282
|
||||||
'='=283
|
'='=283
|
||||||
','=284
|
'>'=284
|
||||||
|
'<'=285
|
||||||
|
'!'=286
|
||||||
|
'~'=287
|
||||||
|
'|'=288
|
||||||
|
'&'=289
|
||||||
|
'^'=290
|
||||||
|
'.'=291
|
||||||
|
'('=292
|
||||||
|
')'=293
|
||||||
|
','=294
|
||||||
|
';'=295
|
||||||
|
'@'=296
|
||||||
|
'0'=297
|
||||||
|
'1'=298
|
||||||
|
'2'=299
|
||||||
|
'\''=300
|
||||||
|
'"'=301
|
||||||
|
'`'=302
|
||||||
|
':'=303
|
||||||
|
@ -29,6 +29,15 @@ FlinkSqlParserListener.prototype.exitStatement = function(ctx) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Enter a parse tree produced by FlinkSqlParser#sqlStatements.
|
||||||
|
FlinkSqlParserListener.prototype.enterSqlStatements = function(ctx) {
|
||||||
|
};
|
||||||
|
|
||||||
|
// Exit a parse tree produced by FlinkSqlParser#sqlStatements.
|
||||||
|
FlinkSqlParserListener.prototype.exitSqlStatements = function(ctx) {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Enter a parse tree produced by FlinkSqlParser#sqlStatement.
|
// Enter a parse tree produced by FlinkSqlParser#sqlStatement.
|
||||||
FlinkSqlParserListener.prototype.enterSqlStatement = function(ctx) {
|
FlinkSqlParserListener.prototype.enterSqlStatement = function(ctx) {
|
||||||
};
|
};
|
||||||
@ -38,6 +47,15 @@ FlinkSqlParserListener.prototype.exitSqlStatement = function(ctx) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Enter a parse tree produced by FlinkSqlParser#emptyStatement.
|
||||||
|
FlinkSqlParserListener.prototype.enterEmptyStatement = function(ctx) {
|
||||||
|
};
|
||||||
|
|
||||||
|
// Exit a parse tree produced by FlinkSqlParser#emptyStatement.
|
||||||
|
FlinkSqlParserListener.prototype.exitEmptyStatement = function(ctx) {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Enter a parse tree produced by FlinkSqlParser#ddlStatement.
|
// Enter a parse tree produced by FlinkSqlParser#ddlStatement.
|
||||||
FlinkSqlParserListener.prototype.enterDdlStatement = function(ctx) {
|
FlinkSqlParserListener.prototype.enterDdlStatement = function(ctx) {
|
||||||
};
|
};
|
||||||
|
@ -24,12 +24,24 @@ FlinkSqlParserVisitor.prototype.visitStatement = function(ctx) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#sqlStatements.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSqlStatements = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Visit a parse tree produced by FlinkSqlParser#sqlStatement.
|
// Visit a parse tree produced by FlinkSqlParser#sqlStatement.
|
||||||
FlinkSqlParserVisitor.prototype.visitSqlStatement = function(ctx) {
|
FlinkSqlParserVisitor.prototype.visitSqlStatement = function(ctx) {
|
||||||
return this.visitChildren(ctx);
|
return this.visitChildren(ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#emptyStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitEmptyStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Visit a parse tree produced by FlinkSqlParser#ddlStatement.
|
// Visit a parse tree produced by FlinkSqlParser#ddlStatement.
|
||||||
FlinkSqlParserVisitor.prototype.visitDdlStatement = function(ctx) {
|
FlinkSqlParserVisitor.prototype.visitDdlStatement = function(ctx) {
|
||||||
return this.visitChildren(ctx);
|
return this.visitChildren(ctx);
|
||||||
|
@ -6,15 +6,14 @@ describe('FlinkSQL Syntax Tests', () => {
|
|||||||
test('Test simple CreateTable Statement', () => {
|
test('Test simple CreateTable Statement', () => {
|
||||||
const sql = `
|
const sql = `
|
||||||
CREATE TABLE Orders (
|
CREATE TABLE Orders (
|
||||||
user BIGINT,
|
user BIGINT
|
||||||
product STRING
|
|
||||||
) WITH (
|
) WITH (
|
||||||
"connector" = "kafka",
|
"connector" = "kafka",
|
||||||
"scan.startup.mode" = "earliest-offset"
|
"scan.startup.mode" = "earliest-offset"
|
||||||
);
|
);
|
||||||
`;
|
`;
|
||||||
const result = parser.validate(sql);
|
const result = parser.validate(sql);
|
||||||
|
console.log(result);
|
||||||
expect(result.length).toBe(0);
|
expect(result.length).toBe(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user