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 60fcffbe23c Refactor ColumnSegmentBinder (#32096)
60fcffbe23c is described below

commit 60fcffbe23c841fc56694b332959efec67bf04e3
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 14 13:45:47 2024 +0800

    Refactor ColumnSegmentBinder (#32096)
---
 .../expression/type/ColumnSegmentBinder.java       | 35 +++++++++-------------
 1 file changed, 14 insertions(+), 21 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/ColumnSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/ColumnSegmentBinder.java
index e769ed5faf6..18fe0ad7cda 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/ColumnSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/expression/type/ColumnSegmentBinder.java
@@ -22,13 +22,13 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.groovy.util.Maps;
 import org.apache.shardingsphere.infra.binder.engine.segment.SegmentType;
+import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.type.FunctionTableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.type.SimpleTableSegmentBinderContext;
-import 
org.apache.shardingsphere.infra.binder.engine.segment.from.context.TableSegmentBinderContext;
 import 
org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinderContext;
-import 
org.apache.shardingsphere.infra.exception.kernel.syntax.AmbiguousColumnException;
-import 
org.apache.shardingsphere.infra.exception.kernel.metadata.ColumnNotFoundException;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.ColumnNotFoundException;
+import 
org.apache.shardingsphere.infra.exception.kernel.syntax.AmbiguousColumnException;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
@@ -39,12 +39,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
-import java.util.LinkedList;
+import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * Column segment binder.
@@ -246,26 +246,19 @@ public final class ColumnSegmentBinder {
      * @return bound using column segment
      */
     public static ColumnSegment bindUsingColumn(final ColumnSegment segment, 
final SegmentType parentSegmentType, final Map<String, 
TableSegmentBinderContext> tableBinderContexts) {
-        ColumnSegment result = new ColumnSegment(segment.getStartIndex(), 
segment.getStopIndex(), segment.getIdentifier());
-        segment.getOwner().ifPresent(result::setOwner);
-        Collection<TableSegmentBinderContext> tableBinderContextValues = 
tableBinderContexts.values();
-        Collection<ColumnSegment> usingInputColumnSegments = 
findUsingInputColumnSegments(segment.getIdentifier().getValue(), 
tableBinderContextValues);
+        ColumnSegment result = copy(segment);
+        List<ColumnSegment> usingInputColumnSegments = 
findUsingInputColumnSegments(segment.getIdentifier().getValue(), 
tableBinderContexts.values());
         ShardingSpherePreconditions.checkState(usingInputColumnSegments.size() 
>= 2,
                 () -> new ColumnNotFoundException(segment.getExpression(), 
SEGMENT_TYPE_MESSAGES.getOrDefault(parentSegmentType, 
UNKNOWN_SEGMENT_TYPE_MESSAGE)));
-        Iterator<ColumnSegment> iterator = usingInputColumnSegments.iterator();
-        result.setColumnBoundInfo(createColumnSegmentBoundInfo(segment, 
iterator.next()));
-        
result.setOtherUsingColumnBoundInfo(createColumnSegmentBoundInfo(segment, 
iterator.next()));
+        result.setColumnBoundInfo(createColumnSegmentBoundInfo(segment, 
usingInputColumnSegments.get(0)));
+        
result.setOtherUsingColumnBoundInfo(createColumnSegmentBoundInfo(segment, 
usingInputColumnSegments.get(1)));
         return result;
     }
     
-    private static Collection<ColumnSegment> 
findUsingInputColumnSegments(final String columnName, final 
Collection<TableSegmentBinderContext> tableBinderContexts) {
-        Collection<ColumnSegment> result = new LinkedList<>();
-        for (TableSegmentBinderContext each : tableBinderContexts) {
-            Optional<ProjectionSegment> projectionSegment = 
each.findProjectionSegmentByColumnLabel(columnName);
-            if (projectionSegment.isPresent() && projectionSegment.get() 
instanceof ColumnProjectionSegment) {
-                result.add(((ColumnProjectionSegment) 
projectionSegment.get()).getColumn());
-            }
-        }
-        return result;
+    private static List<ColumnSegment> findUsingInputColumnSegments(final 
String columnName, final Collection<TableSegmentBinderContext> 
tableBinderContexts) {
+        return tableBinderContexts.stream()
+                .map(each -> 
each.findProjectionSegmentByColumnLabel(columnName))
+                .filter(optional -> optional.isPresent() && optional.get() 
instanceof ColumnProjectionSegment)
+                .map(each -> ((ColumnProjectionSegment) 
each.get()).getColumn()).collect(Collectors.toList());
     }
 }

Reply via email to