This is an automated email from the ASF dual-hosted git repository.

strongduanmu 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 9b2b4d13594 Support Oracle drop unused columns syntax (#39917)
9b2b4d13594 is described below

commit 9b2b4d135944e7505862ee753c6867aa3ea468cd
Author: ZhangCheng <[email protected]>
AuthorDate: Tue Sep 22 13:47:55 2026 +0800

    Support Oracle drop unused columns syntax (#39917)
---
 .../oracle/src/main/antlr4/imports/oracle/DDLStatement.g4    |  6 +++++-
 .../visitor/statement/type/OracleDDLStatementVisitor.java    |  2 +-
 test/it/parser/src/main/resources/case/ddl/alter-table.xml   | 12 ++++++++++++
 .../src/main/resources/sql/supported/ddl/alter-table.xml     |  3 +++
 4 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/parser/sql/engine/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
 
b/parser/sql/engine/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 82d95506b67..0496ea791b3 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ 
b/parser/sql/engine/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -733,7 +733,11 @@ modifyColSubstitutable
     ;
 
 dropColumnClause
-    : SET UNUSED columnOrColumnList cascadeOrInvalidate* | 
dropColumnSpecification
+    : SET UNUSED columnOrColumnList cascadeOrInvalidate* | 
dropUnusedColumnsClause | dropColumnSpecification
+    ;
+
+dropUnusedColumnsClause
+    : DROP UNUSED COLUMNS (CHECKPOINT INTEGER_?)?
     ;
 
 dropColumnSpecification
diff --git 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 0dbbcbec65e..84dbfd5a7da 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -744,7 +744,7 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
             if (null != each.modifyColumnSpecification()) {
                 result.getValue().add((ModifyColumnDefinitionSegment) 
visit(each.modifyColumnSpecification()));
             }
-            if (null != each.dropColumnClause()) {
+            if (null != each.dropColumnClause() && null == 
each.dropColumnClause().dropUnusedColumnsClause()) {
                 result.getValue().add((DropColumnDefinitionSegment) 
visit(each.dropColumnClause()));
             }
         }
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 0c636c0d93e..05b53de7e2c 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
@@ -70,6 +70,18 @@
         <drop-column name="M_ROW$$" start-index="35" stop-index="41" />
     </alter-table>
     
+    <alter-table sql-case-id="alter_table_drop_unused_columns">
+        <table name="t_order" start-index="12" stop-index="18" />
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_drop_unused_columns_checkpoint">
+        <table name="t_order" start-index="12" stop-index="18" />
+    </alter-table>
+    
+    <alter-table 
sql-case-id="alter_table_drop_unused_columns_checkpoint_number">
+        <table name="t_order" start-index="12" stop-index="18" />
+    </alter-table>
+    
     <alter-table sql-case-id="alter_table_modify_lob_cache">
         <table name="employees" start-index="12" stop-index="20" />
     </alter-table>
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 de3d81f71b6..eaf7ff16a16 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
@@ -25,6 +25,9 @@
     <sql-case id="alter_table_modify_lob_shrink_space" value="ALTER TABLE 
employees MODIFY LOB (perf_review) (SHRINK SPACE)" db-types="Oracle" />
     <sql-case id="alter_table_set_unused1" value="ALTER TABLE hr.admin_emp SET 
UNUSED (hiredate, mgr)" db-types="Oracle" />
     <sql-case id="alter_table_set_unused2" value="ALTER TABLE table_name SET 
UNUSED (M_ROW$$)" db-types="Oracle" />
+    <sql-case id="alter_table_drop_unused_columns" value="ALTER TABLE t_order 
DROP UNUSED COLUMNS" db-types="Oracle" />
+    <sql-case id="alter_table_drop_unused_columns_checkpoint" value="ALTER 
TABLE t_order DROP UNUSED COLUMNS CHECKPOINT" db-types="Oracle" />
+    <sql-case id="alter_table_drop_unused_columns_checkpoint_number" 
value="ALTER TABLE t_order DROP UNUSED COLUMNS CHECKPOINT 100" 
db-types="Oracle" />
     <sql-case id="alter_table_modify_lob_cache" value="ALTER TABLE employees 
MODIFY LOB (resume) (CACHE)" db-types="Oracle" />
     <sql-case id="alter_table_move_storage_tablespace" value="ALTER TABLE 
hr.admin_emp MOVE STORAGE (INITIAL 20K NEXT 40K MINEXTENTS 2 MAXEXTENTS 20 
PCTINCREASE 0) TABLESPACE hr_tbs" db-types="Oracle" />
     <sql-case id="alter_table_modify1" value="ALTER TABLE employee MODIFY 
(first_name DECRYPT)" db-types="Oracle" />

Reply via email to