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 <[email protected]>
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" />

Reply via email to