fix: fix flinksql create table grammar, add test (#65)
* fix: fix flinksql create table grammar, add test * feat: add cross join, left outer join and time temporal join * test: supplement flinksql join test * fix: fix catalog table grammar, add test * fix: fix flinksql data type, add test * fix: delete console * feat: add query with clause, add test
This commit is contained in:
@ -230,8 +230,10 @@ WS: 'WS';
|
||||
SYSTEM: 'SYSTEM';
|
||||
INCLUDING: 'INCLUDING';
|
||||
EXCLUDING: 'EXCLUDING';
|
||||
OVERWRITING: 'OVERWRITING';
|
||||
CONSTRAINTS: 'CONSTRAINTS';
|
||||
GENERATED: 'GENERATED';
|
||||
WATERMARKS: 'WATERMARKS';
|
||||
CATALOG: 'CATALOG';
|
||||
LANGUAGE: 'LANGUAGE';
|
||||
CATALOGS: 'CATALOGS';
|
||||
@ -240,7 +242,9 @@ PRIMARY: 'PRIMARY';
|
||||
KEY: 'KEY';
|
||||
PERIOD: 'PERIOD';
|
||||
SYSTEM_TIME: 'SYSTEM_TIME';
|
||||
|
||||
ENFORCED: 'ENFORCED';
|
||||
METADATA: 'METADATA';
|
||||
VIRTUAL: 'VIRTUAL';
|
||||
|
||||
// DATA TYPE Keywords
|
||||
|
||||
@ -253,15 +257,19 @@ BINARY: 'BINARY';
|
||||
VARBINARY: 'VARBINARY';
|
||||
BYTES: 'BYTES';
|
||||
DECIMAL: 'DECIMAL';
|
||||
DEC: 'DEC';
|
||||
NUMERIC: 'NUMERIC';
|
||||
TINYINT: 'TINYINT';
|
||||
SMALLINT: 'SMALLINT';
|
||||
INT: 'INT';
|
||||
INTEGER: 'INTEGER';
|
||||
BIGINT: 'BIGINT';
|
||||
FLOAT: 'FLOAT';
|
||||
DOUBLE: 'DOUBLE';
|
||||
DATE: 'DATE';
|
||||
TIME: 'TIME';
|
||||
TIMESTAMP: 'TIMESTAMP';
|
||||
TIMESTAMP_LTZ: 'TIMESTAMP_LTZ';
|
||||
MULTISET: 'MULTISET';
|
||||
BOOLEAN: 'BOOLEAN';
|
||||
RAW: 'RAW';
|
||||
|
@ -50,7 +50,7 @@ showStatememt
|
||||
// Create statements
|
||||
|
||||
createTable
|
||||
: CREATE TABLE uid
|
||||
: CREATE TABLE ifNotExists? sourceTable
|
||||
LR_BRACKET
|
||||
columnOptionDefinition (COMMA columnOptionDefinition)*
|
||||
(COMMA watermarkDefinition)?
|
||||
@ -64,7 +64,13 @@ createTable
|
||||
;
|
||||
|
||||
columnOptionDefinition
|
||||
: columnName columnType lengthOneDimension? columnAlias?
|
||||
: physicalColumnDefinition
|
||||
| metadataColumnDefinition
|
||||
| computedColumnDefinition
|
||||
;
|
||||
|
||||
physicalColumnDefinition
|
||||
: columnName columnType columnConstraint? commentSpec?
|
||||
;
|
||||
|
||||
columnName
|
||||
@ -76,28 +82,77 @@ columnNameList
|
||||
;
|
||||
|
||||
columnType
|
||||
: typeName=(CHAR | VARCHAR | STRING | BINARY | VARBINARY | BYTES
|
||||
| DECIMAL | TINYINT | SMALLINT | INT | BIGINT | FLOAT | DOUBLE
|
||||
| DATE | TIME | TIMESTAMP
|
||||
| ARRAY | MAP | MULTISET | ROW
|
||||
| BOOLEAN | RAW | NULL
|
||||
| DATETIME)
|
||||
: typeName=(DATE | BOOLEAN | NULL)
|
||||
| typeName=(CHAR | VARCHAR | STRING | BINARY | VARBINARY | BYTES
|
||||
| TINYINT | SMALLINT | INT | INTEGER | BIGINT
|
||||
| TIME | TIMESTAMP | TIMESTAMP_LTZ | DATETIME
|
||||
) lengthOneDimension?
|
||||
| typeName=(DECIMAL | DEC | NUMERIC | FLOAT | DOUBLE) lengthTwoOptionalDimension?
|
||||
| type=(ARRAY | MULTISET) lengthOneTypeDimension?
|
||||
| type=MAP mapTypeDimension?
|
||||
| type=ROW rowTypeDimension?
|
||||
| type=RAW lengthTwoStringDimension?
|
||||
;
|
||||
|
||||
lengthOneDimension
|
||||
: '(' decimalLiteral ')'
|
||||
;
|
||||
|
||||
lengthTwoOptionalDimension
|
||||
: '(' decimalLiteral (',' decimalLiteral)? ')'
|
||||
;
|
||||
|
||||
lengthTwoStringDimension
|
||||
: '(' stringLiteral (',' stringLiteral)? ')'
|
||||
;
|
||||
|
||||
lengthOneTypeDimension
|
||||
: LESS_SYMBOL columnType GREATER_SYMBOL
|
||||
;
|
||||
|
||||
mapTypeDimension
|
||||
: LESS_SYMBOL columnType (COMMA columnType) GREATER_SYMBOL
|
||||
;
|
||||
|
||||
rowTypeDimension
|
||||
: LESS_SYMBOL columnName columnType (COMMA columnName columnType)* GREATER_SYMBOL
|
||||
;
|
||||
|
||||
columnConstraint
|
||||
:(CONSTRAINT constraintName)? PRIMARY KEY (NOT ENFORCED)?
|
||||
;
|
||||
|
||||
commentSpec
|
||||
: COMMENT STRING_LITERAL
|
||||
;
|
||||
|
||||
metadataColumnDefinition
|
||||
: columnName columnType METADATA (FROM metadataKey)? VIRTUAL?
|
||||
;
|
||||
|
||||
metadataKey
|
||||
: STRING_LITERAL
|
||||
;
|
||||
|
||||
computedColumnDefinition
|
||||
: columnName AS computedColumnExpression commentSpec?
|
||||
;
|
||||
|
||||
// 计算表达式
|
||||
computedColumnExpression
|
||||
: expression
|
||||
;
|
||||
|
||||
watermarkDefinition
|
||||
: WATERMARK FOR expression AS expression
|
||||
;
|
||||
|
||||
tableConstraint
|
||||
: (CONSTRAINT identifier)? PRIMARY KEY '(' columnNameList ')'
|
||||
: (CONSTRAINT constraintName)? PRIMARY KEY '(' columnNameList ')' (NOT ENFORCED)?
|
||||
;
|
||||
|
||||
constraintName
|
||||
: identifier
|
||||
;
|
||||
|
||||
selfDefinitionClause // 数栈自定义语句 ‘PERIOD FOR SYSTEM_TIME’
|
||||
@ -124,12 +179,16 @@ transformArgument
|
||||
;
|
||||
|
||||
likeDefinition
|
||||
: LIKE identifier likeOption
|
||||
: LIKE sourceTable (LR_BRACKET likeOption* RR_BRACKET)?
|
||||
;
|
||||
|
||||
sourceTable
|
||||
: uid
|
||||
;
|
||||
|
||||
likeOption
|
||||
: (INCLUDING | EXCLUDING) (ALL | CONSTRAINTS)
|
||||
| (INCLUDING | EXCLUDING) (GENERATED | OPTIONS)
|
||||
: (INCLUDING | EXCLUDING) (ALL | CONSTRAINTS | PARTITIONS)
|
||||
| (INCLUDING | EXCLUDING | OVERWRITING) (GENERATED | OPTIONS | WATERMARKS)
|
||||
;
|
||||
|
||||
createCatalog
|
||||
@ -219,6 +278,7 @@ valuesRowDefinition
|
||||
|
||||
queryStatement
|
||||
: valuesCaluse
|
||||
| WITH withItem (COMMA withItem)* queryStatement
|
||||
| '(' queryStatement ')'
|
||||
| left=queryStatement operator=(INTERSECT | UNION | EXCEPT) ALL? right=queryStatement orderByCaluse? limitClause?
|
||||
| selectClause orderByCaluse? limitClause?
|
||||
@ -229,6 +289,14 @@ valuesCaluse
|
||||
: VALUES expression (COMMA expression )*
|
||||
;
|
||||
|
||||
withItem
|
||||
: withItemName (LR_BRACKET columnName (COMMA columnName)* RR_BRACKET)? AS LR_BRACKET queryStatement RR_BRACKET
|
||||
;
|
||||
|
||||
withItemName
|
||||
: identifier
|
||||
;
|
||||
|
||||
selectStatement
|
||||
: selectClause fromClause whereClause? groupByClause? havingClause? windowClause?
|
||||
;
|
||||
@ -247,7 +315,8 @@ fromClause
|
||||
|
||||
tableExpression
|
||||
: tableReference (COMMA tableReference)*
|
||||
| tableExpression NATURAL? (LEFT | RIGHT | FULL | INNER)? JOIN tableExpression joinCondition?
|
||||
| tableExpression NATURAL? (LEFT | RIGHT | FULL | INNER)? OUTER? JOIN tableExpression joinCondition?
|
||||
| tableExpression CROSS JOIN tableExpression
|
||||
;
|
||||
|
||||
tableReference
|
||||
@ -255,11 +324,24 @@ tableReference
|
||||
;
|
||||
|
||||
tablePrimary
|
||||
: TABLE? expression
|
||||
| LATERAL TABLE LR_BRACKET uid LR_BRACKET expression (COMMA expression)* RR_BRACKET RR_BRACKET
|
||||
: TABLE? tablePath systemTimePeriod? (AS? correlationName)?
|
||||
| LATERAL TABLE LR_BRACKET functionName LR_BRACKET expression (COMMA expression)* RR_BRACKET RR_BRACKET
|
||||
| LATERAL? LR_BRACKET queryStatement RR_BRACKET
|
||||
| UNNEST LR_BRACKET expression RR_BRACKET
|
||||
;
|
||||
|
||||
tablePath
|
||||
: uid
|
||||
;
|
||||
|
||||
systemTimePeriod
|
||||
: FOR SYSTEM_TIME AS OF dateTimeExpression
|
||||
;
|
||||
|
||||
dateTimeExpression
|
||||
: expression
|
||||
;
|
||||
|
||||
joinCondition
|
||||
: ON booleanExpression
|
||||
| USING LR_BRACKET uid (COMMA uid)* RR_BRACKET
|
||||
@ -407,6 +489,10 @@ dereferenceDefinition
|
||||
|
||||
// base common
|
||||
|
||||
correlationName
|
||||
: identifier
|
||||
;
|
||||
|
||||
qualifiedName
|
||||
: identifier | dereferenceDefinition
|
||||
;
|
||||
|
@ -2072,7 +2072,7 @@ dataType
|
||||
| typeName=DOUBLE PRECISION?
|
||||
lengthTwoDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType
|
||||
| typeName=(DECIMAL | DEC | FIXED | NUMERIC | FLOAT | FLOAT4 | FLOAT8)
|
||||
lengthTwoOptionalDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType
|
||||
lengthTwoOptionalDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType
|
||||
| typeName=(
|
||||
DATE | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB
|
||||
| BOOL | BOOLEAN | SERIAL
|
||||
|
Reference in New Issue
Block a user