You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/08/10 09:30:01 UTC
[shardingsphere] branch master updated: Fix oracle alter table column definition parse error (#28015)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 323beb1d6ac Fix oracle alter table column definition parse error (#28015)
323beb1d6ac is described below
commit 323beb1d6ac2fc508c74877e7c9ecf2fb84af331
Author: niu niu <zi...@aliyun.com>
AuthorDate: Thu Aug 10 17:29:53 2023 +0800
Fix oracle alter table column definition parse error (#28015)
---
.../visitor/statement/type/OracleDDLStatementVisitor.java | 2 +-
.../asserts/segment/definition/ColumnDefinitionAssert.java | 9 ++++++++-
test/it/parser/src/main/resources/case/ddl/alter-table.xml | 13 +++++++++++++
.../src/main/resources/sql/supported/ddl/alter-table.xml | 2 ++
4 files changed, 24 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 4c0023cee67..8ad0600d283 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
@@ -530,7 +530,7 @@ public final class OracleDDLStatementVisitor extends OracleStatementVisitor impl
@Override
public ASTNode visitModifyColProperties(final ModifyColPropertiesContext ctx) {
ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
- DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
+ DataTypeSegment dataType = null != ctx.dataType() ? (DataTypeSegment) visit(ctx.dataType()) : null;
// TODO visit pk and reference table
return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), column, dataType, false, false);
}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
index b09012e1b2a..e856c6b9a3c 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
@@ -26,6 +26,8 @@ import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
/**
* Column definition assert.
@@ -42,7 +44,12 @@ public final class ColumnDefinitionAssert {
*/
public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnDefinitionSegment actual, final ExpectedColumnDefinition expected) {
assertThat(assertContext.getText("Column definition name assertion error: "), actual.getColumnName().getIdentifier().getValue(), is(expected.getColumn().getName()));
- assertThat(assertContext.getText("Column definition data type assertion error: "), actual.getDataType().getDataTypeName(), is(expected.getType()));
+ if (null != expected.getType()) {
+ assertNotNull(actual.getDataType(), assertContext.getText("Column definition data type should exist."));
+ assertThat(assertContext.getText("Column definition data type assertion error: "), actual.getDataType().getDataTypeName(), is(expected.getType()));
+ } else {
+ assertNull(actual.getDataType(), assertContext.getText("Column definition data type should not exist."));
+ }
assertThat(assertContext.getText("Column definition primary key assertion error: "), actual.isPrimaryKey(), is(expected.isPrimaryKey()));
TableAssert.assertIs(assertContext, actual.getReferencedTables(), expected.getReferencedTables());
assertThat(assertContext.getText("Column definition start index assertion error: "), actual.getStartIndex(), is(expected.getStartIndex()));
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 bc953da953e..b32d7496a4c 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
@@ -1306,4 +1306,17 @@
<alter-table sql-case-id="alter_table_move">
<table name="admin_docindex" start-index="12" stop-index="25" />
</alter-table>
+
+ <alter-table sql-case-id="alter_table_move_online">
+ <table name="admin_docindex" start-index="12" stop-index="25" />
+ </alter-table>
+
+ <alter-table sql-case-id="alter_table_modify">
+ <table name="customers" start-index="12" stop-index="20" />
+ <modify-column>
+ <column-definition start-index="30" stop-index="51">
+ <column start-index="30" stop-index="43" name="online_acct_pw" />
+ </column-definition>
+ </modify-column>
+ </alter-table>
</sql-parser-test-cases>
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 e4830147fa7..13e1b90df55 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
@@ -165,4 +165,6 @@
<sql-case id="alter_table_add_supplemental_log_data2" value="ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS" db-types="Oracle" />
<sql-case id="alter_table_add_supplemental_log_data3" value="ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS" db-types="Oracle" />
<sql-case id="alter_table_move" value="ALTER TABLE admin_docindex MOVE" db-types="Oracle" />
+ <sql-case id="alter_table_move_online" value="ALTER TABLE admin_docindex MOVE ONLINE" db-types="Oracle" />
+ <sql-case id="alter_table_modify" value="ALTER TABLE customers MODIFY (online_acct_pw DECRYPT)" db-types="Oracle" />
</sql-cases>