You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ch...@apache.org on 2023/08/25 07:05:57 UTC

[shardingsphere] branch master updated: Fix oracle drop column ClassCastException (#28232)

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

chengzhang 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 3af9fa0314a Fix oracle drop column ClassCastException (#28232)
3af9fa0314a is described below

commit 3af9fa0314aff353c8e976268015e27bc89ff790
Author: niu niu <zi...@aliyun.com>
AuthorDate: Fri Aug 25 15:05:50 2023 +0800

    Fix oracle drop column ClassCastException (#28232)
---
 .../statement/type/OracleDDLStatementVisitor.java  | 17 ++++++++++
 .../src/main/resources/case/ddl/alter-table.xml    | 38 +++++++++++++++++++++-
 .../resources/sql/supported/ddl/alter-table.xml    |  7 +++-
 3 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index ff558c7f537..acdadd2c9e1 100644
--- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -96,6 +96,7 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Create
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateTablespaceContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DisassociateStatisticsContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropClusterContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropColumnClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropColumnSpecificationContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropConstraintClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropContextContext;
@@ -529,6 +530,22 @@ public final class OracleDDLStatementVisitor extends OracleStatementVisitor impl
         return new ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columnDefinition);
     }
     
+    @Override
+    public ASTNode visitDropColumnClause(final DropColumnClauseContext ctx) {
+        if (null != ctx.dropColumnSpecification()) {
+            return visit(ctx.dropColumnSpecification());
+        }
+        Collection<ColumnSegment> columns = new LinkedList<>();
+        if (null != ctx.columnOrColumnList().columnName()) {
+            columns.add((ColumnSegment) visit(ctx.columnOrColumnList().columnName()));
+        } else {
+            for (ColumnNameContext each : ctx.columnOrColumnList().columnNames().columnName()) {
+                columns.add((ColumnSegment) visit(each));
+            }
+        }
+        return new DropColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), columns);
+    }
+    
     @Override
     public ASTNode visitModifyColProperties(final ModifyColPropertiesContext ctx) {
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
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 23c45b56768..bb7645b4855 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
@@ -17,6 +17,38 @@
   -->
 
 <sql-parser-test-cases>
+    <alter-table sql-case-id="alter_table_modify_lob_shrink_space">
+        <table name="employees" start-index="12" stop-index="20" />
+        <modify-column>
+            <column-definition start-index="29" stop-index="31">
+                <column name="LOB" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_set_unused">
+        <table name="admin_emp" start-index="12" stop-index="23">
+            <owner start-index="12" stop-index="13" name="hr" />
+        </table>
+        <drop-column name="hiredate" start-index="37" stop-index="44" />
+        <drop-column name="mgr" start-index="47" stop-index="49" />
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify_lob_cache">
+        <table name="employees" start-index="12" stop-index="20" />
+        <modify-column>
+            <column-definition start-index="29" stop-index="31">
+                <column name="LOB" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_move_storage_tablespace">
+        <table name="admin_emp" start-index="12" stop-index="23">
+            <owner start-index="12" stop-index="13" name="hr" />
+        </table>
+    </alter-table>
+    
     <alter-table sql-case-id="alter_table_modify1">
         <table name="employee" start-index="12" stop-index="19" />
         <modify-column>
@@ -122,12 +154,16 @@
         <table name="admin_iot5" start-index="12" stop-index="21" />
     </alter-table>
     
-    <alter-table sql-case-id="alter_table_enable_row_movement">
+    <alter-table sql-case-id="alter_table_enable_row_movement1">
         <table name="AUD$" start-index="12" stop-index="22">
             <owner start-index="12" stop-index="17" name="SYSTEM" />
         </table>
     </alter-table>
     
+    <alter-table sql-case-id="alter_table_enable_row_movement2">
+        <table name="employees_test" start-index="12" stop-index="25" />
+    </alter-table>
+    
     <alter-table sql-case-id="alter_table_shrink_space_cascade">
         <table name="AUD$" start-index="12" stop-index="22">
             <owner start-index="12" stop-index="17" name="SYSTEM" />
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 b05eb94a3ee..b38290934ff 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
@@ -17,6 +17,10 @@
   -->
 
 <sql-cases>
+    <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_unused" value="ALTER TABLE hr.admin_emp SET UNUSED (hiredate, mgr)" 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" />
     <sql-case id="alter_table_modify2" value="ALTER TABLE employee MODIFY (first_name ENCRYPT SALT)" db-types="Oracle" />
     <sql-case id="alter_table_modify3" value="ALTER TABLE employee MODIFY (first_name ENCRYPT)" db-types="Oracle" />
@@ -30,7 +34,8 @@
     <sql-case id="alter_table_no_flashback_archive" value="ALTER TABLE employee NO FLASHBACK ARCHIVE" db-types="Oracle" />
     <sql-case id="alter_table_move_tablespace_overflow_tablespace" value="ALTER TABLE admin_docindex MOVE TABLESPACE admin_tbs2 OVERFLOW TABLESPACE admin_tbs3" db-types="Oracle" />
     <sql-case id="alter_table_move_nocompress" value="ALTER TABLE admin_iot5 MOVE NOCOMPRESS" db-types="Oracle" />
-    <sql-case id="alter_table_enable_row_movement" value="ALTER TABLE SYSTEM.AUD$ ENABLE ROW MOVEMENT" db-types="Oracle" />
+    <sql-case id="alter_table_enable_row_movement1" value="ALTER TABLE SYSTEM.AUD$ ENABLE ROW MOVEMENT" db-types="Oracle" />
+    <sql-case id="alter_table_enable_row_movement2" value="ALTER TABLE employees_test ENABLE ROW MOVEMENT" db-types="Oracle" />
     <sql-case id="alter_table_shrink_space_cascade" value="ALTER TABLE SYSTEM.AUD$ SHRINK SPACE CASCADE" db-types="Oracle" />
     <sql-case id="alter_table" value="ALTER TABLE t_log ADD name varchar(10)" db-types="MySQL, PostgreSQL,openGauss" />
     <sql-case id="alter_table_oracle" value="ALTER TABLE t_log ADD (name varchar(10))" db-types="Oracle" />