You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ch...@apache.org on 2025/08/19 10:03:07 UTC
(shardingsphere) branch master updated: Split DeleteStatementContext and UpdateStatementContext to base context (#36358)
This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 d0f400f6c24 Split DeleteStatementContext and UpdateStatementContext to base context (#36358)
d0f400f6c24 is described below
commit d0f400f6c2490f0dda7d08a7d04c5af481db87b0
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Tue Aug 19 18:03:01 2025 +0800
Split DeleteStatementContext and UpdateStatementContext to base context (#36358)
---
...ontext.java => DeleteStatementBaseContext.java} | 22 +------
.../statement/type/dml/DeleteStatementContext.java | 69 +++++-----------------
...ontext.java => UpdateStatementBaseContext.java} | 17 +-----
.../statement/type/dml/UpdateStatementContext.java | 48 ++++++---------
4 files changed, 37 insertions(+), 119 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/DeleteStatementBaseContext.java
similarity index 86%
copy from infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementContext.java
copy to infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/DeleteStatementBaseContext.java
index 23fefc6b014..44774d013e4 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/DeleteStatementBaseContext.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.infra.binder.context.statement.type.dml;
import lombok.Getter;
-import org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.statement.core.extractor.ColumnExtractor;
@@ -36,10 +35,10 @@ import java.util.LinkedList;
import java.util.Map;
/**
- * Delete statement context.
+ * Delete statement base context.
*/
@Getter
-public final class DeleteStatementContext implements SQLStatementContext, WhereContextAvailable {
+public final class DeleteStatementBaseContext implements SQLStatementContext {
private final DeleteStatement sqlStatement;
@@ -51,7 +50,7 @@ public final class DeleteStatementContext implements SQLStatementContext, WhereC
private final Collection<BinaryOperationExpression> joinConditions = new LinkedList<>();
- public DeleteStatementContext(final DeleteStatement sqlStatement) {
+ public DeleteStatementBaseContext(final DeleteStatement sqlStatement) {
this.sqlStatement = sqlStatement;
tablesContext = new TablesContext(getAllSimpleTableSegments());
whereSegments = createWhereSegments(sqlStatement);
@@ -90,19 +89,4 @@ public final class DeleteStatementContext implements SQLStatementContext, WhereC
}
return result;
}
-
- @Override
- public Collection<WhereSegment> getWhereSegments() {
- return whereSegments;
- }
-
- @Override
- public Collection<ColumnSegment> getColumnSegments() {
- return columnSegments;
- }
-
- @Override
- public Collection<BinaryOperationExpression> getJoinConditions() {
- return joinConditions;
- }
}
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 23fefc6b014..289d2720922 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
@@ -21,19 +21,12 @@ import lombok.Getter;
import org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.ColumnExtractor;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.ExpressionExtractor;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.DeleteStatement;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
/**
* Delete statement context.
@@ -41,68 +34,34 @@ import java.util.Map;
@Getter
public final class DeleteStatementContext implements SQLStatementContext, WhereContextAvailable {
- private final DeleteStatement sqlStatement;
-
- private final TablesContext tablesContext;
-
- private final Collection<WhereSegment> whereSegments;
-
- private final Collection<ColumnSegment> columnSegments;
-
- private final Collection<BinaryOperationExpression> joinConditions = new LinkedList<>();
+ private final DeleteStatementBaseContext baseContext;
public DeleteStatementContext(final DeleteStatement sqlStatement) {
- this.sqlStatement = sqlStatement;
- tablesContext = new TablesContext(getAllSimpleTableSegments());
- whereSegments = createWhereSegments(sqlStatement);
- columnSegments = ColumnExtractor.extractColumnSegments(whereSegments);
- ExpressionExtractor.extractJoinConditions(joinConditions, whereSegments);
- }
-
- private Collection<WhereSegment> createWhereSegments(final DeleteStatement deleteStatement) {
- Collection<WhereSegment> result = new LinkedList<>();
- deleteStatement.getWhere().ifPresent(result::add);
- return result;
- }
-
- private Collection<SimpleTableSegment> getAllSimpleTableSegments() {
- TableExtractor tableExtractor = new TableExtractor();
- tableExtractor.extractTablesFromDelete(sqlStatement);
- return filterAliasDeleteTable(tableExtractor.getRewriteTables());
+ baseContext = new DeleteStatementBaseContext(sqlStatement);
}
- private Collection<SimpleTableSegment> filterAliasDeleteTable(final Collection<SimpleTableSegment> tableSegments) {
- Collection<SimpleTableSegment> result = new LinkedList<>();
- Map<String, SimpleTableSegment> aliasAndTableSegmentMap = getAliasAndTableSegmentMap(tableSegments);
- for (SimpleTableSegment each : tableSegments) {
- SimpleTableSegment aliasDeleteTable = aliasAndTableSegmentMap.get(each.getTableName().getIdentifier().getValue());
- if (null == aliasDeleteTable || aliasDeleteTable.equals(each)) {
- result.add(each);
- }
- }
- return result;
+ @Override
+ public Collection<WhereSegment> getWhereSegments() {
+ return baseContext.getWhereSegments();
}
- private Map<String, SimpleTableSegment> getAliasAndTableSegmentMap(final Collection<SimpleTableSegment> tableSegments) {
- Map<String, SimpleTableSegment> result = new HashMap<>(tableSegments.size(), 1F);
- for (SimpleTableSegment each : tableSegments) {
- each.getAliasName().ifPresent(optional -> result.putIfAbsent(optional, each));
- }
- return result;
+ @Override
+ public Collection<ColumnSegment> getColumnSegments() {
+ return baseContext.getColumnSegments();
}
@Override
- public Collection<WhereSegment> getWhereSegments() {
- return whereSegments;
+ public Collection<BinaryOperationExpression> getJoinConditions() {
+ return baseContext.getJoinConditions();
}
@Override
- public Collection<ColumnSegment> getColumnSegments() {
- return columnSegments;
+ public DeleteStatement getSqlStatement() {
+ return baseContext.getSqlStatement();
}
@Override
- public Collection<BinaryOperationExpression> getJoinConditions() {
- return joinConditions;
+ public TablesContext getTablesContext() {
+ return baseContext.getTablesContext();
}
}
diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementBaseContext.java
similarity index 85%
copy from infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java
copy to infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementBaseContext.java
index 7df7c2bb520..b25e790b653 100644
--- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java
+++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementBaseContext.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.infra.binder.context.statement.type.dml;
import lombok.Getter;
-import org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.statement.core.extractor.ColumnExtractor;
@@ -34,10 +33,10 @@ import java.util.Collection;
import java.util.LinkedList;
/**
- * Update SQL statement context.
+ * Update SQL statement base context.
*/
@Getter
-public final class UpdateStatementContext implements SQLStatementContext, WhereContextAvailable {
+public final class UpdateStatementBaseContext implements SQLStatementContext {
private final UpdateStatement sqlStatement;
@@ -49,7 +48,7 @@ public final class UpdateStatementContext implements SQLStatementContext, WhereC
private final Collection<BinaryOperationExpression> joinConditions = new LinkedList<>();
- public UpdateStatementContext(final UpdateStatement sqlStatement) {
+ public UpdateStatementBaseContext(final UpdateStatement sqlStatement) {
this.sqlStatement = sqlStatement;
tablesContext = new TablesContext(getAllSimpleTableSegments());
whereSegments = createWhereSegments(sqlStatement);
@@ -68,14 +67,4 @@ public final class UpdateStatementContext implements SQLStatementContext, WhereC
tableExtractor.extractTablesFromUpdate(sqlStatement);
return tableExtractor.getRewriteTables();
}
-
- @Override
- public Collection<WhereSegment> getWhereSegments() {
- return whereSegments;
- }
-
- @Override
- public Collection<ColumnSegment> getColumnSegments() {
- return columnSegments;
- }
}
diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java
index 7df7c2bb520..dd19136111c 100644
--- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java
+++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/dml/UpdateStatementContext.java
@@ -21,17 +21,12 @@ import lombok.Getter;
import org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.ColumnExtractor;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.ExpressionExtractor;
-import org.apache.shardingsphere.sql.parser.statement.core.extractor.TableExtractor;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
import java.util.Collection;
-import java.util.LinkedList;
/**
* Update SQL statement context.
@@ -39,43 +34,34 @@ import java.util.LinkedList;
@Getter
public final class UpdateStatementContext implements SQLStatementContext, WhereContextAvailable {
- private final UpdateStatement sqlStatement;
-
- private final TablesContext tablesContext;
-
- private final Collection<WhereSegment> whereSegments;
-
- private final Collection<ColumnSegment> columnSegments;
-
- private final Collection<BinaryOperationExpression> joinConditions = new LinkedList<>();
+ private final UpdateStatementBaseContext baseContext;
public UpdateStatementContext(final UpdateStatement sqlStatement) {
- this.sqlStatement = sqlStatement;
- tablesContext = new TablesContext(getAllSimpleTableSegments());
- whereSegments = createWhereSegments(sqlStatement);
- columnSegments = ColumnExtractor.extractColumnSegments(whereSegments);
- ExpressionExtractor.extractJoinConditions(joinConditions, whereSegments);
+ baseContext = new UpdateStatementBaseContext(sqlStatement);
}
- private Collection<WhereSegment> createWhereSegments(final UpdateStatement updateStatement) {
- Collection<WhereSegment> result = new LinkedList<>();
- updateStatement.getWhere().ifPresent(result::add);
- return result;
+ @Override
+ public Collection<WhereSegment> getWhereSegments() {
+ return baseContext.getWhereSegments();
}
- private Collection<SimpleTableSegment> getAllSimpleTableSegments() {
- TableExtractor tableExtractor = new TableExtractor();
- tableExtractor.extractTablesFromUpdate(sqlStatement);
- return tableExtractor.getRewriteTables();
+ @Override
+ public Collection<ColumnSegment> getColumnSegments() {
+ return baseContext.getColumnSegments();
}
@Override
- public Collection<WhereSegment> getWhereSegments() {
- return whereSegments;
+ public Collection<BinaryOperationExpression> getJoinConditions() {
+ return baseContext.getJoinConditions();
}
@Override
- public Collection<ColumnSegment> getColumnSegments() {
- return columnSegments;
+ public UpdateStatement getSqlStatement() {
+ return baseContext.getSqlStatement();
+ }
+
+ @Override
+ public TablesContext getTablesContext() {
+ return baseContext.getTablesContext();
}
}