This is an automated email from the ASF dual-hosted git repository.
iamhucong 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 88d6f10f554 Support Oracle package routine names (#39607)
88d6f10f554 is described below
commit 88d6f10f554bf6b944021858900f726f259f7f67
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Aug 27 10:48:46 2026 +0800
Support Oracle package routine names (#39607)
* Support Oracle package routine names
* Update release notes for Oracle package routine names
* Add tests for Oracle package routine names
---
RELEASE-NOTES.md | 1 +
.../CreateDatabaseObjectStatementContextTest.java | 6 +++
.../statement/type/OracleDDLStatementVisitor.java | 58 +++++++++++++++++++++-
.../type/ddl/pkg/CreatePackageStatement.java | 8 +++
.../ddl/pkg/OracleCreatePackageStatement.java | 56 ++++++++++++++++++---
.../type/OracleCreatePackageStatementAssert.java | 20 +++++++-
.../OracleCreatePackageStatementTestCase.java | 6 ++-
.../src/main/resources/case/ddl/create-package.xml | 11 ++++
8 files changed, 155 insertions(+), 11 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index b766ec13e90..67e4e6bcaf3 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -101,6 +101,7 @@
1. SQL Parser: Support SQLServer table variable declaration parse -
[#38904](https://github.com/apache/shardingsphere/pull/38904)
1. SQL Parser: Support Oracle procedure parser and binder -
[#39231](https://github.com/apache/shardingsphere/pull/39231)
1. SQL Parser: Support Oracle database object DDL parsing -
[#39286](https://github.com/apache/shardingsphere/pull/39286)
+1. SQL Parser: Support Oracle package routine name parsing and binding -
[#39607](https://github.com/apache/shardingsphere/pull/39607)
1. SQL Parser: Support parsing Oracle CREATE INDEX sql -
[#39292](https://github.com/apache/shardingsphere/pull/39292)
1. SQL Parser: Support parsing Oracle CREATE INDEXTYPE sql and Add CREATE
INDEX/OPERATOR sql it test -
[#39302](https://github.com/apache/shardingsphere/pull/39302)
1. SQL Parser: Support function table alias column parsing for PostgreSQL and
openGauss - [#39268](https://github.com/apache/shardingsphere/pull/39268)
diff --git
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateDatabaseObjectStatementContextTest.java
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateDatabaseObjectStatementContextTest.java
index e7ce28778f1..7acfca2efb7 100644
---
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateDatabaseObjectStatementContextTest.java
+++
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateDatabaseObjectStatementContextTest.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.packages.PackageSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.ValidStatementSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
@@ -176,6 +177,11 @@ class CreateDatabaseObjectStatementContextTest {
return Collections.emptyList();
}
+ @Override
+ public Collection<FunctionNameSegment> getPackageRoutineNames() {
+ return Collections.emptyList();
+ }
+
@Override
public Collection<ExpressionSegment>
getDynamicSqlStatementExpressions() {
return Collections.emptyList();
diff --git
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 7909e2911bb..34d725b5ec5 100644
---
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -123,6 +123,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Cursor
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CursorForLoopStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CursorParameterDecContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DataTypeDefinitionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DeclareItemContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DisassociateStatisticsContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DmlStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropClusterContext;
@@ -170,6 +171,9 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Flashb
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ForLoopStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ForallStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.FunctionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.FunctionDeclarationContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.FunctionDefinitionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.FunctionNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexExpressionContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexExpressionsContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IndexNameContext;
@@ -193,16 +197,20 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OutOfL
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OutOfLineRefConstraintContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OwnerContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PackageNameContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PackageSpecificationItemContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ParameterDeclarationContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PartitionExtendedNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlBlockContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlFunctionSourceContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlPackageBodySourceContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlPackageSourceContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlProcedureSourceContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlStatementsContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlsqlTriggerSourceContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PlaceholderContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ProcedureCallContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ProcedureDeclarationContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ProcedureDefinitionContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ProcedureNameContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PseudorecordContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.PurgeContext;
@@ -913,7 +921,7 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
@Override
public ASTNode visitCreatePackage(final CreatePackageContext ctx) {
- OracleStatementParser.PlsqlPackageBodySourceContext body =
ctx.plsqlPackageBodySource();
+ PlsqlPackageBodySourceContext body = ctx.plsqlPackageBodySource();
if (null != body) {
body.declareItem().forEach(this::visit);
}
@@ -946,11 +954,55 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
result.getColumns().addAll(typeAttributeSegments.getColumns());
result.getSqlStatements().addAll(getSqlStatementsInPlsql());
result.getProcedureCallNames().addAll(getProcedureCallNames());
+
result.getPackageRoutineNames().addAll(extractPackageRoutineNames(specification,
body));
result.getDynamicSqlStatementExpressions().addAll(getDynamicSqlStatementExpressions());
result.getCursorForLoopStatements().addAll(getCursorForLoopStatementSegments());
return result;
}
+ private Collection<FunctionNameSegment> extractPackageRoutineNames(final
PlsqlPackageSourceContext specification, final PlsqlPackageBodySourceContext
body) {
+ Collection<FunctionNameSegment> result = new LinkedList<>();
+ if (null != specification) {
+ for (PackageSpecificationItemContext each :
specification.packageSpecificationItem()) {
+ addPackageRoutineName(result, each.functionDeclaration());
+ addPackageRoutineName(result, each.procedureDeclaration());
+ }
+ }
+ if (null != body) {
+ for (DeclareItemContext each : body.declareItem()) {
+ addPackageRoutineName(result, each.functionDeclaration());
+ addPackageRoutineName(result, each.procedureDeclaration());
+ addPackageRoutineName(result, each.functionDefinition());
+ addPackageRoutineName(result, each.procedureDefinition());
+ }
+ }
+ return result;
+ }
+
+ private void addPackageRoutineName(final Collection<FunctionNameSegment>
routineNames, final FunctionDeclarationContext declaration) {
+ if (null != declaration) {
+
routineNames.add(createFunctionNameSegment(declaration.functionHeading().functionName()));
+ }
+ }
+
+ private void addPackageRoutineName(final Collection<FunctionNameSegment>
routineNames, final ProcedureDeclarationContext declaration) {
+ if (null != declaration) {
+ routineNames.add(createProcedureNameSegment(null,
declaration.procedureHeading().procedureName()));
+ }
+ }
+
+ private void addPackageRoutineName(final Collection<FunctionNameSegment>
routineNames, final FunctionDefinitionContext definition) {
+ if (null != definition) {
+
routineNames.add(createFunctionNameSegment(definition.functionHeading().functionName()));
+ }
+ }
+
+ private void addPackageRoutineName(final Collection<FunctionNameSegment>
routineNames, final ProcedureDefinitionContext definition) {
+ if (null != definition) {
+ addPackageRoutineName(routineNames,
definition.procedureDeclaration());
+ }
+ }
+
@Override
public ASTNode visitCreateTypeBody(final CreateTypeBodyContext ctx) {
return new OracleCreateTypeBodyStatement(getDatabaseType(),
ctx.plsqlTypeBodySource().typeName(0).getText());
@@ -1519,6 +1571,10 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
return result;
}
+ private FunctionNameSegment createFunctionNameSegment(final
FunctionNameContext ctx) {
+ return new FunctionNameSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), (IdentifierValue) visit(ctx.identifier()));
+ }
+
private FunctionNameSegment createFunctionNameSegment(final
SchemaNameContext schemaName, final FunctionContext function) {
FunctionNameSegment result = createFunctionNameSegment(function);
if (null == schemaName) {
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/pkg/CreatePackageStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/pkg/CreatePackageStatement.java
index faf0230f156..bca238e845f 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/pkg/CreatePackageStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/pkg/CreatePackageStatement.java
@@ -18,6 +18,7 @@
package
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.pkg;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.packages.PackageSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.procedure.ProcedureCallNameSegment;
@@ -73,6 +74,13 @@ public interface CreatePackageStatement {
*/
Collection<ProcedureCallNameSegment> getProcedureCallNames();
+ /**
+ * Get package routine names.
+ *
+ * @return package routine names
+ */
+ Collection<FunctionNameSegment> getPackageRoutineNames();
+
/**
* Get dynamic SQL statement expressions.
*
diff --git
a/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/pkg/OracleCreatePackageStatement.java
b/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/pkg/OracleCreatePackageStatement.java
index b41548bae29..c8c8ae02eb8 100644
---
a/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/pkg/OracleCreatePackageStatement.java
+++
b/parser/sql/statement/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/pkg/OracleCreatePackageStatement.java
@@ -17,9 +17,11 @@
package org.apache.shardingsphere.sql.parser.statement.oracle.ddl.pkg;
+import lombok.AccessLevel;
import lombok.Getter;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.packages.PackageSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.RoutineBodySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
@@ -46,7 +48,8 @@ public final class OracleCreatePackageStatement extends
DDLStatement implements
private final PackageSegment packageName;
- private final Optional<PackageSegment> packageEndName;
+ @Getter(AccessLevel.NONE)
+ private final PackageSegment packageEndName;
private final boolean body;
@@ -54,16 +57,21 @@ public final class OracleCreatePackageStatement extends
DDLStatement implements
private final boolean ifNotExists;
- private final Optional<Edition> edition;
+ @Getter(AccessLevel.NONE)
+ private final Edition edition;
- private final Optional<Authorization> authorization;
+ @Getter(AccessLevel.NONE)
+ private final Authorization authorization;
- private final Optional<RoutineBodySegment> initialization;
+ @Getter(AccessLevel.NONE)
+ private final RoutineBodySegment initialization;
private final List<SQLStatementSegment> sqlStatements = new ArrayList<>();
private final List<ProcedureCallNameSegment> procedureCallNames = new
ArrayList<>();
+ private final List<FunctionNameSegment> packageRoutineNames = new
ArrayList<>();
+
private final List<ExpressionSegment> dynamicSqlStatementExpressions = new
ArrayList<>();
private final List<CursorForLoopStatementSegment> cursorForLoopStatements
= new ArrayList<>();
@@ -91,16 +99,48 @@ public final class OracleCreatePackageStatement extends
DDLStatement implements
final RoutineBodySegment
initialization, final Collection<SimpleTableSegment> tables) {
super(databaseType);
this.packageName = packageName;
- this.packageEndName = Optional.ofNullable(packageEndName);
+ this.packageEndName = packageEndName;
this.body = body;
this.replace = replace;
this.ifNotExists = ifNotExists;
- this.edition = Optional.ofNullable(edition);
- this.authorization = Optional.ofNullable(authorization);
- this.initialization = Optional.ofNullable(initialization);
+ this.edition = edition;
+ this.authorization = authorization;
+ this.initialization = initialization;
attributes = new SQLStatementAttributes(new
TableSQLStatementAttribute(tables), new
ProcedureCallNamesSQLStatementAttribute(procedureCallNames));
}
+ @Override
+ public Optional<PackageSegment> getPackageEndName() {
+ return Optional.ofNullable(packageEndName);
+ }
+
+ /**
+ * Get package edition mode.
+ *
+ * @return package edition mode
+ */
+ public Optional<Edition> getEdition() {
+ return Optional.ofNullable(edition);
+ }
+
+ /**
+ * Get package authorization mode.
+ *
+ * @return package authorization mode
+ */
+ public Optional<Authorization> getAuthorization() {
+ return Optional.ofNullable(authorization);
+ }
+
+ /**
+ * Get package initialization body.
+ *
+ * @return package initialization body
+ */
+ public Optional<RoutineBodySegment> getInitialization() {
+ return Optional.ofNullable(initialization);
+ }
+
/**
* Oracle package edition mode.
*/
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/oracle/type/OracleCreatePackageStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/oracle/type/OracleCreatePackageStatementAssert.java
index 33ac86a0ba6..c0269ac05de 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/oracle/type/OracleCreatePackageStatementAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/oracle/type/OracleCreatePackageStatementAssert.java
@@ -19,14 +19,20 @@ package
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.sql.parser.statement.oracle.ddl.pkg.OracleCreatePackageStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.routine.FunctionNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
+import
org.apache.shardingsphere.sql.parser.statement.oracle.ddl.pkg.OracleCreatePackageStatement;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.packages.PackageAssert;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.plsql.RoutineNameAssert;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedRoutineName;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.oracle.OracleCreatePackageStatementTestCase;
+import java.util.Collection;
+import java.util.Iterator;
+
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -68,5 +74,17 @@ public final class OracleCreatePackageStatementAssert {
if (!expected.getColumns().isEmpty()) {
ColumnAssert.assertIs(assertContext, actual.getColumns(),
expected.getColumns());
}
+ assertPackageRoutineNames(assertContext,
actual.getPackageRoutineNames(), expected.getPackageRoutineNames());
+ }
+
+ private static void assertPackageRoutineNames(final SQLCaseAssertContext
assertContext, final Collection<FunctionNameSegment> actual, final
Collection<ExpectedRoutineName> expected) {
+ if (expected.isEmpty()) {
+ return;
+ }
+ assertThat(assertContext.getText("Package routine names size
mismatched: "), actual.size(), is(expected.size()));
+ Iterator<FunctionNameSegment> actualIterator = actual.iterator();
+ for (ExpectedRoutineName each : expected) {
+ RoutineNameAssert.assertIs(assertContext, actualIterator.next(),
each);
+ }
}
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/oracle/OracleCreatePackageStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/oracle/OracleCreatePackageStatementTestCase.java
index 4f8085c8ab4..beb385a7eba 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/oracle/OracleCreatePackageStatementTestCase.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/oracle/OracleCreatePackageStatementTestCase.java
@@ -20,8 +20,9 @@ package
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
import lombok.Getter;
import lombok.Setter;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.packages.ExpectedPackage;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.packages.ExpectedPackage;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedRoutineName;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
import javax.xml.bind.annotation.XmlAttribute;
@@ -68,4 +69,7 @@ public final class OracleCreatePackageStatementTestCase
extends SQLParserTestCas
@XmlElement(name = "column")
private final List<ExpectedColumn> columns = new LinkedList<>();
+
+ @XmlElement(name = "package-routine-name")
+ private final List<ExpectedRoutineName> packageRoutineNames = new
LinkedList<>();
}
diff --git a/test/it/parser/src/main/resources/case/ddl/create-package.xml
b/test/it/parser/src/main/resources/case/ddl/create-package.xml
index 50b6b8339ac..a01dd2f0d42 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-package.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-package.xml
@@ -22,6 +22,8 @@
<owner name="foo_schema" start-index="38" stop-index="47" />
</package>
<package-end-name name="foo_pkg" start-index="180" stop-index="186" />
+ <package-routine-name name="set_value" start-index="112"
stop-index="120" />
+ <package-routine-name name="get_value" start-index="151"
stop-index="159" />
</create-package>
<create-package
sql-case-id="create_or_replace_noneditionable_package_body" body="true"
replace="true" edition="NONEDITIONABLE" has-initialization="true">
@@ -29,11 +31,14 @@
<owner name="foo_schema" start-index="46" stop-index="55" />
</package>
<package-end-name name="foo_pkg" start-index="257" stop-index="263" />
+ <package-routine-name name="set_value" start-index="101"
stop-index="109" />
+ <package-routine-name name="get_value" start-index="175"
stop-index="183" />
</create-package>
<create-package sql-case-id="create_package_body_if_not_exists"
body="true" if-not-exists="true">
<package name="foo_pkg" start-index="34" stop-index="40" />
<package-end-name name="foo_pkg" start-index="81" stop-index="87" />
+ <package-routine-name name="p" start-index="55" stop-index="55" />
</create-package>
<create-package sql-case-id="create_package_visitor_oracle" replace="true"
if-not-exists="true" edition="EDITIONABLE" authorization="CURRENT_USER">
@@ -43,6 +48,8 @@
<package-end-name name="foo_pkg" start-index="221" stop-index="227" />
<table name="T_USER" start-index="147" stop-index="152" />
<table name="T_USER" start-index="195" stop-index="200" />
+ <package-routine-name name="set_value" start-index="126"
stop-index="134" />
+ <package-routine-name name="get_value" start-index="178"
stop-index="186" />
</create-package>
<create-package sql-case-id="create_package_body_visitor_oracle"
body="true" replace="true" edition="NONEDITIONABLE" has-initialization="true"
sql-statement-count="2">
@@ -52,6 +59,8 @@
<package-end-name name="foo_pkg" start-index="290" stop-index="296" />
<table name="T_USER" start-index="99" stop-index="104" />
<table name="T_USER" start-index="199" stop-index="204" />
+ <package-routine-name name="set_value" start-index="78"
stop-index="86" />
+ <package-routine-name name="read_value" start-index="181"
stop-index="190" />
</create-package>
<create-package
sql-case-id="create_package_body_with_type_attributes_visitor_oracle"
body="true" replace="true">
@@ -69,5 +78,7 @@
<column name="ID" start-index="341" stop-index="342">
<owner name="T_E2E_RDL_CONVERT" start-index="323" stop-index="339"
/>
</column>
+ <package-routine-name name="INSERT_ROW" start-index="64"
stop-index="73" />
+ <package-routine-name name="READ_PASSWORD" start-index="301"
stop-index="313" />
</create-package>
</sql-parser-test-cases>