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