This is an automated email from the ASF dual-hosted git repository.

tuichenchuxin 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 55207f0e2e8 Identify variables from columns (#28382)
55207f0e2e8 is described below

commit 55207f0e2e8383225cbef37ed91789d50367561a
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Sep 8 09:57:04 2023 +0800

    Identify variables from columns (#28382)
    
    * Identify variables from columns
    
    * fix
---
 .../expression/impl/ColumnSegmentBinder.java       | 17 +++++++---------
 .../segment/from/TableSegmentBinderContext.java    | 23 ----------------------
 .../from/impl/SimpleTableSegmentBinder.java        | 18 +----------------
 3 files changed, 8 insertions(+), 50 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/ColumnSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/ColumnSegmentBinder.java
index 9d1875e8b7e..e40ab0fda50 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/ColumnSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/ColumnSegmentBinder.java
@@ -134,7 +134,7 @@ public final class ColumnSegmentBinder {
             isFindInputColumn = result != null;
         }
         if (!isFindInputColumn) {
-            result = findInputColumnSegmentByVariables(segment, 
tableBinderContexts).orElse(null);
+            result = findInputColumnSegmentByVariables(segment, 
statementBinderContext.getVariableNames()).orElse(null);
             isFindInputColumn = result != null;
         }
         ShardingSpherePreconditions.checkState(isFindInputColumn,
@@ -152,16 +152,13 @@ public final class ColumnSegmentBinder {
         return Optional.empty();
     }
     
-    private static Optional<ColumnSegment> 
findInputColumnSegmentByVariables(final ColumnSegment segment, final 
Collection<TableSegmentBinderContext> tableBinderContexts) {
-        ColumnSegment result = null;
-        for (TableSegmentBinderContext each : tableBinderContexts) {
-            ProjectionSegment variableSegment = 
each.getProjectionSegmentByVariableLabel(segment.getIdentifier().getValue());
-            if (variableSegment instanceof ColumnProjectionSegment) {
-                result = ((ColumnProjectionSegment) 
variableSegment).getColumn();
-                break;
-            }
+    private static Optional<ColumnSegment> 
findInputColumnSegmentByVariables(final ColumnSegment segment, final 
Collection<String> variableNames) {
+        if 
(variableNames.contains(segment.getIdentifier().getValue().toLowerCase())) {
+            ColumnSegment result = new ColumnSegment(0, 0, 
segment.getIdentifier());
+            result.setVariable(true);
+            return Optional.of(result);
         }
-        return Optional.ofNullable(result);
+        return Optional.empty();
     }
     
     private static ColumnSegmentBoundedInfo 
createColumnSegmentBoundedInfo(final ColumnSegment segment, final ColumnSegment 
inputColumnSegment) {
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/TableSegmentBinderContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/TableSegmentBinderContext.java
index fdcf634e163..9b4c1fac777 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/TableSegmentBinderContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/TableSegmentBinderContext.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.infra.binder.segment.from;
 
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
@@ -34,9 +33,6 @@ public final class TableSegmentBinderContext {
     
     private final Map<String, ProjectionSegment> columnLabelProjectionSegments;
     
-    @Getter
-    private final Map<String, ProjectionSegment> 
variableLabelProjectionSegments = new LinkedHashMap<>();
-    
     public TableSegmentBinderContext(final Collection<ProjectionSegment> 
projectionSegments) {
         columnLabelProjectionSegments = new 
LinkedHashMap<>(projectionSegments.size(), 1F);
         projectionSegments.forEach(each -> 
putColumnLabelProjectionSegments(each, columnLabelProjectionSegments));
@@ -68,23 +64,4 @@ public final class TableSegmentBinderContext {
     public Collection<ProjectionSegment> getProjectionSegments() {
         return columnLabelProjectionSegments.values();
     }
-    
-    /**
-     * Put projection segment by variable label.
-     * 
-     * @param projectionSegment projection segment
-     */
-    public void putVariableLabelProjectionSegments(final ProjectionSegment 
projectionSegment) {
-        
variableLabelProjectionSegments.put(projectionSegment.getColumnLabel().toLowerCase(),
 projectionSegment);
-    }
-    
-    /**
-     * Get projection segment by variable label.
-     *
-     * @param variableLabel variable label
-     * @return projection segment
-     */
-    public ProjectionSegment getProjectionSegmentByVariableLabel(final String 
variableLabel) {
-        return 
variableLabelProjectionSegments.get(variableLabel.toLowerCase());
-    }
 }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
index 2c26d30e2fd..a2637437074 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
@@ -42,7 +42,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -125,22 +124,7 @@ public final class SimpleTableSegmentBinder {
             columnProjectionSegment.setVisible(each.isVisible());
             projectionSegments.add(columnProjectionSegment);
         }
-        TableSegmentBinderContext result = new 
TableSegmentBinderContext(projectionSegments);
-        getVariableProjectionSegments(segment, originalDatabase, 
originalSchema, statementBinderContext, 
dialectDatabaseMetaData).forEach(result::putVariableLabelProjectionSegments);
-        return result;
-    }
-    
-    private static Collection<ProjectionSegment> 
getVariableProjectionSegments(final SimpleTableSegment segment, final 
IdentifierValue originalDatabase, final IdentifierValue originalSchema,
-                                                                               
final SQLStatementBinderContext statementBinderContext, final 
DialectDatabaseMetaData dialectDatabaseMetaData) {
-        Collection<ProjectionSegment> result = new 
ArrayList<>(statementBinderContext.getVariableNames().size());
-        statementBinderContext.getVariableNames().forEach(each -> {
-            ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue(each, dialectDatabaseMetaData.getQuoteCharacter()));
-            columnSegment.setVariable(true);
-            columnSegment.setColumnBoundedInfo(new 
ColumnSegmentBoundedInfo(originalDatabase, originalSchema, 
segment.getTableName().getIdentifier(),
-                    new IdentifierValue(each, 
dialectDatabaseMetaData.getQuoteCharacter())));
-            result.add(new ColumnProjectionSegment(columnSegment));
-        });
-        return result;
+        return new TableSegmentBinderContext(projectionSegments);
     }
     
     private static void checkTableExists(final String tableName, final 
SQLStatementBinderContext statementBinderContext, final String databaseName, 
final String schemaName) {

Reply via email to