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 fc33317d898 Add oracle modify collection retrieval parse (#28274)
fc33317d898 is described below
commit fc33317d89813b33a1b90dff734415a0d0a58844
Author: niu niu <[email protected]>
AuthorDate: Mon Aug 28 22:00:09 2023 +0800
Add oracle modify collection retrieval parse (#28274)
---
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 6 ++-
.../statement/type/OracleDDLStatementVisitor.java | 12 ++++++
.../alter/ModifyCollectionRetrievalSegment.java} | 20 ++++++---
.../handler/ddl/AlterTableStatementHandler.java | 47 ++++++++++++++++++++++
.../oracle/ddl/OracleAlterTableStatement.java | 18 +++++++++
.../ddl/AlterTableStatementHandlerTest.java | 40 ++++++++++++++++++
.../ddl/impl/AlterTableStatementAssert.java | 18 +++++++++
...xpectedModifyCollectionRetrievalDefinition.java | 17 +++++---
.../statement/ddl/AlterTableStatementTestCase.java | 4 ++
.../src/main/resources/case/ddl/alter-table.xml | 16 ++++++++
.../resources/sql/supported/ddl/alter-table.xml | 2 +
11 files changed, 189 insertions(+), 11 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 65236da333a..40679348970 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -440,7 +440,7 @@ dropSynonym
;
columnClauses
- : operateColumnClause+ | renameColumnClause
+ : operateColumnClause+ | renameColumnClause | modifyCollectionRetrieval
;
operateColumnClause
@@ -511,6 +511,10 @@ renameColumnClause
: RENAME COLUMN columnName TO columnName
;
+modifyCollectionRetrieval
+ : MODIFY NESTED TABLE tableName RETURN AS (LOCATOR | VALUE)
+ ;
+
moveTableClause
: MOVE filterCondition? ONLINE? segmentAttributesClause? tableCompression?
indexOrgTableClause? ((lobStorageClause | varrayColProperties)+)?
parallelClause? allowDisallowClustering?
( UPDATE INDEXES (LP_ indexName (segmentAttributesClause |
updateIndexPartition) RP_ (COMMA_ indexName (segmentAttributesClause |
updateIndexPartition))*)?)?
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 823c0e181ac..8935a1ffd1c 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
@@ -139,6 +139,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexE
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexTypeNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InlineConstraintContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ModifyCollectionRetrievalContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ModifyColPropertiesContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ModifyColumnSpecificationContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ModifyConstraintClauseContext;
@@ -160,6 +161,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.CreateDefinit
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.AddColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.DropColumnDefinitionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyCollectionRetrievalSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintSegment;
@@ -451,6 +453,8 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
result.getModifyConstraintDefinitions().add((ModifyConstraintDefinitionSegment)
each);
} else if (each instanceof DropConstraintDefinitionSegment) {
result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment)
each);
+ } else if (each instanceof ModifyCollectionRetrievalSegment) {
+
result.setModifyCollectionRetrieval((ModifyCollectionRetrievalSegment) each);
}
}
}
@@ -487,6 +491,9 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
result.getValue().add((DropColumnDefinitionSegment)
visit(each.dropColumnClause()));
}
}
+ if (null != ctx.columnClauses().modifyCollectionRetrieval()) {
+ result.getValue().add((ModifyCollectionRetrievalSegment)
visit(ctx.columnClauses().modifyCollectionRetrieval()));
+ }
}
if (null != ctx.constraintClauses()) {
// TODO Support rename constraint
@@ -506,6 +513,11 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
return result;
}
+ @Override
+ public ASTNode visitModifyCollectionRetrieval(final
ModifyCollectionRetrievalContext ctx) {
+ return new
ModifyCollectionRetrievalSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (SimpleTableSegment) visit(ctx.tableName()));
+ }
+
@Override
public ASTNode visitAddColumnSpecification(final
AddColumnSpecificationContext ctx) {
CollectionValue<AddColumnDefinitionSegment> result = new
CollectionValue<>();
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/alter/ModifyCollectionRetrievalSegment.java
similarity index 56%
copy from
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
copy to
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/alter/ModifyCollectionRetrievalSegment.java
index 478cceb09f6..1095e964701 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/alter/ModifyCollectionRetrievalSegment.java
@@ -15,13 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+package
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.AlterDefinitionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
/**
- * Oracle alter table statement.
+ * Modify collection retrieval segment.
*/
-public final class OracleAlterTableStatement extends AlterTableStatement
implements OracleStatement {
+@RequiredArgsConstructor
+@Getter
+public final class ModifyCollectionRetrievalSegment implements
AlterDefinitionSegment {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private final SimpleTableSegment nestedTable;
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandler.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandler.java
new file mode 100644
index 00000000000..94b08a3c291
--- /dev/null
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandler.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyCollectionRetrievalSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.SQLStatementHandler;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterTableStatement;
+
+import java.util.Optional;
+
+/**
+ * Alter table statement handler for different dialect SQL statements.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AlterTableStatementHandler implements SQLStatementHandler {
+
+ /**
+ * Get modify collection retrieval segment.
+ *
+ * @param alterTableStatement alter table statement
+ * @return modify collection retrieval segment
+ */
+ public static Optional<ModifyCollectionRetrievalSegment>
getModifyCollectionRetrievalSegment(final AlterTableStatement
alterTableStatement) {
+ if (alterTableStatement instanceof OracleAlterTableStatement) {
+ return ((OracleAlterTableStatement)
alterTableStatement).getModifyCollectionRetrieval();
+ }
+ return Optional.empty();
+ }
+}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
index 478cceb09f6..341a8465934 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
@@ -17,11 +17,29 @@
package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyCollectionRetrievalSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+import java.util.Optional;
+
/**
* Oracle alter table statement.
*/
+@Getter
+@Setter
public final class OracleAlterTableStatement extends AlterTableStatement
implements OracleStatement {
+
+ private ModifyCollectionRetrievalSegment modifyCollectionRetrieval;
+
+ /**
+ * Get modify collection retrieval segment.
+ *
+ * @return modify collection retrieval
+ */
+ public Optional<ModifyCollectionRetrievalSegment>
getModifyCollectionRetrieval() {
+ return Optional.ofNullable(modifyCollectionRetrieval);
+ }
}
diff --git
a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandlerTest.java
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandlerTest.java
new file mode 100644
index 00000000000..ea2bc6b31ca
--- /dev/null
+++
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterTableStatementHandlerTest.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
+
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyCollectionRetrievalSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterTableStatement;
+import org.junit.jupiter.api.Test;
+
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class AlterTableStatementHandlerTest {
+
+ @Test
+ void assertGetModifyCollectionRetrievalSegmentForOracle() {
+ OracleAlterTableStatement alterTableStatement = new
OracleAlterTableStatement();
+ alterTableStatement.setModifyCollectionRetrieval(new
ModifyCollectionRetrievalSegment(0, 0, new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("test")))));
+ Optional<ModifyCollectionRetrievalSegment>
modifyCollectionRetrievalSegment =
AlterTableStatementHandler.getModifyCollectionRetrievalSegment(alterTableStatement);
+ assertTrue(modifyCollectionRetrievalSegment.isPresent());
+ }
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AlterTableStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AlterTableStatementAssert.java
index f95e634f45d..1fe30ca563c 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AlterTableStatementAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/impl/AlterTableStatementAssert.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ChangeColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.DropColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyColumnDefinitionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.ModifyCollectionRetrievalSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.alter.RenameColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.alter.AddConstraintDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.RenameIndexDefinitionSegment;
@@ -31,6 +32,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.table.Convert
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.AlterTableStatementHandler;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.charset.CharsetAssert;
@@ -85,6 +87,7 @@ public final class AlterTableStatementAssert {
assertRenameIndexDefinitions(assertContext, actual, expected);
assertRenameColumnDefinitions(assertContext, actual, expected);
assertConvertTable(assertContext, actual, expected);
+ assertModifyCollectionRetrievalDefinitions(assertContext, actual,
expected);
}
private static void assertConvertTable(final SQLCaseAssertContext
assertContext, final AlterTableStatement actual, final
AlterTableStatementTestCase expected) {
@@ -223,4 +226,19 @@ public final class AlterTableStatementAssert {
count++;
}
}
+
+ private static void assertModifyCollectionRetrievalDefinitions(final
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final
AlterTableStatementTestCase expected) {
+ Optional<ModifyCollectionRetrievalSegment> modifyCollectionRetrieval =
AlterTableStatementHandler.getModifyCollectionRetrievalSegment(actual);
+ if (null == expected.getModifyCollectionRetrievalDefinition()) {
+ assertFalse(modifyCollectionRetrieval.isPresent(),
assertContext.getText("Actual modify collection retrieval definitions should
not exist."));
+ } else {
+ assertTrue(modifyCollectionRetrieval.isPresent(),
assertContext.getText("Actual modify collection retrieval definitions should
exist."));
+ if (null ==
expected.getModifyCollectionRetrievalDefinition().getTable()) {
+ assertNull(modifyCollectionRetrieval.get().getNestedTable(),
"Actual nested table should not exist.");
+ } else {
+
assertNotNull(modifyCollectionRetrieval.get().getNestedTable(), "Actual nested
table should exist.");
+ TableAssert.assertIs(assertContext,
modifyCollectionRetrieval.get().getNestedTable(),
expected.getModifyCollectionRetrievalDefinition().getTable());
+ }
+ }
+ }
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyCollectionRetrievalDefinition.java
similarity index 55%
copy from
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
copy to
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyCollectionRetrievalDefinition.java
index 478cceb09f6..6ffbf6e3a2d 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterTableStatement.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyCollectionRetrievalDefinition.java
@@ -15,13 +15,20 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition;
-import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+import lombok.Getter;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
+
+import javax.xml.bind.annotation.XmlElement;
/**
- * Oracle alter table statement.
+ * Expected modify collection retrieval definition.
*/
-public final class OracleAlterTableStatement extends AlterTableStatement
implements OracleStatement {
+@Getter
+public final class ExpectedModifyCollectionRetrievalDefinition extends
AbstractExpectedSQLSegment {
+
+ @XmlElement(name = "table")
+ private ExpectedSimpleTable table;
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/AlterTableStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/AlterTableStatementTestCase.java
index 89fba335be0..c968cff0ad1 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/AlterTableStatementTestCase.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/AlterTableStatementTestCase.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedConstraintDefinition;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedConvertTableDefinition;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyColumnDefinition;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyCollectionRetrievalDefinition;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedRenameIndexDefinition;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedRenameColumnDefinition;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
@@ -70,4 +71,7 @@ public final class AlterTableStatementTestCase extends
SQLParserTestCase {
@XmlElement(name = "drop-column")
private final List<ExpectedColumn> dropColumns = new LinkedList<>();
+
+ @XmlElement(name = "modify-collection-retrieval")
+ private ExpectedModifyCollectionRetrievalDefinition
modifyCollectionRetrievalDefinition;
}
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 b2be68a1b7a..e7771cfc696 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
@@ -1593,4 +1593,20 @@
<alter-table sql-case-id="alter_table_modify_subpartition_drop_values">
<table name="quarterly_regional_sales" start-index="12"
stop-index="35" />
</alter-table>
+
+ <alter-table sql-case-id="alter_table_modify_nested_table_return_as_value">
+ <table name="print_media" start-index="12" stop-index="22" />
+ <modify-collection-retrieval>
+ <table name="ad_textdocs_ntab" start-index="44" stop-index="59" />
+ </modify-collection-retrieval>
+ </alter-table>
+
+ <alter-table
sql-case-id="alter_table_modify_nested_owner_table_return_as_value">
+ <table name="print_media" start-index="12" stop-index="22" />
+ <modify-collection-retrieval>
+ <table name="ad_textdocs_ntab" start-index="44" stop-index="67">
+ <owner start-index="44" stop-index="50" name="mytable" />
+ </table>
+ </modify-collection-retrieval>
+ </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 d2aadecf740..b69b51977aa 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
@@ -209,4 +209,6 @@
<sql-case id="alter_table_add_partition_values_less_than1" value="ALTER
TABLE quarterly_regional_sales ADD PARTITION q1_2000 VALUES LESS THAN
(TO_DATE('1-APR-2000','DD-MON-YYYY')) STORAGE (INITIAL 20K NEXT 20K) TABLESPACE
ts3 NOLOGGING(SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'), SUBPARTITION
q1_2000_southwest VALUES ('AZ', 'UT', 'NM'), SUBPARTITION q1_2000_northeast
VALUES ('NY', 'VM', 'NJ'), SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'),
SUBPARTITION q1_2000_northcentra [...]
<sql-case id="alter_table_add_partition_values_less_than2" value="ALTER
TABLE sales ADD PARTITION jan99 VALUES LESS THAN ('01-FEB-1999') TABLESPACE
tsx" db-types="Oracle" />
<sql-case id="alter_table_modify_subpartition_drop_values" value="ALTER
TABLE quarterly_regional_sales MODIFY SUBPARTITION q1_1999_southeast DROP
VALUES ('KS')" db-types="Oracle" />
+ <sql-case id="alter_table_modify_nested_table_return_as_value"
value="ALTER TABLE print_media MODIFY NESTED TABLE ad_textdocs_ntab RETURN AS
VALUE" db-types="Oracle" />
+ <sql-case id="alter_table_modify_nested_owner_table_return_as_value"
value="ALTER TABLE print_media MODIFY NESTED TABLE mytable.ad_textdocs_ntab
RETURN AS VALUE" db-types="Oracle" />
</sql-cases>