This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 17aaaadda77 Move common methods to SQLStatement interface (#35660)
17aaaadda77 is described below
commit 17aaaadda778d8c775199585eeb6987511238b5c
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jun 10 14:59:02 2025 +0800
Move common methods to SQLStatement interface (#35660)
* Move common methods to SQLStatement interface
- Move getParameterCount, getParameterMarkerSegments,
addParameterMarkerSegments, getVariableNames, and getCommentSegments to
SQLStatement interface
- Implement these methods in AbstractSQLStatement
- Update related test cases and classes to use the new interface methods
- Remove redundant implementations in EmptyStatement and
OraclePLSQLBlockStatement
* Move common methods to SQLStatement interface
- Move getParameterCount, getParameterMarkerSegments,
addParameterMarkerSegments, getVariableNames, and getCommentSegments to
SQLStatement interface
- Implement these methods in AbstractSQLStatement
- Update related test cases and classes to use the new interface methods
- Remove redundant implementations in EmptyStatement and
OraclePLSQLBlockStatement
---
.../sql/parser/api/SQLStatementVisitorEngine.java | 2 +-
.../core/statement/AbstractSQLStatement.java | 16 ++++++---------
.../statement/core/statement/SQLStatement.java | 23 ++++++++++++++++++++++
.../core/statement/dal/EmptyStatement.java | 5 -----
.../oracle/ddl/OraclePLSQLBlockStatement.java | 5 -----
.../prepare/MySQLComStmtPrepareExecutor.java | 3 +--
.../extended/parse/PostgreSQLComParseExecutor.java | 5 ++---
.../asserts/statement/comment/CommentAssert.java | 6 +++---
8 files changed, 36 insertions(+), 29 deletions(-)
diff --git
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLStatementVisitorEngine.java
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLStatementVisitorEngine.java
index d3666053798..c79f5ac19b4 100644
---
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLStatementVisitorEngine.java
+++
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLStatementVisitorEngine.java
@@ -57,7 +57,7 @@ public final class SQLStatementVisitorEngine {
private <T> void appendSQLComments(final ParseASTNode parseASTNode, final
T visitResult) {
if (visitResult instanceof AbstractSQLStatement) {
for (Token each : parseASTNode.getHiddenTokens()) {
- ((AbstractSQLStatement)
visitResult).getCommentSegments().add(new CommentSegment(each.getText(),
each.getStartIndex(), each.getStopIndex()));
+ ((SQLStatement) visitResult).getCommentSegments().add(new
CommentSegment(each.getText(), each.getStartIndex(), each.getStopIndex()));
}
}
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/AbstractSQLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/AbstractSQLStatement.java
index e856017fed4..a3d17616a21 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/AbstractSQLStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/AbstractSQLStatement.java
@@ -33,25 +33,21 @@ import java.util.LinkedList;
@Getter
public class AbstractSQLStatement implements SQLStatement {
- private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedHashSet<>();
-
private final Collection<Integer> uniqueParameterIndexes = new HashSet<>();
- private final Collection<CommentSegment> commentSegments = new
LinkedList<>();
+ private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedHashSet<>();
private final Collection<String> variableNames = new
CaseInsensitiveSet<>();
+ private final Collection<CommentSegment> commentSegments = new
LinkedList<>();
+
@Override
- public int getParameterCount() {
+ public final int getParameterCount() {
return uniqueParameterIndexes.size();
}
- /**
- * Add parameter marker segment.
- *
- * @param parameterMarkerSegments parameter marker segment collection
- */
- public void addParameterMarkerSegments(final
Collection<ParameterMarkerSegment> parameterMarkerSegments) {
+ @Override
+ public final void addParameterMarkerSegments(final
Collection<ParameterMarkerSegment> parameterMarkerSegments) {
for (ParameterMarkerSegment each : parameterMarkerSegments) {
this.parameterMarkerSegments.add(each);
uniqueParameterIndexes.add(each.getParameterIndex());
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/SQLStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/SQLStatement.java
index 34baa227d48..bac2cbcb9e6 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/SQLStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/SQLStatement.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.CommentSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.ParameterMarkerSegment;
import java.util.Collection;
@@ -33,10 +35,31 @@ public interface SQLStatement extends ASTNode {
*/
int getParameterCount();
+ /**
+ * Get parameter marker segments.
+ *
+ * @return parameter marker segments
+ */
+ Collection<ParameterMarkerSegment> getParameterMarkerSegments();
+
+ /**
+ * Add parameter marker segment.
+ *
+ * @param parameterMarkerSegments parameter marker segment collection
+ */
+ void addParameterMarkerSegments(Collection<ParameterMarkerSegment>
parameterMarkerSegments);
+
/**
* Get variable names.
*
* @return variable names
*/
Collection<String> getVariableNames();
+
+ /**
+ * Get comment segments.
+ *
+ * @return comment segments
+ */
+ Collection<CommentSegment> getCommentSegments();
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/EmptyStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/EmptyStatement.java
index c0b070eb23e..d92f96f3496 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/EmptyStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/EmptyStatement.java
@@ -23,9 +23,4 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL
* Empty statement.
*/
public final class EmptyStatement extends AbstractSQLStatement implements
DALStatement {
-
- @Override
- public int getParameterCount() {
- return 0;
- }
}
diff --git
a/parser/sql/statement/type/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/OraclePLSQLBlockStatement.java
b/parser/sql/statement/type/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/OraclePLSQLBlockStatement.java
index 351ea475426..fb8771f1a4c 100644
---
a/parser/sql/statement/type/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/OraclePLSQLBlockStatement.java
+++
b/parser/sql/statement/type/oracle/src/main/java/org/apache/shardingsphere/sql/parser/statement/oracle/ddl/OraclePLSQLBlockStatement.java
@@ -24,9 +24,4 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStat
* PLSQL block statement for Oracle.
*/
public final class OraclePLSQLBlockStatement extends AbstractSQLStatement
implements DDLStatement {
-
- @Override
- public int getParameterCount() {
- return 0;
- }
}
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
index 388ee431569..4e4a2001564 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
@@ -52,7 +52,6 @@ import
org.apache.shardingsphere.proxy.frontend.mysql.command.ServerStatusFlagCa
import
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
import
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLStatementIdGenerator;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.ParameterMarkerSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import java.util.ArrayList;
@@ -128,7 +127,7 @@ public final class MySQLComStmtPrepareExecutor implements
CommandExecutor {
final MySQLServerPreparedStatement serverPreparedStatement) {
List<ShardingSphereColumn> columnsOfParameterMarkers =
MySQLComStmtPrepareParameterMarkerExtractor.findColumnsOfParameterMarkers(sqlStatementContext.getSqlStatement(),
getSchema(sqlStatementContext));
- Collection<ParameterMarkerSegment> parameterMarkerSegments =
((AbstractSQLStatement)
sqlStatementContext.getSqlStatement()).getParameterMarkerSegments();
+ Collection<ParameterMarkerSegment> parameterMarkerSegments =
sqlStatementContext.getSqlStatement().getParameterMarkerSegments();
Collection<MySQLPacket> result = new
ArrayList<>(parameterMarkerSegments.size());
Collection<Integer> paramColumnDefinitionFlags = new
ArrayList<>(parameterMarkerSegments.size());
for (int index = 0; index < parameterMarkerSegments.size(); index++) {
diff --git
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
index 6b85b6db70e..6f2893a804a 100644
---
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
+++
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
@@ -37,7 +37,6 @@ import
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extende
import
org.apache.shardingsphere.sql.parser.statement.core.enums.ParameterMarkerType;
import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.ParameterMarkerSegment;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DMLStatement;
@@ -69,9 +68,9 @@ public final class PostgreSQLComParseExecutor implements
CommandExecutor {
sqlStatement = sqlParserEngine.parse(escapedSql, true);
sql = escapedSql;
}
- List<Integer> actualParameterMarkerIndexes = new ArrayList<>();
+ List<Integer> actualParameterMarkerIndexes = new
ArrayList<>(sqlStatement.getParameterMarkerSegments().size());
if (sqlStatement.getParameterCount() > 0) {
- List<ParameterMarkerSegment> parameterMarkerSegments = new
ArrayList<>(((AbstractSQLStatement) sqlStatement).getParameterMarkerSegments());
+ List<ParameterMarkerSegment> parameterMarkerSegments = new
ArrayList<>(sqlStatement.getParameterMarkerSegments());
for (ParameterMarkerSegment each : parameterMarkerSegments) {
actualParameterMarkerIndexes.add(each.getParameterIndex());
}
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
index d94b5f702ba..762ed44e7e2 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/comment/CommentAssert.java
@@ -56,14 +56,14 @@ public final class CommentAssert {
private static void assertEmptyComment(final SQLCaseAssertContext
assertContext, final SQLStatement actual) {
if (actual instanceof AbstractSQLStatement) {
- assertTrue(((AbstractSQLStatement)
actual).getCommentSegments().isEmpty(), assertContext.getText("Comment should
be empty."));
+ assertTrue(actual.getCommentSegments().isEmpty(),
assertContext.getText("Comment should be empty."));
}
}
private static void assertCorrectComment(final SQLCaseAssertContext
assertContext, final SQLStatement actual, final SQLParserTestCase expected) {
assertInstanceOf(AbstractSQLStatement.class, actual,
assertContext.getText("Comment should exist."));
- assertThat(assertContext.getText("Comments size assertion error: "),
((AbstractSQLStatement) actual).getCommentSegments().size(),
is(expected.getComments().size()));
- Iterator<CommentSegment> actualIterator = ((AbstractSQLStatement)
actual).getCommentSegments().iterator();
+ assertThat(assertContext.getText("Comments size assertion error: "),
actual.getCommentSegments().size(), is(expected.getComments().size()));
+ Iterator<CommentSegment> actualIterator =
actual.getCommentSegments().iterator();
for (ExpectedComment each : expected.getComments()) {
assertThat(assertContext.getText("Comments assertion error: "),
actualIterator.next().getText(), is(each.getText()));
}