You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/06/11 11:03:44 UTC
(shardingsphere) branch master updated: Refactor DeleteStatementBinder (#35677)
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 58099e1a90a Refactor DeleteStatementBinder (#35677)
58099e1a90a is described below
commit 58099e1a90a7cb067de2a907c7bf5fa314396f50
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 11 19:03:37 2025 +0800
Refactor DeleteStatementBinder (#35677)
* Refactor DeleteStatementBinder
* Refactor DeleteStatementBinder
---
.../statement/type/dml/DeleteStatementContext.java | 2 +-
.../statement/dml/DeleteStatementBinder.java | 29 ++++++++++++--------
.../statement/delete/DeleteStatementConverter.java | 2 +-
.../type/FirebirdDMLStatementVisitor.java | 2 +-
.../visitor/statement/MySQLStatementVisitor.java | 4 +--
.../statement/SQLServerStatementVisitor.java | 6 ++--
.../core/statement/dml/DeleteStatement.java | 32 +++++++++++-----------
.../statement/dml/impl/DeleteStatementAssert.java | 6 ++--
8 files changed, 44 insertions(+), 39 deletions(-)
diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementContext.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementContext.java
index 6df8371fbba..398b3a96f41 100644
--- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementContext.java
+++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementContext.java
@@ -116,6 +116,6 @@ public final class DeleteStatementContext extends CommonSQLStatementContext impl
@Override
public Optional<WithSegment> getWith() {
- return getSqlStatement().getWithSegment();
+ return getSqlStatement().getWith();
}
}
diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
index 336c94933d4..217f99dba46 100644
--- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
+++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/dml/DeleteStatementBinder.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.infra.binder.engine.statement.dml;
import com.cedarsoftware.util.CaseInsensitiveMap.CaseInsensitiveString;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
-import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.binder.engine.segment.dml.from.TableSegmentBinder;
import org.apache.shardingsphere.infra.binder.engine.segment.dml.from.context.TableSegmentBinderContext;
import org.apache.shardingsphere.infra.binder.engine.segment.dml.order.OrderBySegmentBinder;
@@ -29,6 +28,10 @@ import org.apache.shardingsphere.infra.binder.engine.segment.dml.with.WithSegmen
import org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinder;
import org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
import org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.OrderBySegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.WithSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
/**
@@ -38,21 +41,23 @@ public final class DeleteStatementBinder implements SQLStatementBinder<DeleteSta
@Override
public DeleteStatement bind(final DeleteStatement sqlStatement, final SQLStatementBinderContext binderContext) {
- DeleteStatement result = copy(sqlStatement);
Multimap<CaseInsensitiveString, TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create();
- sqlStatement.getWithSegment().ifPresent(optional -> result.setWithSegment(WithSegmentBinder.bind(optional, binderContext, binderContext.getExternalTableBinderContexts())));
- result.setTable(TableSegmentBinder.bind(sqlStatement.getTable(), binderContext, tableBinderContexts, LinkedHashMultimap.create()));
- sqlStatement.getWhere().ifPresent(optional -> result.setWhere(WhereSegmentBinder.bind(optional, binderContext, tableBinderContexts, LinkedHashMultimap.create())));
- sqlStatement.getOrderBy().ifPresent(optional -> result.setOrderBy(
- OrderBySegmentBinder.bind(optional, binderContext, LinkedHashMultimap.create(), tableBinderContexts, LinkedHashMultimap.create())));
- return result;
+ WithSegment boundWith = sqlStatement.getWith().map(optional -> WithSegmentBinder.bind(optional, binderContext, binderContext.getExternalTableBinderContexts())).orElse(null);
+ TableSegment boundTable = TableSegmentBinder.bind(sqlStatement.getTable(), binderContext, tableBinderContexts, LinkedHashMultimap.create());
+ WhereSegment boundWhere = sqlStatement.getWhere().map(optional -> WhereSegmentBinder.bind(optional, binderContext, tableBinderContexts, LinkedHashMultimap.create())).orElse(null);
+ OrderBySegment boundOrderBy = sqlStatement.getOrderBy()
+ .map(optional -> OrderBySegmentBinder.bind(optional, binderContext, LinkedHashMultimap.create(), tableBinderContexts, LinkedHashMultimap.create())).orElse(null);
+ return copy(sqlStatement, boundWith, boundTable, boundWhere, boundOrderBy);
}
- @SneakyThrows(ReflectiveOperationException.class)
- private DeleteStatement copy(final DeleteStatement sqlStatement) {
- DeleteStatement result = sqlStatement.getClass().getDeclaredConstructor().newInstance();
+ private DeleteStatement copy(final DeleteStatement sqlStatement, final WithSegment boundWith, final TableSegment boundTable, final WhereSegment boundWhere, final OrderBySegment boundOrderBy) {
+ DeleteStatement result = new DeleteStatement();
+ result.setWith(boundWith);
+ result.setTable(boundTable);
+ result.setWhere(boundWhere);
+ result.setOrderBy(boundOrderBy);
sqlStatement.getLimit().ifPresent(result::setLimit);
- sqlStatement.getOutputSegment().ifPresent(result::setOutputSegment);
+ sqlStatement.getOutput().ifPresent(result::setOutput);
SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
return result;
}
diff --git a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/delete/DeleteStatementConverter.java b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/delete/DeleteStatementConverter.java
index 01425035250..a5528e4cb7a 100644
--- a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/delete/DeleteStatementConverter.java
+++ b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/delete/DeleteStatementConverter.java
@@ -57,6 +57,6 @@ public final class DeleteStatementConverter implements SQLStatementConverter<Del
SqlNode condition = deleteStatement.getWhere().flatMap(WhereConverter::convert).orElse(null);
SqlIdentifier alias = deleteStatement.getTable().getAliasName().map(optional -> new SqlIdentifier(optional, SqlParserPos.ZERO)).orElse(null);
SqlDelete sqlDelete = new SqlDelete(SqlParserPos.ZERO, deleteTable, condition, null, alias);
- return deleteStatement.getWithSegment().flatMap(optional -> WithConverter.convert(optional, sqlDelete)).orElse(sqlDelete);
+ return deleteStatement.getWith().flatMap(optional -> WithConverter.convert(optional, sqlDelete)).orElse(sqlDelete);
}
}
diff --git a/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java b/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
index d9ff6d04ee0..643c958bcd4 100644
--- a/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
+++ b/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdDMLStatementVisitor.java
@@ -208,7 +208,7 @@ public final class FirebirdDMLStatementVisitor extends FirebirdStatementVisitor
}
result.addParameterMarkers(getParameterMarkerSegments());
if (null != ctx.returningClause()) {
- result.setReturningSegment((ReturningSegment) visit(ctx.returningClause()));
+ result.setReturning((ReturningSegment) visit(ctx.returningClause()));
}
return result;
}
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index 4f7ee200b00..c1c6b00a7cd 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1677,10 +1677,10 @@ public abstract class MySQLStatementVisitor extends MySQLStatementBaseVisitor<AS
}
result.addParameterMarkers(getParameterMarkerSegments());
if (null != ctx.returningClause()) {
- result.setReturningSegment((ReturningSegment) visit(ctx.returningClause()));
+ result.setReturning((ReturningSegment) visit(ctx.returningClause()));
}
if (null != ctx.withClause()) {
- result.setWithSegment((WithSegment) visit(ctx.withClause()));
+ result.setWith((WithSegment) visit(ctx.withClause()));
}
return result;
}
diff --git a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index 3576d5b2f59..95860b313cc 100644
--- a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++ b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -1398,7 +1398,7 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi
public ASTNode visitDelete(final DeleteContext ctx) {
DeleteStatement result = new DeleteStatement();
if (null != ctx.withClause()) {
- result.setWithSegment((WithSegment) visit(ctx.withClause()));
+ result.setWith((WithSegment) visit(ctx.withClause()));
}
if (null != ctx.multipleTablesClause()) {
result.setTable((TableSegment) visit(ctx.multipleTablesClause()));
@@ -1406,13 +1406,13 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi
result.setTable((TableSegment) visit(ctx.singleTableClause()));
}
if (null != ctx.outputClause()) {
- result.setOutputSegment((OutputSegment) visit(ctx.outputClause()));
+ result.setOutput((OutputSegment) visit(ctx.outputClause()));
}
if (null != ctx.whereClause()) {
result.setWhere((WhereSegment) visit(ctx.whereClause()));
}
if (null != ctx.outputClause()) {
- result.setOutputSegment((OutputSegment) visit(ctx.outputClause()));
+ result.setOutput((OutputSegment) visit(ctx.outputClause()));
}
result.addParameterMarkers(getParameterMarkerSegments());
return result;
diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DeleteStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DeleteStatement.java
index 4e48b215fdf..6508d0ccb78 100644
--- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DeleteStatement.java
+++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dml/DeleteStatement.java
@@ -35,7 +35,7 @@ import java.util.Optional;
*/
@Getter
@Setter
-public class DeleteStatement extends AbstractSQLStatement implements DMLStatement {
+public final class DeleteStatement extends AbstractSQLStatement implements DMLStatement {
private TableSegment table;
@@ -45,11 +45,11 @@ public class DeleteStatement extends AbstractSQLStatement implements DMLStatemen
private LimitSegment limit;
- private WithSegment withSegment;
+ private WithSegment with;
- private ReturningSegment returningSegment;
+ private ReturningSegment returning;
- private OutputSegment outputSegment;
+ private OutputSegment output;
/**
* Get where.
@@ -79,29 +79,29 @@ public class DeleteStatement extends AbstractSQLStatement implements DMLStatemen
}
/**
- * Get with segment.
+ * Get with.
*
- * @return with segment
+ * @return with
*/
- public Optional<WithSegment> getWithSegment() {
- return Optional.ofNullable(withSegment);
+ public Optional<WithSegment> getWith() {
+ return Optional.ofNullable(with);
}
/**
- * Get returning segment of delete statement.
+ * Get returning.
*
- * @return returning segment
+ * @return returning
*/
- public Optional<ReturningSegment> getReturningSegment() {
- return Optional.ofNullable(returningSegment);
+ public Optional<ReturningSegment> getReturning() {
+ return Optional.ofNullable(returning);
}
/**
- * Get output segment.
+ * Get output.
*
- * @return output segment
+ * @return output
*/
- public Optional<OutputSegment> getOutputSegment() {
- return Optional.ofNullable(outputSegment);
+ public Optional<OutputSegment> getOutput() {
+ return Optional.ofNullable(output);
}
}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DeleteStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DeleteStatementAssert.java
index 4c154f9144c..00015e7e192 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DeleteStatementAssert.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dml/impl/DeleteStatementAssert.java
@@ -69,7 +69,7 @@ public final class DeleteStatementAssert {
}
private static void assertWithClause(final SQLCaseAssertContext assertContext, final DeleteStatement actual, final DeleteStatementTestCase expected) {
- Optional<WithSegment> withSegment = actual.getWithSegment();
+ Optional<WithSegment> withSegment = actual.getWith();
if (null == expected.getWithClause()) {
assertFalse(withSegment.isPresent(), assertContext.getText("Actual with segment should not exist."));
} else {
@@ -79,7 +79,7 @@ public final class DeleteStatementAssert {
}
private static void assertTable(final SQLCaseAssertContext assertContext, final DeleteStatement actual, final DeleteStatementTestCase expected) {
- if (null != expected.getTables() && !expected.getTables().isEmpty()) {
+ if (!expected.getTables().isEmpty()) {
assertNotNull(actual.getTable(), assertContext.getText("Actual table segment should exist."));
List<SimpleTableSegment> actualTableSegments = new LinkedList<>();
if (actual.getTable() instanceof SimpleTableSegment) {
@@ -98,7 +98,7 @@ public final class DeleteStatementAssert {
}
private static void assertOutput(final SQLCaseAssertContext assertContext, final DeleteStatement actual, final DeleteStatementTestCase expected) {
- Optional<OutputSegment> outputSegment = actual.getOutputSegment();
+ Optional<OutputSegment> outputSegment = actual.getOutput();
if (null == expected.getOutputClause()) {
assertFalse(outputSegment.isPresent(), assertContext.getText("Actual output segment should not exist."));
} else {