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 6c22b1d66d3 Refactor constructor of PrepareStatement to empty 
buildAttributes (#38346)
6c22b1d66d3 is described below

commit 6c22b1d66d348e2e1b7d8094766d0356bd10aba3
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Mar 4 23:16:07 2026 +0800

    Refactor constructor of PrepareStatement to empty buildAttributes (#38346)
---
 .../statement/ddl/PrepareStatementBinder.java      | 12 +++++---
 .../statement/ddl/PrepareStatementBinderTest.java  |  6 ++--
 .../statement/type/DorisDDLStatementVisitor.java   |  2 +-
 .../statement/type/MySQLDDLStatementVisitor.java   |  2 +-
 .../type/OpenGaussDDLStatementVisitor.java         | 21 +++++--------
 .../type/PostgreSQLDDLStatementVisitor.java        | 21 +++++--------
 .../core/statement/type/ddl/PrepareStatement.java  | 36 +++++++++++++---------
 7 files changed, 47 insertions(+), 53 deletions(-)

diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinder.java
index 6e7d7723698..adce6f6e1da 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinder.java
@@ -46,11 +46,13 @@ public final class PrepareStatementBinder implements 
SQLStatementBinder<PrepareS
     
     private PrepareStatement copy(final PrepareStatement sqlStatement, final 
SelectStatement boundSelect, final InsertStatement boundInsert,
                                   final UpdateStatement boundUpdate, final 
DeleteStatement boundDelete) {
-        PrepareStatement result = new 
PrepareStatement(sqlStatement.getDatabaseType());
-        result.setSelect(boundSelect);
-        result.setInsert(boundInsert);
-        result.setUpdate(boundUpdate);
-        result.setDelete(boundDelete);
+        PrepareStatement result = PrepareStatement.builder()
+                .databaseType(sqlStatement.getDatabaseType())
+                .select(boundSelect)
+                .insert(boundInsert)
+                .update(boundUpdate)
+                .delete(boundDelete)
+                .build();
         SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
         return result;
     }
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinderTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinderTest.java
index 903edb5a197..52bd5d8c2e0 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinderTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/PrepareStatementBinderTest.java
@@ -64,9 +64,6 @@ class PrepareStatementBinderTest {
     
     @Test
     void assertBindWithSelect() {
-        PrepareStatement prepareStatement = new PrepareStatement(databaseType);
-        SelectStatement selectStatement = createSelectStatement();
-        prepareStatement.setSelect(selectStatement);
         when(metaData.containsDatabase("foo_db_1")).thenReturn(true);
         when(metaData.getDatabase("foo_db_1")).thenReturn(database);
         when(database.containsSchema("foo_db_1")).thenReturn(true);
@@ -76,6 +73,7 @@ class PrepareStatementBinderTest {
         when(table.getAllColumns()).thenReturn(Collections.emptyList());
         HintValueContext hintValueContext = new HintValueContext();
         hintValueContext.setSkipMetadataValidate(true);
+        final PrepareStatement prepareStatement = 
PrepareStatement.builder().databaseType(databaseType).select(createSelectStatement()).build();
         SQLStatementBinderContext binderContext = new 
SQLStatementBinderContext(metaData, "foo_db_1", hintValueContext, 
prepareStatement);
         PrepareStatement actual = new 
PrepareStatementBinder().bind(prepareStatement, binderContext);
         assertThat(actual.getDatabaseType(), is(databaseType));
@@ -87,9 +85,9 @@ class PrepareStatementBinderTest {
     
     @Test
     void assertBindWithoutInnerStatements() {
-        PrepareStatement prepareStatement = new PrepareStatement(databaseType);
         HintValueContext hintValueContext = new HintValueContext();
         hintValueContext.setSkipMetadataValidate(true);
+        final PrepareStatement prepareStatement = 
PrepareStatement.builder().databaseType(databaseType).build();
         SQLStatementBinderContext binderContext = new 
SQLStatementBinderContext(metaData, "foo_db_1", hintValueContext, 
prepareStatement);
         PrepareStatement actual = new 
PrepareStatementBinder().bind(prepareStatement, binderContext);
         assertThat(actual.getDatabaseType(), is(databaseType));
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 01b61c36810..3104f77e05d 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
@@ -1851,7 +1851,7 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitPrepare(final PrepareContext ctx) {
-        return new PrepareStatement(getDatabaseType());
+        return 
PrepareStatement.builder().databaseType(getDatabaseType()).build();
     }
     
     @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 7b9decee665..4407187478f 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
@@ -1118,7 +1118,7 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitPrepare(final PrepareContext ctx) {
-        return new PrepareStatement(getDatabaseType());
+        return 
PrepareStatement.builder().databaseType(getDatabaseType()).build();
     }
     
     @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 b31628919bb..c5dc5a8d8fd 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
@@ -769,20 +769,13 @@ public final class OpenGaussDDLStatementVisitor extends 
OpenGaussStatementVisito
     
     @Override
     public ASTNode visitPrepare(final PrepareContext ctx) {
-        PrepareStatement result = new PrepareStatement(getDatabaseType());
-        if (null != ctx.preparableStmt().select()) {
-            result.setSelect((SelectStatement) 
visit(ctx.preparableStmt().select()));
-        }
-        if (null != ctx.preparableStmt().insert()) {
-            result.setInsert((InsertStatement) 
visit(ctx.preparableStmt().insert()));
-        }
-        if (null != ctx.preparableStmt().update()) {
-            result.setUpdate((UpdateStatement) 
visit(ctx.preparableStmt().update()));
-        }
-        if (null != ctx.preparableStmt().delete()) {
-            result.setDelete((DeleteStatement) 
visit(ctx.preparableStmt().delete()));
-        }
-        return result;
+        return PrepareStatement.builder()
+                .databaseType(getDatabaseType())
+                .select(null == ctx.preparableStmt().select() ? null : 
(SelectStatement) visit(ctx.preparableStmt().select()))
+                .insert(null == ctx.preparableStmt().insert() ? null : 
(InsertStatement) visit(ctx.preparableStmt().insert()))
+                .update(null == ctx.preparableStmt().update() ? null : 
(UpdateStatement) visit(ctx.preparableStmt().update()))
+                .delete(null == ctx.preparableStmt().delete() ? null : 
(DeleteStatement) visit(ctx.preparableStmt().delete()))
+                .build();
     }
     
     @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 14743049c24..3e34dfee0db 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
@@ -901,20 +901,13 @@ public final class PostgreSQLDDLStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitPrepare(final PrepareContext ctx) {
-        PrepareStatement result = new PrepareStatement(getDatabaseType());
-        if (null != ctx.preparableStmt().select()) {
-            result.setSelect((SelectStatement) 
visit(ctx.preparableStmt().select()));
-        }
-        if (null != ctx.preparableStmt().insert()) {
-            result.setInsert((InsertStatement) 
visit(ctx.preparableStmt().insert()));
-        }
-        if (null != ctx.preparableStmt().update()) {
-            result.setUpdate((UpdateStatement) 
visit(ctx.preparableStmt().update()));
-        }
-        if (null != ctx.preparableStmt().delete()) {
-            result.setDelete((DeleteStatement) 
visit(ctx.preparableStmt().delete()));
-        }
-        return result;
+        return PrepareStatement.builder()
+                .databaseType(getDatabaseType())
+                .select(null == ctx.preparableStmt().select() ? null : 
(SelectStatement) visit(ctx.preparableStmt().select()))
+                .insert(null == ctx.preparableStmt().insert() ? null : 
(InsertStatement) visit(ctx.preparableStmt().insert()))
+                .update(null == ctx.preparableStmt().update() ? null : 
(UpdateStatement) visit(ctx.preparableStmt().update()))
+                .delete(null == ctx.preparableStmt().delete() ? null : 
(DeleteStatement) visit(ctx.preparableStmt().delete()))
+                .build();
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/PrepareStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/PrepareStatement.java
index 71a51c1d06c..ae4f57708db 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/PrepareStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/PrepareStatement.java
@@ -17,8 +17,8 @@
 
 package org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl;
 
+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.extractor.TableExtractor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
@@ -34,21 +34,35 @@ import java.util.Optional;
  * Prepare statement.
  */
 @Getter
-@Setter
 public final class PrepareStatement extends DDLStatement {
     
-    private SelectStatement select;
+    private final SelectStatement select;
     
-    private InsertStatement insert;
+    private final InsertStatement insert;
     
-    private UpdateStatement update;
+    private final UpdateStatement update;
     
-    private DeleteStatement delete;
+    private final DeleteStatement delete;
     
-    private SQLStatementAttributes attributes;
+    private final SQLStatementAttributes attributes;
     
-    public PrepareStatement(final DatabaseType databaseType) {
+    @Builder
+    private PrepareStatement(final DatabaseType databaseType, final 
SelectStatement select, final InsertStatement insert, final UpdateStatement 
update, final DeleteStatement delete) {
         super(databaseType);
+        this.select = select;
+        this.insert = insert;
+        this.update = update;
+        this.delete = delete;
+        attributes = createAttributes(select, insert, update, delete);
+    }
+    
+    private SQLStatementAttributes createAttributes(final SelectStatement 
select, final InsertStatement insert, final UpdateStatement update, final 
DeleteStatement delete) {
+        TableExtractor tableExtractor = new TableExtractor();
+        
Optional.ofNullable(select).ifPresent(tableExtractor::extractTablesFromSelect);
+        
Optional.ofNullable(insert).ifPresent(tableExtractor::extractTablesFromInsert);
+        
Optional.ofNullable(update).ifPresent(tableExtractor::extractTablesFromUpdate);
+        
Optional.ofNullable(delete).ifPresent(tableExtractor::extractTablesFromDelete);
+        return new SQLStatementAttributes(new 
TableSQLStatementAttribute(tableExtractor.getRewriteTables()));
     }
     
     /**
@@ -89,11 +103,5 @@ public final class PrepareStatement extends DDLStatement {
     
     @Override
     public void buildAttributes() {
-        TableExtractor tableExtractor = new TableExtractor();
-        
Optional.ofNullable(select).ifPresent(tableExtractor::extractTablesFromSelect);
-        
Optional.ofNullable(insert).ifPresent(tableExtractor::extractTablesFromInsert);
-        
Optional.ofNullable(update).ifPresent(tableExtractor::extractTablesFromUpdate);
-        
Optional.ofNullable(delete).ifPresent(tableExtractor::extractTablesFromDelete);
-        attributes = new SQLStatementAttributes(new 
TableSQLStatementAttribute(tableExtractor.getRewriteTables()));
     }
 }

Reply via email to