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 8852ad93e2e Refactor constructor of TruncateStatement, UpdateStatement 
to empty buildAttributes (#38356)
8852ad93e2e is described below

commit 8852ad93e2e20b3a17cb8459205f2b2f58ceb4c5
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 5 22:36:37 2026 +0800

    Refactor constructor of TruncateStatement, UpdateStatement to empty 
buildAttributes (#38356)
    
    * Refactor constructor of TruncateStatement to empty buildAttributes
    
    * Refactor constructor of UpdateStatement to empty buildAttributes
    
    * Refactor constructor of UpdateStatement to empty buildAttributes
---
 .../core/advice/SQLRouteCountAdviceTest.java       |  2 +-
 .../fixture/EncryptGeneratorFixtureBuilder.java    | 10 +++--
 ...ShardingMultipleTablesSupportedCheckerTest.java | 14 +++----
 .../dml/ShardingUpdateRouteContextCheckerTest.java |  9 ++--
 .../statement/ddl/TruncateStatementBinder.java     |  2 +-
 .../statement/dml/UpdateStatementBinder.java       | 18 ++++----
 .../type/dml/UpdateStatementContextTest.java       | 11 ++---
 .../statement/SQLStatementCopyUtilsTest.java       |  4 +-
 .../statement/dml/UpdateStatementBinderTest.java   | 10 +++--
 .../executor/sql/process/ProcessEngineTest.java    |  9 ++--
 .../ast/converter/SQLNodeConverterEngineTest.java  |  2 +-
 .../type/ExplainStatementConverterTest.java        | 11 ++---
 .../type/MergeStatementConverterTest.java          | 23 +++++++----
 .../type/UpdateStatementConverterTest.java         | 24 +++++------
 .../FederationMetaDataRefreshEngineTest.java       |  4 +-
 .../PushDownMetaDataRefreshEngineTest.java         |  8 ++--
 .../type/ClickHouseDMLStatementVisitor.java        | 14 ++++---
 .../visitor/statement/DorisStatementVisitor.java   | 18 ++++----
 .../statement/type/DorisDDLStatementVisitor.java   | 12 +++---
 .../type/FirebirdDMLStatementVisitor.java          | 16 ++++----
 .../statement/type/HiveDDLStatementVisitor.java    |  2 +-
 .../statement/type/HiveDMLStatementVisitor.java    | 21 +++++-----
 .../visitor/statement/MySQLStatementVisitor.java   | 20 +++++----
 .../statement/type/MySQLDDLStatementVisitor.java   |  2 +-
 .../statement/OpenGaussStatementVisitor.java       | 16 ++++----
 .../type/OpenGaussDDLStatementVisitor.java         |  2 +-
 .../statement/type/OracleDDLStatementVisitor.java  |  2 +-
 .../statement/type/OracleDMLStatementVisitor.java  | 33 ++++++++-------
 .../statement/PostgreSQLStatementVisitor.java      | 16 ++++----
 .../type/PostgreSQLDDLStatementVisitor.java        |  2 +-
 .../statement/type/PrestoDMLStatementVisitor.java  | 18 ++++----
 .../statement/type/SQL92DMLStatementVisitor.java   | 14 ++++---
 .../statement/SQLServerStatementVisitor.java       | 27 ++++++------
 .../type/SQLServerDDLStatementVisitor.java         |  2 +-
 .../core/statement/type/ddl/TruncateStatement.java | 10 ++---
 .../core/statement/type/dml/UpdateStatement.java   | 48 ++++++++++++++--------
 .../statement/core/util/MultiSQLSplitterTest.java  | 13 +++---
 .../backend/connector/ProxySQLExecutorTest.java    |  2 +-
 .../handler/ProxySQLComQueryParserTest.java        |  4 +-
 ...irebirdExecuteStatementCommandExecutorTest.java | 14 +++----
 .../execute/MySQLComStmtExecuteExecutorTest.java   |  9 ++--
 .../PostgreSQLBatchedStatementsExecutorTest.java   |  8 ++--
 42 files changed, 277 insertions(+), 229 deletions(-)

diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
index 24780cd6163..4adb90218aa 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java
@@ -72,7 +72,7 @@ class SQLRouteCountAdviceTest {
     private static Stream<Arguments> routeContexts() {
         return Stream.of(
                 Arguments.of("INSERT", 
createQueryContext(InsertStatement.builder().databaseType(DATABASE_TYPE).build())),
-                Arguments.of("UPDATE", createQueryContext(new 
UpdateStatement(DATABASE_TYPE))),
+                Arguments.of("UPDATE", 
createQueryContext(UpdateStatement.builder().databaseType(DATABASE_TYPE).build())),
                 Arguments.of("DELETE", 
createQueryContext(DeleteStatement.builder().databaseType(DATABASE_TYPE).build())),
                 Arguments.of("SELECT", 
createQueryContext(SelectStatement.builder().databaseType(DATABASE_TYPE).build())));
     }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/fixture/EncryptGeneratorFixtureBuilder.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/fixture/EncryptGeneratorFixtureBuilder.java
index e7113bfae9d..c059c844ff3 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/fixture/EncryptGeneratorFixtureBuilder.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/fixture/EncryptGeneratorFixtureBuilder.java
@@ -164,10 +164,12 @@ public final class EncryptGeneratorFixtureBuilder {
      * @return created update statement context
      */
     public static UpdateStatementContext createUpdateStatementContext() {
-        UpdateStatement updateStatement = new UpdateStatement(DATABASE_TYPE);
-        updateStatement.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_user"))));
-        updateStatement.setWhere(createWhereSegment());
-        updateStatement.setSetAssignment(createSetAssignmentSegment());
+        UpdateStatement updateStatement = UpdateStatement.builder()
+                .databaseType(DATABASE_TYPE)
+                .table(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t_user"))))
+                .where(createWhereSegment())
+                .setAssignment(createSetAssignmentSegment())
+                .build();
         return new UpdateStatementContext(updateStatement);
     }
     
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingMultipleTablesSupportedCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingMultipleTablesSupportedCheckerTest.java
index 7cca56789c9..31a04f3e0f1 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingMultipleTablesSupportedCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/dml/ShardingMultipleTablesSupportedCheckerTest.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simp
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.JoinTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.Test;
@@ -56,8 +57,7 @@ class ShardingMultipleTablesSupportedCheckerTest {
     
     @Test
     void assertCheckWhenUpdateSingleTable() {
-        UpdateStatement updateStatement = createUpdateStatement();
-        updateStatement.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("user"))));
+        UpdateStatement updateStatement = createUpdateStatement(new 
SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("user"))));
         UpdateStatementContext sqlStatementContext = new 
UpdateStatementContext(updateStatement);
         Collection<String> tableNames = 
sqlStatementContext.getTablesContext().getTableNames();
         when(rule.isAllShardingTables(tableNames)).thenReturn(true);
@@ -67,24 +67,20 @@ class ShardingMultipleTablesSupportedCheckerTest {
     
     @Test
     void assertCheckWhenUpdateMultipleTables() {
-        UpdateStatement updateStatement = createUpdateStatement();
         JoinTableSegment joinTableSegment = new JoinTableSegment();
         joinTableSegment.setLeft(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("user"))));
         joinTableSegment.setRight(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("order"))));
-        updateStatement.setTable(joinTableSegment);
+        UpdateStatement updateStatement = 
createUpdateStatement(joinTableSegment);
         UpdateStatementContext sqlStatementContext = new 
UpdateStatementContext(updateStatement);
         Collection<String> tableNames = 
sqlStatementContext.getTablesContext().getTableNames();
         when(rule.containsShardingTable(tableNames)).thenReturn(true);
         assertThrows(DMLWithMultipleShardingTablesException.class, () -> new 
ShardingMultipleTablesSupportedChecker().check(rule, mock(), mock(), 
sqlStatementContext));
     }
     
-    private UpdateStatement createUpdateStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
-        result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("user"))));
+    private UpdateStatement createUpdateStatement(final TableSegment 
tableSegment) {
         List<ColumnSegment> columns = new LinkedList<>();
         columns.add(new ColumnSegment(0, 0, new IdentifierValue("id")));
         ColumnAssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, 
columns, new LiteralExpressionSegment(0, 0, 1));
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.singleton(assignment)));
-        return result;
+        return 
UpdateStatement.builder().databaseType(databaseType).table(tableSegment).setAssignment(new
 SetAssignmentSegment(0, 0, Collections.singleton(assignment))).build();
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
index 25536827d1c..ad032789351 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
@@ -125,12 +125,13 @@ class ShardingUpdateRouteContextCheckerTest {
     }
     
     private UpdateStatement createUpdateStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
-        result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("user"))));
         List<ColumnSegment> columns = new LinkedList<>();
         columns.add(new ColumnSegment(0, 0, new IdentifierValue("id")));
         ColumnAssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, 
columns, new LiteralExpressionSegment(0, 0, 1));
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.singleton(assignment)));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("user"))))
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.singleton(assignment)))
+                .build();
     }
 }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
index a8594385919..d9aefb08618 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/TruncateStatementBinder.java
@@ -41,7 +41,7 @@ public final class TruncateStatementBinder implements 
SQLStatementBinder<Truncat
     }
     
     private TruncateStatement copy(final TruncateStatement sqlStatement, final 
Collection<SimpleTableSegment> boundTables) {
-        TruncateStatement result = new 
TruncateStatement(sqlStatement.getDatabaseType(), boundTables);
+        TruncateStatement result = new 
TruncateStatement(sqlStatement.getDatabaseType(), boundTables, 
sqlStatement.getPartitions());
         SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
index edbdbf437aa..9a0707ed622 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinder.java
@@ -57,14 +57,16 @@ public final class UpdateStatementBinder implements 
SQLStatementBinder<UpdateSta
     
     private UpdateStatement copy(final UpdateStatement sqlStatement, final 
WithSegment boundWith, final TableSegment boundTable, final TableSegment 
boundFrom,
                                  final SetAssignmentSegment 
boundSetAssignment, final WhereSegment boundWhere, final OrderBySegment 
boundOrderBy) {
-        UpdateStatement result = new 
UpdateStatement(sqlStatement.getDatabaseType());
-        result.setWith(boundWith);
-        result.setTable(boundTable);
-        result.setFrom(boundFrom);
-        result.setSetAssignment(boundSetAssignment);
-        result.setWhere(boundWhere);
-        result.setOrderBy(boundOrderBy);
-        sqlStatement.getLimit().ifPresent(result::setLimit);
+        UpdateStatement result = UpdateStatement.builder()
+                .databaseType(sqlStatement.getDatabaseType())
+                .with(boundWith)
+                .table(boundTable)
+                .from(boundFrom)
+                .setAssignment(boundSetAssignment)
+                .where(boundWhere)
+                .orderBy(boundOrderBy)
+                .limit(sqlStatement.getLimit().orElse(null))
+                .build();
         SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContextTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContextTest.java
index 5137cf7bf3b..d66337b2340 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContextTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContextTest.java
@@ -81,10 +81,11 @@ class UpdateStatementContextTest {
         JoinTableSegment joinTableSegment = new JoinTableSegment();
         joinTableSegment.setLeft(table1);
         joinTableSegment.setRight(table2);
-        UpdateStatement result = new UpdateStatement(databaseType);
-        result.setWhere(whereSegment);
-        result.setTable(joinTableSegment);
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(joinTableSegment)
+                .where(whereSegment)
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()))
+                .build();
     }
 }
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtilsTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtilsTest.java
index 15870dffa47..64e3cc2efd5 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtilsTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/SQLStatementCopyUtilsTest.java
@@ -45,8 +45,8 @@ class SQLStatementCopyUtilsTest {
     
     @BeforeEach
     void setUp() {
-        originalStatement = new UpdateStatement(databaseType);
-        targetStatement = new UpdateStatement(databaseType);
+        originalStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
+        targetStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
     }
     
     @Test
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinderTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinderTest.java
index ebba01b7b91..cff82f633f8 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinderTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/UpdateStatementBinderTest.java
@@ -52,11 +52,13 @@ class UpdateStatementBinderTest {
     
     @Test
     void assertBind() {
-        UpdateStatement updateStatement = new UpdateStatement(databaseType);
         SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_order")));
-        updateStatement.setTable(simpleTableSegment);
-        updateStatement.setWhere(new WhereSegment(0, 0, new 
BinaryOperationExpression(0, 0, new ColumnSegment(0, 0, new 
IdentifierValue("status")),
-                new LiteralExpressionSegment(0, 0, 0), "=", "status = 1")));
+        UpdateStatement updateStatement = UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(simpleTableSegment)
+                .where(new WhereSegment(0, 0, new BinaryOperationExpression(0, 
0, new ColumnSegment(0, 0, new IdentifierValue("status")),
+                        new LiteralExpressionSegment(0, 0, 0), "=", "status = 
1")))
+                .build();
         UpdateStatement actual = new 
UpdateStatementBinder().bind(updateStatement, new 
SQLStatementBinderContext(createMetaData(), "foo_db", new HintValueContext(), 
updateStatement));
         assertThat(actual, not(updateStatement));
         assertThat(actual.getTable(), not(updateStatement.getTable()));
diff --git 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java
 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java
index 88cda73da22..acf6874326a 100644
--- 
a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java
+++ 
b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java
@@ -82,12 +82,13 @@ class ProcessEngineTest {
     }
     
     private UpdateStatement getSQLStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
         TableNameSegment tableNameSegment = new TableNameSegment(0, 0, new 
IdentifierValue("foo_tbl"));
         tableNameSegment.setTableBoundInfo(new TableSegmentBoundInfo(new 
IdentifierValue("foo_db"), new IdentifierValue("foo_schema")));
-        result.setTable(new SimpleTableSegment(tableNameSegment));
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(new SimpleTableSegment(tableNameSegment))
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()))
+                .build();
     }
     
     @Test
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 0842bd797de..cc3c1a616b1 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
@@ -69,7 +69,7 @@ class SQLNodeConverterEngineTest {
         try (
                 MockedConstruction<UpdateStatementConverter> ignored = 
mockConstruction(UpdateStatementConverter.class,
                         (mock, context) -> 
when(mock.convert(any(UpdateStatement.class))).thenReturn(updateSqlNode))) {
-            assertThat(SQLNodeConverterEngine.convert(new 
UpdateStatement(databaseType)), is(updateSqlNode));
+            
assertThat(SQLNodeConverterEngine.convert(UpdateStatement.builder().databaseType(databaseType).build()),
 is(updateSqlNode));
         }
         SqlNode insertSqlNode = mock(SqlNode.class);
         try (
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/ExplainStatementConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/ExplainStatementConverterTest.java
index 33004ad17d7..472a8b53e35 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/ExplainStatementConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/ExplainStatementConverterTest.java
@@ -99,11 +99,12 @@ class ExplainStatementConverterTest {
     }
     
     private UpdateStatement createUpdateStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
-        result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t_update"))));
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.singleton(new ColumnAssignmentSegment(0, 0,
-                Collections.singletonList(new ColumnSegment(0, 0, new 
IdentifierValue("col"))), new ParameterMarkerExpressionSegment(0, 0, 0)))));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t_update"))))
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.singleton(new ColumnAssignmentSegment(0, 0,
+                        Collections.singletonList(new ColumnSegment(0, 0, new 
IdentifierValue("col"))), new ParameterMarkerExpressionSegment(0, 0, 0)))))
+                .build();
     }
     
     private InsertStatement createInsertStatement() {
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 c47a956e2ff..a197f3de414 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
@@ -66,8 +66,7 @@ class MergeStatementConverterTest {
     
     @Test
     void assertConvertUpdateWithEmptyTable() {
-        UpdateStatement updateStatement = createUpdateStatement();
-        updateStatement.setTable(createSimpleTableSegment("DUAL"));
+        UpdateStatement updateStatement = 
createUpdateStatement(createSimpleTableSegment("DUAL"), false);
         MergeStatement mergeStatement = 
createMergeStatement(createSimpleTableSegment("target_table"), 
createSimpleTableSegment("source_table"), updateStatement);
         SqlMerge actual = (SqlMerge) new 
MergeStatementConverter().convert(mergeStatement);
         assertNotNull(actual.getUpdateCall());
@@ -84,14 +83,20 @@ class MergeStatementConverterTest {
     }
     
     private UpdateStatement createUpdateStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
-        SimpleTableSegment table = createSimpleTableSegment("t_update");
-        table.setAlias(new AliasSegment(0, 0, new IdentifierValue("u")));
-        result.setTable(table);
+        return createUpdateStatement(createSimpleTableSegment("t_update"), 
true);
+    }
+    
+    private UpdateStatement createUpdateStatement(final SimpleTableSegment 
table, final boolean withAlias) {
+        if (withAlias) {
+            table.setAlias(new AliasSegment(0, 0, new IdentifierValue("u")));
+        }
         SetAssignmentSegment setAssignment = createSetAssignmentSegment();
-        result.setSetAssignment(setAssignment);
-        result.setWhere(new WhereSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0)));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(table)
+                .setAssignment(setAssignment)
+                .where(new WhereSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0)))
+                .build();
     }
     
     private SetAssignmentSegment createSetAssignmentSegment() {
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverterTest.java
index 65494688118..94f28523819 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverterTest.java
@@ -55,9 +55,8 @@ class UpdateStatementConverterTest {
     
     @Test
     void assertConvertWithLimitAndAlias() {
-        UpdateStatement updateStatement = createUpdateStatement(true);
         LimitSegment limit = new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), new 
ParameterMarkerLimitValueSegment(0, 0, 0));
-        updateStatement.setLimit(limit);
+        UpdateStatement updateStatement = createUpdateStatement(true, null, 
limit);
         SqlOrderBy actual = (SqlOrderBy) new 
UpdateStatementConverter().convert(updateStatement);
         assertThat(actual.offset, isA(SqlNode.class));
         assertThat(actual.fetch, isA(SqlDynamicParam.class));
@@ -67,8 +66,7 @@ class UpdateStatementConverterTest {
     
     @Test
     void assertConvertWithoutLimitButWithOrderBy() {
-        UpdateStatement updateStatement = createUpdateStatement(false);
-        updateStatement.setOrderBy(createOrderBySegment());
+        UpdateStatement updateStatement = createUpdateStatement(false, 
createOrderBySegment(), null);
         SqlOrderBy actual = (SqlOrderBy) new 
UpdateStatementConverter().convert(updateStatement);
         assertNull(actual.offset);
         SqlUpdate sqlUpdate = (SqlUpdate) actual.query;
@@ -77,25 +75,27 @@ class UpdateStatementConverterTest {
     
     @Test
     void assertConvertWithLimitWithoutOffsetAndRowCount() {
-        UpdateStatement updateStatement = createUpdateStatement(true);
         LimitSegment limit = new LimitSegment(0, 0, null, null);
-        updateStatement.setLimit(limit);
+        UpdateStatement updateStatement = createUpdateStatement(true, null, 
limit);
         SqlOrderBy actual = (SqlOrderBy) new 
UpdateStatementConverter().convert(updateStatement);
         assertNull(actual.offset);
         assertNull(actual.fetch);
     }
     
-    private UpdateStatement createUpdateStatement(final boolean withAlias) {
-        UpdateStatement result = new UpdateStatement(databaseType);
+    private UpdateStatement createUpdateStatement(final boolean withAlias, 
final OrderBySegment orderBy, final LimitSegment limit) {
         SimpleTableSegment tableSegment = new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t_update")));
         if (withAlias) {
             tableSegment.setAlias(new AliasSegment(0, 0, new 
IdentifierValue("u")));
         }
-        result.setTable(tableSegment);
         SetAssignmentSegment setAssignment = createSetAssignmentSegment();
-        result.setSetAssignment(setAssignment);
-        result.setWhere(new WhereSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0)));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(tableSegment)
+                .setAssignment(setAssignment)
+                .where(new WhereSegment(0, 0, new 
ParameterMarkerExpressionSegment(0, 0, 0)))
+                .orderBy(orderBy)
+                .limit(limit)
+                .build();
     }
     
     private SetAssignmentSegment createSetAssignmentSegment() {
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
index 93ee8265839..ee66f530367 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngineTest.java
@@ -60,7 +60,7 @@ class FederationMetaDataRefreshEngineTest {
     
     @Test
     void assertIsNeedRefreshWhenStatementNotSupported() {
-        when(sqlStatementContext.getSqlStatement()).thenReturn(new 
UpdateStatement(databaseType));
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(UpdateStatement.builder().databaseType(databaseType).build());
         assertFalse(new 
FederationMetaDataRefreshEngine(sqlStatementContext).isNeedRefresh());
     }
     
@@ -106,7 +106,7 @@ class FederationMetaDataRefreshEngineTest {
     
     @Test
     void assertRefreshWhenRefresherNotFound() {
-        when(sqlStatementContext.getSqlStatement()).thenReturn(new 
UpdateStatement(databaseType));
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(UpdateStatement.builder().databaseType(databaseType).build());
         FederationMetaDataRefreshEngine engine = new 
FederationMetaDataRefreshEngine(sqlStatementContext);
         engine.refresh(metaDataManagerPersistService, database);
     }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
index ac50b879d0a..9eabdedb6bd 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/PushDownMetaDataRefreshEngineTest.java
@@ -63,7 +63,7 @@ class PushDownMetaDataRefreshEngineTest {
     
     @Test
     void assertIsNeedRefreshWhenRefresherAbsent() {
-        SQLStatement sqlStatement = new UpdateStatement(databaseType);
+        SQLStatement sqlStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass())).thenReturn(Optional.empty());
         when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass().getSuperclass())).thenReturn(Optional.empty());
@@ -73,7 +73,7 @@ class PushDownMetaDataRefreshEngineTest {
     @SuppressWarnings("unchecked")
     @Test
     void assertIsNeedRefreshWhenRefresherFound() {
-        SQLStatement sqlStatement = new UpdateStatement(databaseType);
+        SQLStatement sqlStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         PushDownMetaDataRefresher<SQLStatement> refresher = 
mock(PushDownMetaDataRefresher.class);
         when(TypedSPILoader.findService(PushDownMetaDataRefresher.class, 
sqlStatement.getClass())).thenReturn(Optional.of(refresher));
@@ -84,7 +84,7 @@ class PushDownMetaDataRefreshEngineTest {
     @Test
     void assertRefreshUsesStorageUnitTypeAndLogicDataSource() throws 
SQLException {
         when(SchemaRefreshUtils.getSchemaName(database, 
sqlStatementContext)).thenReturn("foo_schema");
-        SQLStatement sqlStatement = new UpdateStatement(databaseType);
+        SQLStatement sqlStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         StorageUnit storageUnit = mock(StorageUnit.class);
         DatabaseType storageType = mock(DatabaseType.class);
@@ -104,7 +104,7 @@ class PushDownMetaDataRefreshEngineTest {
     @Test
     void assertRefreshUsesStatementDatabaseTypeWhenRouteUnitsAbsent() throws 
SQLException {
         when(SchemaRefreshUtils.getSchemaName(database, 
sqlStatementContext)).thenReturn("foo_schema");
-        SQLStatement sqlStatement = new UpdateStatement(databaseType);
+        SQLStatement sqlStatement = 
UpdateStatement.builder().databaseType(databaseType).build();
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         PushDownMetaDataRefresher<SQLStatement> refresher = 
mock(PushDownMetaDataRefresher.class);
diff --git 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
index a1a3fcb1bbb..b65e827992c 100644
--- 
a/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/engine/clickhouse/visitor/statement/type/ClickHouseDMLStatementVisitor.java
@@ -122,14 +122,16 @@ public final class ClickHouseDMLStatementVisitor extends 
ClickHouseStatementVisi
     
     @Override
     public ASTNode visitUpdate(final ClickHouseStatementParser.UpdateContext 
ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
-        result.setTable((TableSegment) visit(ctx.tableReferences()));
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table((TableSegment) visit(ctx.tableReferences()))
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
index 83ee1609c2f..b54dd4c54bb 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
@@ -1697,21 +1697,23 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
         TableSegment tableSegment = (TableSegment) 
visit(ctx.tableReferences());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.orderByClause()) {
-            result.setOrderBy((OrderBySegment) visit(ctx.orderByClause()));
+            result.orderBy((OrderBySegment) visit(ctx.orderByClause()));
         }
         if (null != ctx.limitClause()) {
-            result.setLimit((LimitSegment) visit(ctx.limitClause()));
+            result.limit((LimitSegment) visit(ctx.limitClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index 3104f77e05d..2dbdec82b90 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -1176,13 +1176,11 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        TruncateStatement result = new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())));
-        if (null != ctx.partitionNames()) {
-            for (IdentifierContext each : ctx.partitionNames().identifier()) {
-                result.getPartitions().add(new 
PartitionSegment(each.getStart().getStartIndex(), 
each.getStop().getStopIndex(), (IdentifierValue) visit(each)));
-            }
-        }
-        return result;
+        Collection<PartitionSegment> partitions = null == ctx.partitionNames()
+                ? Collections.emptyList()
+                : ctx.partitionNames().identifier().stream()
+                        .map(each -> new 
PartitionSegment(each.getStart().getStartIndex(), 
each.getStop().getStopIndex(), (IdentifierValue) 
visit(each))).collect(Collectors.toList());
+        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())), partitions);
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
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 452a2615417..c4dc34b82c9 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
@@ -175,17 +175,19 @@ public final class FirebirdDMLStatementVisitor extends 
FirebirdStatementVisitor
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
-        result.setTable((TableSegment) visit(ctx.tableReferences()));
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table((TableSegment) visit(ctx.tableReferences()))
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
         if (null != ctx.returningClause()) {
-            result.setReturning((ReturningSegment) 
visit(ctx.returningClause()));
+            result.returning((ReturningSegment) visit(ctx.returningClause()));
         }
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
index 7384d27ef6f..286c9459e00 100644
--- 
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
@@ -169,7 +169,7 @@ public final class HiveDDLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableNameWithDb())));
+        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableNameWithDb())), 
Collections.emptyList());
     }
     
     @SuppressWarnings("unchecked")
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 e0ac5e8934d..8fcbb9d7b62 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
@@ -1120,21 +1120,23 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
         TableSegment tableSegment = (TableSegment) 
visit(ctx.tableReferences());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.orderByClause()) {
-            result.setOrderBy((OrderBySegment) visit(ctx.orderByClause()));
+            result.orderBy((OrderBySegment) visit(ctx.orderByClause()));
         }
         if (null != ctx.limitClause()) {
-            result.setLimit((LimitSegment) visit(ctx.limitClause()));
+            result.limit((LimitSegment) visit(ctx.limitClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
@@ -1221,8 +1223,7 @@ public final class HiveDMLStatementVisitor extends 
HiveStatementVisitor implemen
             int stop = each.getStop().getStopIndex();
             MergeWhenAndThenSegment seg = new MergeWhenAndThenSegment(start, 
stop, getOriginalText(each));
             if (null != each.UPDATE()) {
-                UpdateStatement upd = new UpdateStatement(getDatabaseType());
-                upd.setSetAssignment((SetAssignmentSegment) 
visit(each.setAssignmentsClause()));
+                UpdateStatement upd = 
UpdateStatement.builder().databaseType(getDatabaseType()).setAssignment((SetAssignmentSegment)
 visit(each.setAssignmentsClause())).build();
                 seg.setUpdate(upd);
             }
             if (null != each.INSERT()) {
diff --git 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
index 38ea3b8bf78..93eaac94955 100644
--- 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1704,24 +1704,26 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
         TableSegment tableSegment = (TableSegment) 
visit(ctx.tableReferences());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.orderByClause()) {
-            result.setOrderBy((OrderBySegment) visit(ctx.orderByClause()));
+            result.orderBy((OrderBySegment) visit(ctx.orderByClause()));
         }
         if (null != ctx.limitClause()) {
-            result.setLimit((LimitSegment) visit(ctx.limitClause()));
+            result.limit((LimitSegment) visit(ctx.limitClause()));
         }
         if (null != ctx.withClause()) {
-            result.setWith((WithSegment) visit(ctx.withClause()));
+            result.with((WithSegment) visit(ctx.withClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 4407187478f..ac53a195284 100644
--- 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -695,7 +695,7 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())));
+        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())), 
Collections.emptyList());
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
diff --git 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
index 79a38ae193b..cf91797c34e 100644
--- 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
@@ -904,18 +904,20 @@ public abstract class OpenGaussStatementVisitor extends 
OpenGaussStatementParser
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
         SimpleTableSegment tableSegment = (SimpleTableSegment) 
visit(ctx.relationExprOptAlias());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setClauseList()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setClauseList()));
         if (null != ctx.whereOrCurrentClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
+            result.where((WhereSegment) visit(ctx.whereOrCurrentClause()));
         }
         if (null != ctx.fromClause()) {
-            result.setFrom((TableSegment) visit(ctx.fromClause()));
+            result.from((TableSegment) visit(ctx.fromClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index c5dc5a8d8fd..9dcf24cef00 100644
--- 
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -527,7 +527,7 @@ public final class OpenGaussDDLStatementVisitor extends 
OpenGaussStatementVisito
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNamesClause())).getValue());
+        return new TruncateStatement(getDatabaseType(), 
((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNamesClause())).getValue(), Collections.emptyList());
     }
     
     @SuppressWarnings("unchecked")
diff --git 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index db51851f2b2..fe3f0aeae55 100644
--- 
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -824,7 +824,7 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())));
+        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())), 
Collections.emptyList());
     }
     
     @SuppressWarnings({"rawtypes", "unchecked"})
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 c1177ccdc5b..deb91819968 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
@@ -208,18 +208,21 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
-        result.setTable((TableSegment) visit(ctx.updateSpecification()));
+        TableSegment tableSegment = (TableSegment) 
visit(ctx.updateSpecification());
         if (null != ctx.alias()) {
-            result.getTable().setAlias((AliasSegment) visit(ctx.alias()));
+            tableSegment.setAlias((AliasSegment) visit(ctx.alias()));
         }
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.updateSetClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.updateSetClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
-        result.addParameterMarkers(ctx.getParent() instanceof ExecuteContext ? 
getGlobalParameterMarkerSegments() : popAllStatementParameterMarkerSegments());
-        result.getVariableNames().addAll(getVariableNames());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(ctx.getParent() instanceof 
ExecuteContext ? getGlobalParameterMarkerSegments() : 
popAllStatementParameterMarkerSegments());
+        updateStatement.getVariableNames().addAll(getVariableNames());
+        return updateStatement;
     }
     
     @Override
@@ -1478,16 +1481,18 @@ public final class OracleDMLStatementVisitor extends 
OracleStatementVisitor impl
     
     @Override
     public ASTNode visitMergeUpdateClause(final MergeUpdateClauseContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.mergeSetAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.mergeSetAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.deleteWhereClause()) {
-            result.setDeleteWhere((WhereSegment) 
visit(ctx.deleteWhereClause()));
+            result.deleteWhere((WhereSegment) visit(ctx.deleteWhereClause()));
         }
-        result.addParameterMarkers(popAllStatementParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        
updateStatement.addParameterMarkers(popAllStatementParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
index 1a8cbf6d8c2..43c8abb70d5 100644
--- 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
@@ -882,18 +882,20 @@ public abstract class PostgreSQLStatementVisitor extends 
PostgreSQLStatementPars
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
         SimpleTableSegment tableSegment = (SimpleTableSegment) 
visit(ctx.relationExprOptAlias());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setClauseList()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setClauseList()));
         if (null != ctx.whereOrCurrentClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereOrCurrentClause()));
+            result.where((WhereSegment) visit(ctx.whereOrCurrentClause()));
         }
         if (null != ctx.fromClause()) {
-            result.setFrom((TableSegment) visit(ctx.fromClause()));
+            result.from((TableSegment) visit(ctx.fromClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
index 3e34dfee0db..4484fbc4fd5 100644
--- 
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
@@ -644,7 +644,7 @@ public final class PostgreSQLDDLStatementVisitor extends 
PostgreSQLStatementVisi
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNamesClause())).getValue());
+        return new TruncateStatement(getDatabaseType(), 
((CollectionValue<SimpleTableSegment>) 
visit(ctx.tableNamesClause())).getValue(), Collections.emptyList());
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
 
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
index 474ac96d525..c9d2e1c61dc 100644
--- 
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDMLStatementVisitor.java
@@ -885,21 +885,23 @@ public final class PrestoDMLStatementVisitor extends 
PrestoStatementVisitor impl
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
         TableSegment tableSegment = (TableSegment) 
visit(ctx.tableReferences());
-        result.setTable(tableSegment);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table(tableSegment)
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.orderByClause()) {
-            result.setOrderBy((OrderBySegment) visit(ctx.orderByClause()));
+            result.orderBy((OrderBySegment) visit(ctx.orderByClause()));
         }
         if (null != ctx.limitClause()) {
-            result.setLimit((LimitSegment) visit(ctx.limitClause()));
+            result.limit((LimitSegment) visit(ctx.limitClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
diff --git 
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java
 
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java
index 3807b70c035..49c233b5bb2 100644
--- 
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DMLStatementVisitor.java
@@ -146,14 +146,16 @@ public final class SQL92DMLStatementVisitor extends 
SQL92StatementVisitor implem
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(getDatabaseType());
-        result.setTable((TableSegment) visit(ctx.tableReferences()));
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder()
+                .databaseType(getDatabaseType())
+                .table((TableSegment) visit(ctx.tableReferences()))
+                .setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
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 b6bdbf1d9d6..71a6abebf47 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
@@ -1698,29 +1698,30 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
     
     @Override
     public ASTNode visitUpdate(final UpdateContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
+        UpdateStatement.UpdateStatementBuilder result = 
UpdateStatement.builder().databaseType(databaseType);
         if (null != ctx.withClause()) {
-            result.setWith((WithSegment) visit(ctx.withClause()));
+            result.with((WithSegment) visit(ctx.withClause()));
         }
-        result.setTable((TableSegment) visit(ctx.tableReferences()));
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
+        result.table((TableSegment) visit(ctx.tableReferences()));
+        result.setAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
         if (null != ctx.fromClause()) {
-            result.setFrom((TableSegment) visit(ctx.fromClause()));
+            result.from((TableSegment) visit(ctx.fromClause()));
         }
         if (null != ctx.withTableHint()) {
-            result.setWithTableHint((WithTableHintSegment) 
visit(ctx.withTableHint()));
+            result.withTableHint((WithTableHintSegment) 
visit(ctx.withTableHint()));
         }
         if (null != ctx.whereClause()) {
-            result.setWhere((WhereSegment) visit(ctx.whereClause()));
+            result.where((WhereSegment) visit(ctx.whereClause()));
         }
         if (null != ctx.optionHint()) {
-            result.setOptionHint((OptionHintSegment) visit(ctx.optionHint()));
+            result.optionHint((OptionHintSegment) visit(ctx.optionHint()));
         }
         if (null != ctx.outputClause()) {
-            result.setOutput((OutputSegment) visit(ctx.outputClause()));
+            result.output((OutputSegment) visit(ctx.outputClause()));
         }
-        result.addParameterMarkers(getParameterMarkerSegments());
-        return result;
+        UpdateStatement updateStatement = result.build();
+        updateStatement.addParameterMarkers(getParameterMarkerSegments());
+        return updateStatement;
     }
     
     @Override
@@ -2300,8 +2301,6 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
     
     @Override
     public ASTNode visitMergeUpdateClause(final MergeUpdateClauseContext ctx) {
-        UpdateStatement result = new UpdateStatement(databaseType);
-        result.setSetAssignment((SetAssignmentSegment) 
visit(ctx.setAssignmentsClause()));
-        return result;
+        return 
UpdateStatement.builder().databaseType(databaseType).setAssignment((SetAssignmentSegment)
 visit(ctx.setAssignmentsClause())).build();
     }
 }
diff --git 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
index 48dc0350a38..c1df322b240 100644
--- 
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
@@ -324,7 +324,7 @@ public final class SQLServerDDLStatementVisitor extends 
SQLServerStatementVisito
     
     @Override
     public ASTNode visitTruncateTable(final TruncateTableContext ctx) {
-        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())));
+        return new TruncateStatement(getDatabaseType(), 
Collections.singleton((SimpleTableSegment) visit(ctx.tableName())), 
Collections.emptyList());
     }
     
     @SuppressWarnings({"rawtypes", "unchecked"})
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/TruncateStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/TruncateStatement.java
index ac508a340d7..3a59266150d 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/TruncateStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/TruncateStatement.java
@@ -25,7 +25,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.S
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.TableSQLStatementAttribute;
 
 import java.util.Collection;
-import java.util.LinkedList;
 
 /**
  * Truncate table statement.
@@ -35,17 +34,18 @@ public final class TruncateStatement extends DDLStatement {
     
     private final Collection<SimpleTableSegment> tables;
     
-    private final Collection<PartitionSegment> partitions = new LinkedList<>();
+    private final Collection<PartitionSegment> partitions;
     
-    private SQLStatementAttributes attributes;
+    private final SQLStatementAttributes attributes;
     
-    public TruncateStatement(final DatabaseType databaseType, final 
Collection<SimpleTableSegment> tables) {
+    public TruncateStatement(final DatabaseType databaseType, final 
Collection<SimpleTableSegment> tables, final Collection<PartitionSegment> 
partitions) {
         super(databaseType);
         this.tables = tables;
+        this.partitions = partitions;
+        attributes = new SQLStatementAttributes(new 
TableSQLStatementAttribute(tables));
     }
     
     @Override
     public void buildAttributes() {
-        attributes = new SQLStatementAttributes(new 
TableSQLStatementAttribute(tables));
     }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/UpdateStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/UpdateStatement.java
index b34d417e1aa..ead3f84c79a 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/UpdateStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/dml/UpdateStatement.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.dml.ReturningSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
@@ -39,37 +39,52 @@ import java.util.Optional;
  * Update statement.
  */
 @Getter
-@Setter
 public final class UpdateStatement extends DMLStatement {
     
-    private TableSegment table;
+    private final TableSegment table;
     
-    private SetAssignmentSegment setAssignment;
+    private final SetAssignmentSegment setAssignment;
     
-    private WhereSegment where;
+    private final WhereSegment where;
     
-    private OrderBySegment orderBy;
+    private final OrderBySegment orderBy;
     
-    private LimitSegment limit;
+    private final LimitSegment limit;
     
-    private TableSegment from;
+    private final TableSegment from;
     
-    private WhereSegment deleteWhere;
+    private final WhereSegment deleteWhere;
     
-    private WithSegment with;
+    private final WithSegment with;
     
-    private ReturningSegment returning;
+    private final ReturningSegment returning;
     
-    private WithTableHintSegment withTableHint;
+    private final WithTableHintSegment withTableHint;
     
-    private OptionHintSegment optionHint;
+    private final OptionHintSegment optionHint;
     
-    private OutputSegment output;
+    private final OutputSegment output;
     
-    private SQLStatementAttributes attributes;
+    private final SQLStatementAttributes attributes;
     
-    public UpdateStatement(final DatabaseType databaseType) {
+    @Builder
+    private UpdateStatement(final DatabaseType databaseType, final 
TableSegment table, final SetAssignmentSegment setAssignment, final 
WhereSegment where,
+                            final OrderBySegment orderBy, final LimitSegment 
limit, final TableSegment from, final WhereSegment deleteWhere, final 
WithSegment with,
+                            final ReturningSegment returning, final 
WithTableHintSegment withTableHint, final OptionHintSegment optionHint, final 
OutputSegment output) {
         super(databaseType);
+        this.table = table;
+        this.setAssignment = setAssignment;
+        this.where = where;
+        this.orderBy = orderBy;
+        this.limit = limit;
+        this.from = from;
+        this.deleteWhere = deleteWhere;
+        this.with = with;
+        this.returning = returning;
+        this.withTableHint = withTableHint;
+        this.optionHint = optionHint;
+        this.output = output;
+        attributes = new SQLStatementAttributes(new 
WithSQLStatementAttribute(with));
     }
     
     /**
@@ -173,6 +188,5 @@ public final class UpdateStatement extends DMLStatement {
     
     @Override
     public void buildAttributes() {
-        attributes = new SQLStatementAttributes(new 
WithSQLStatementAttribute(with));
     }
 }
diff --git 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/util/MultiSQLSplitterTest.java
 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/util/MultiSQLSplitterTest.java
index 99231982e54..cc9ba15f2ec 100644
--- 
a/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/util/MultiSQLSplitterTest.java
+++ 
b/parser/sql/statement/core/src/test/java/org/apache/shardingsphere/sql/parser/statement/core/util/MultiSQLSplitterTest.java
@@ -47,11 +47,11 @@ class MultiSQLSplitterTest {
     
     private static Stream<Arguments> provideHasSameTypeArguments() {
         return Stream.of(
-                Arguments.of("nonDmlSample", new 
UpdateStatement(DATABASE_TYPE), Arrays.asList("select * from t_order;", "select 
* from t_order_item;"), false),
-                Arguments.of("singleStatementFalse", new 
UpdateStatement(DATABASE_TYPE), Collections.singletonList("update t_order set 
status='OK' where id=1"), false),
+                Arguments.of("nonDmlSample", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(), 
Arrays.asList("select * from t_order;", "select * from t_order_item;"), false),
+                Arguments.of("singleStatementFalse", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(), 
Collections.singletonList("update t_order set status='OK' where id=1"), false),
                 Arguments.of("insertWithBlockComment", 
InsertStatement.builder().databaseType(DATABASE_TYPE).build(),
                         Arrays.asList("   /*comment*/ INSERT INTO t_order 
VALUES (1);", "/*remark*/ insert into t_order values (2)"), true),
-                Arguments.of("updateWithDashComment", new 
UpdateStatement(DATABASE_TYPE),
+                Arguments.of("updateWithDashComment", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(),
                         Arrays.asList("-- comment before\r\nupdate t_order set 
status='PAID' where id=1;", "-- \t\nupdate t_order set status='FAIL' where 
id=2;"), true),
                 Arguments.of("deleteWithHashComment", 
DeleteStatement.builder().databaseType(DATABASE_TYPE).build(),
                         Arrays.asList("# comment before\n delete from t_order 
where id=1;", "#\t\n delete from t_order where id=2;"), true),
@@ -59,11 +59,12 @@ class MultiSQLSplitterTest {
                         Arrays.asList("# comment\r\ndelete from t_order where 
id=1;", "# comment\r\ndelete from t_order where id=2;"), true),
                 Arguments.of("hashCommentWithCROnly", 
DeleteStatement.builder().databaseType(DATABASE_TYPE).build(),
                         Arrays.asList("# comment\rdelete from t_order where 
id=1;", "# comment\rdelete from t_order where id=2;"), true),
-                Arguments.of("updateTypeMismatch", new 
UpdateStatement(DATABASE_TYPE), Arrays.asList("update t_order set status='PAID' 
where id=1;", "select * from t_order"), false),
+                Arguments.of("updateTypeMismatch", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(),
+                        Arrays.asList("update t_order set status='PAID' where 
id=1;", "select * from t_order"), false),
                 Arguments.of("unterminatedBlockComment", 
InsertStatement.builder().databaseType(DATABASE_TYPE).build(), 
Arrays.asList("/* incomplete comment", "insert into t_order values (1);"),
                         false),
-                Arguments.of("dashCommentOnlySegment", new 
UpdateStatement(DATABASE_TYPE), Arrays.asList("--", "update t_order set 
status='DONE' where id=1;"), false),
-                Arguments.of("whitespaceOnlySegment", new 
UpdateStatement(DATABASE_TYPE), Arrays.asList("   \t ", "update t_order set 
status='DONE' where id=1;"), false));
+                Arguments.of("dashCommentOnlySegment", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(), 
Arrays.asList("--", "update t_order set status='DONE' where id=1;"), false),
+                Arguments.of("whitespaceOnlySegment", 
UpdateStatement.builder().databaseType(DATABASE_TYPE).build(), Arrays.asList("  
 \t ", "update t_order set status='DONE' where id=1;"), false));
     }
     
     @ParameterizedTest(name = "{0}")
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 8f0411f3101..fda908a4efa 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -416,7 +416,7 @@ class ProxySQLExecutorTest {
     }
     
     private TruncateStatement createTruncateStatement(final DatabaseType 
databaseType) {
-        return new TruncateStatement(databaseType, Collections.singleton(new 
SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t_order")))));
+        return new TruncateStatement(databaseType, Collections.singleton(new 
SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t_order")))), Collections.emptyList());
     }
     
     private InsertStatement createInsertStatement(final DatabaseType 
databaseType) {
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParserTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParserTest.java
index 6090f5d43a4..3fc7d2ed0e3 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParserTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParserTest.java
@@ -69,7 +69,7 @@ class ProxySQLComQueryParserTest {
     void assertParseWithMissingDatabaseUseDefaultType() {
         when(connectionSession.getUsedDatabaseName()).thenReturn("missing_db");
         SQLParserEngine parserEngine = mock(SQLParserEngine.class);
-        SQLStatement expected = new UpdateStatement(databaseType);
+        SQLStatement expected = 
UpdateStatement.builder().databaseType(databaseType).build();
         SQLParserRule parserRule = mockParserRule(parserEngine);
         mockProxyContext(parserRule, false, null);
         when(parserEngine.parse(anyString(), eq(false))).thenReturn(expected);
@@ -81,7 +81,7 @@ class ProxySQLComQueryParserTest {
         DatabaseType protocolType = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
         when(connectionSession.getUsedDatabaseName()).thenReturn("logic_db");
         SQLParserEngine parserEngine = mock(SQLParserEngine.class);
-        SQLStatement expected = new UpdateStatement(protocolType);
+        SQLStatement expected = 
UpdateStatement.builder().databaseType(protocolType).build();
         SQLParserRule parserRule = mockParserRule(parserEngine);
         mockProxyContext(parserRule, true, protocolType);
         when(parserEngine.parse(anyString(), eq(false))).thenReturn(expected);
diff --git 
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutorTest.java
 
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutorTest.java
index d5b58fbbe13..d12ce19863e 100644
--- 
a/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutorTest.java
+++ 
b/proxy/frontend/dialect/firebird/src/test/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutorTest.java
@@ -126,7 +126,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
                 new ResourceMetaData(Collections.emptyMap()), new 
RuleMetaData(Collections.emptyList()), new ConfigurationProperties(new 
Properties())));
         
when(selectContext.getSqlStatement()).thenReturn(SelectStatement.builder().databaseType(DATABASE_TYPE).build());
         registry.addPreparedStatement(1, new 
FirebirdServerPreparedStatement("SELECT * FROM tbl", selectContext, new 
HintValueContext()));
-        when(updateContext.getSqlStatement()).thenReturn(new 
UpdateStatement(DATABASE_TYPE));
+        
when(updateContext.getSqlStatement()).thenReturn(UpdateStatement.builder().databaseType(DATABASE_TYPE).build());
         registry.addPreparedStatement(2, new 
FirebirdServerPreparedStatement("UPDATE tbl SET col=1", updateContext, new 
HintValueContext()));
     }
     
@@ -164,7 +164,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         when(packet.getParameterTypes()).thenReturn(Collections.emptyList());
         when(packet.getParameterValues()).thenReturn(Collections.emptyList());
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
any(QueryContext.class), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         Collection<DatabasePacket> actual = executor.execute();
         assertThat(executor.getResponseType(), is(ResponseType.UPDATE));
@@ -182,7 +182,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         
when(packet.getParameterTypes()).thenReturn(Collections.singletonList(FirebirdBinaryColumnType.BLOB));
         when(packet.getParameterValues()).thenReturn(new 
ArrayList<>(Collections.singletonList(blobId)));
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         ArgumentCaptor<QueryContext> queryContextCaptor = 
ArgumentCaptor.forClass(QueryContext.class);
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
queryContextCaptor.capture(), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         executor.execute();
@@ -198,7 +198,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         when(packet.getParameterValues()).thenReturn(new 
ArrayList<>(Collections.singletonList(9)));
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
         ArgumentCaptor<QueryContext> queryContextCaptor = 
ArgumentCaptor.forClass(QueryContext.class);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
queryContextCaptor.capture(), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         executor.execute();
         List<Object> actualParams = 
queryContextCaptor.getValue().getParameters();
@@ -213,7 +213,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         when(packet.getParameterValues()).thenReturn(new 
ArrayList<>(Collections.singletonList("text")));
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
         ArgumentCaptor<QueryContext> queryContextCaptor = 
ArgumentCaptor.forClass(QueryContext.class);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
queryContextCaptor.capture(), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         executor.execute();
         List<Object> actualParams = 
queryContextCaptor.getValue().getParameters();
@@ -228,7 +228,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         when(packet.getParameterValues()).thenReturn(new 
ArrayList<>(Collections.singletonList(0L)));
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
         ArgumentCaptor<QueryContext> queryContextCaptor = 
ArgumentCaptor.forClass(QueryContext.class);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
queryContextCaptor.capture(), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         executor.execute();
         List<Object> actualParams = 
queryContextCaptor.getValue().getParameters();
@@ -250,7 +250,7 @@ class FirebirdExecuteStatementCommandExecutorTest {
         when(packet.getParameterValues()).thenReturn(params);
         executor = new FirebirdExecuteStatementCommandExecutor(packet, 
connectionSession);
         ArgumentCaptor<QueryContext> queryContextCaptor = 
ArgumentCaptor.forClass(QueryContext.class);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(DATABASE_TYPE)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(DATABASE_TYPE).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(DATABASE_TYPE), 
queryContextCaptor.capture(), eq(connectionSession), 
eq(true))).thenReturn(proxyBackendHandler);
         executor.execute();
         List<Object> actualParams = 
queryContextCaptor.getValue().getParameters();
diff --git 
a/proxy/frontend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
 
b/proxy/frontend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
index 8547659c6ec..fe480ababc3 100644
--- 
a/proxy/frontend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
+++ 
b/proxy/frontend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
@@ -147,11 +147,12 @@ class MySQLComStmtExecuteExecutorTest {
     }
     
     private UpdateStatement prepareUpdateStatement() {
-        UpdateStatement result = new UpdateStatement(databaseType);
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
         ColumnAssignmentSegment columnAssignmentSegment = new 
ColumnAssignmentSegment(0, 0, Collections.singletonList(columnSegment), new 
ParameterMarkerExpressionSegment(0, 0, 0));
-        result.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.singletonList(columnAssignmentSegment)));
-        return result;
+        return UpdateStatement.builder()
+                .databaseType(databaseType)
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.singletonList(columnAssignmentSegment)))
+                .build();
     }
     
     @Test
@@ -184,7 +185,7 @@ class MySQLComStmtExecuteExecutorTest {
         when(packet.getStatementId()).thenReturn(2);
         
when(packet.getNewParametersBoundFlag()).thenReturn(MySQLNewParametersBoundFlag.PARAMETER_TYPE_EXIST);
         MySQLComStmtExecuteExecutor executor = new 
MySQLComStmtExecuteExecutor(packet, connectionSession);
-        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(new UpdateStatement(databaseType)));
+        when(proxyBackendHandler.execute()).thenReturn(new 
UpdateResponseHeader(UpdateStatement.builder().databaseType(databaseType).build()));
         when(ProxyBackendHandlerFactory.newInstance(eq(databaseType), 
any(QueryContext.class), eq(connectionSession), 
anyBoolean())).thenReturn(proxyBackendHandler);
         Iterator<DatabasePacket> actual = executor.execute().iterator();
         assertThat(executor.getResponseType(), is(ResponseType.UPDATE));
diff --git 
a/proxy/frontend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
 
b/proxy/frontend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index 0458d38c1e3..e2f39628ae7 100644
--- 
a/proxy/frontend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ 
b/proxy/frontend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -201,9 +201,11 @@ class PostgreSQLBatchedStatementsExecutorTest {
     }
     
     private UpdateStatementContext mockUpdateStatementContext() {
-        UpdateStatement updateStatement = new UpdateStatement(databaseType);
-        updateStatement.setTable(new SimpleTableSegment(new 
TableNameSegment(0, 0, new IdentifierValue("t"))));
-        updateStatement.setSetAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()));
+        UpdateStatement updateStatement = UpdateStatement.builder()
+                .databaseType(databaseType)
+                .table(new SimpleTableSegment(new TableNameSegment(0, 0, new 
IdentifierValue("t"))))
+                .setAssignment(new SetAssignmentSegment(0, 0, 
Collections.emptyList()))
+                .build();
         return new UpdateStatementContext(updateStatement);
     }
     


Reply via email to