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 bb6f5da9a95 Refactor SQLStatementBinderContext (#32049)
bb6f5da9a95 is described below

commit bb6f5da9a959fb4730e683c50ab5ae3949bce707
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jul 10 00:05:29 2024 +0800

    Refactor SQLStatementBinderContext (#32049)
    
    * Refactor SelectStatementBinder
    
    * Revise javadoc
    
    * Refactor SQLStatementBinderContext
    
    * Refactor SQLStatementBinderContext
---
 .../binder/segment/combine/CombineSegmentBinder.java     | 16 ++++++++--------
 .../infra/binder/segment/where/WhereSegmentBinder.java   |  2 +-
 .../binder/statement/SQLStatementBinderContext.java      |  8 ++++++++
 .../binder/statement/dml/DeleteStatementBinder.java      |  2 +-
 .../binder/statement/dml/InsertStatementBinder.java      |  2 +-
 .../infra/binder/statement/dml/MergeStatementBinder.java |  2 +-
 .../binder/statement/dml/SelectStatementBinder.java      |  2 +-
 .../binder/statement/dml/UpdateStatementBinder.java      |  2 +-
 8 files changed, 22 insertions(+), 14 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/combine/CombineSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/combine/CombineSegmentBinder.java
index d2e83429fe8..b15c09dcc00 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/combine/CombineSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/combine/CombineSegmentBinder.java
@@ -40,20 +40,20 @@ public final class CombineSegmentBinder {
      *
      * @param segment table segment
      * @param statementBinderContext statement binder context
-     * @return bounded combine segment
+     * @return bound combine segment
      */
     public static CombineSegment bind(final CombineSegment segment, final 
SQLStatementBinderContext statementBinderContext) {
         ShardingSphereMetaData metaData = statementBinderContext.getMetaData();
         String currentDatabaseName = 
statementBinderContext.getCurrentDatabaseName();
         Map<String, TableSegmentBinderContext> externalTableBinderContexts = 
statementBinderContext.getExternalTableBinderContexts();
-        SelectStatement boundedLeftSelect = new 
SelectStatementBinder().bind(segment.getLeft().getSelect(), metaData, 
currentDatabaseName, externalTableBinderContexts);
-        SelectStatement boundedRightSelect = new 
SelectStatementBinder().bind(segment.getRight().getSelect(), metaData, 
currentDatabaseName, externalTableBinderContexts);
-        SubquerySegment boundedLeft = new 
SubquerySegment(segment.getLeft().getStartIndex(), 
segment.getLeft().getStopIndex(), segment.getLeft().getText());
-        boundedLeft.setSelect(boundedLeftSelect);
-        boundedLeft.setSubqueryType(segment.getLeft().getSubqueryType());
+        SelectStatement boundLeftSelect = new 
SelectStatementBinder().bind(segment.getLeft().getSelect(), metaData, 
currentDatabaseName, externalTableBinderContexts);
+        SelectStatement boundRightSelect = new 
SelectStatementBinder().bind(segment.getRight().getSelect(), metaData, 
currentDatabaseName, externalTableBinderContexts);
+        SubquerySegment boundLeft = new 
SubquerySegment(segment.getLeft().getStartIndex(), 
segment.getLeft().getStopIndex(), segment.getLeft().getText());
+        boundLeft.setSelect(boundLeftSelect);
+        boundLeft.setSubqueryType(segment.getLeft().getSubqueryType());
         SubquerySegment boundedRight = new 
SubquerySegment(segment.getRight().getStartIndex(), 
segment.getRight().getStopIndex(), segment.getRight().getText());
-        boundedRight.setSelect(boundedRightSelect);
+        boundedRight.setSelect(boundRightSelect);
         boundedRight.setSubqueryType(segment.getRight().getSubqueryType());
-        return new CombineSegment(segment.getStartIndex(), 
segment.getStopIndex(), boundedLeft, segment.getCombineType(), boundedRight);
+        return new CombineSegment(segment.getStartIndex(), 
segment.getStopIndex(), boundLeft, segment.getCombineType(), boundedRight);
     }
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
index e55c7c59368..bea86e2fdd5 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
@@ -40,7 +40,7 @@ public final class WhereSegmentBinder {
      * @param statementBinderContext statement binder context
      * @param tableBinderContexts table binder contexts
      * @param outerTableBinderContexts outer table binder contexts
-     * @return bounded where segment
+     * @return bound where segment
      */
     public static WhereSegment bind(final WhereSegment segment, final 
SQLStatementBinderContext statementBinderContext,
                                     final Map<String, 
TableSegmentBinderContext> tableBinderContexts, final Map<String, 
TableSegmentBinderContext> outerTableBinderContexts) {
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
index 9d11941e826..b29c36714b6 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderCon
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -52,4 +53,11 @@ public final class SQLStatementBinderContext {
     private final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts = new CaseInsensitiveMap<>();
     
     private final Collection<String> pivotColumnNames = new HashSet<>();
+    
+    public SQLStatementBinderContext(final SQLStatement sqlStatement, final 
ShardingSphereMetaData metaData, final String currentDatabaseName) {
+        this.metaData = metaData;
+        this.currentDatabaseName = currentDatabaseName;
+        databaseType = sqlStatement.getDatabaseType();
+        variableNames = sqlStatement.getVariableNames();
+    }
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
index 864268029b4..be35eae4d0b 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
@@ -44,7 +44,7 @@ public final class DeleteStatementBinder implements 
SQLStatementBinder<DeleteSta
                                  final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
         DeleteStatement result = copy(sqlStatement);
         Map<String, TableSegmentBinderContext> tableBinderContexts = new 
LinkedHashMap<>();
-        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(metaData, currentDatabaseName, 
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
         
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
         result.setTable(TableSegmentBinder.bind(sqlStatement.getTable(), 
statementBinderContext, tableBinderContexts, Collections.emptyMap()));
         sqlStatement.getWhere().ifPresent(optional -> 
result.setWhere(WhereSegmentBinder.bind(optional, statementBinderContext, 
tableBinderContexts, Collections.emptyMap())));
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
index 895d120412b..de385645322 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
@@ -50,7 +50,7 @@ public final class InsertStatementBinder implements 
SQLStatementBinder<InsertSta
     private InsertStatement bind(final InsertStatement sqlStatement, final 
ShardingSphereMetaData metaData, final String currentDatabaseName,
                                  final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
         InsertStatement result = copy(sqlStatement);
-        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(metaData, currentDatabaseName, 
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
         
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
         Map<String, TableSegmentBinderContext> tableBinderContexts = new 
LinkedHashMap<>();
         Optional.ofNullable(sqlStatement.getTable()).ifPresent(optional -> 
result.setTable(SimpleTableSegmentBinder.bind(optional, statementBinderContext, 
tableBinderContexts)));
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
index 721c6f48d87..1b177ffb710 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
@@ -70,7 +70,7 @@ public final class MergeStatementBinder implements 
SQLStatementBinder<MergeState
     private MergeStatement bind(final MergeStatement sqlStatement, final 
ShardingSphereMetaData metaData, final String currentDatabaseName,
                                 final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
         MergeStatement result = copy(sqlStatement);
-        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(metaData, currentDatabaseName, 
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
         
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
         Map<String, TableSegmentBinderContext> targetTableBinderContexts = new 
CaseInsensitiveMap<>();
         TableSegment boundedTargetTableSegment = 
TableSegmentBinder.bind(sqlStatement.getTarget(), statementBinderContext, 
targetTableBinderContexts, Collections.emptyMap());
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
index a663d2f6945..a4f9ce4f8ba 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
@@ -79,7 +79,7 @@ public final class SelectStatementBinder implements 
SQLStatementBinder<SelectSta
                                  final Map<String, TableSegmentBinderContext> 
outerTableBinderContexts, final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
         SelectStatement result = copy(sqlStatement);
         Map<String, TableSegmentBinderContext> tableBinderContexts = new 
LinkedHashMap<>();
-        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(metaData, currentDatabaseName, 
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
         
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
         sqlStatement.getWithSegment()
                 .ifPresent(optional -> 
result.setWithSegment(WithSegmentBinder.bind(optional, statementBinderContext, 
tableBinderContexts, statementBinderContext.getExternalTableBinderContexts())));
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
index da11801941f..104913ec9b5 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
@@ -46,7 +46,7 @@ public final class UpdateStatementBinder implements 
SQLStatementBinder<UpdateSta
                                  final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
         UpdateStatement result = copy(sqlStatement);
         Map<String, TableSegmentBinderContext> tableBinderContexts = new 
LinkedHashMap<>();
-        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(metaData, currentDatabaseName, 
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+        SQLStatementBinderContext statementBinderContext = new 
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
         
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
         TableSegment boundedTableSegment = 
TableSegmentBinder.bind(sqlStatement.getTable(), statementBinderContext, 
tableBinderContexts, Collections.emptyMap());
         result.setTable(boundedTableSegment);

Reply via email to