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 58e905c97a9 Add ShadowDataSourceMappingsFinder (#33519)
58e905c97a9 is described below
commit 58e905c97a96a6584c8450b58c1ec79c5076b4d3
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 3 23:52:56 2024 +0800
Add ShadowDataSourceMappingsFinder (#33519)
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
* Add ShadowDataSourceMappingsFinder
---
.../shadow/route/ShadowSQLRouter.java | 5 +-
... => ShadowDataSourceMappingsFinderFactory.java} | 39 +++++++-------
.../route/engine/ShadowRouteContextDecorator.java | 63 ----------------------
.../shadow/route/engine/ShadowRouteEngine.java | 32 ++++++++++-
.../ShadowDataSourceMappingsFinder.java} | 15 +++---
...hadowDMLStatementDataSourceMappingsFinder.java} | 18 +++----
...owDeleteStatementDataSourceMappingsFinder.java} | 8 +--
...owInsertStatementDataSourceMappingsFinder.java} | 8 +--
...owSelectStatementDataSourceMappingsFinder.java} | 8 +--
...owUpdateStatementDataSourceMappingsFinder.java} | 8 +--
...owNonDMLStatementDataSourceMappingsFinder.java} | 24 +++------
.../shardingsphere/shadow/rule/ShadowRule.java | 6 +--
.../route/engine/ShadowRouteEngineFactoryTest.java | 25 ++++-----
.../ShadowNonDMLStatementRouteEngineTest.java | 29 ++--------
.../shardingsphere/shadow/rule/ShadowRuleTest.java | 10 ++--
15 files changed, 115 insertions(+), 183 deletions(-)
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
index ca99c24ac23..2143efaecf7 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/ShadowSQLRouter.java
@@ -24,7 +24,8 @@ import
org.apache.shardingsphere.infra.route.DecorateSQLRouter;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.shadow.constant.ShadowOrder;
-import org.apache.shardingsphere.shadow.route.engine.ShadowRouteEngineFactory;
+import
org.apache.shardingsphere.shadow.route.engine.ShadowDataSourceMappingsFinderFactory;
+import org.apache.shardingsphere.shadow.route.engine.ShadowRouteEngine;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
/**
@@ -36,7 +37,7 @@ public final class ShadowSQLRouter implements
DecorateSQLRouter<ShadowRule> {
@Override
public void decorateRouteContext(final RouteContext routeContext, final
QueryContext queryContext, final ShardingSphereDatabase database,
final ShadowRule rule, final
ConfigurationProperties props) {
- ShadowRouteEngineFactory.newInstance(queryContext).route(routeContext,
rule);
+ new ShadowRouteEngine().route(routeContext, rule,
ShadowDataSourceMappingsFinderFactory.newInstance(queryContext));
}
@Override
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactory.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowDataSourceMappingsFinderFactory.java
similarity index 53%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactory.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowDataSourceMappingsFinderFactory.java
index 47322fee541..52eb12f96b0 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactory.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowDataSourceMappingsFinderFactory.java
@@ -24,11 +24,12 @@ import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatem
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowDeleteStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowInsertStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowSelectStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowUpdateStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.impl.ShadowNonDMLStatementRouteEngine;
+import
org.apache.shardingsphere.shadow.route.engine.finder.ShadowDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowDeleteStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowInsertStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowSelectStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowUpdateStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.other.ShadowNonDMLStatementDataSourceMappingsFinder;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
@@ -36,18 +37,18 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectS
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.UpdateStatement;
/**
- * Shadow routing engine factory.
+ * Shadow data source mappings finder.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ShadowRouteEngineFactory {
+public final class ShadowDataSourceMappingsFinderFactory {
/**
- * Create new instance of shadow route engine.
+ * Create new instance of shadow data source mappings finder.
*
* @param queryContext query context
* @return created instance
*/
- public static ShadowRouteEngine newInstance(final QueryContext
queryContext) {
+ public static ShadowDataSourceMappingsFinder newInstance(final
QueryContext queryContext) {
SQLStatement sqlStatement =
queryContext.getSqlStatementContext().getSqlStatement();
if (sqlStatement instanceof InsertStatement) {
return createShadowInsertStatementRouteEngine(queryContext);
@@ -64,23 +65,23 @@ public final class ShadowRouteEngineFactory {
return createShadowNonMDLStatementRouteEngine(queryContext);
}
- private static ShadowRouteEngine
createShadowNonMDLStatementRouteEngine(final QueryContext queryContext) {
- return new
ShadowNonDMLStatementRouteEngine(queryContext.getHintValueContext());
+ private static ShadowDataSourceMappingsFinder
createShadowNonMDLStatementRouteEngine(final QueryContext queryContext) {
+ return new
ShadowNonDMLStatementDataSourceMappingsFinder(queryContext.getHintValueContext());
}
- private static ShadowRouteEngine
createShadowSelectStatementRouteEngine(final QueryContext queryContext) {
- return new ShadowSelectStatementRouteEngine((SelectStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
+ private static ShadowDataSourceMappingsFinder
createShadowSelectStatementRouteEngine(final QueryContext queryContext) {
+ return new
ShadowSelectStatementDataSourceMappingsFinder((SelectStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
}
- private static ShadowRouteEngine
createShadowUpdateStatementRouteEngine(final QueryContext queryContext) {
- return new ShadowUpdateStatementRouteEngine((UpdateStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
+ private static ShadowDataSourceMappingsFinder
createShadowUpdateStatementRouteEngine(final QueryContext queryContext) {
+ return new
ShadowUpdateStatementDataSourceMappingsFinder((UpdateStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
}
- private static ShadowRouteEngine
createShadowDeleteStatementRouteEngine(final QueryContext queryContext) {
- return new ShadowDeleteStatementRouteEngine((DeleteStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
+ private static ShadowDataSourceMappingsFinder
createShadowDeleteStatementRouteEngine(final QueryContext queryContext) {
+ return new
ShadowDeleteStatementDataSourceMappingsFinder((DeleteStatementContext)
queryContext.getSqlStatementContext(), queryContext.getParameters(),
queryContext.getHintValueContext());
}
- private static ShadowRouteEngine
createShadowInsertStatementRouteEngine(final QueryContext queryContext) {
- return new ShadowInsertStatementRouteEngine((InsertStatementContext)
queryContext.getSqlStatementContext(), queryContext.getHintValueContext());
+ private static ShadowDataSourceMappingsFinder
createShadowInsertStatementRouteEngine(final QueryContext queryContext) {
+ return new
ShadowInsertStatementDataSourceMappingsFinder((InsertStatementContext)
queryContext.getSqlStatementContext(), queryContext.getHintValueContext());
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteContextDecorator.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteContextDecorator.java
deleted file mode 100644
index 85b06be7d69..00000000000
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteContextDecorator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.shadow.route.engine;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
-import org.apache.shardingsphere.infra.route.context.RouteMapper;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
-import org.apache.shardingsphere.shadow.rule.ShadowRule;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * Shadow route context decorator.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ShadowRouteContextDecorator {
-
- /**
- * Decorate route context.
- *
- * @param routeContext route context to be decorated
- * @param rule shadow rule
- * @param shadowDataSourceMappings shadow data source mappings
- */
- public static void decorate(final RouteContext routeContext, final
ShadowRule rule, final Map<String, String> shadowDataSourceMappings) {
- Collection<RouteUnit> toBeRemovedRouteUnit = new LinkedList<>();
- Collection<RouteUnit> toBeAddedRouteUnit = new LinkedList<>();
- for (RouteUnit each : routeContext.getRouteUnits()) {
- String logicName = each.getDataSourceMapper().getLogicName();
- String actualName = each.getDataSourceMapper().getActualName();
- Optional<String> sourceDataSourceName =
rule.getSourceDataSourceName(actualName);
- if (sourceDataSourceName.isPresent()) {
- String shadowDataSourceName =
shadowDataSourceMappings.get(sourceDataSourceName.get());
- toBeRemovedRouteUnit.add(each);
- toBeAddedRouteUnit.add(null == shadowDataSourceName
- ? new RouteUnit(new RouteMapper(logicName,
sourceDataSourceName.get()), each.getTableMappers())
- : new RouteUnit(new RouteMapper(logicName,
shadowDataSourceName), each.getTableMappers()));
- }
- }
- routeContext.getRouteUnits().removeAll(toBeRemovedRouteUnit);
- routeContext.getRouteUnits().addAll(toBeAddedRouteUnit);
- }
-}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
index c81a83124c7..1dae3f8a867 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
@@ -17,19 +17,47 @@
package org.apache.shardingsphere.shadow.route.engine;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import
org.apache.shardingsphere.shadow.route.engine.finder.ShadowDataSourceMappingsFinder;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Optional;
+
/**
* Shadow route engine.
*/
-public interface ShadowRouteEngine {
+@HighFrequencyInvocation
+public final class ShadowRouteEngine {
/**
* Route.
*
* @param routeContext route context
* @param rule shadow rule
+ * @param finder finder
*/
- void route(RouteContext routeContext, ShadowRule rule);
+ public void route(final RouteContext routeContext, final ShadowRule rule,
final ShadowDataSourceMappingsFinder finder) {
+ Collection<RouteUnit> toBeRemovedRouteUnit = new LinkedList<>();
+ Collection<RouteUnit> toBeAddedRouteUnit = new LinkedList<>();
+ Map<String, String> shadowDataSourceMappings = finder.find(rule);
+ for (RouteUnit each : routeContext.getRouteUnits()) {
+ String logicName = each.getDataSourceMapper().getLogicName();
+ String actualName = each.getDataSourceMapper().getActualName();
+ Optional<String> productionDataSourceName =
rule.findProductionDataSourceName(actualName);
+ if (productionDataSourceName.isPresent()) {
+ String shadowDataSourceName =
shadowDataSourceMappings.get(productionDataSourceName.get());
+ toBeRemovedRouteUnit.add(each);
+ String dataSourceName = null == shadowDataSourceName ?
productionDataSourceName.get() : shadowDataSourceName;
+ toBeAddedRouteUnit.add(new RouteUnit(new
RouteMapper(logicName, dataSourceName), each.getTableMappers()));
+ }
+ }
+ routeContext.getRouteUnits().removeAll(toBeRemovedRouteUnit);
+ routeContext.getRouteUnits().addAll(toBeAddedRouteUnit);
+ }
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/ShadowDataSourceMappingsFinder.java
similarity index 74%
copy from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
copy to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/ShadowDataSourceMappingsFinder.java
index c81a83124c7..3bd42e20e3f 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/ShadowDataSourceMappingsFinder.java
@@ -15,21 +15,22 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine;
+package org.apache.shardingsphere.shadow.route.engine.finder;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
+import java.util.Map;
+
/**
- * Shadow route engine.
+ * Shadow data source mappings finder.
*/
-public interface ShadowRouteEngine {
+public interface ShadowDataSourceMappingsFinder {
/**
- * Route.
+ * Find shadow data source mappings.
*
- * @param routeContext route context
* @param rule shadow rule
+ * @return found shadow data source mappings
*/
- void route(RouteContext routeContext, ShadowRule rule);
+ Map<String, String> find(ShadowRule rule);
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/AbstractShadowDMLStatementDataSourceMappingsFinder.java
similarity index 89%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/AbstractShadowDMLStatementDataSourceMappingsFinder.java
index e7d80712218..b3de1fe7d03 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/AbstractShadowDMLStatementDataSourceMappingsFinder.java
@@ -15,20 +15,18 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.dml;
+package org.apache.shardingsphere.shadow.route.engine.finder.dml;
import lombok.Getter;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.hint.HintValueContext;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.shadow.condition.ShadowColumnCondition;
import org.apache.shardingsphere.shadow.condition.ShadowDetermineCondition;
-import
org.apache.shardingsphere.shadow.route.engine.ShadowRouteContextDecorator;
-import org.apache.shardingsphere.shadow.route.engine.ShadowRouteEngine;
import
org.apache.shardingsphere.shadow.route.engine.determiner.ColumnShadowAlgorithmDeterminer;
import
org.apache.shardingsphere.shadow.route.engine.determiner.HintShadowAlgorithmDeterminer;
+import
org.apache.shardingsphere.shadow.route.engine.finder.ShadowDataSourceMappingsFinder;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
import org.apache.shardingsphere.shadow.spi.ShadowOperationType;
@@ -43,10 +41,10 @@ import java.util.Map;
import java.util.Optional;
/**
- * Abstract shadow DML statement route engine.
+ * Abstract shadow DML statement data source mappings finder.
*/
@HighFrequencyInvocation
-public abstract class AbstractShadowDMLStatementRouteEngine implements
ShadowRouteEngine {
+public abstract class AbstractShadowDMLStatementDataSourceMappingsFinder
implements ShadowDataSourceMappingsFinder {
private final ShadowOperationType operationType;
@@ -55,7 +53,7 @@ public abstract class AbstractShadowDMLStatementRouteEngine
implements ShadowRou
@Getter
private final Map<String, String> tableAliasAndNameMappings;
- protected AbstractShadowDMLStatementRouteEngine(final SQLStatementContext
sqlStatementContext, final HintValueContext hintValueContext, final
ShadowOperationType operationType) {
+ protected AbstractShadowDMLStatementDataSourceMappingsFinder(final
SQLStatementContext sqlStatementContext, final HintValueContext
hintValueContext, final ShadowOperationType operationType) {
this.operationType = operationType;
isShadow = hintValueContext.isShadow();
tableAliasAndNameMappings =
getTableAliasAndNameMappings(((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTables());
@@ -72,11 +70,7 @@ public abstract class AbstractShadowDMLStatementRouteEngine
implements ShadowRou
}
@Override
- public final void route(final RouteContext routeContext, final ShadowRule
rule) {
- ShadowRouteContextDecorator.decorate(routeContext, rule,
findShadowDataSourceMappings(rule));
- }
-
- private Map<String, String> findShadowDataSourceMappings(final ShadowRule
rule) {
+ public Map<String, String> find(final ShadowRule rule) {
Collection<String> relatedShadowTables =
rule.getRelatedShadowTables(tableAliasAndNameMappings.values());
if (relatedShadowTables.isEmpty() && isMatchDefaultAlgorithm(rule)) {
return rule.getAllShadowDataSourceMappings();
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowDeleteStatementDataSourceMappingsFinder.java
similarity index 86%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowDeleteStatementDataSourceMappingsFinder.java
index a7cc1015ea2..9c956cb7837 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowDeleteStatementDataSourceMappingsFinder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.dml;
+package org.apache.shardingsphere.shadow.route.engine.finder.dml;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.DeleteStatementContext;
import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -32,15 +32,15 @@ import java.util.LinkedList;
import java.util.List;
/**
- * Shadow delete statement route engine.
+ * Shadow delete statement data source mappings finder.
*/
-public final class ShadowDeleteStatementRouteEngine extends
AbstractShadowDMLStatementRouteEngine {
+public final class ShadowDeleteStatementDataSourceMappingsFinder extends
AbstractShadowDMLStatementDataSourceMappingsFinder {
private final DeleteStatementContext sqlStatementContext;
private final List<Object> parameters;
- public ShadowDeleteStatementRouteEngine(final DeleteStatementContext
sqlStatementContext, final List<Object> parameters, final HintValueContext
hintValueContext) {
+ public ShadowDeleteStatementDataSourceMappingsFinder(final
DeleteStatementContext sqlStatementContext, final List<Object> parameters,
final HintValueContext hintValueContext) {
super(sqlStatementContext, hintValueContext,
ShadowOperationType.DELETE);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowInsertStatementDataSourceMappingsFinder.java
similarity index 88%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowInsertStatementDataSourceMappingsFinder.java
index ba0de55e147..1abc47c5a8d 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowInsertStatementDataSourceMappingsFinder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.dml;
+package org.apache.shardingsphere.shadow.route.engine.finder.dml;
import
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertValueContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
@@ -30,13 +30,13 @@ import java.util.LinkedList;
import java.util.List;
/**
- * Shadow insert statement route engine.
+ * Shadow insert statement data source mappings finder.
*/
-public final class ShadowInsertStatementRouteEngine extends
AbstractShadowDMLStatementRouteEngine {
+public final class ShadowInsertStatementDataSourceMappingsFinder extends
AbstractShadowDMLStatementDataSourceMappingsFinder {
private final InsertStatementContext sqlStatementContext;
- public ShadowInsertStatementRouteEngine(final InsertStatementContext
sqlStatementContext, final HintValueContext hintValueContext) {
+ public ShadowInsertStatementDataSourceMappingsFinder(final
InsertStatementContext sqlStatementContext, final HintValueContext
hintValueContext) {
super(sqlStatementContext, hintValueContext,
ShadowOperationType.INSERT);
this.sqlStatementContext = sqlStatementContext;
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowSelectStatementDataSourceMappingsFinder.java
similarity index 89%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowSelectStatementDataSourceMappingsFinder.java
index 9b2fb561749..6dd87aae743 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowSelectStatementDataSourceMappingsFinder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.dml;
+package org.apache.shardingsphere.shadow.route.engine.finder.dml;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -36,15 +36,15 @@ import java.util.List;
import java.util.Optional;
/**
- * Shadow select statement route engine.
+ * Shadow select statement data source mappings finder.
*/
-public final class ShadowSelectStatementRouteEngine extends
AbstractShadowDMLStatementRouteEngine {
+public final class ShadowSelectStatementDataSourceMappingsFinder extends
AbstractShadowDMLStatementDataSourceMappingsFinder {
private final SelectStatementContext sqlStatementContext;
private final List<Object> parameters;
- public ShadowSelectStatementRouteEngine(final SelectStatementContext
sqlStatementContext, final List<Object> parameters, final HintValueContext
hintValueContext) {
+ public ShadowSelectStatementDataSourceMappingsFinder(final
SelectStatementContext sqlStatementContext, final List<Object> parameters,
final HintValueContext hintValueContext) {
super(sqlStatementContext, hintValueContext,
ShadowOperationType.SELECT);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowUpdateStatementDataSourceMappingsFinder.java
similarity index 88%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowUpdateStatementDataSourceMappingsFinder.java
index 4e65f0a8c16..8bcf3358e94 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/dml/ShadowUpdateStatementDataSourceMappingsFinder.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.dml;
+package org.apache.shardingsphere.shadow.route.engine.finder.dml;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -34,15 +34,15 @@ import java.util.LinkedList;
import java.util.List;
/**
- * Shadow update statement route engine.
+ * Shadow update statement data source mappings finder.
*/
-public final class ShadowUpdateStatementRouteEngine extends
AbstractShadowDMLStatementRouteEngine {
+public final class ShadowUpdateStatementDataSourceMappingsFinder extends
AbstractShadowDMLStatementDataSourceMappingsFinder {
private final UpdateStatementContext sqlStatementContext;
private final List<Object> parameters;
- public ShadowUpdateStatementRouteEngine(final UpdateStatementContext
sqlStatementContext, final List<Object> parameters, final HintValueContext
hintValueContext) {
+ public ShadowUpdateStatementDataSourceMappingsFinder(final
UpdateStatementContext sqlStatementContext, final List<Object> parameters,
final HintValueContext hintValueContext) {
super(sqlStatementContext, hintValueContext,
ShadowOperationType.UPDATE);
this.sqlStatementContext = sqlStatementContext;
this.parameters = parameters;
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngine.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementDataSourceMappingsFinder.java
similarity index 63%
rename from
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngine.java
rename to
features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementDataSourceMappingsFinder.java
index 716097a2814..68ce6113566 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngine.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementDataSourceMappingsFinder.java
@@ -15,36 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.impl;
+package org.apache.shardingsphere.shadow.route.engine.finder.other;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.hint.HintValueContext;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.shadow.condition.ShadowDetermineCondition;
-import
org.apache.shardingsphere.shadow.route.engine.ShadowRouteContextDecorator;
-import org.apache.shardingsphere.shadow.route.engine.ShadowRouteEngine;
import
org.apache.shardingsphere.shadow.route.engine.determiner.HintShadowAlgorithmDeterminer;
+import
org.apache.shardingsphere.shadow.route.engine.finder.ShadowDataSourceMappingsFinder;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
import org.apache.shardingsphere.shadow.spi.ShadowOperationType;
-import org.apache.shardingsphere.shadow.spi.hint.HintShadowAlgorithm;
import java.util.Collections;
import java.util.Map;
/**
- * Shadow non-DML statement route engine.
+ * Shadow non-DML statement data source mappings finder.
*/
@RequiredArgsConstructor
-public final class ShadowNonDMLStatementRouteEngine implements
ShadowRouteEngine {
+public final class ShadowNonDMLStatementDataSourceMappingsFinder implements
ShadowDataSourceMappingsFinder {
private final HintValueContext hintValueContext;
@Override
- public void route(final RouteContext routeContext, final ShadowRule rule) {
- ShadowRouteContextDecorator.decorate(routeContext, rule,
findShadowDataSourceMappings(rule));
- }
-
- private Map<String, String> findShadowDataSourceMappings(final ShadowRule
rule) {
+ public Map<String, String> find(final ShadowRule rule) {
if (!hintValueContext.isShadow()) {
return Collections.emptyMap();
}
@@ -55,11 +48,6 @@ public final class ShadowNonDMLStatementRouteEngine
implements ShadowRouteEngine
}
private boolean isMatchAnyNoteShadowAlgorithms(final ShadowRule rule,
final ShadowDetermineCondition shadowCondition) {
- for (HintShadowAlgorithm<Comparable<?>> each :
rule.getAllHintShadowAlgorithms()) {
- if (HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition,
rule, hintValueContext.isShadow())) {
- return true;
- }
- }
- return false;
+ return rule.getAllHintShadowAlgorithms().stream().anyMatch(each ->
HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition, rule,
hintValueContext.isShadow()));
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
index 63cdd85d7a8..a89f7bfd0b4 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
@@ -230,13 +230,13 @@ public final class ShadowRule implements DatabaseRule {
}
/**
- * Get source data source name.
+ * Find production data source name.
*
* @param actualDataSourceName actual data source name
- * @return source data source name
+ * @return found production data source name
*/
@HighFrequencyInvocation
- public Optional<String> getSourceDataSourceName(final String
actualDataSourceName) {
+ public Optional<String> findProductionDataSourceName(final String
actualDataSourceName) {
ShadowDataSourceRule dataSourceRule =
shadowDataSourceMappings.get(actualDataSourceName);
return null == dataSourceRule ? Optional.empty() :
Optional.of(dataSourceRule.getProductionDataSource());
}
diff --git
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java
index 4dc785892ba..a6ed9cce161 100644
---
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java
+++
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java
@@ -27,10 +27,11 @@ import
org.apache.shardingsphere.infra.hint.HintValueContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowDeleteStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowInsertStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowSelectStatementRouteEngine;
-import
org.apache.shardingsphere.shadow.route.engine.dml.ShadowUpdateStatementRouteEngine;
+import
org.apache.shardingsphere.shadow.route.engine.finder.ShadowDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowDeleteStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowInsertStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowSelectStatementDataSourceMappingsFinder;
+import
org.apache.shardingsphere.shadow.route.engine.finder.dml.ShadowUpdateStatementDataSourceMappingsFinder;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.DeleteStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.InsertStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement;
@@ -50,18 +51,18 @@ class ShadowRouteEngineFactoryTest {
@Test
void assertNewInstance() {
- ShadowRouteEngine shadowInsertRouteEngine =
ShadowRouteEngineFactory.newInstance(
+ ShadowDataSourceMappingsFinder finder =
ShadowDataSourceMappingsFinderFactory.newInstance(
new QueryContext(createInsertSqlStatementContext(), "",
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
mock(ShardingSphereMetaData.class)));
- assertThat(shadowInsertRouteEngine,
instanceOf(ShadowInsertStatementRouteEngine.class));
- ShadowRouteEngine shadowUpdateRouteEngine =
ShadowRouteEngineFactory.newInstance(
+ assertThat(finder,
instanceOf(ShadowInsertStatementDataSourceMappingsFinder.class));
+ ShadowDataSourceMappingsFinder shadowUpdateRouteEngine =
ShadowDataSourceMappingsFinderFactory.newInstance(
new QueryContext(createUpdateSqlStatementContext(), "",
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
mock(ShardingSphereMetaData.class)));
- assertThat(shadowUpdateRouteEngine,
instanceOf(ShadowUpdateStatementRouteEngine.class));
- ShadowRouteEngine shadowDeleteRouteEngine =
ShadowRouteEngineFactory.newInstance(
+ assertThat(shadowUpdateRouteEngine,
instanceOf(ShadowUpdateStatementDataSourceMappingsFinder.class));
+ ShadowDataSourceMappingsFinder shadowDeleteRouteEngine =
ShadowDataSourceMappingsFinderFactory.newInstance(
new QueryContext(createDeleteSqlStatementContext(), "",
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
mock(ShardingSphereMetaData.class)));
- assertThat(shadowDeleteRouteEngine,
instanceOf(ShadowDeleteStatementRouteEngine.class));
- ShadowRouteEngine shadowSelectRouteEngine =
ShadowRouteEngineFactory.newInstance(
+ assertThat(shadowDeleteRouteEngine,
instanceOf(ShadowDeleteStatementDataSourceMappingsFinder.class));
+ ShadowDataSourceMappingsFinder shadowSelectRouteEngine =
ShadowDataSourceMappingsFinderFactory.newInstance(
new QueryContext(createSelectSqlStatementContext(), "",
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
mock(ShardingSphereMetaData.class)));
- assertThat(shadowSelectRouteEngine,
instanceOf(ShadowSelectStatementRouteEngine.class));
+ assertThat(shadowSelectRouteEngine,
instanceOf(ShadowSelectStatementDataSourceMappingsFinder.class));
}
private ConnectionContext mockConnectionContext() {
diff --git
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngineTest.java
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementRouteEngineTest.java
similarity index 67%
rename from
features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngineTest.java
rename to
features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementRouteEngineTest.java
index 6418b62eafe..5a70f58bad2 100644
---
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRouteEngineTest.java
+++
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/finder/other/ShadowNonDMLStatementRouteEngineTest.java
@@ -15,13 +15,10 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.shadow.route.engine.impl;
+package org.apache.shardingsphere.shadow.route.engine.finder.other;
import
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.hint.HintValueContext;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
-import org.apache.shardingsphere.infra.route.context.RouteMapper;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
import
org.apache.shardingsphere.shadow.config.datasource.ShadowDataSourceConfiguration;
import org.apache.shardingsphere.shadow.config.table.ShadowTableConfiguration;
@@ -31,7 +28,6 @@ import
org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -40,11 +36,11 @@ import static org.hamcrest.MatcherAssert.assertThat;
class ShadowNonDMLStatementRouteEngineTest {
- private ShadowNonDMLStatementRouteEngine shadowRouteEngine;
+ private ShadowNonDMLStatementDataSourceMappingsFinder finder;
@BeforeEach
void init() {
- shadowRouteEngine = new
ShadowNonDMLStatementRouteEngine(createHintValueContext());
+ finder = new
ShadowNonDMLStatementDataSourceMappingsFinder(createHintValueContext());
}
private HintValueContext createHintValueContext() {
@@ -55,23 +51,8 @@ class ShadowNonDMLStatementRouteEngineTest {
@Test
void assertRoute() {
- RouteContext routeContext = createRouteContext();
- shadowRouteEngine.route(routeContext, new
ShadowRule(createShadowRuleConfiguration()));
- Collection<RouteUnit> routeUnits = routeContext.getRouteUnits();
- RouteMapper dataSourceMapper =
routeUnits.iterator().next().getDataSourceMapper();
- assertThat(dataSourceMapper.getLogicName(), is("logic_db"));
- assertThat(dataSourceMapper.getActualName(), is("ds_shadow"));
- }
-
- private RouteContext createRouteContext() {
- RouteContext result = new RouteContext();
- Collection<RouteUnit> routeUnits = result.getRouteUnits();
- routeUnits.add(createRouteUnit());
- return result;
- }
-
- private RouteUnit createRouteUnit() {
- return new RouteUnit(new RouteMapper("logic_db",
"shadow-data-source"), Collections.singleton(new RouteMapper("t_order",
"t_order")));
+ Map<String, String> shadowDataSourceMappings = finder.find(new
ShadowRule(createShadowRuleConfiguration()));
+ assertThat(shadowDataSourceMappings, is(Collections.singletonMap("ds",
"ds_shadow")));
}
private ShadowRuleConfiguration createShadowRuleConfiguration() {
diff --git
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/ShadowRuleTest.java
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/ShadowRuleTest.java
index cc36b7b01ca..af711a818dd 100644
---
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/ShadowRuleTest.java
+++
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/ShadowRuleTest.java
@@ -168,13 +168,13 @@ class ShadowRuleTest {
}
@Test
- void assertGetDataSourceMapper() {
- assertThat(rule.getSourceDataSourceName("shadow_ds_0"),
is(Optional.of("ds0")));
- assertThat(rule.getSourceDataSourceName("shadow_ds_1"),
is(Optional.of("ds1")));
+ void assertFindProductionDataSourceNameSuccess() {
+ assertThat(rule.findProductionDataSourceName("shadow_ds_0"),
is(Optional.of("ds0")));
+ assertThat(rule.findProductionDataSourceName("shadow_ds_1"),
is(Optional.of("ds1")));
}
@Test
- void assertNotGetDataSourceMapper() {
- assertFalse(rule.getSourceDataSourceName("shadow_ds_2").isPresent());
+ void assertFindProductionDataSourceNameFailed() {
+
assertFalse(rule.findProductionDataSourceName("shadow_ds_2").isPresent());
}
}