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 1480d40953f Refactor constructor of MergeStatement to empty 
buildAttributes (#38343)
1480d40953f is described below

commit 1480d40953f7fbf9cd1d19b45cde0d7f9e65e2d8
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Mar 4 20:29:07 2026 +0800

    Refactor constructor of MergeStatement to empty buildAttributes (#38343)
---
 .../ast/converter/SQLNodeConverterEngineTest.java  |  2 +-
 .../type/MergeStatementConverterTest.java          | 17 ++++----
 .../type/FirebirdDMLStatementVisitor.java          | 13 +++---
 .../statement/type/HiveDMLStatementVisitor.java    |  8 ++--
 .../statement/type/OracleDMLStatementVisitor.java  | 28 ++++++-------
 .../statement/SQLServerStatementVisitor.java       | 23 +++++------
 .../core/statement/type/dml/MergeStatement.java    | 46 ++++++++++++++--------
 7 files changed, 75 insertions(+), 62 deletions(-)

diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/SQLNodeConverterEngineTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/SQLNodeConverterEngineTest.java
index 3f562429804..ec3c3bef47c 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/SQLNodeConverterEngineTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/SQLNodeConverterEngineTest.java
@@ -83,7 +83,7 @@ class SQLNodeConverterEngineTest {
         try (
                 MockedConstruction<MergeStatementConverter> ignored = 
mockConstruction(MergeStatementConverter.class,
                         (mock, context) -> 
when(mock.convert(any(MergeStatement.class))).thenReturn(mergeSqlNode))) {
-            assertThat(SQLNodeConverterEngine.convert(new 
MergeStatement(databaseType)), is(mergeSqlNode));
+            
assertThat(SQLNodeConverterEngine.convert(MergeStatement.builder().databaseType(databaseType).build()),
 is(mergeSqlNode));
         }
     }
     
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverterTest.java
index 3d6a92b5474..c47a956e2ff 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverterTest.java
@@ -51,8 +51,7 @@ class MergeStatementConverterTest {
     
     @Test
     void assertConvertWithUpdate() {
-        MergeStatement mergeStatement = 
createMergeStatement(createSimpleTableSegment("target_table"), 
createSimpleTableSegment("source_table"));
-        mergeStatement.setUpdate(createUpdateStatement());
+        MergeStatement mergeStatement = 
createMergeStatement(createSimpleTableSegment("target_table"), 
createSimpleTableSegment("source_table"), createUpdateStatement());
         SqlMerge actual = (SqlMerge) new 
MergeStatementConverter().convert(mergeStatement);
         assertThat(actual.getCondition(), isA(SqlNode.class));
         assertThat(actual.getUpdateCall(), isA(SqlUpdate.class));
@@ -67,21 +66,21 @@ class MergeStatementConverterTest {
     
     @Test
     void assertConvertUpdateWithEmptyTable() {
-        MergeStatement mergeStatement = 
createMergeStatement(createSimpleTableSegment("target_table"), 
createSimpleTableSegment("source_table"));
         UpdateStatement updateStatement = createUpdateStatement();
         updateStatement.setTable(createSimpleTableSegment("DUAL"));
-        mergeStatement.setUpdate(updateStatement);
+        MergeStatement mergeStatement = 
createMergeStatement(createSimpleTableSegment("target_table"), 
createSimpleTableSegment("source_table"), updateStatement);
         SqlMerge actual = (SqlMerge) new 
MergeStatementConverter().convert(mergeStatement);
         assertNotNull(actual.getUpdateCall());
         assertThat(actual.getUpdateCall().getTargetTable(), 
is(SqlNodeList.EMPTY));
     }
     
     private MergeStatement createMergeStatement(final SimpleTableSegment 
target, final SimpleTableSegment source) {
-        MergeStatement result = new MergeStatement(databaseType);
-        result.setTarget(target);
-        result.setSource(source);
-        result.setExpression(new ExpressionWithParamsSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0)));
-        return result;
+        return createMergeStatement(target, source, null);
+    }
+    
+    private MergeStatement createMergeStatement(final SimpleTableSegment 
target, final SimpleTableSegment source, final UpdateStatement updateStatement) 
{
+        return 
MergeStatement.builder().databaseType(databaseType).target(target).source(source)
+                .expression(new ExpressionWithParamsSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0))).update(updateStatement).build();
     }
     
     private UpdateStatement createUpdateStatement() {
diff --git 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
index 4f44684b875..3691ce0f4e2 100644
--- 
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
@@ -579,11 +579,12 @@ public final class FirebirdDMLStatementVisitor extends 
FirebirdStatementVisitor
     
     @Override
     public ASTNode visitMerge(final MergeContext ctx) {
-        MergeStatement result = new MergeStatement(getDatabaseType());
-        result.setTarget((TableSegment) visit(ctx.intoClause()));
-        result.setSource((TableSegment) visit(ctx.usingClause()));
-        // add mergeWhenNotMatched and mergeWhenMatched part
-        // add RETURNING part
-        return result;
+        return MergeStatement.builder()
+                .databaseType(getDatabaseType())
+                .target((TableSegment) visit(ctx.intoClause()))
+                .source((TableSegment) visit(ctx.usingClause()))
+                // add mergeWhenNotMatched and mergeWhenMatched part
+                // add RETURNING part
+                .build();
     }
 }
diff --git 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
index a705f478130..8fdaa01307d 100644
--- 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDMLStatementVisitor.java
@@ -1208,12 +1208,10 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitMerge(final MergeContext ctx) {
-        MergeStatement result = new MergeStatement(getDatabaseType());
         TableSegment target = (TableSegment) visit(ctx.tableName(0));
         if (null != ctx.tableNameAs(0)) {
             target.setAlias((AliasSegment) visit(ctx.tableNameAs(0).alias()));
         }
-        result.setTarget(target);
         TableSegment source;
         if (null != ctx.tableName(1)) {
             source = (TableSegment) visit(ctx.tableName(1));
@@ -1225,9 +1223,8 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
         if (null != ctx.tableNameAs(1)) {
             source.setAlias((AliasSegment) visit(ctx.tableNameAs(1).alias()));
         }
-        result.setSource(source);
         ExpressionWithParamsSegment onExpression = new 
ExpressionWithParamsSegment(ctx.expr().start.getStartIndex(), 
ctx.expr().stop.getStopIndex(), (ExpressionSegment) visit(ctx.expr()));
-        result.setExpression(onExpression);
+        Collection<MergeWhenAndThenSegment> whenAndThens = new LinkedList<>();
         for (MergeWhenClauseContext each : ctx.mergeWhenClause()) {
             int start = each.getStart().getStartIndex();
             int stop = each.getStop().getStopIndex();
@@ -1245,8 +1242,9 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
                 InsertStatement ins = 
InsertStatement.builder().databaseType(getDatabaseType()).values(values).build();
                 seg.setInsert(ins);
             }
-            result.getWhenAndThens().add(seg);
+            whenAndThens.add(seg);
         }
+        MergeStatement result = 
MergeStatement.builder().databaseType(getDatabaseType()).target(target).source(source).expression(onExpression).whenAndThens(whenAndThens).build();
         result.addParameterMarkers(getParameterMarkerSegments());
         return result;
     }
diff --git 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
index aec322e02d4..d6a7c2b0996 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
@@ -1348,25 +1348,25 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitMerge(final MergeContext ctx) {
-        MergeStatement result = new MergeStatement(getDatabaseType());
-        result.setTarget((TableSegment) visit(ctx.intoClause()));
-        result.setSource((TableSegment) visit(ctx.usingClause()));
+        TableSegment target = (TableSegment) visit(ctx.intoClause());
+        TableSegment source = (TableSegment) visit(ctx.usingClause());
         ExpressionWithParamsSegment onExpression = new 
ExpressionWithParamsSegment(ctx.usingClause().expr().start.getStartIndex(), 
ctx.usingClause().expr().stop.getStopIndex(),
                 (ExpressionSegment) visit(ctx.usingClause().expr()));
         
onExpression.getParameterMarkerSegments().addAll(popAllStatementParameterMarkerSegments());
-        result.setExpression(onExpression);
+        UpdateStatement update = null;
+        InsertStatement insert = null;
         if (null != ctx.mergeUpdateClause() && null != ctx.mergeInsertClause() 
&& ctx.mergeUpdateClause().start.getStartIndex() > 
ctx.mergeInsertClause().start.getStartIndex()) {
-            result.setInsert((InsertStatement) 
visitMergeInsertClause(ctx.mergeInsertClause()));
-            result.setUpdate((UpdateStatement) 
visitMergeUpdateClause(ctx.mergeUpdateClause()));
-            result.addParameterMarkers(ctx.getParent() instanceof 
ExecuteContext ? getGlobalParameterMarkerSegments() : 
popAllStatementParameterMarkerSegments());
-            return result;
-        }
-        if (null != ctx.mergeUpdateClause()) {
-            result.setUpdate((UpdateStatement) 
visitMergeUpdateClause(ctx.mergeUpdateClause()));
-        }
-        if (null != ctx.mergeInsertClause()) {
-            result.setInsert((InsertStatement) 
visitMergeInsertClause(ctx.mergeInsertClause()));
+            insert = (InsertStatement) 
visitMergeInsertClause(ctx.mergeInsertClause());
+            update = (UpdateStatement) 
visitMergeUpdateClause(ctx.mergeUpdateClause());
+        } else {
+            if (null != ctx.mergeUpdateClause()) {
+                update = (UpdateStatement) 
visitMergeUpdateClause(ctx.mergeUpdateClause());
+            }
+            if (null != ctx.mergeInsertClause()) {
+                insert = (InsertStatement) 
visitMergeInsertClause(ctx.mergeInsertClause());
+            }
         }
+        MergeStatement result = 
MergeStatement.builder().databaseType(getDatabaseType()).target(target).source(source).expression(onExpression).update(update).insert(insert).build();
         result.addParameterMarkers(ctx.getParent() instanceof ExecuteContext ? 
getGlobalParameterMarkerSegments() : popAllStatementParameterMarkerSegments());
         return result;
     }
diff --git 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index b816d657a3b..a239a70716e 100644
--- 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -2223,39 +2223,40 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
     
     @Override
     public ASTNode visitMerge(final MergeContext ctx) {
-        MergeStatement result = new MergeStatement(databaseType);
-        result.setTarget((TableSegment) 
visit(ctx.mergeIntoClause().tableReferences()));
+        MergeStatement.MergeStatementBuilder result = 
MergeStatement.builder().databaseType(databaseType).target((TableSegment) 
visit(ctx.mergeIntoClause().tableReferences()));
         if (null != ctx.withClause()) {
-            result.setWith((WithSegment) visit(ctx.withClause()));
+            result.with((WithSegment) visit(ctx.withClause()));
         }
         if (null != ctx.withMergeHint()) {
-            result.setWithTableHint((WithTableHintSegment) 
visit(ctx.withMergeHint().withTableHint()));
+            result.withTableHint((WithTableHintSegment) 
visit(ctx.withMergeHint().withTableHint()));
             if (null != ctx.withMergeHint().indexName()) {
                 Collection<IndexSegment> indexSegments = new LinkedList<>();
                 for (IndexNameContext each : ctx.withMergeHint().indexName()) {
                     indexSegments.add((IndexSegment) visit(each));
                 }
-                result.setIndexes(indexSegments);
+                result.indexes(indexSegments);
             }
         }
         if (null != ctx.mergeUsingClause()) {
-            result.setSource((TableSegment) 
visit(ctx.mergeUsingClause().tableReferences()));
+            result.source((TableSegment) 
visit(ctx.mergeUsingClause().tableReferences()));
             ExpressionWithParamsSegment onExpression = new 
ExpressionWithParamsSegment(ctx.mergeUsingClause().expr().start.getStartIndex(),
 ctx.mergeUsingClause().expr().stop.getStopIndex(),
                     (ExpressionSegment) visit(ctx.mergeUsingClause().expr()));
-            result.setExpression(onExpression);
+            result.expression(onExpression);
         }
         if (null != ctx.mergeWhenClause()) {
+            Collection<MergeWhenAndThenSegment> whenAndThens = new 
LinkedList<>();
             for (MergeWhenClauseContext each : ctx.mergeWhenClause()) {
-                result.getWhenAndThens().add((MergeWhenAndThenSegment) 
visit(each));
+                whenAndThens.add((MergeWhenAndThenSegment) visit(each));
             }
+            result.whenAndThens(whenAndThens);
         }
         if (null != ctx.outputClause()) {
-            result.setOutput((OutputSegment) visit(ctx.outputClause()));
+            result.output((OutputSegment) visit(ctx.outputClause()));
         }
         if (null != ctx.optionHint()) {
-            result.setOptionHint((OptionHintSegment) visit(ctx.optionHint()));
+            result.optionHint((OptionHintSegment) visit(ctx.optionHint()));
         }
-        return result;
+        return result.build();
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/MergeStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/MergeStatement.java
index f5f3cf8cd8a..b0e4c052e63 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/MergeStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/MergeStatement.java
@@ -17,8 +17,8 @@
 
 package org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml;
 
+import lombok.Builder;
 import lombok.Getter;
-import lombok.Setter;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionWithParamsSegment;
@@ -39,35 +39,50 @@ import java.util.Optional;
  * Merge statement.
  */
 @Getter
-@Setter
 public final class MergeStatement extends DMLStatement {
     
-    private TableSegment target;
+    private final TableSegment target;
     
-    private TableSegment source;
+    private final TableSegment source;
     
-    private ExpressionWithParamsSegment expression;
+    private final ExpressionWithParamsSegment expression;
     
-    private UpdateStatement update;
+    private final UpdateStatement update;
     
-    private InsertStatement insert;
+    private final InsertStatement insert;
     
-    private WithSegment with;
+    private final WithSegment with;
     
-    private WithTableHintSegment withTableHint;
+    private final WithTableHintSegment withTableHint;
     
-    private Collection<IndexSegment> indexes = new LinkedList<>();
+    private final Collection<IndexSegment> indexes;
     
-    private OutputSegment output;
+    private final OutputSegment output;
     
-    private OptionHintSegment optionHint;
+    private final OptionHintSegment optionHint;
     
-    private Collection<MergeWhenAndThenSegment> whenAndThens = new 
LinkedList<>();
+    private final Collection<MergeWhenAndThenSegment> whenAndThens;
     
-    private SQLStatementAttributes attributes;
+    private final SQLStatementAttributes attributes;
     
-    public MergeStatement(final DatabaseType databaseType) {
+    @Builder
+    private MergeStatement(final DatabaseType databaseType, final TableSegment 
target, final TableSegment source, final ExpressionWithParamsSegment expression,
+                           final UpdateStatement update, final InsertStatement 
insert, final WithSegment with, final WithTableHintSegment withTableHint,
+                           final Collection<IndexSegment> indexes, final 
OutputSegment output, final OptionHintSegment optionHint,
+                           final Collection<MergeWhenAndThenSegment> 
whenAndThens) {
         super(databaseType);
+        this.target = target;
+        this.source = source;
+        this.expression = expression;
+        this.update = update;
+        this.insert = insert;
+        this.with = with;
+        this.withTableHint = withTableHint;
+        this.indexes = null == indexes ? new LinkedList<>() : indexes;
+        this.output = output;
+        this.optionHint = optionHint;
+        this.whenAndThens = null == whenAndThens ? new LinkedList<>() : 
whenAndThens;
+        attributes = new SQLStatementAttributes(new 
WithSQLStatementAttribute(with));
     }
     
     /**
@@ -126,6 +141,5 @@ public final class MergeStatement extends DMLStatement {
     
     @Override
     public void buildAttributes() {
-        attributes = new SQLStatementAttributes(new 
WithSQLStatementAttribute(with));
     }
 }

Reply via email to