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++;
             }
         }
     }