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