Skip to content

Commit c409b80

Browse files
author
mumiao
authored
feat(flink): support insert multipe tables statement for FlinkSQL 1.15(#104)
* feat(flink): support insert multipe tables statement for FlinkSQL 1.15 * test: recover jest.config info * fix(flink): correct typo * fix(flinksql): resolve conflicts
1 parent 4b824fb commit c409b80

8 files changed

Lines changed: 2562 additions & 2403 deletions

File tree

src/grammar/flinksql/FlinkSqlParser.g4

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,8 @@ dropFunction
347347
// Insert statements
348348

349349
insertStatement
350-
: (KW_EXECUTE? insertSimpleStatement) | (KW_EXECUTE insertMulStatement)
350+
: (KW_EXECUTE? insertSimpleStatement)
351+
| insertMulStatementCompatibility | (KW_EXECUTE insertMulStatement)
351352
;
352353

353354
insertSimpleStatement
@@ -372,6 +373,10 @@ valuesRowDefinition
372373
RR_BRACKET
373374
;
374375

376+
insertMulStatementCompatibility
377+
: KW_BEGIN KW_STATEMENT KW_SET SEMICOLON (insertSimpleStatement SEMICOLON)+ KW_END
378+
;
379+
375380
insertMulStatement
376381
: KW_STATEMENT KW_SET KW_BEGIN (insertSimpleStatement SEMICOLON)+ KW_END
377382
;

src/lib/flinksql/FlinkSqlLexer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0
1+
// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0
22
// noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols
33
import {
44
ATN,

src/lib/flinksql/FlinkSqlParser.interp

Lines changed: 2 additions & 1 deletion
Large diffs are not rendered by default.

src/lib/flinksql/FlinkSqlParser.ts

Lines changed: 2521 additions & 2397 deletions
Large diffs are not rendered by default.

src/lib/flinksql/FlinkSqlParserListener.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0
1+
// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0
22

33
import {ParseTreeListener} from "antlr4";
44

@@ -81,6 +81,7 @@ import { InsertSimpleStatementContext } from "./FlinkSqlParser";
8181
import { InsertPartitionDefinitionContext } from "./FlinkSqlParser";
8282
import { ValuesDefinitionContext } from "./FlinkSqlParser";
8383
import { ValuesRowDefinitionContext } from "./FlinkSqlParser";
84+
import { InsertMulStatementCompatibilityContext } from "./FlinkSqlParser";
8485
import { InsertMulStatementContext } from "./FlinkSqlParser";
8586
import { QueryStatementContext } from "./FlinkSqlParser";
8687
import { ValuesCaluseContext } from "./FlinkSqlParser";
@@ -993,6 +994,16 @@ export default class FlinkSqlParserListener extends ParseTreeListener {
993994
* @param ctx the parse tree
994995
*/
995996
exitValuesRowDefinition?: (ctx: ValuesRowDefinitionContext) => void;
997+
/**
998+
* Enter a parse tree produced by `FlinkSqlParser.insertMulStatementCompatibility`.
999+
* @param ctx the parse tree
1000+
*/
1001+
enterInsertMulStatementCompatibility?: (ctx: InsertMulStatementCompatibilityContext) => void;
1002+
/**
1003+
* Exit a parse tree produced by `FlinkSqlParser.insertMulStatementCompatibility`.
1004+
* @param ctx the parse tree
1005+
*/
1006+
exitInsertMulStatementCompatibility?: (ctx: InsertMulStatementCompatibilityContext) => void;
9961007
/**
9971008
* Enter a parse tree produced by `FlinkSqlParser.insertMulStatement`.
9981009
* @param ctx the parse tree

src/lib/flinksql/FlinkSqlParserVisitor.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0
1+
// Generated from /Users/zhenglin/Documents/parser/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0
22

33
import {ParseTreeVisitor} from 'antlr4';
44

@@ -81,6 +81,7 @@ import { InsertSimpleStatementContext } from "./FlinkSqlParser";
8181
import { InsertPartitionDefinitionContext } from "./FlinkSqlParser";
8282
import { ValuesDefinitionContext } from "./FlinkSqlParser";
8383
import { ValuesRowDefinitionContext } from "./FlinkSqlParser";
84+
import { InsertMulStatementCompatibilityContext } from "./FlinkSqlParser";
8485
import { InsertMulStatementContext } from "./FlinkSqlParser";
8586
import { QueryStatementContext } from "./FlinkSqlParser";
8687
import { ValuesCaluseContext } from "./FlinkSqlParser";
@@ -682,6 +683,12 @@ export default class FlinkSqlParserVisitor<Result> extends ParseTreeVisitor<Resu
682683
* @return the visitor result
683684
*/
684685
visitValuesRowDefinition?: (ctx: ValuesRowDefinitionContext) => Result;
686+
/**
687+
* Visit a parse tree produced by `FlinkSqlParser.insertMulStatementCompatibility`.
688+
* @param ctx the parse tree
689+
* @return the visitor result
690+
*/
691+
visitInsertMulStatementCompatibility?: (ctx: InsertMulStatementCompatibilityContext) => Result;
685692
/**
686693
* Visit a parse tree produced by `FlinkSqlParser.insertMulStatement`.
687694
* @param ctx the parse tree

test/helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const readSQL = (dirname: string, fileName: string) => {
1010
const char = content[index];
1111
tmp += char;
1212

13-
const isMulti = tmp.includes('EXECUTE STATEMENT SET');
13+
const isMulti = tmp.includes('EXECUTE STATEMENT SET') || tmp.includes('BEGIN STATEMENT SET;');
1414

1515
if (!isMulti) {
1616
// 非批量的先简单按照分号切割

test/parser/flinksql/syntax/fixtures/insertMultipleTable.sql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
-- FlinkSQL 1.16:insert multiple table statement
2+
13
EXECUTE STATEMENT SET
24
BEGIN
35
INSERT INTO country_page_view
@@ -8,4 +10,13 @@ VALUES ('Chinese', 'mumiao', 18),
810
('Amercian', 'georage', 22);
911
END;
1012

13+
-- FlinkSQL 1.15:insert multiple table statement
1114

15+
BEGIN STATEMENT SET;
16+
INSERT INTO country_page_view
17+
VALUES ('Chinese', 'mumiao', 18),
18+
('Amercian', 'georage', 22);
19+
INSERT INTO country_page_view
20+
VALUES ('Chinese', 'mumiao', 18),
21+
('Amercian', 'georage', 22);
22+
END;

0 commit comments

Comments
 (0)