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