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>

Reply via email to