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 d9133601c4c Refactor ShadowDMLStatementDataSourceMappingsRetriever
(#33568)
d9133601c4c is described below
commit d9133601c4ce28a483f5848c3e0ece9092d14a2d
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Nov 6 19:48:07 2024 +0800
Refactor ShadowDMLStatementDataSourceMappingsRetriever (#33568)
---
...dowDMLStatementDataSourceMappingsRetriever.java | 30 +++++++---------------
.../ShadowColumnDataSourceMappingsRetriever.java | 8 ------
...DeleteStatementDataSourceMappingsRetriever.java | 8 +++---
...InsertStatementDataSourceMappingsRetriever.java | 8 +++---
...SelectStatementDataSourceMappingsRetriever.java | 9 ++++---
...UpdateStatementDataSourceMappingsRetriever.java | 8 +++---
6 files changed, 26 insertions(+), 45 deletions(-)
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/ShadowDMLStatementDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/ShadowDMLStatementDataSourceMappingsRetriever.java
index b42cefe8815..861ca0cde3c 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/ShadowDMLStatementDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/ShadowDMLStatementDataSourceMappingsRetriever.java
@@ -33,10 +33,8 @@ import
org.apache.shardingsphere.shadow.route.retriever.dml.table.column.ShadowU
import
org.apache.shardingsphere.shadow.route.retriever.dml.table.hint.ShadowTableHintDataSourceMappingsRetriever;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
import org.apache.shardingsphere.shadow.spi.ShadowOperationType;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
import java.util.Collection;
-import java.util.LinkedHashMap;
import java.util.Map;
/**
@@ -45,47 +43,37 @@ import java.util.Map;
@HighFrequencyInvocation
public final class ShadowDMLStatementDataSourceMappingsRetriever implements
ShadowDataSourceMappingsRetriever {
- private final Map<String, String> tableAliasAndNameMappings;
+ private final Map<String, String> tableAliasNameMap;
private final ShadowTableHintDataSourceMappingsRetriever
tableHintDataSourceMappingsRetriever;
private final ShadowColumnDataSourceMappingsRetriever
shadowColumnDataSourceMappingsRetriever;
public ShadowDMLStatementDataSourceMappingsRetriever(final QueryContext
queryContext, final ShadowOperationType operationType) {
- tableAliasAndNameMappings =
getTableAliasAndNameMappings(((TableAvailable)
queryContext.getSqlStatementContext()).getTablesContext().getSimpleTables());
+ tableAliasNameMap = ((TableAvailable)
queryContext.getSqlStatementContext()).getTablesContext().getTableAliasNameMap();
tableHintDataSourceMappingsRetriever = new
ShadowTableHintDataSourceMappingsRetriever(operationType,
queryContext.getHintValueContext().isShadow());
- shadowColumnDataSourceMappingsRetriever =
createShadowDataSourceMappingsRetriever(queryContext,
tableAliasAndNameMappings);
+ shadowColumnDataSourceMappingsRetriever =
createShadowDataSourceMappingsRetriever(queryContext);
}
- private Map<String, String> getTableAliasAndNameMappings(final
Collection<SimpleTableSegment> tableSegments) {
- Map<String, String> result = new LinkedHashMap<>(tableSegments.size(),
1F);
- for (SimpleTableSegment each : tableSegments) {
- String tableName = each.getTableName().getIdentifier().getValue();
- String alias = each.getAliasName().isPresent() ?
each.getAliasName().get() : tableName;
- result.put(alias, tableName);
- }
- return result;
- }
-
- private ShadowColumnDataSourceMappingsRetriever
createShadowDataSourceMappingsRetriever(final QueryContext queryContext, final
Map<String, String> tableAliasAndNameMappings) {
+ private ShadowColumnDataSourceMappingsRetriever
createShadowDataSourceMappingsRetriever(final QueryContext queryContext) {
if (queryContext.getSqlStatementContext() instanceof
InsertStatementContext) {
- return new
ShadowInsertStatementDataSourceMappingsRetriever((InsertStatementContext)
queryContext.getSqlStatementContext(), tableAliasAndNameMappings);
+ return new
ShadowInsertStatementDataSourceMappingsRetriever((InsertStatementContext)
queryContext.getSqlStatementContext());
}
if (queryContext.getSqlStatementContext() instanceof
DeleteStatementContext) {
- return new
ShadowDeleteStatementDataSourceMappingsRetriever((DeleteStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
tableAliasAndNameMappings);
+ return new
ShadowDeleteStatementDataSourceMappingsRetriever((DeleteStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters());
}
if (queryContext.getSqlStatementContext() instanceof
UpdateStatementContext) {
- return new
ShadowUpdateStatementDataSourceMappingsRetriever((UpdateStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
tableAliasAndNameMappings);
+ return new
ShadowUpdateStatementDataSourceMappingsRetriever((UpdateStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters());
}
if (queryContext.getSqlStatementContext() instanceof
SelectStatementContext) {
- return new
ShadowSelectStatementDataSourceMappingsRetriever((SelectStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
tableAliasAndNameMappings);
+ return new
ShadowSelectStatementDataSourceMappingsRetriever((SelectStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters());
}
return null;
}
@Override
public Map<String, String> retrieve(final ShadowRule rule) {
- Collection<String> shadowTables =
rule.filterShadowTables(tableAliasAndNameMappings.values());
+ Collection<String> shadowTables =
rule.filterShadowTables(tableAliasNameMap.values());
Map<String, String> result =
tableHintDataSourceMappingsRetriever.retrieve(rule, shadowTables);
return result.isEmpty() && null !=
shadowColumnDataSourceMappingsRetriever ?
shadowColumnDataSourceMappingsRetriever.retrieve(rule, shadowTables) : result;
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowColumnDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowColumnDataSourceMappingsRetriever.java
index 9b2cd178511..1b3552d57fc 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowColumnDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowColumnDataSourceMappingsRetriever.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.shadow.route.retriever.dml.table.column;
-import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import org.apache.shardingsphere.shadow.condition.ShadowColumnCondition;
@@ -41,9 +40,6 @@ public abstract class ShadowColumnDataSourceMappingsRetriever
implements ShadowT
private final ShadowOperationType operationType;
- @Getter
- private final Map<String, String> tableAliasAndNameMappings;
-
@Override
public Map<String, String> retrieve(final ShadowRule rule, final
Collection<String> shadowTables) {
for (String each : shadowTables) {
@@ -87,8 +83,4 @@ public abstract class ShadowColumnDataSourceMappingsRetriever
implements ShadowT
}
protected abstract Collection<ShadowColumnCondition>
getShadowColumnConditions(String shadowColumnName);
-
- protected final String getSingleTableName() {
- return tableAliasAndNameMappings.values().iterator().next();
- }
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowDeleteStatementDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowDeleteStatementDataSourceMappingsRetriever.java
index 432d75d2793..1064e7b9c7a 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowDeleteStatementDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowDeleteStatementDataSourceMappingsRetriever.java
@@ -30,7 +30,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.util.ExpressionExtrac
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
/**
* Shadow delete statement data source mappings retriever.
@@ -42,8 +41,8 @@ public final class
ShadowDeleteStatementDataSourceMappingsRetriever extends Shad
private final List<Object> parameters;
- public ShadowDeleteStatementDataSourceMappingsRetriever(final
DeleteStatementContext sqlStatementContext, final List<Object> parameters,
final Map<String, String> tableAliasAndNameMappings) {
- super(ShadowOperationType.DELETE, tableAliasAndNameMappings);
+ public ShadowDeleteStatementDataSourceMappingsRetriever(final
DeleteStatementContext sqlStatementContext, final List<Object> parameters) {
+ super(ShadowOperationType.DELETE);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
}
@@ -52,7 +51,8 @@ public final class
ShadowDeleteStatementDataSourceMappingsRetriever extends Shad
protected Collection<ShadowColumnCondition>
getShadowColumnConditions(final String shadowColumnName) {
Collection<ShadowColumnCondition> result = new LinkedList<>();
for (ExpressionSegment each : getWhereSegment()) {
- ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(getSingleTableName(), shadowColumnName,
values)).ifPresent(result::add);
+ String tableName =
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
+ ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(tableName, shadowColumnName,
values)).ifPresent(result::add);
}
return result;
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowInsertStatementDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowInsertStatementDataSourceMappingsRetriever.java
index 3a920f9ef8d..5f3f6da36cb 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowInsertStatementDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowInsertStatementDataSourceMappingsRetriever.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.shadow.spi.ShadowOperationType;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
/**
* Shadow insert statement data source mappings retriever.
@@ -38,8 +37,8 @@ public final class
ShadowInsertStatementDataSourceMappingsRetriever extends Shad
private final InsertStatementContext sqlStatementContext;
- public ShadowInsertStatementDataSourceMappingsRetriever(final
InsertStatementContext sqlStatementContext, final Map<String, String>
tableAliasAndNameMappings) {
- super(ShadowOperationType.INSERT, tableAliasAndNameMappings);
+ public ShadowInsertStatementDataSourceMappingsRetriever(final
InsertStatementContext sqlStatementContext) {
+ super(ShadowOperationType.INSERT);
this.sqlStatementContext = sqlStatementContext;
}
@@ -54,7 +53,8 @@ public final class
ShadowInsertStatementDataSourceMappingsRetriever extends Shad
}
Collection<Comparable<?>> columnValues =
getColumnValues(sqlStatementContext.getInsertValueContexts(), columnIndex);
columnIndex++;
- result.add(new ShadowColumnCondition(getSingleTableName(), each,
columnValues));
+ String tableName =
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
+ result.add(new ShadowColumnCondition(tableName, each,
columnValues));
}
return result;
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowSelectStatementDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowSelectStatementDataSourceMappingsRetriever.java
index e0a2caa0ea4..b7e767e3cac 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowSelectStatementDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowSelectStatementDataSourceMappingsRetriever.java
@@ -33,7 +33,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.util.ExpressionExtrac
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
/**
@@ -46,8 +45,8 @@ public final class
ShadowSelectStatementDataSourceMappingsRetriever extends Shad
private final List<Object> parameters;
- public ShadowSelectStatementDataSourceMappingsRetriever(final
SelectStatementContext sqlStatementContext, final List<Object> parameters,
final Map<String, String> tableAliasAndNameMappings) {
- super(ShadowOperationType.SELECT, tableAliasAndNameMappings);
+ public ShadowSelectStatementDataSourceMappingsRetriever(final
SelectStatementContext sqlStatementContext, final List<Object> parameters) {
+ super(ShadowOperationType.SELECT);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
}
@@ -77,6 +76,8 @@ public final class
ShadowSelectStatementDataSourceMappingsRetriever extends Shad
private String getOwnerTableName(final ColumnSegment columnSegment) {
Optional<OwnerSegment> owner = columnSegment.getOwner();
- return owner.isPresent() ?
getTableAliasAndNameMappings().get(owner.get().getIdentifier().getValue()) :
getTableAliasAndNameMappings().values().iterator().next();
+ return owner.isPresent()
+ ?
sqlStatementContext.getTablesContext().getTableAliasNameMap().get(owner.get().getIdentifier().getValue())
+ :
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowUpdateStatementDataSourceMappingsRetriever.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowUpdateStatementDataSourceMappingsRetriever.java
index a9c8d31fdba..ef143b67fe1 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowUpdateStatementDataSourceMappingsRetriever.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/retriever/dml/table/column/ShadowUpdateStatementDataSourceMappingsRetriever.java
@@ -32,7 +32,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.util.ExpressionExtrac
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
/**
* Shadow update statement data source mappings retriever.
@@ -44,8 +43,8 @@ public final class
ShadowUpdateStatementDataSourceMappingsRetriever extends Shad
private final List<Object> parameters;
- public ShadowUpdateStatementDataSourceMappingsRetriever(final
UpdateStatementContext sqlStatementContext, final List<Object> parameters,
final Map<String, String> tableAliasAndNameMappings) {
- super(ShadowOperationType.UPDATE, tableAliasAndNameMappings);
+ public ShadowUpdateStatementDataSourceMappingsRetriever(final
UpdateStatementContext sqlStatementContext, final List<Object> parameters) {
+ super(ShadowOperationType.UPDATE);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
}
@@ -58,7 +57,8 @@ public final class
ShadowUpdateStatementDataSourceMappingsRetriever extends Shad
if (1 != columns.size()) {
continue;
}
- ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(getSingleTableName(), shadowColumnName,
values)).ifPresent(result::add);
+ String tableName =
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
+ ShadowExtractor.extractValues(each, parameters).map(values -> new
ShadowColumnCondition(tableName, shadowColumnName,
values)).ifPresent(result::add);
}
return result;
}