Skip to content

Commit d1259b4

Browse files
author
Erindcl
committed
feat(flink): update createTable grammar
1 parent 1b9efdc commit d1259b4

1 file changed

Lines changed: 77 additions & 26 deletions

File tree

src/grammar/flinksql/FlinkSqlParser.g4

Lines changed: 77 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ emptyStatement
2222
;
2323

2424
ddlStatement
25-
: createTable | createDatabase | createView | createFunction
25+
: createTable | createDatabase | createView | createFunction | createCatalog
2626
| alterTable | alterDatabase | alterFunction
2727
| dropTable | dropDatabase | dropView | dropFunction
2828
;
@@ -38,13 +38,16 @@ createTable
3838
: CREATE TABLE uid
3939
LR_BRACKET
4040
columnOptionDefinition (COMMA columnOptionDefinition)*
41+
watermarkDefinition?
4142
RR_BRACKET
43+
commentSpec?
4244
partitionDefinition?
4345
withOption
46+
likeDefinition?
4447
;
4548

4649
columnOptionDefinition
47-
: columnName columnType
50+
: columnName columnType lengthOneDimension?
4851
;
4952

5053
columnName
@@ -59,28 +62,60 @@ columnType
5962
| BOOLEAN | RAW | NULL)
6063
;
6164

65+
lengthOneDimension
66+
: '(' decimalLiteral ')'
67+
;
68+
69+
commentSpec
70+
: COMMENT STRING_LITERAL
71+
;
72+
73+
watermarkDefinition
74+
: WATERMARK FOR expression AS expression
75+
;
76+
6277
partitionDefinition
63-
: PARTITIONED BY partitionColumnDefinition
78+
: PARTITIONED BY transformList
6479
;
6580

66-
partitionColumnDefinition
67-
: partitionColumnName (COMMA partitionColumnName)*
81+
transformList
82+
: '(' transform (',' transform)* ')'
6883
;
6984

70-
partitionColumnName
71-
: ID
85+
transform
86+
: qualifiedName #identityTransform
87+
| transformName=identifier
88+
'(' transformArgument (',' transformArgument)* ')' #applyTransform
89+
;
90+
91+
transformArgument
92+
: qualifiedName
93+
| constant
94+
;
95+
96+
likeDefinition
97+
: LIKE identifier likeOption
98+
;
99+
100+
likeOption
101+
: (INCLUDING | EXCLUDING) (ALL | CONSTRAINTS)
102+
| (INCLUDING | EXCLUDING) (GENERATED | OPTIONS)
103+
;
104+
105+
createCatalog
106+
: CREATE CATALOG uid withOption
72107
;
73108

74109
createDatabase
75-
: CREATE DATABASE ifNotExists? uid withOption
110+
: CREATE DATABASE ifNotExists? uid commentSpec? withOption
76111
;
77112

78113
createView
79-
: CREATE TEMPORARY? VIEW ifNotExists? uid AS selectStatement
114+
: CREATE TEMPORARY? VIEW ifNotExists? uid (columnName (',' columnName)*)? commentSpec AS queryStatement
80115
;
81116

82117
createFunction
83-
:
118+
: CREATE (TEMPORARY|TEMPORARY SYSTEM) FUNCTION ifNotExists? uid AS identifier (LANGUAGE identifier)?
84119
;
85120

86121
// Alter statements
@@ -346,6 +381,10 @@ dereferenceDefinition
346381

347382
// base common
348383

384+
qualifiedName
385+
: identifier ('.' identifier)*
386+
;
387+
349388
interval
350389
: INTERVAL (errorCapturingMultiUnitsInterval | errorCapturingUnitToUnitInterval)?
351390
;
@@ -422,9 +461,7 @@ uid
422461
;
423462

424463
withOption
425-
: WITH LR_BRACKET
426-
keyValueDefinition (COMMA keyValueDefinition)*
427-
RR_BRACKET
464+
: WITH tablePropertyList
428465
;
429466

430467
ifNotExists
@@ -437,6 +474,26 @@ keyValueDefinition
437474
: STRING_LITERAL EQUAL_SYMBOL STRING_LITERAL
438475
;
439476

477+
tablePropertyList
478+
: '(' tableProperty (',' tableProperty)* ')'
479+
;
480+
481+
tableProperty
482+
: key=tablePropertyKey (EQUAL_SYMBOL? value=tablePropertyValue)?
483+
;
484+
485+
tablePropertyKey
486+
: identifier ('.' identifier)*
487+
| STRING_LITERAL
488+
;
489+
490+
tablePropertyValue
491+
: DIG_LITERAL
492+
| REAL_LITERAL
493+
| booleanLiteral
494+
| STRING_LITERAL
495+
;
496+
440497
logicalOperator
441498
: AND | '&' '&' | OR | '|' '|'
442499
;
@@ -744,21 +801,15 @@ PAST: 'PAST';
744801
PATTERN: 'PATTERN';
745802
WITHIN: 'WITHIN';
746803
DEFINE: 'DEFINE';
747-
BIGINT_LITERAL: 'BIGINT_LITERAL';
748-
SMALLINT_LITERAL: 'SMALLINT_LITERAL';
749-
TINYINT_LITERAL: 'TINYINT_LITERAL';
750-
INTEGER_VALUE: 'INTEGER_VALUE';
751-
DECIMAL_VALUE: 'DECIMAL_VALUE';
752-
DOUBLE_LITERAL: 'DOUBLE_LITERAL';
753-
BIGDECIMAL_LITERAL: 'BIGDECIMAL_LITERAL';
754-
IDENTIFIER: 'IDENTIFIER';
755-
BACKQUOTED_IDENTIFIER: 'BACKQUOTED_IDENTIFIER';
756-
SIMPLE_COMMENT: 'SIMPLE_COMMENT';
757-
BRACKETED_EMPTY_COMMENT: 'BRACKETED_EMPTY_COMMENT';
758-
BRACKETED_COMMENT: 'BRACKETED_COMMENT';
759804
WS: 'WS';
760-
UNRECOGNIZED: 'UNRECOGNIZED';
761805
SYSTEM: 'SYSTEM';
806+
INCLUDING: 'INCLUDING';
807+
EXCLUDING: 'EXCLUDING';
808+
CONSTRAINTS: 'CONSTRAINTS';
809+
OVERWRITING: 'OVERWRITING';
810+
GENERATED: 'GENERATED';
811+
CATALOG: 'CATALOG';
812+
LANGUAGE: 'LANGUAGE';
762813

763814

764815
// DATA TYPE Keywords

0 commit comments

Comments
 (0)