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 bb6f5da9a95 Refactor SQLStatementBinderContext (#32049)
bb6f5da9a95 is described below
commit bb6f5da9a959fb4730e683c50ab5ae3949bce707
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jul 10 00:05:29 2024 +0800
Refactor SQLStatementBinderContext (#32049)
* Refactor SelectStatementBinder
* Revise javadoc
* Refactor SQLStatementBinderContext
* Refactor SQLStatementBinderContext
---
.../binder/segment/combine/CombineSegmentBinder.java | 16 ++++++++--------
.../infra/binder/segment/where/WhereSegmentBinder.java | 2 +-
.../binder/statement/SQLStatementBinderContext.java | 8 ++++++++
.../binder/statement/dml/DeleteStatementBinder.java | 2 +-
.../binder/statement/dml/InsertStatementBinder.java | 2 +-
.../infra/binder/statement/dml/MergeStatementBinder.java | 2 +-
.../binder/statement/dml/SelectStatementBinder.java | 2 +-
.../binder/statement/dml/UpdateStatementBinder.java | 2 +-
8 files changed, 22 insertions(+), 14 deletions(-)
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 d2e83429fe8..b15c09dcc00 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
@@ -40,20 +40,20 @@ public final class CombineSegmentBinder {
*
* @param segment table segment
* @param statementBinderContext statement binder context
- * @return bounded combine segment
+ * @return bound combine segment
*/
public static CombineSegment bind(final CombineSegment segment, final
SQLStatementBinderContext statementBinderContext) {
ShardingSphereMetaData metaData = statementBinderContext.getMetaData();
String currentDatabaseName =
statementBinderContext.getCurrentDatabaseName();
Map<String, TableSegmentBinderContext> externalTableBinderContexts =
statementBinderContext.getExternalTableBinderContexts();
- SelectStatement boundedLeftSelect = new
SelectStatementBinder().bind(segment.getLeft().getSelect(), metaData,
currentDatabaseName, externalTableBinderContexts);
- SelectStatement boundedRightSelect = new
SelectStatementBinder().bind(segment.getRight().getSelect(), metaData,
currentDatabaseName, externalTableBinderContexts);
- SubquerySegment boundedLeft = new
SubquerySegment(segment.getLeft().getStartIndex(),
segment.getLeft().getStopIndex(), segment.getLeft().getText());
- boundedLeft.setSelect(boundedLeftSelect);
- boundedLeft.setSubqueryType(segment.getLeft().getSubqueryType());
+ SelectStatement boundLeftSelect = new
SelectStatementBinder().bind(segment.getLeft().getSelect(), metaData,
currentDatabaseName, externalTableBinderContexts);
+ SelectStatement boundRightSelect = new
SelectStatementBinder().bind(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 boundedRight = new
SubquerySegment(segment.getRight().getStartIndex(),
segment.getRight().getStopIndex(), segment.getRight().getText());
- boundedRight.setSelect(boundedRightSelect);
+ boundedRight.setSelect(boundRightSelect);
boundedRight.setSubqueryType(segment.getRight().getSubqueryType());
- return new CombineSegment(segment.getStartIndex(),
segment.getStopIndex(), boundedLeft, segment.getCombineType(), boundedRight);
+ return new CombineSegment(segment.getStartIndex(),
segment.getStopIndex(), boundLeft, segment.getCombineType(), boundedRight);
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
index e55c7c59368..bea86e2fdd5 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/where/WhereSegmentBinder.java
@@ -40,7 +40,7 @@ public final class WhereSegmentBinder {
* @param statementBinderContext statement binder context
* @param tableBinderContexts table binder contexts
* @param outerTableBinderContexts outer table binder contexts
- * @return bounded where segment
+ * @return bound where segment
*/
public static WhereSegment bind(final WhereSegment segment, final
SQLStatementBinderContext statementBinderContext,
final Map<String,
TableSegmentBinderContext> tableBinderContexts, final Map<String,
TableSegmentBinderContext> outerTableBinderContexts) {
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
index 9d11941e826..b29c36714b6 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/SQLStatementBinderContext.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderCon
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import java.util.Collection;
import java.util.HashSet;
@@ -52,4 +53,11 @@ public final class SQLStatementBinderContext {
private final Map<String, TableSegmentBinderContext>
externalTableBinderContexts = new CaseInsensitiveMap<>();
private final Collection<String> pivotColumnNames = new HashSet<>();
+
+ public SQLStatementBinderContext(final SQLStatement sqlStatement, final
ShardingSphereMetaData metaData, final String currentDatabaseName) {
+ this.metaData = metaData;
+ this.currentDatabaseName = currentDatabaseName;
+ databaseType = sqlStatement.getDatabaseType();
+ variableNames = sqlStatement.getVariableNames();
+ }
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
index 864268029b4..be35eae4d0b 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/DeleteStatementBinder.java
@@ -44,7 +44,7 @@ public final class DeleteStatementBinder implements
SQLStatementBinder<DeleteSta
final Map<String, TableSegmentBinderContext>
externalTableBinderContexts) {
DeleteStatement result = copy(sqlStatement);
Map<String, TableSegmentBinderContext> tableBinderContexts = new
LinkedHashMap<>();
- SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(metaData, currentDatabaseName,
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+ SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
result.setTable(TableSegmentBinder.bind(sqlStatement.getTable(),
statementBinderContext, tableBinderContexts, Collections.emptyMap()));
sqlStatement.getWhere().ifPresent(optional ->
result.setWhere(WhereSegmentBinder.bind(optional, statementBinderContext,
tableBinderContexts, Collections.emptyMap())));
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
index 895d120412b..de385645322 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/InsertStatementBinder.java
@@ -50,7 +50,7 @@ public final class InsertStatementBinder implements
SQLStatementBinder<InsertSta
private InsertStatement bind(final InsertStatement sqlStatement, final
ShardingSphereMetaData metaData, final String currentDatabaseName,
final Map<String, TableSegmentBinderContext>
externalTableBinderContexts) {
InsertStatement result = copy(sqlStatement);
- SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(metaData, currentDatabaseName,
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+ SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
Map<String, TableSegmentBinderContext> tableBinderContexts = new
LinkedHashMap<>();
Optional.ofNullable(sqlStatement.getTable()).ifPresent(optional ->
result.setTable(SimpleTableSegmentBinder.bind(optional, statementBinderContext,
tableBinderContexts)));
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
index 721c6f48d87..1b177ffb710 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/MergeStatementBinder.java
@@ -70,7 +70,7 @@ public final class MergeStatementBinder implements
SQLStatementBinder<MergeState
private MergeStatement bind(final MergeStatement sqlStatement, final
ShardingSphereMetaData metaData, final String currentDatabaseName,
final Map<String, TableSegmentBinderContext>
externalTableBinderContexts) {
MergeStatement result = copy(sqlStatement);
- SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(metaData, currentDatabaseName,
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+ SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
Map<String, TableSegmentBinderContext> targetTableBinderContexts = new
CaseInsensitiveMap<>();
TableSegment boundedTargetTableSegment =
TableSegmentBinder.bind(sqlStatement.getTarget(), statementBinderContext,
targetTableBinderContexts, Collections.emptyMap());
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
index a663d2f6945..a4f9ce4f8ba 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/SelectStatementBinder.java
@@ -79,7 +79,7 @@ public final class SelectStatementBinder implements
SQLStatementBinder<SelectSta
final Map<String, TableSegmentBinderContext>
outerTableBinderContexts, final Map<String, TableSegmentBinderContext>
externalTableBinderContexts) {
SelectStatement result = copy(sqlStatement);
Map<String, TableSegmentBinderContext> tableBinderContexts = new
LinkedHashMap<>();
- SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(metaData, currentDatabaseName,
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+ SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
sqlStatement.getWithSegment()
.ifPresent(optional ->
result.setWithSegment(WithSegmentBinder.bind(optional, statementBinderContext,
tableBinderContexts, statementBinderContext.getExternalTableBinderContexts())));
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
index da11801941f..104913ec9b5 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dml/UpdateStatementBinder.java
@@ -46,7 +46,7 @@ public final class UpdateStatementBinder implements
SQLStatementBinder<UpdateSta
final Map<String, TableSegmentBinderContext>
externalTableBinderContexts) {
UpdateStatement result = copy(sqlStatement);
Map<String, TableSegmentBinderContext> tableBinderContexts = new
LinkedHashMap<>();
- SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(metaData, currentDatabaseName,
sqlStatement.getDatabaseType(), sqlStatement.getVariableNames());
+ SQLStatementBinderContext statementBinderContext = new
SQLStatementBinderContext(sqlStatement, metaData, currentDatabaseName);
statementBinderContext.getExternalTableBinderContexts().putAll(externalTableBinderContexts);
TableSegment boundedTableSegment =
TableSegmentBinder.bind(sqlStatement.getTable(), statementBinderContext,
tableBinderContexts, Collections.emptyMap());
result.setTable(boundedTableSegment);