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()));
}
}