Commit 39765ba2 authored by tristaZero's avatar tristaZero
Browse files

modify createTable rule

parent bdfbe1a8
Loading
Loading
Loading
Loading
+91 −76
Original line number Original line Diff line number Diff line
@@ -20,7 +20,7 @@ grammar DDLStatement;
import Symbol, Keyword, Literals, BaseRule;
import Symbol, Keyword, Literals, BaseRule;


createTable
createTable
    : createTableHeader createTableBody
    : CREATE TABLE tableName fileTableClause_ createDefinitionClause_
    ;
    ;


createIndex
createIndex
@@ -58,72 +58,24 @@ truncateTable
    : TRUNCATE TABLE tableName
    : TRUNCATE TABLE tableName
    ;
    ;


createTableHeader
fileTableClause_
    : CREATE TABLE tableName
    : (AS FILETABLE)?
    ;
    ;


createTableBody
createDefinitionClause_
    : (AS FILETABLE)? LP_ createTableDefinition (COMMA_ createTableDefinition)* (COMMA_ periodClause)? RP_(ON (schemaName LP_ columnName RP_ | ignoredIdentifier_ | STRING_))?
    : createTableDefinitions_ partitionScheme_ fileGroup_
    (TEXTIMAGE_ON (ignoredIdentifier_ | STRING_))? ((FILESTREAM_ON (schemaName) | ignoredIdentifier_ STRING_))? (WITH LP_ tableOption (COMMA_ tableOption)* RP_)?
    ;
    ;


createTableDefinition
createTableDefinitions_
    : columnDefinition | computedColumnDefinition | columnSetDefinition | tableConstraint | tableIndex
    : LP_ createTableDefinition_ (COMMA_ createTableDefinition_)* (COMMA_ periodClause)? RP_
    ;

periodClause
    : PERIOD FOR SYSTEM_TIME LP_ columnName COMMA_ columnName RP_
    ;

tableIndex
    : INDEX indexName
    (
        (CLUSTERED | NONCLUSTERED)? columnNames
        | CLUSTERED COLUMNSTORE
        | NONCLUSTERED? (COLUMNSTORE columnNames | hashWithBucket) 
        | CLUSTERED COLUMNSTORE (WITH LP_ COMPRESSION_DELAY EQ_ (NUMBER_ MINUTES?) RP_)?
    )
    (WHERE expr)?
    (WITH LP_ indexOption (COMMA_ indexOption)* RP_)? indexOnClause?
    (FILESTREAM_ON (ignoredIdentifier_ | schemaName | STRING_))?
    ;

tableOption
    : DATA_COMPRESSION EQ_ (NONE | ROW | PAGE) (ON PARTITIONS LP_ partitionExpressions RP_)?
    | FILETABLE_DIRECTORY EQ_ ignoredIdentifier_ 
    | FILETABLE_COLLATE_FILENAME EQ_ (collationName | DATABASE_DEAULT)
    | FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | SYSTEM_VERSIONING EQ_ ON (LP_ HISTORY_TABLE EQ_ tableName (COMMA_ DATA_CONSISTENCY_CHECK EQ_ (ON | OFF))? RP_)?
    | REMOTE_DATA_ARCHIVE EQ_ (ON (LP_ tableStretchOptions (COMMA_ tableStretchOptions)* RP_)? | OFF LP_ MIGRATION_STATE EQ_ PAUSED RP_)
    | tableOptOption
    | distributionOption
    | dataWareHouseTableOption
    ;

tableOptOption
    : (MEMORY_OPTIMIZED EQ_ ON) | (DURABILITY EQ_ (SCHEMA_ONLY | SCHEMA_AND_DATA)) | (SYSTEM_VERSIONING EQ_ ON (LP_ HISTORY_TABLE EQ_ tableName (COMMA_ DATA_CONSISTENCY_CHECK EQ_ (ON | OFF))? RP_)?)
    ;
    ;


distributionOption
createTableDefinition_
    : DISTRIBUTION EQ_ (HASH LP_ columnName RP_ | ROUND_ROBIN | REPLICATE) 
    : columnDefinition | computedColumnDefinition | columnSetDefinition | tableConstraint | tableIndex
    ;

dataWareHouseTableOption
    : CLUSTERED COLUMNSTORE INDEX | HEAP | dataWareHousePartitionOption
    ;

dataWareHousePartitionOption
    : (PARTITION LP_ columnName RANGE (LEFT | RIGHT)? FOR VALUES LP_ simpleExpr (COMMA_ simpleExpr)* RP_ RP_)
    ;

tableStretchOptions 
    : (FILTER_PREDICATE EQ_ (NULL | functionCall) COMMA_)? MIGRATION_STATE EQ_ (OUTBOUND | INBOUND | PAUSED)
    ;
    ;


columnDefinition
columnDefinition
    : columnName dataType columnDefinitionOption* (columnConstraint(COMMA_ columnConstraint)*)? columnIndex?
    : columnName dataType columnDefinitionOption* columnConstraints columnIndex?
    ;
    ;


columnDefinitionOption
columnDefinitionOption
@@ -154,6 +106,34 @@ diskTablePrimaryKeyConstraintOption
    : (CLUSTERED | NONCLUSTERED)? primaryKeyWithClause? primaryKeyOnClause?
    : (CLUSTERED | NONCLUSTERED)? primaryKeyWithClause? primaryKeyOnClause?
    ;
    ;


primaryKeyWithClause
    : WITH (FILLFACTOR EQ_ NUMBER_ | LP_ indexOption (COMMA_ indexOption)* RP_)
    ;

primaryKeyOnClause
    : onSchemaColumn | onFileGroup | onString
    ;

onSchemaColumn
    : ON schemaName LP_ columnName RP_
    ;

onFileGroup
    : ON ignoredIdentifier_
    ;

onString
    : ON STRING_
    ;

memoryTablePrimaryKeyConstraintOption
    : CLUSTERED withBucket?
    ;

withBucket
    : WITH LP_ BUCKET_COUNT EQ_ NUMBER_ RP_
    ;

columnForeignKeyConstraint
columnForeignKeyConstraint
    : (FOREIGN KEY)? REFERENCES tableName LP_ columnName RP_ foreignKeyOnAction*
    : (FOREIGN KEY)? REFERENCES tableName LP_ columnName RP_ foreignKeyOnAction*
    ;
    ;
@@ -166,40 +146,75 @@ foreignKeyOn
    : NO ACTION | CASCADE | SET (NULL | DEFAULT)
    : NO ACTION | CASCADE | SET (NULL | DEFAULT)
    ;
    ;


memoryTablePrimaryKeyConstraintOption
checkConstraint
    : CLUSTERED withBucket?
    : CHECK(NOT FOR REPLICATION)? LP_ expr RP_
    ;
    ;


hashWithBucket
columnConstraints
    : HASH columnNames withBucket
    : (columnConstraint(COMMA_ columnConstraint)*)?
    ;
    ;


withBucket
partitionScheme_
    : WITH LP_ BUCKET_COUNT EQ_ NUMBER_ RP_
    : (ON (schemaName LP_ columnName RP_ | ignoredIdentifier_ | STRING_))?
    ;
    ;


primaryKeyWithClause
fileGroup_
    : WITH (FILLFACTOR EQ_ NUMBER_ | LP_ indexOption (COMMA_ indexOption)* RP_)
    : (TEXTIMAGE_ON (ignoredIdentifier_ | STRING_))? ((FILESTREAM_ON (schemaName) | ignoredIdentifier_ STRING_))? (WITH LP_ tableOption (COMMA_ tableOption)* RP_)?
    ;
    ;


primaryKeyOnClause
periodClause
    : onSchemaColumn | onFileGroup | onString
    : PERIOD FOR SYSTEM_TIME LP_ columnName COMMA_ columnName RP_
    ;
    ;


onSchemaColumn
tableIndex
    : ON schemaName LP_ columnName RP_
    : INDEX indexName
    (
        (CLUSTERED | NONCLUSTERED)? columnNames
        | CLUSTERED COLUMNSTORE
        | NONCLUSTERED? (COLUMNSTORE columnNames | hashWithBucket) 
        | CLUSTERED COLUMNSTORE (WITH LP_ COMPRESSION_DELAY EQ_ (NUMBER_ MINUTES?) RP_)?
    )
    (WHERE expr)?
    (WITH LP_ indexOption (COMMA_ indexOption)* RP_)? indexOnClause?
    (FILESTREAM_ON (ignoredIdentifier_ | schemaName | STRING_))?
    ;
    ;


onFileGroup
tableOption
    : ON ignoredIdentifier_
    : DATA_COMPRESSION EQ_ (NONE | ROW | PAGE) (ON PARTITIONS LP_ partitionExpressions RP_)?
    | FILETABLE_DIRECTORY EQ_ ignoredIdentifier_ 
    | FILETABLE_COLLATE_FILENAME EQ_ (collationName | DATABASE_DEAULT)
    | FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME EQ_ ignoredIdentifier_
    | SYSTEM_VERSIONING EQ_ ON (LP_ HISTORY_TABLE EQ_ tableName (COMMA_ DATA_CONSISTENCY_CHECK EQ_ (ON | OFF))? RP_)?
    | REMOTE_DATA_ARCHIVE EQ_ (ON (LP_ tableStretchOptions (COMMA_ tableStretchOptions)* RP_)? | OFF LP_ MIGRATION_STATE EQ_ PAUSED RP_)
    | tableOptOption
    | distributionOption
    | dataWareHouseTableOption
    ;
    ;


onString
tableOptOption
    : ON STRING_
    : (MEMORY_OPTIMIZED EQ_ ON) | (DURABILITY EQ_ (SCHEMA_ONLY | SCHEMA_AND_DATA)) | (SYSTEM_VERSIONING EQ_ ON (LP_ HISTORY_TABLE EQ_ tableName (COMMA_ DATA_CONSISTENCY_CHECK EQ_ (ON | OFF))? RP_)?)
    ;
    ;


checkConstraint
distributionOption
    : CHECK(NOT FOR REPLICATION)? LP_ expr RP_
    : DISTRIBUTION EQ_ (HASH LP_ columnName RP_ | ROUND_ROBIN | REPLICATE) 
    ;

dataWareHouseTableOption
    : CLUSTERED COLUMNSTORE INDEX | HEAP | dataWareHousePartitionOption
    ;

dataWareHousePartitionOption
    : (PARTITION LP_ columnName RANGE (LEFT | RIGHT)? FOR VALUES LP_ simpleExpr (COMMA_ simpleExpr)* RP_ RP_)
    ;

tableStretchOptions 
    : (FILTER_PREDICATE EQ_ (NULL | functionCall) COMMA_)? MIGRATION_STATE EQ_ (OUTBOUND | INBOUND | PAUSED)
    ;

hashWithBucket
    : HASH columnNames withBucket
    ;
    ;


columnIndex
columnIndex