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) {