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 0b7ded909dd Minor changes for binder (#32085)
0b7ded909dd is described below

commit 0b7ded909dd224b02d00336bef250cde7408034c
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jul 12 23:31:30 2024 +0800

    Minor changes for binder (#32085)
    
    * Refactor AssignmentSegmentBinder
    
    * Refactor InsertColumnsSegmentBinder
    
    * Refactor CombineSegmentBinder
    
    * Refactor LockSegmentBinder
---
 .../segment/assign/AssignmentSegmentBinder.java    | 29 ++++++--------------
 .../segment/column/InsertColumnsSegmentBinder.java |  9 +++---
 .../segment/combine/CombineSegmentBinder.java      | 32 ++++++----------------
 .../binder/segment/lock/LockSegmentBinder.java     |  9 ++----
 4 files changed, 25 insertions(+), 54 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java
index 97e8b9962c6..970be2568f5 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/assign/AssignmentSegmentBinder.java
@@ -29,7 +29,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignmen
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -51,26 +50,16 @@ public final class AssignmentSegmentBinder {
      */
     public static SetAssignmentSegment bind(final SetAssignmentSegment 
segment, final SQLStatementBinderContext binderContext,
                                             final Map<String, 
TableSegmentBinderContext> tableBinderContexts, final Map<String, 
TableSegmentBinderContext> outerTableBinderContexts) {
-        Collection<ColumnAssignmentSegment> assignments = 
segment.getAssignments().stream()
-                .map(each -> createColumnAssignmentSegment(each, 
binderContext, tableBinderContexts, 
outerTableBinderContexts)).collect(Collectors.toList());
-        return new SetAssignmentSegment(segment.getStartIndex(), 
segment.getStopIndex(), assignments);
+        return new SetAssignmentSegment(segment.getStartIndex(), 
segment.getStopIndex(), segment.getAssignments().stream()
+                .map(each -> bindColumnAssignmentSegment(each, binderContext, 
tableBinderContexts, outerTableBinderContexts)).collect(Collectors.toList()));
     }
     
-    private static ColumnAssignmentSegment createColumnAssignmentSegment(final 
ColumnAssignmentSegment columnAssignmentSegment, final 
SQLStatementBinderContext binderContext,
-                                                                         final 
Map<String, TableSegmentBinderContext> tableBinderContexts,
-                                                                         final 
Map<String, TableSegmentBinderContext> outerTableBinderContexts) {
-        return new 
ColumnAssignmentSegment(columnAssignmentSegment.getStartIndex(), 
columnAssignmentSegment.getStopIndex(),
-                bindColumns(columnAssignmentSegment.getColumns(), 
binderContext, tableBinderContexts, outerTableBinderContexts),
-                bindValue(columnAssignmentSegment.getValue(), binderContext, 
tableBinderContexts, outerTableBinderContexts));
-    }
-    
-    private static List<ColumnSegment> bindColumns(final List<ColumnSegment> 
columns, final SQLStatementBinderContext binderContext,
-                                                   final Map<String, 
TableSegmentBinderContext> tableBinderContexts, final Map<String, 
TableSegmentBinderContext> outerTableBinderContexts) {
-        return columns.stream().map(each -> ColumnSegmentBinder.bind(each, 
SegmentType.SET_ASSIGNMENT, binderContext, tableBinderContexts, 
outerTableBinderContexts)).collect(Collectors.toList());
-    }
-    
-    private static ExpressionSegment bindValue(final ExpressionSegment value, 
final SQLStatementBinderContext binderContext,
-                                               final Map<String, 
TableSegmentBinderContext> tableBinderContexts, final Map<String, 
TableSegmentBinderContext> outerTableBinderContexts) {
-        return ExpressionSegmentBinder.bind(value, SegmentType.SET_ASSIGNMENT, 
binderContext, tableBinderContexts, outerTableBinderContexts);
+    private static ColumnAssignmentSegment bindColumnAssignmentSegment(final 
ColumnAssignmentSegment columnAssignmentSegment, final 
SQLStatementBinderContext binderContext,
+                                                                       final 
Map<String, TableSegmentBinderContext> tableBinderContexts,
+                                                                       final 
Map<String, TableSegmentBinderContext> outerTableBinderContexts) {
+        List<ColumnSegment> boundColumns = 
columnAssignmentSegment.getColumns().stream()
+                .map(each -> ColumnSegmentBinder.bind(each, 
SegmentType.SET_ASSIGNMENT, binderContext, tableBinderContexts, 
outerTableBinderContexts)).collect(Collectors.toList());
+        ExpressionSegment boundValue = 
ExpressionSegmentBinder.bind(columnAssignmentSegment.getValue(), 
SegmentType.SET_ASSIGNMENT, binderContext, tableBinderContexts, 
outerTableBinderContexts);
+        return new 
ColumnAssignmentSegment(columnAssignmentSegment.getStartIndex(), 
columnAssignmentSegment.getStopIndex(), boundColumns, boundValue);
     }
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/column/InsertColumnsSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/column/InsertColumnsSegmentBinder.java
index a0ae9ef0bc7..9ddebeaa490 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/column/InsertColumnsSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/column/InsertColumnsSegmentBinder.java
@@ -28,8 +28,8 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.In
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Insert columns segment binder.
@@ -45,10 +45,9 @@ public final class InsertColumnsSegmentBinder {
      * @param tableBinderContexts table binder contexts
      * @return bound insert columns segment
      */
-    public static InsertColumnsSegment bind(final InsertColumnsSegment 
segment, final SQLStatementBinderContext binderContext,
-                                            final Map<String, 
TableSegmentBinderContext> tableBinderContexts) {
-        Collection<ColumnSegment> boundColumns = new LinkedList<>();
-        segment.getColumns().forEach(each -> 
boundColumns.add(ColumnSegmentBinder.bind(each, SegmentType.INSERT_COLUMNS, 
binderContext, tableBinderContexts, Collections.emptyMap())));
+    public static InsertColumnsSegment bind(final InsertColumnsSegment 
segment, final SQLStatementBinderContext binderContext, final Map<String, 
TableSegmentBinderContext> tableBinderContexts) {
+        Collection<ColumnSegment> boundColumns = segment.getColumns().stream()
+                .map(each -> ColumnSegmentBinder.bind(each, 
SegmentType.INSERT_COLUMNS, binderContext, tableBinderContexts, 
Collections.emptyMap())).collect(Collectors.toList());
         return new InsertColumnsSegment(segment.getStartIndex(), 
segment.getStopIndex(), boundColumns);
     }
 }
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 2dc34e973d0..53da572bec5 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
@@ -19,15 +19,10 @@ package 
org.apache.shardingsphere.infra.binder.segment.combine;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementBinder;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
-
-import java.util.Map;
 
 /**
  * Combine segment binder.
@@ -43,26 +38,17 @@ public final class CombineSegmentBinder {
      * @return bound combine segment
      */
     public static CombineSegment bind(final CombineSegment segment, final 
SQLStatementBinderContext binderContext) {
-        ShardingSphereMetaData metaData = binderContext.getMetaData();
-        String currentDatabaseName = binderContext.getCurrentDatabaseName();
-        Map<String, TableSegmentBinderContext> externalTableBinderContexts = 
binderContext.getExternalTableBinderContexts();
-        SelectStatement boundLeftSelect = new SelectStatementBinder().bind(
-                segment.getLeft().getSelect(), 
createBinderContext(segment.getLeft().getSelect(), metaData, 
currentDatabaseName, externalTableBinderContexts));
-        SelectStatement boundRightSelect = new SelectStatementBinder().bind(
-                segment.getRight().getSelect(), 
createBinderContext(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 boundRight = new 
SubquerySegment(segment.getRight().getStartIndex(), 
segment.getRight().getStopIndex(), segment.getRight().getText());
-        boundRight.setSelect(boundRightSelect);
-        boundRight.setSubqueryType(segment.getRight().getSubqueryType());
-        return new CombineSegment(segment.getStartIndex(), 
segment.getStopIndex(), boundLeft, segment.getCombineType(), boundRight);
+        return new CombineSegment(segment.getStartIndex(), 
segment.getStopIndex(),
+                bindSubquerySegment(segment.getLeft(), binderContext), 
segment.getCombineType(), bindSubquerySegment(segment.getRight(), 
binderContext));
     }
     
-    private static SQLStatementBinderContext createBinderContext(final 
SelectStatement select, final ShardingSphereMetaData metaData,
-                                                                 final String 
currentDatabaseName, final Map<String, TableSegmentBinderContext> 
externalTableBinderContexts) {
-        SQLStatementBinderContext result = new 
SQLStatementBinderContext(select, metaData, currentDatabaseName);
-        
result.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
+    private static SubquerySegment bindSubquerySegment(final SubquerySegment 
segment, final SQLStatementBinderContext binderContext) {
+        SubquerySegment result = new SubquerySegment(segment.getStartIndex(), 
segment.getStopIndex(), segment.getText());
+        result.setSubqueryType(segment.getSubqueryType());
+        SQLStatementBinderContext subqueryBinderContext = new 
SQLStatementBinderContext(segment.getSelect(), binderContext.getMetaData(), 
binderContext.getCurrentDatabaseName());
+        
subqueryBinderContext.getExternalTableBinderContexts().putAll(binderContext.getExternalTableBinderContexts());
+        result.setSelect(new SelectStatementBinder().bind(segment.getSelect(), 
subqueryBinderContext));
         return result;
     }
+    
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/lock/LockSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/lock/LockSegmentBinder.java
index dfb8dcbfdb4..04e37d34acd 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/lock/LockSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/lock/LockSegmentBinder.java
@@ -23,12 +23,10 @@ import 
org.apache.shardingsphere.infra.binder.segment.SegmentType;
 import 
org.apache.shardingsphere.infra.binder.segment.expression.impl.ColumnSegmentBinder;
 import 
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementBinderContext;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.LockSegment;
 
-import java.util.Collection;
-import java.util.LinkedList;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Lock segment binder.
@@ -47,11 +45,10 @@ public final class LockSegmentBinder {
      */
     public static LockSegment bind(final LockSegment segment, final 
SQLStatementBinderContext binderContext,
                                    final Map<String, 
TableSegmentBinderContext> tableBinderContexts, final Map<String, 
TableSegmentBinderContext> outerTableBinderContexts) {
-        Collection<ColumnSegment> boundColumns = new LinkedList<>();
-        segment.getColumns().forEach(each -> 
boundColumns.add(ColumnSegmentBinder.bind(each, SegmentType.LOCK, 
binderContext, tableBinderContexts, outerTableBinderContexts)));
         LockSegment result = new LockSegment(segment.getStartIndex(), 
segment.getStopIndex());
         result.getTables().addAll(segment.getTables());
-        result.getColumns().addAll(boundColumns);
+        result.getColumns().addAll(segment.getColumns().stream()
+                .map(each -> ColumnSegmentBinder.bind(each, SegmentType.LOCK, 
binderContext, tableBinderContexts, 
outerTableBinderContexts)).collect(Collectors.toList()));
         return result;
     }
 }

Reply via email to