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 e4b688cc5d2 support parse oracle create procedure body end name.
(#29775)
e4b688cc5d2 is described below
commit e4b688cc5d242786fda9a3dd1b829ddc831f8e6c
Author: Chuxin Chen <[email protected]>
AuthorDate: Fri Jan 19 16:13:48 2024 +0800
support parse oracle create procedure body end name. (#29775)
---
.../visitor/statement/OracleStatementVisitor.java | 3 ++
.../statement/type/OracleDDLStatementVisitor.java | 8 +++-
.../oracle/ddl/OracleCreateProcedureStatement.java | 3 ++
.../oracle/plsql/ProcedureBodyEndNameSegment.java | 42 +++++++++++++++++
.../ddl/CreateProcedureStatementHandlerTest.java | 3 +-
.../statement/plsql/PLSQLStatementAssert.java | 12 +++++
.../cases/parser/jaxb/RootSQLParserTestCases.java | 4 +-
.../plsql/ExpectedProcedureBodyEndNameSegment.java | 35 ++++++++++++++
.../ddl/CreateProcedureStatementTestCase.java | 54 ----------------------
.../statement/plsql/CreateProcedureTestCase.java | 5 ++
.../main/resources/case/ddl/create-procedure.xml | 22 +++++++--
.../main/resources/case/plsql/create-procedure.xml | 13 ++++--
12 files changed, 138 insertions(+), 66 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
index 4420a4e23ff..cd9f8cc8112 100644
---
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
+++
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/OracleStatementVisitor.java
@@ -171,6 +171,7 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTa
import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.oracle.xml.XmlTableOptionsSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleSelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.CursorForLoopStatementSegment;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureCallNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.SQLStatementSegment;
@@ -199,6 +200,8 @@ public abstract class OracleStatementVisitor extends
OracleStatementBaseVisitor<
private final List<ProcedureCallNameSegment> procedureCallNames = new
ArrayList<>();
+ private final List<ProcedureBodyEndNameSegment>
procedureBodyEndNameSegments = new ArrayList<>();
+
private final List<ExpressionSegment> dynamicSqlStatementExpressions = new
ArrayList<>();
private final Collection<String> variableNames = new HashSet<>();
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 00863f408ad..fcc33088378 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
@@ -344,6 +344,7 @@ import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.Ora
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleTruncateStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleSelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.CursorForLoopStatementSegment;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureCallNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.SQLStatementSegment;
@@ -1343,7 +1344,8 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
getSqlStatementsInPlsql().sort(Comparator.comparingInt(SQLStatementSegment::getStartIndex));
getProcedureCallNames().sort(Comparator.comparingInt(ProcedureCallNameSegment::getStartIndex));
getDynamicSqlStatementExpressions().sort(Comparator.comparingInt(ExpressionSegment::getStartIndex));
- OracleCreateProcedureStatement result = new
OracleCreateProcedureStatement(getSqlStatementsInPlsql(),
getProcedureCallNames(), getDynamicSqlStatementExpressions());
+ OracleCreateProcedureStatement result = new
OracleCreateProcedureStatement(getSqlStatementsInPlsql(),
getProcedureCallNames(), getProcedureBodyEndNameSegments(),
+ getDynamicSqlStatementExpressions());
result.setProcedureName(visitProcedureName(ctx.plsqlProcedureSource()));
result.getVariableNames().addAll(getVariableNames());
getSqlStatementsInPlsql().forEach(each ->
each.getSqlStatement().getVariableNames().addAll(getVariableNames()));
@@ -1446,6 +1448,10 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
visit(each);
}
}
+ if (null != ctx.identifier()) {
+ getProcedureBodyEndNameSegments().add(
+ new
ProcedureBodyEndNameSegment(ctx.identifier().getStart().getStartIndex(),
ctx.identifier().getStop().getStopIndex(), new
IdentifierValue(ctx.identifier().getText())));
+ }
return defaultResult();
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateProcedureStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateProcedureStatement.java
index 69b28bde8be..9f6bfcd29d0 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateProcedureStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateProcedureStatement.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.CursorForLoopStatementSegment;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureCallNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.SQLStatementSegment;
@@ -40,6 +41,8 @@ public final class OracleCreateProcedureStatement extends
CreateProcedureStateme
private final List<ProcedureCallNameSegment> procedureCallNames;
+ private final List<ProcedureBodyEndNameSegment>
procedureBodyEndNameSegments;
+
private final List<ExpressionSegment> dynamicSqlStatementExpressions;
private final List<CursorForLoopStatementSegment> cursorForLoopStatements
= new ArrayList<>();
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/plsql/ProcedureBodyEndNameSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/plsql/ProcedureBodyEndNameSegment.java
new file mode 100644
index 00000000000..b37c1d3ae92
--- /dev/null
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/plsql/ProcedureBodyEndNameSegment.java
@@ -0,0 +1,42 @@
+/*
+ * 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.statement.oracle.plsql;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+
+/**
+ * PL/SQL procedure body end name segment.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class ProcedureBodyEndNameSegment implements SQLSegment {
+
+ private final int startIndex;
+
+ private final int stopIndex;
+
+ private final IdentifierValue identifier;
+
+ @Override
+ public String toString() {
+ return identifier.getValueWithQuoteCharacters();
+ }
+}
diff --git
a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateProcedureStatementHandlerTest.java
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateProcedureStatementHandlerTest.java
index d0eca72b025..021cf283d07 100644
---
a/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateProcedureStatementHandlerTest.java
+++
b/parser/sql/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateProcedureStatementHandlerTest.java
@@ -52,7 +52,8 @@ class CreateProcedureStatementHandlerTest {
@Test
void assertGetRoutineBodySegmentForOtherDatabases() {
assertFalse(CreateProcedureStatementHandler.getRoutineBodySegment(new
OpenGaussCreateProcedureStatement()).isPresent());
- assertFalse(CreateProcedureStatementHandler.getRoutineBodySegment(new
OracleCreateProcedureStatement(Collections.emptyList(),
Collections.emptyList(), Collections.emptyList())).isPresent());
+ assertFalse(CreateProcedureStatementHandler.getRoutineBodySegment(new
OracleCreateProcedureStatement(Collections.emptyList(),
Collections.emptyList(), Collections.emptyList(),
+ Collections.emptyList())).isPresent());
assertFalse(CreateProcedureStatementHandler.getRoutineBodySegment(new
PostgreSQLCreateProcedureStatement()).isPresent());
assertFalse(CreateProcedureStatementHandler.getRoutineBodySegment(new
SQLServerCreateProcedureStatement()).isPresent());
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/plsql/PLSQLStatementAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/plsql/PLSQLStatementAssert.java
index 31795720692..c90091e97c2 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/plsql/PLSQLStatementAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/plsql/PLSQLStatementAssert.java
@@ -23,11 +23,13 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateFunctionStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateProcedureStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.ProcedureCallNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.plsql.SQLStatementSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
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.plsql.ExpectedDynamicSqlStatementExpressionSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedProcedureCallNameSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedSQLStatementSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.plsql.CreateFunctionTestCase;
@@ -80,6 +82,16 @@ public final class PLSQLStatementAssert {
assertTrue(actual.getProcedureName().isPresent(),
assertContext.getText("Procedure name should be exist."));
assertThat(assertContext.getText("Procedure name mismatched:"),
actual.getProcedureName().get().getIdentifier().getValue(),
is(expected.getProcedureName().getName()));
}
+ if (null == expected.getProcedureBodyEndNameSegments()) {
+ assertThat(assertContext.getText("Procedure body end names size
mismatched:"), actual.getProcedureBodyEndNameSegments().size(), is(0));
+ } else {
+ assertThat(assertContext.getText("Procedure body end names size
mismatched:"), actual.getProcedureBodyEndNameSegments().size(),
is(expected.getProcedureBodyEndNameSegments().size()));
+ for (int i = 0; i <
expected.getProcedureBodyEndNameSegments().size(); i++) {
+ ProcedureBodyEndNameSegment actualSegment =
actual.getProcedureBodyEndNameSegments().get(i);
+ ExpectedProcedureBodyEndNameSegment expectedSegment =
expected.getProcedureBodyEndNameSegments().get(i);
+ assertThat(assertContext.getText("Procedure body end name
mismatched:"), actualSegment.toString(), is(expectedSegment.getName()));
+ }
+ }
}
private static void assertFunctionName(final SQLCaseAssertContext
assertContext, final OracleCreateFunctionStatement actual, final
CreateFunctionTestCase expected) {
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index 869b7b50623..7c45a7a431e 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -191,7 +191,6 @@ 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.statement.ddl.CreateOperatorStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreatePFileStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreatePolicyStatementTestCase;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateProcedureStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateProfileStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreatePublicationStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateRestorePointStatementTestCase;
@@ -305,6 +304,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.statement.dml.MergeStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.SelectStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dml.UpdateStatementTestCase;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.plsql.CreateProcedureTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ral.AlterComputeNodeStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ral.AlterGlobalClockRuleStatementTestCase;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ral.AlterLocalTransactionRuleStatementTestCase;
@@ -739,7 +739,7 @@ public final class RootSQLParserTestCases {
private final List<CreateFunctionStatementTestCase>
createFunctionTestCases = new LinkedList<>();
@XmlElement(name = "create-procedure")
- private final List<CreateProcedureStatementTestCase>
createProcedureTestCases = new LinkedList<>();
+ private final List<CreateProcedureTestCase> createProcedureTestCases = new
LinkedList<>();
@XmlElement(name = "create-server")
private final List<CreateServerStatementTestCase> createServerTestCases =
new LinkedList<>();
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/plsql/ExpectedProcedureBodyEndNameSegment.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/plsql/ExpectedProcedureBodyEndNameSegment.java
new file mode 100644
index 00000000000..f6983ffd244
--- /dev/null
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/plsql/ExpectedProcedureBodyEndNameSegment.java
@@ -0,0 +1,35 @@
+/*
+ * 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.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql;
+
+import lombok.Getter;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * Expected procedure body end name segment.
+ */
+@Getter
+@Setter
+public final class ExpectedProcedureBodyEndNameSegment extends
AbstractExpectedSQLSegment {
+
+ @XmlAttribute
+ private String name;
+}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateProcedureStatementTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateProcedureStatementTestCase.java
deleted file mode 100644
index d18d1ca17b0..00000000000
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateProcedureStatementTestCase.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl;
-
-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.plsql.ExpectedDynamicSqlStatementExpressionSegment;
-import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedProcedureCallNameSegment;
-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.plsql.ExpectedSQLStatementSegment;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Create procedure statement test case.
- */
-@Getter
-@Setter
-public final class CreateProcedureStatementTestCase extends SQLParserTestCase {
-
- @XmlElement(name = "procedure-name")
- private ExpectedRoutineName procedureName;
-
- @XmlElementWrapper(name = "sql-statements")
- @XmlElement(name = "sql-statement")
- private List<ExpectedSQLStatementSegment> sqlStatements = new
LinkedList<>();
-
- @XmlElementWrapper(name = "procedure-calls")
- @XmlElement(name = "procedure-call")
- private List<ExpectedProcedureCallNameSegment> procedureCalls = new
LinkedList<>();
-
- @XmlElementWrapper(name = "dynamic-sql-statement-expressions")
- @XmlElement(name = "dynamic-sql-statement-expression")
- private List<ExpectedDynamicSqlStatementExpressionSegment>
dynamicSqlStatementExpressions = new LinkedList<>();
-}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/plsql/CreateProcedureTestCase.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/plsql/CreateProcedureTestCase.java
index fe02ef653ab..da99b5dee9b 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/plsql/CreateProcedureTestCase.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/plsql/CreateProcedureTestCase.java
@@ -21,6 +21,7 @@ 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.plsql.ExpectedDynamicSqlStatementExpressionSegment;
+import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedProcedureBodyEndNameSegment;
import
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.plsql.ExpectedProcedureCallNameSegment;
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.plsql.ExpectedSQLStatementSegment;
@@ -48,6 +49,10 @@ public final class CreateProcedureTestCase extends
SQLParserTestCase {
@XmlElement(name = "procedure-call")
private List<ExpectedProcedureCallNameSegment> procedureCalls = new
LinkedList<>();
+ @XmlElementWrapper(name = "procedure-body-end-names")
+ @XmlElement(name = "procedure-body-end-name")
+ private List<ExpectedProcedureBodyEndNameSegment>
procedureBodyEndNameSegments = new LinkedList<>();
+
@XmlElementWrapper(name = "dynamic-sql-statement-expressions")
@XmlElement(name = "dynamic-sql-statement-expression")
private List<ExpectedDynamicSqlStatementExpressionSegment>
dynamicSqlStatementExpressions = new LinkedList<>();
diff --git a/test/it/parser/src/main/resources/case/ddl/create-procedure.xml
b/test/it/parser/src/main/resources/case/ddl/create-procedure.xml
index 0776ec466d6..9f2011c67bf 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-procedure.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-procedure.xml
@@ -30,9 +30,25 @@
<create-procedure
sql-case-id="create_procedure_with_create_view_as_select_into_outfile" />
<create-procedure
sql-case-id="create_procedure_with_sqlexception_and_create_view" />
<create-procedure
sql-case-id="create_procedure_with_deterministic_create_view" />
- <create-procedure
sql-case-id="create_procedure_with_update_statement_oracle" />
+ <create-procedure
sql-case-id="create_procedure_with_update_statement_oracle">
+ <procedure-name name="update_order" />
+ <sql-statements>
+ <sql-statement start-index="95" stop-index="154"
statement-class-simple-name="OracleUpdateStatement" />
+ </sql-statements>
+ </create-procedure>
<create-procedure sql-case-id="create_procedure_with_prepare_commit" />
- <create-procedure sql-case-id="create_procedure_with_cursor_definition" />
- <create-procedure
sql-case-id="create_procedure_with_collection_type_definition" />
+ <create-procedure sql-case-id="create_procedure_with_cursor_definition">
+ <procedure-name name="my_proc" />
+ <sql-statements>
+ <sql-statement start-index="69" stop-index="94"
statement-class-simple-name="OracleSelectStatement" />
+ <sql-statement start-index="143" stop-index="175"
statement-class-simple-name="OracleInsertStatement" />
+ </sql-statements>
+ </create-procedure>
+ <create-procedure
sql-case-id="create_procedure_with_collection_type_definition">
+ <procedure-name name="my_proc" />
+ <sql-statements>
+ <sql-statement start-index="100" stop-index="132"
statement-class-simple-name="OracleInsertStatement" />
+ </sql-statements>
+ </create-procedure>
<create-procedure sql-case-id="create_plsql_block" />
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/plsql/create-procedure.xml
b/test/it/parser/src/main/resources/case/plsql/create-procedure.xml
index 44d0f76e012..3a419e20e7d 100644
--- a/test/it/parser/src/main/resources/case/plsql/create-procedure.xml
+++ b/test/it/parser/src/main/resources/case/plsql/create-procedure.xml
@@ -20,15 +20,18 @@
<create-procedure sql-case-id="pl_sql_create_procedure">
<procedure-name name="test_procedure" />
<sql-statements>
- <sql-statement start-index="167" stop-index="192"
statement-class-simple-name="OracleSavepointStatement" />
- <sql-statement start-index="210" stop-index="274"
statement-class-simple-name="OracleSelectStatement" />
- <sql-statement start-index="1205" stop-index="1210"
statement-class-simple-name="OracleCommitStatement" />
- <sql-statement start-index="1251" stop-index="1293"
statement-class-simple-name="OracleRollbackStatement" />
- <sql-statement start-index="1408" stop-index="1450"
statement-class-simple-name="OracleRollbackStatement" />
+ <sql-statement start-index="162" stop-index="187"
statement-class-simple-name="OracleSavepointStatement" />
+ <sql-statement start-index="205" stop-index="269"
statement-class-simple-name="OracleSelectStatement" />
+ <sql-statement start-index="1200" stop-index="1205"
statement-class-simple-name="OracleCommitStatement" />
+ <sql-statement start-index="1246" stop-index="1288"
statement-class-simple-name="OracleRollbackStatement" />
+ <sql-statement start-index="1403" stop-index="1445"
statement-class-simple-name="OracleRollbackStatement" />
</sql-statements>
<procedure-calls>
<procedure-call name="DBMS_OUTPUT.PUT_LINE" />
<procedure-call name="DBMS_OUTPUT.PUT_LINE" />
</procedure-calls>
+ <procedure-body-end-names>
+ <procedure-body-end-name name="cp_SHOPBudget_Gy" />
+ </procedure-body-end-names>
</create-procedure>
</sql-parser-test-cases>