This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new da5688118a2 update create and alter statement (#37346)
da5688118a2 is described below
commit da5688118a2a6aa1d27f5c422b61f13c249a845b
Author: Claire <[email protected]>
AuthorDate: Fri Dec 12 14:27:39 2025 +0800
update create and alter statement (#37346)
---
.../src/main/antlr4/imports/hive/DDLStatement.g4 | 49 +++++++++++++++++++++-
.../src/main/antlr4/imports/hive/HiveKeyword.g4 | 12 ++++++
.../src/main/resources/case/ddl/alter-table.xml | 48 +++++++++++++++++++++
.../src/main/resources/case/ddl/create-table.xml | 11 +++++
.../resources/sql/supported/ddl/alter-table.xml | 12 ++++++
.../resources/sql/supported/ddl/create-table.xml | 2 +
6 files changed, 133 insertions(+), 1 deletion(-)
diff --git
a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
index 65341fcb039..693b69fe2d3 100644
---
a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
+++
b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
@@ -37,7 +37,7 @@ use
createTable
: createTableCommonClause createDefinitionClause? commentClause?
partitionedBy? clusteredBy? skewedBy? rowFormat? storedByIceberg? storedClause?
storageLocation? tblProperties? (AS select)?
- | createTableCommonClause LIKE existingTableName storageLocation?
+ | createTableCommonClause LIKE existingTableName storedByIceberg?
storageLocation?
;
dropTable
@@ -77,6 +77,10 @@ alterTable
| alterTableCommonClause partitionSpec? changeColumn
| alterTableCommonClause partitionSpec? addColumns
| alterTableCommonClause partitionSpec? replaceColumns
+ | alterTableCommonClause createBranch
+ | alterTableCommonClause createTag
+ | alterTableCommonClause dropBranch
+ | alterTableCommonClause dropTag
;
createView
@@ -487,3 +491,46 @@ createFunctionOption
createFunctionOptions
: USING resourceClause createFunctionOption
;
+
+createBranch
+ : CREATE BRANCH identifier branchCreationTail?
+ ;
+
+branchCreationTail
+ : systemVersionTail branchSnapshotRetentionTail?
+ | systemTimeTail
+ | branchTagTail
+ ;
+
+systemVersionTail
+ : FOR SYSTEM_VERSION AS OF (NUMBER_ | identifier)
+ ;
+
+systemTimeTail
+ : FOR SYSTEM_TIME AS OF string_
+ ;
+
+branchTagTail
+ : FOR TAG AS OF identifier
+ ;
+
+branchSnapshotRetentionTail
+ : WITH SNAPSHOT RETENTION NUMBER_ SNAPSHOTS
+ ;
+
+createTag
+ : CREATE TAG identifier tagCreationTail?
+ ;
+
+tagCreationTail
+ : systemVersionTail
+ | systemTimeTail
+ ;
+
+dropBranch
+ : DROP BRANCH ifExists? identifier
+ ;
+
+dropTag
+ : DROP TAG ifExists? identifier
+ ;
diff --git
a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
index 166547aecb1..170f6dd8098 100644
--- a/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
+++ b/parser/sql/engine/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
@@ -2147,6 +2147,10 @@ RETAIN
: R E T A I N
;
+RETENTION
+ : R E T E N T I O N
+ ;
+
RETURN
: R E T U R N
;
@@ -2579,6 +2583,14 @@ SYSTEM
: S Y S T E M
;
+SYSTEM_TIME
+ : S Y S T E M UL_ T I M E
+ ;
+
+SYSTEM_VERSION
+ : S Y S T E M UL_ V E R S I O N
+ ;
+
SOURCE_BIND
: S O U R C E UL_ B I N D
;
diff --git a/test/it/parser/src/main/resources/case/ddl/alter-table.xml
b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
index 4eea36c3090..942a7d60e9d 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
@@ -2493,4 +2493,52 @@
<restrict start-index="161" stop-index="164" />
</replace-columns>
</alter-table>
+
+ <alter-table sql-case-id="alter_create_branch_default">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_branch_snapshot_id">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_branch_system_time">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_branch_snapshot_retention">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_branch_tag">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_tag_default">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_tag_snapshot_id">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_create_tag_system_time">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_drop_branch_basic">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_drop_branch_if_exists">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_drop_tag_basic">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_drop_tag_if_exists">
+ <table name="test" start-index="12" stop-index="15" />
+ </alter-table>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index bd865aae4ab..9a141181864 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -3701,6 +3701,17 @@
<storage-format type="ORC" start-index="73" stop-index="76" />
</create-table>
+ <create-table sql-case-id="create_iceberg_table_as_select">
+ <table name="target" start-index="13" stop-index="18" />
+ <storage-handler name="ICEBERG" start-index="36" stop-index="43" />
+ <as-select query="SELECT * FROM source" start-index="48"
stop-index="64" />
+ </create-table>
+
+ <create-table sql-case-id="create_iceberg_table_like_table">
+ <table name="target" like="source" start-index="13" stop-index="18"/>
+ <storage-handler name="ICEBERG" start-index="37" stop-index="44" />
+ </create-table>
+
<create-table sql-case-id="create_table_with_blob">
<table name="t_blob" start-index="13" stop-index="18" />
<column-definition type="INT" start-index="21" stop-index="26">
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
index 3e9335690a0..4f4b48c7d45 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
@@ -359,4 +359,16 @@
<sql-case id="alter_replace_columns_quoted2" value="ALTER TABLE users
PARTITION (region='south_america') REPLACE COLUMNS (`user name` STRING COMMENT
'full name of user', `login count` INT COMMENT 'number of logins') RESTRICT"
db-types="Hive" />
<sql-case id="alter_replace_columns_quoted3" value="ALTER TABLE products
PARTITION (cat='clothing') REPLACE COLUMNS (`size info` STRING COMMENT 'size
specification', `color code` INT COMMENT 'RGB color value') CASCADE"
db-types="Hive" />
<sql-case id="alter_replace_columns_quoted4" value="ALTER TABLE orders
PARTITION (status='shipped') REPLACE COLUMNS (`ship date` DATE COMMENT 'actual
shipping date', `tracking id` STRING COMMENT 'logistics tracking number')
RESTRICT" db-types="Hive" />
+ <sql-case id="alter_create_branch_default" value="ALTER TABLE test CREATE
BRANCH branch1;" db-types="Hive" />
+ <sql-case id="alter_create_branch_snapshot_id" value="ALTER TABLE test
CREATE BRANCH branch1 FOR SYSTEM_VERSION AS OF 3369973735913135680;"
db-types="Hive" />
+ <sql-case id="alter_create_branch_system_time" value="ALTER TABLE test
CREATE BRANCH branch1 FOR SYSTEM_TIME AS OF '2023-09-16 09:46:38.939 Etc/UTC';"
db-types="Hive" />
+ <sql-case id="alter_create_branch_snapshot_retention" value="ALTER TABLE
test CREATE BRANCH branch1 FOR SYSTEM_VERSION AS OF 3369973735913135680 WITH
SNAPSHOT RETENTION 5 SNAPSHOTS;" db-types="Hive" />
+ <sql-case id="alter_create_branch_tag" value="ALTER TABLE test CREATE
BRANCH branch1 FOR TAG AS OF tag1;" db-types="Hive" />
+ <sql-case id="alter_create_tag_default" value="ALTER TABLE test CREATE TAG
tag1;" db-types="Hive" />
+ <sql-case id="alter_create_tag_snapshot_id" value="ALTER TABLE test CREATE
TAG tag1 FOR SYSTEM_VERSION AS OF 3369973735913135680;" db-types="Hive" />
+ <sql-case id="alter_create_tag_system_time" value="ALTER TABLE test CREATE
TAG tag1 FOR SYSTEM_TIME AS OF '2023-09-16 09:46:38.939 Etc/UTC';"
db-types="Hive" />
+ <sql-case id="alter_drop_branch_basic" value="ALTER TABLE test DROP BRANCH
branch1;" db-types="Hive" />
+ <sql-case id="alter_drop_branch_if_exists" value="ALTER TABLE test DROP
BRANCH IF EXISTS branch1;" db-types="Hive" />
+ <sql-case id="alter_drop_tag_basic" value="ALTER TABLE test DROP TAG
tag1;" db-types="Hive" />
+ <sql-case id="alter_drop_tag_if_exists" value="ALTER TABLE test DROP TAG
IF EXISTS tag1;" db-types="Hive" />
</sql-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index 4109ac1424f..b0996e021a7 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -512,6 +512,8 @@
<sql-case id="create_iceberg_table" value="CREATE EXTERNAL TABLE user_log
(user_name STRING) STORED BY ICEBERG;" db-types="Hive" />
<sql-case id="create_iceberg_table_partition" value="CREATE TABLE user_log
(user_name STRING) PARTITIONED BY (year int) STORED BY ICEBERG;"
db-types="Hive" />
<sql-case id="create_iceberg_table_orc" value="CREATE TABLE user_log
(user_name STRING) STORED BY ICEBERG STORED AS ORC;" db-types="Hive" />
+ <sql-case id="create_iceberg_table_as_select" value="CREATE TABLE target
STORED BY ICEBERG AS SELECT * FROM source;" db-types="Hive" />
+ <sql-case id="create_iceberg_table_like_table" value="CREATE TABLE target
LIKE source STORED BY ICEBERG;" db-types="Hive" />
<sql-case id="create_table_with_blob" value="CREATE TABLE t_blob (id INT,
payload BLOB)" db-types="Firebird" />
<sql-case id="create_table_with_blob_subtype_numeric" value="CREATE TABLE
t_blob_subtype_numeric (payload BLOB SUB_TYPE 1)" db-types="Firebird" />
<sql-case id="create_table_with_blob_subtype_text" value="CREATE TABLE
t_blob_subtype_text (payload BLOB SUB_TYPE TEXT CHARACTER SET UTF8)"
db-types="Firebird" />