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;
}
}