You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/05/16 16:17:35 UTC
(shardingsphere) branch master updated: Optimize DoStatement structure and parsing logic (#35445)
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 930f5d4ad9f Optimize DoStatement structure and parsing logic (#35445)
930f5d4ad9f is described below
commit 930f5d4ad9f5da161fa4fcc032766ca36a12865f
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat May 17 00:17:29 2025 +0800
Optimize DoStatement structure and parsing logic (#35445)
- Remove redundant List<ExpressionSegment> parameters from DorisDoStatement and MySQLDoStatement
- Add parameters list to DoStatement base class
- Update DoStatement parsing logic in Doris and MySQL visitors
- Adjust DoStatement assertion in test cases
---
.../visitor/statement/type/DorisDMLStatementVisitor.java | 7 +++----
.../visitor/statement/type/MySQLDMLStatementVisitor.java | 9 ++++-----
.../parser/statement/core/statement/dml/DoStatement.java | 8 ++++++++
.../sql/parser/statement/doris/dml/DorisDoStatement.java | 11 -----------
.../sql/parser/statement/mysql/dml/MySQLDoStatement.java | 11 -----------
.../asserts/statement/dml/impl/DoStatementAssert.java | 16 ++++++----------
6 files changed, 21 insertions(+), 41 deletions(-)
diff --git a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
index ddac466a141..bc90d743df0 100644
--- a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
+++ b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDMLStatementVisitor.java
@@ -49,7 +49,6 @@ import org.apache.shardingsphere.sql.parser.statement.doris.dml.DorisImportState
import org.apache.shardingsphere.sql.parser.statement.doris.dml.DorisLoadDataStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.dml.DorisLoadXMLStatement;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -72,9 +71,9 @@ public final class DorisDMLStatementVisitor extends DorisStatementVisitor implem
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- List<ExpressionSegment> params = new ArrayList<>(ctx.expr().size());
- ctx.expr().forEach(each -> params.add((ExpressionSegment) visit(each)));
- return new DorisDoStatement(params);
+ DorisDoStatement result = new DorisDoStatement();
+ result.getParameters().addAll(ctx.expr().stream().map(each -> (ExpressionSegment) visit(each)).collect(Collectors.toList()));
+ return result;
}
@Override
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
index 0b5f6ccc9a1..d59a5070782 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDMLStatementVisitor.java
@@ -32,9 +32,9 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.Returni
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TargetListContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowClauseContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowFunctionContext;
-import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowingClauseContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowItemContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowSpecificationContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.WindowingClauseContext;
import org.apache.shardingsphere.sql.parser.mysql.visitor.statement.MySQLStatementVisitor;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.ReturningSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
@@ -55,7 +55,6 @@ import org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLImportState
import org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLLoadDataStatement;
import org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLLoadXMLStatement;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -78,9 +77,9 @@ public final class MySQLDMLStatementVisitor extends MySQLStatementVisitor implem
@Override
public ASTNode visitDoStatement(final DoStatementContext ctx) {
- List<ExpressionSegment> params = new ArrayList<>(ctx.expr().size());
- ctx.expr().forEach(each -> params.add((ExpressionSegment) visit(each)));
- return new MySQLDoStatement(params);
+ MySQLDoStatement result = new MySQLDoStatement();
+ result.getParameters().addAll(ctx.expr().stream().map(each -> (ExpressionSegment) visit(each)).collect(Collectors.toList()));
+ return result;
}
@Override
diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
index 3eabf1cd96b..d54297247cd 100644
--- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
+++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DoStatement.java
@@ -17,10 +17,18 @@
package org.apache.shardingsphere.sql.parser.statement.core.statement.dml;
+import lombok.Getter;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Do statement.
*/
+@Getter
public abstract class DoStatement extends AbstractSQLStatement implements DMLStatement {
+
+ private final List<ExpressionSegment> parameters = new ArrayList<>();
}
diff --git a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dml/DorisDoStatement.java b/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dml/DorisDoStatement.java
index 3adedd6bdb0..7bd99486e13 100644
--- a/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dml/DorisDoStatement.java
+++ b/parser/sql/statement/type/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/dml/DorisDoStatement.java
@@ -17,22 +17,11 @@
package org.apache.shardingsphere.sql.parser.statement.doris.dml;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
import org.apache.shardingsphere.sql.parser.statement.doris.DorisStatement;
-import java.util.List;
-
/**
* Doris do statement.
*/
-@AllArgsConstructor
-@NoArgsConstructor
-@Getter
public final class DorisDoStatement extends DoStatement implements DorisStatement {
-
- private List<ExpressionSegment> parameters;
}
diff --git a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dml/MySQLDoStatement.java b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dml/MySQLDoStatement.java
index f7eef76e2aa..c8d6622021c 100644
--- a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dml/MySQLDoStatement.java
+++ b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dml/MySQLDoStatement.java
@@ -17,22 +17,11 @@
package org.apache.shardingsphere.sql.parser.statement.mysql.dml;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
import org.apache.shardingsphere.sql.parser.statement.mysql.MySQLStatement;
-import java.util.List;
-
/**
* MySQL do statement.
*/
-@AllArgsConstructor
-@NoArgsConstructor
-@Getter
public final class MySQLDoStatement extends DoStatement implements MySQLStatement {
-
- private List<ExpressionSegment> parameters;
}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
index 525ed0290d0..f762f39e0bc 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DoStatementAssert.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.comp
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DoStatement;
-import org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLDoStatement;
import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.expression.ExpressionAssert;
import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.dostatement.ExpectedDoParameter;
@@ -48,15 +47,12 @@ public final class DoStatementAssert {
* @param expected expected do statement test case
*/
public static void assertIs(final SQLCaseAssertContext assertContext, final DoStatement actual, final DoStatementTestCase expected) {
- if (actual instanceof MySQLDoStatement) {
- MySQLDoStatement actualStatement = (MySQLDoStatement) actual;
- if (null != actualStatement.getParameters() && !expected.getDoParameters().isEmpty()) {
- assertThat(assertContext.getText("Do parameters assertion error: "), actualStatement.getParameters().size(), is(expected.getDoParameters().size()));
- int count = 0;
- for (ExpressionSegment each : actualStatement.getParameters()) {
- assertParameter(assertContext, each, expected.getDoParameters().get(count));
- count++;
- }
+ if (null != actual.getParameters() && !expected.getDoParameters().isEmpty()) {
+ assertThat(assertContext.getText("Do parameters assertion error: "), actual.getParameters().size(), is(expected.getDoParameters().size()));
+ int count = 0;
+ for (ExpressionSegment each : actual.getParameters()) {
+ assertParameter(assertContext, each, expected.getDoParameters().get(count));
+ count++;
}
}
}