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" />

Reply via email to