From 097530040f6ddec692b7b21d17034936f03746c3 Mon Sep 17 00:00:00 2001 From: Liang Zhang Date: Wed, 25 Mar 2020 07:05:29 +0800 Subject: [PATCH] Use standard RouteContext and remove ShardingRouteContext for special interface (#4925) * Add RouteResult.originalDataNodes * remove ShardingRouteContext * remove ShardingCondition.dataNodes --- .../core/shard/BaseShardingEngine.java | 29 +++++++------- .../core/shard/BaseShardingEngineTest.java | 9 ++--- .../shard/fixture/RoutingHookFixture.java | 6 +-- ...ntextAware.java => RouteContextAware.java} | 12 +++--- .../ShardingSQLRewriteContextDecorator.java | 8 ++-- .../engine/ShardingSQLRewriteEngine.java | 17 ++++---- .../ShardingParameterRewriterBuilder.java | 10 ++--- .../ShardingPaginationParameterRewriter.java | 10 ++--- .../ShardingInsertValuesTokenGenerator.java | 17 ++++---- .../impl/ShardingTokenGenerateBuilder.java | 16 ++++---- .../MixSQLRewriterParameterizedTest.java | 11 +++-- .../ShardingSQLRewriterParameterizedTest.java | 11 +++-- .../route/engine/ShardingRouteDecorator.java | 3 +- .../engine/condition/ShardingCondition.java | 4 -- .../engine/context/ShardingRouteContext.java | 40 ------------------- .../ShardingStandardRoutingEngine.java | 7 +++- .../sharding/route/hook/RoutingHook.java | 6 +-- .../sharding/route/hook/SPIRoutingHook.java | 8 ++-- .../sharding/route/DatabaseTest.java | 11 +++-- .../type/standard/AbstractSQLRouteTest.java | 3 +- .../route/fixture/RoutingHookFixture.java | 13 +++--- .../route/hook/SPIRoutingHookTest.java | 9 +++-- .../CuratorZookeeperCenterRepositoryTest.java | 2 +- .../instance/ZookeeperPropertiesTest.java | 4 +- .../route/context/RouteContext.java | 2 +- .../underlying/route/context/RouteResult.java | 4 ++ 26 files changed, 113 insertions(+), 159 deletions(-) rename sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/{ShardingRouteContextAware.java => RouteContextAware.java} (73%) delete mode 100644 sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/context/ShardingRouteContext.java diff --git a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java index b20bcc0e80..dbc125038f 100644 --- a/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java +++ b/sharding-core/sharding-core-entry/src/main/java/org/apache/shardingsphere/core/shard/BaseShardingEngine.java @@ -27,7 +27,6 @@ import org.apache.shardingsphere.masterslave.route.engine.MasterSlaveRouteDecora import org.apache.shardingsphere.sharding.rewrite.context.ShardingSQLRewriteContextDecorator; import org.apache.shardingsphere.sharding.rewrite.engine.ShardingSQLRewriteEngine; import org.apache.shardingsphere.sharding.route.engine.ShardingRouteDecorator; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.hook.SPIRoutingHook; import org.apache.shardingsphere.sql.parser.SQLParserEngine; import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties; @@ -83,9 +82,9 @@ public abstract class BaseShardingEngine { */ public ExecutionContext shard(final String sql, final List parameters) { List clonedParameters = cloneParameters(parameters); - ShardingRouteContext shardingRouteContext = executeRoute(sql, clonedParameters); - ExecutionContext result = new ExecutionContext(shardingRouteContext.getSqlStatementContext()); - result.getExecutionUnits().addAll(HintManager.isDatabaseShardingOnly() ? convert(sql, clonedParameters, shardingRouteContext) : rewriteAndConvert(sql, clonedParameters, shardingRouteContext)); + RouteContext routeContext = executeRoute(sql, clonedParameters); + ExecutionContext result = new ExecutionContext(routeContext.getSqlStatementContext()); + result.getExecutionUnits().addAll(HintManager.isDatabaseShardingOnly() ? convert(sql, clonedParameters, routeContext) : rewriteAndConvert(sql, clonedParameters, routeContext)); if (properties.getValue(ConfigurationPropertyKey.SQL_SHOW)) { ShardingSQLLogger.logSQL(sql, properties.getValue(ConfigurationPropertyKey.SQL_SIMPLE), result.getSqlStatementContext(), result.getExecutionUnits()); } @@ -96,11 +95,11 @@ public abstract class BaseShardingEngine { protected abstract RouteContext route(DataNodeRouter dataNodeRouter, String sql, List parameters); - private ShardingRouteContext executeRoute(final String sql, final List clonedParameters) { + private RouteContext executeRoute(final String sql, final List clonedParameters) { routingHook.start(sql); try { registerRouteDecorator(); - ShardingRouteContext result = (ShardingRouteContext) route(dataNodeRouter, sql, clonedParameters); + RouteContext result = route(dataNodeRouter, sql, clonedParameters); routingHook.finishSuccess(result, metaData.getSchema()); return result; // CHECKSTYLE:OFF @@ -118,28 +117,28 @@ public abstract class BaseShardingEngine { } } - private Collection convert(final String sql, final List parameters, final ShardingRouteContext shardingRouteContext) { + private Collection convert(final String sql, final List parameters, final RouteContext routeContext) { Collection result = new LinkedHashSet<>(); - for (RouteUnit each : shardingRouteContext.getRouteResult().getRouteUnits()) { + for (RouteUnit each : routeContext.getRouteResult().getRouteUnits()) { result.add(new ExecutionUnit(each.getDataSourceMapper().getActualName(), new SQLUnit(sql, parameters))); } return result; } - private Collection rewriteAndConvert(final String sql, final List parameters, final ShardingRouteContext shardingRouteContext) { + private Collection rewriteAndConvert(final String sql, final List parameters, final RouteContext routeContext) { Collection result = new LinkedHashSet<>(); - registerRewriteDecorator(shardingRouteContext); - SQLRewriteContext sqlRewriteContext = sqlRewriteEntry.createSQLRewriteContext(sql, parameters, shardingRouteContext.getSqlStatementContext()); - for (RouteUnit each : shardingRouteContext.getRouteResult().getRouteUnits()) { - ShardingSQLRewriteEngine sqlRewriteEngine = new ShardingSQLRewriteEngine(shardingRule, shardingRouteContext.getShardingConditions(), each); + registerRewriteDecorator(routeContext); + SQLRewriteContext sqlRewriteContext = sqlRewriteEntry.createSQLRewriteContext(sql, parameters, routeContext.getSqlStatementContext()); + for (RouteUnit each : routeContext.getRouteResult().getRouteUnits()) { + ShardingSQLRewriteEngine sqlRewriteEngine = new ShardingSQLRewriteEngine(shardingRule, routeContext.getRouteResult().getOriginalDataNodes(), each); SQLRewriteResult sqlRewriteResult = sqlRewriteEngine.rewrite(sqlRewriteContext); result.add(new ExecutionUnit(each.getDataSourceMapper().getActualName(), new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters()))); } return result; } - private void registerRewriteDecorator(final ShardingRouteContext shardingRouteContext) { - sqlRewriteEntry.registerDecorator(shardingRule, new ShardingSQLRewriteContextDecorator(shardingRouteContext)); + private void registerRewriteDecorator(final RouteContext routeContext) { + sqlRewriteEntry.registerDecorator(shardingRule, new ShardingSQLRewriteContextDecorator(routeContext)); if (!shardingRule.getEncryptRule().getEncryptTableNames().isEmpty()) { sqlRewriteEntry.registerDecorator(shardingRule.getEncryptRule(), new EncryptSQLRewriteContextDecorator()); } diff --git a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/BaseShardingEngineTest.java b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/BaseShardingEngineTest.java index 7f56124328..5f7ea3942f 100644 --- a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/BaseShardingEngineTest.java +++ b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/BaseShardingEngineTest.java @@ -20,14 +20,13 @@ package org.apache.shardingsphere.core.shard; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.api.hint.HintManager; -import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sql.parser.binder.statement.CommonSQLStatementContext; import org.apache.shardingsphere.sql.parser.sql.statement.dal.dialect.postgresql.ShowStatement; -import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey; import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties; +import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey; import org.apache.shardingsphere.underlying.executor.context.ExecutionContext; import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import org.apache.shardingsphere.underlying.route.context.RouteMapper; import org.apache.shardingsphere.underlying.route.context.RouteResult; import org.apache.shardingsphere.underlying.route.context.RouteUnit; @@ -55,10 +54,10 @@ public abstract class BaseShardingEngineTest { } @SuppressWarnings("unchecked") - protected final ShardingRouteContext createSQLRouteContext() { + protected final RouteContext createSQLRouteContext() { RouteResult routeResult = new RouteResult(); routeResult.getRouteUnits().add(new RouteUnit(new RouteMapper("ds", "ds"), Collections.emptyList())); - return new ShardingRouteContext(new CommonSQLStatementContext(new ShowStatement()), Collections.emptyList(), routeResult, new ShardingConditions(Collections.emptyList())); + return new RouteContext(new CommonSQLStatementContext(new ShowStatement()), Collections.emptyList(), routeResult); } protected final void assertExecutionContext(final ExecutionContext actual) { diff --git a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/fixture/RoutingHookFixture.java b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/fixture/RoutingHookFixture.java index 78ef181bd4..2ad2cb5ba6 100644 --- a/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/fixture/RoutingHookFixture.java +++ b/sharding-core/sharding-core-entry/src/test/java/org/apache/shardingsphere/core/shard/fixture/RoutingHookFixture.java @@ -17,9 +17,9 @@ package org.apache.shardingsphere.core.shard.fixture; -import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.hook.RoutingHook; +import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; +import org.apache.shardingsphere.underlying.route.context.RouteContext; /** * Routing hook fixture. @@ -31,7 +31,7 @@ public final class RoutingHookFixture implements RoutingHook { } @Override - public void finishSuccess(final ShardingRouteContext shardingRouteContext, final SchemaMetaData schemaMetaData) { + public void finishSuccess(final RouteContext routeContext, final SchemaMetaData schemaMetaData) { } @Override diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/ShardingRouteContextAware.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/RouteContextAware.java similarity index 73% rename from sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/ShardingRouteContextAware.java rename to sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/RouteContextAware.java index 0aa55280c3..bea851da0a 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/ShardingRouteContextAware.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/aware/RouteContextAware.java @@ -17,17 +17,17 @@ package org.apache.shardingsphere.sharding.rewrite.aware; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; +import org.apache.shardingsphere.underlying.route.context.RouteContext; /** - * Sharding route context aware. + * Route context aware. */ -public interface ShardingRouteContextAware { +public interface RouteContextAware { /** - * Set sharding route context. + * Set route context. * - * @param shardingRouteContext sharding route context + * @param routeContext route context */ - void setShardingRouteContext(ShardingRouteContext shardingRouteContext); + void setRouteContext(RouteContext routeContext); } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java index 7ecb572d31..c7372de40b 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java @@ -18,7 +18,6 @@ package org.apache.shardingsphere.sharding.rewrite.context; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.sharding.rewrite.parameter.ShardingParameterRewriterBuilder; import org.apache.shardingsphere.sharding.rewrite.token.pojo.impl.ShardingTokenGenerateBuilder; @@ -26,6 +25,7 @@ import org.apache.shardingsphere.underlying.common.config.properties.Configurati import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecorator; import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriter; +import org.apache.shardingsphere.underlying.route.context.RouteContext; /** * SQL rewrite context decorator for sharding. @@ -33,16 +33,16 @@ import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.Parameter @RequiredArgsConstructor public final class ShardingSQLRewriteContextDecorator implements SQLRewriteContextDecorator { - private final ShardingRouteContext shardingRouteContext; + private final RouteContext routeContext; @SuppressWarnings("unchecked") @Override public void decorate(final ShardingRule shardingRule, final ConfigurationProperties properties, final SQLRewriteContext sqlRewriteContext) { - for (ParameterRewriter each : new ShardingParameterRewriterBuilder(shardingRule, shardingRouteContext).getParameterRewriters(sqlRewriteContext.getSchemaMetaData())) { + for (ParameterRewriter each : new ShardingParameterRewriterBuilder(shardingRule, routeContext).getParameterRewriters(sqlRewriteContext.getSchemaMetaData())) { if (!sqlRewriteContext.getParameters().isEmpty() && each.isNeedRewrite(sqlRewriteContext.getSqlStatementContext())) { each.rewrite(sqlRewriteContext.getParameterBuilder(), sqlRewriteContext.getSqlStatementContext(), sqlRewriteContext.getParameters()); } } - sqlRewriteContext.addSQLTokenGenerators(new ShardingTokenGenerateBuilder(shardingRule, shardingRouteContext).getSQLTokenGenerators()); + sqlRewriteContext.addSQLTokenGenerators(new ShardingTokenGenerateBuilder(shardingRule, routeContext).getSQLTokenGenerators()); } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/engine/ShardingSQLRewriteEngine.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/engine/ShardingSQLRewriteEngine.java index f490484026..2f0d4cb51f 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/engine/ShardingSQLRewriteEngine.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/engine/ShardingSQLRewriteEngine.java @@ -18,11 +18,9 @@ package org.apache.shardingsphere.sharding.rewrite.engine; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.underlying.common.rule.DataNode; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.sharding.rewrite.sql.ShardingSQLBuilder; -import org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition; -import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions; +import org.apache.shardingsphere.underlying.common.rule.DataNode; import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContext; import org.apache.shardingsphere.underlying.rewrite.engine.SQLRewriteEngine; import org.apache.shardingsphere.underlying.rewrite.engine.SQLRewriteResult; @@ -31,6 +29,7 @@ import org.apache.shardingsphere.underlying.rewrite.parameter.builder.impl.Group import org.apache.shardingsphere.underlying.rewrite.parameter.builder.impl.StandardParameterBuilder; import org.apache.shardingsphere.underlying.route.context.RouteUnit; +import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -42,7 +41,7 @@ public final class ShardingSQLRewriteEngine implements SQLRewriteEngine { private final ShardingRule shardingRule; - private final ShardingConditions shardingConditions; + private final Collection> originalDataNodes; private final RouteUnit routeUnit; @@ -52,12 +51,12 @@ public final class ShardingSQLRewriteEngine implements SQLRewriteEngine { } private List getParameters(final ParameterBuilder parameterBuilder) { - if (parameterBuilder instanceof StandardParameterBuilder || shardingConditions.getConditions().isEmpty() || parameterBuilder.getParameters().isEmpty()) { + if (parameterBuilder instanceof StandardParameterBuilder || originalDataNodes.isEmpty() || parameterBuilder.getParameters().isEmpty()) { return parameterBuilder.getParameters(); } List result = new LinkedList<>(); int count = 0; - for (ShardingCondition each : shardingConditions.getConditions()) { + for (Collection each : originalDataNodes) { if (isInSameDataNode(each)) { result.addAll(((GroupedParameterBuilder) parameterBuilder).getParameters(count)); } @@ -66,11 +65,11 @@ public final class ShardingSQLRewriteEngine implements SQLRewriteEngine { return result; } - private boolean isInSameDataNode(final ShardingCondition shardingCondition) { - if (shardingCondition.getDataNodes().isEmpty()) { + private boolean isInSameDataNode(final Collection dataNodes) { + if (dataNodes.isEmpty()) { return true; } - for (DataNode each : shardingCondition.getDataNodes()) { + for (DataNode each : dataNodes) { if (routeUnit.findTableMapper(each.getDataSourceName(), each.getTableName()).isPresent()) { return true; } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewriterBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewriterBuilder.java index 1bfcd8452b..1b9568270e 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewriterBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewriterBuilder.java @@ -20,14 +20,14 @@ package org.apache.shardingsphere.sharding.rewrite.parameter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.core.rule.aware.ShardingRuleAware; -import org.apache.shardingsphere.sharding.rewrite.aware.ShardingRouteContextAware; +import org.apache.shardingsphere.sharding.rewrite.aware.RouteContextAware; import org.apache.shardingsphere.sharding.rewrite.parameter.impl.ShardingGeneratedKeyInsertValueParameterRewriter; import org.apache.shardingsphere.sharding.rewrite.parameter.impl.ShardingPaginationParameterRewriter; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriter; import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriterBuilder; import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.aware.SchemaMetaDataAware; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import java.util.Collection; import java.util.LinkedList; @@ -40,7 +40,7 @@ public final class ShardingParameterRewriterBuilder implements ParameterRewriter private final ShardingRule shardingRule; - private final ShardingRouteContext shardingRouteContext; + private final RouteContext routeContext; @Override public Collection getParameterRewriters(final SchemaMetaData schemaMetaData) { @@ -65,8 +65,8 @@ public final class ShardingParameterRewriterBuilder implements ParameterRewriter if (parameterRewriter instanceof ShardingRuleAware) { ((ShardingRuleAware) parameterRewriter).setShardingRule(shardingRule); } - if (parameterRewriter instanceof ShardingRouteContextAware) { - ((ShardingRouteContextAware) parameterRewriter).setShardingRouteContext(shardingRouteContext); + if (parameterRewriter instanceof RouteContextAware) { + ((RouteContextAware) parameterRewriter).setRouteContext(routeContext); } } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/impl/ShardingPaginationParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/impl/ShardingPaginationParameterRewriter.java index 5ee1d97738..f833c04670 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/impl/ShardingPaginationParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/impl/ShardingPaginationParameterRewriter.java @@ -18,14 +18,14 @@ package org.apache.shardingsphere.sharding.rewrite.parameter.impl; import lombok.Setter; -import org.apache.shardingsphere.sharding.rewrite.aware.ShardingRouteContextAware; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; +import org.apache.shardingsphere.sharding.rewrite.aware.RouteContextAware; import org.apache.shardingsphere.sql.parser.binder.segment.select.pagination.PaginationContext; import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext; import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext; import org.apache.shardingsphere.underlying.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.underlying.rewrite.parameter.builder.impl.StandardParameterBuilder; import org.apache.shardingsphere.underlying.rewrite.parameter.rewriter.ParameterRewriter; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import java.util.List; @@ -33,14 +33,14 @@ import java.util.List; * Sharding pagination parameter rewriter. */ @Setter -public final class ShardingPaginationParameterRewriter implements ParameterRewriter, ShardingRouteContextAware { +public final class ShardingPaginationParameterRewriter implements ParameterRewriter, RouteContextAware { - private ShardingRouteContext shardingRouteContext; + private RouteContext routeContext; @Override public boolean isNeedRewrite(final SQLStatementContext sqlStatementContext) { return sqlStatementContext instanceof SelectStatementContext - && ((SelectStatementContext) sqlStatementContext).getPaginationContext().isHasPagination() && !shardingRouteContext.getRouteResult().isSingleRouting(); + && ((SelectStatementContext) sqlStatementContext).getPaginationContext().isHasPagination() && !routeContext.getRouteResult().isSingleRouting(); } @Override diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingInsertValuesTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingInsertValuesTokenGenerator.java index 4eca7147bc..d442cdc3ec 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingInsertValuesTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingInsertValuesTokenGenerator.java @@ -18,19 +18,18 @@ package org.apache.shardingsphere.sharding.rewrite.token.generator.impl; import lombok.Setter; -import org.apache.shardingsphere.underlying.common.rule.DataNode; -import org.apache.shardingsphere.sharding.rewrite.aware.ShardingRouteContextAware; +import org.apache.shardingsphere.sharding.rewrite.aware.RouteContextAware; import org.apache.shardingsphere.sharding.rewrite.token.pojo.impl.ShardingInsertValue; import org.apache.shardingsphere.sharding.rewrite.token.pojo.impl.ShardingInsertValuesToken; -import org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sql.parser.binder.segment.insert.values.InsertValueContext; import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext; import org.apache.shardingsphere.sql.parser.binder.statement.dml.InsertStatementContext; import org.apache.shardingsphere.sql.parser.sql.segment.dml.assignment.InsertValuesSegment; import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegment; +import org.apache.shardingsphere.underlying.common.rule.DataNode; import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.OptionalSQLTokenGenerator; import org.apache.shardingsphere.underlying.rewrite.sql.token.pojo.generic.InsertValuesToken; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import java.util.Collection; import java.util.Collections; @@ -41,9 +40,9 @@ import java.util.List; * Insert values token generator for sharding. */ @Setter -public final class ShardingInsertValuesTokenGenerator implements OptionalSQLTokenGenerator, ShardingRouteContextAware { +public final class ShardingInsertValuesTokenGenerator implements OptionalSQLTokenGenerator, RouteContextAware { - private ShardingRouteContext shardingRouteContext; + private RouteContext routeContext; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -54,11 +53,11 @@ public final class ShardingInsertValuesTokenGenerator implements OptionalSQLToke public InsertValuesToken generateSQLToken(final InsertStatementContext insertStatementContext) { Collection insertValuesSegments = (insertStatementContext.getSqlStatement()).getValues(); InsertValuesToken result = new ShardingInsertValuesToken(getStartIndex(insertValuesSegments), getStopIndex(insertValuesSegments)); - Iterator shardingConditionIterator = null == shardingRouteContext || shardingRouteContext.getShardingConditions().getConditions().isEmpty() - ? null : shardingRouteContext.getShardingConditions().getConditions().iterator(); + Iterator> originalDataNodesIterator = null == routeContext || routeContext.getRouteResult().getOriginalDataNodes().isEmpty() + ? null : routeContext.getRouteResult().getOriginalDataNodes().iterator(); for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) { List expressionSegments = each.getValueExpressions(); - Collection dataNodes = null == shardingConditionIterator ? Collections.emptyList() : shardingConditionIterator.next().getDataNodes(); + Collection dataNodes = null == originalDataNodesIterator ? Collections.emptyList() : originalDataNodesIterator.next(); result.getInsertValues().add(new ShardingInsertValue(expressionSegments, dataNodes)); } return result; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/impl/ShardingTokenGenerateBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/impl/ShardingTokenGenerateBuilder.java index bc1d6fe61c..a28cccf63c 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/impl/ShardingTokenGenerateBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/impl/ShardingTokenGenerateBuilder.java @@ -18,18 +18,17 @@ package org.apache.shardingsphere.sharding.rewrite.token.pojo.impl; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.core.rule.ShardingRule; -import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.OffsetTokenGenerator; -import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.RowCountTokenGenerator; -import org.apache.shardingsphere.sharding.rewrite.aware.ShardingRouteContextAware; import org.apache.shardingsphere.core.rule.aware.ShardingRuleAware; +import org.apache.shardingsphere.sharding.rewrite.aware.RouteContextAware; import org.apache.shardingsphere.sharding.rewrite.token.generator.IgnoreForSingleRoute; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.AggregationDistinctTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.DistinctProjectionPrefixTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.IndexTokenGenerator; +import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.OffsetTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.OrderByTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.ProjectionsTokenGenerator; +import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.RowCountTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.ShardingInsertValuesTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.TableTokenGenerator; import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.GeneratedKeyAssignmentTokenGenerator; @@ -38,6 +37,7 @@ import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.Ge import org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.GeneratedKeyInsertValuesTokenGenerator; import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.SQLTokenGenerator; import org.apache.shardingsphere.underlying.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import java.util.Collection; import java.util.LinkedList; @@ -50,7 +50,7 @@ public final class ShardingTokenGenerateBuilder implements SQLTokenGeneratorBuil private final ShardingRule shardingRule; - private final ShardingRouteContext shardingRouteContext; + private final RouteContext routeContext; @Override public Collection getSQLTokenGenerators() { @@ -59,8 +59,8 @@ public final class ShardingTokenGenerateBuilder implements SQLTokenGeneratorBuil if (each instanceof ShardingRuleAware) { ((ShardingRuleAware) each).setShardingRule(shardingRule); } - if (each instanceof ShardingRouteContextAware) { - ((ShardingRouteContextAware) each).setShardingRouteContext(shardingRouteContext); + if (each instanceof RouteContextAware) { + ((RouteContextAware) each).setRouteContext(routeContext); } } return result; @@ -85,7 +85,7 @@ public final class ShardingTokenGenerateBuilder implements SQLTokenGeneratorBuil } private void addSQLTokenGenerator(final Collection sqlTokenGenerators, final SQLTokenGenerator toBeAddedSQLTokenGenerator) { - if (toBeAddedSQLTokenGenerator instanceof IgnoreForSingleRoute && shardingRouteContext.getRouteResult().isSingleRouting()) { + if (toBeAddedSQLTokenGenerator instanceof IgnoreForSingleRoute && routeContext.getRouteResult().isSingleRouting()) { return; } sqlTokenGenerators.add(toBeAddedSQLTokenGenerator); diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java index e2d900f3fa..9f48209003 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java @@ -26,7 +26,6 @@ import org.apache.shardingsphere.encrypt.rewrite.context.EncryptSQLRewriteContex import org.apache.shardingsphere.sharding.rewrite.context.ShardingSQLRewriteContextDecorator; import org.apache.shardingsphere.sharding.rewrite.engine.ShardingSQLRewriteEngine; import org.apache.shardingsphere.sharding.route.engine.ShardingRouteDecorator; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sql.parser.SQLParserEngine; import org.apache.shardingsphere.sql.parser.SQLParserEngineFactory; import org.apache.shardingsphere.sql.parser.binder.metadata.column.ColumnMetaData; @@ -82,15 +81,15 @@ public final class MixSQLRewriterParameterizedTest extends AbstractSQLRewriterPa ConfigurationProperties properties = new ConfigurationProperties(ruleConfiguration.getProps()); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(getTestParameters().getInputSQL(), getTestParameters().getInputParameters(), false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext shardingRouteContext = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + routeContext = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); SQLRewriteContext sqlRewriteContext = new SQLRewriteContext( - mock(SchemaMetaData.class), shardingRouteContext.getSqlStatementContext(), getTestParameters().getInputSQL(), getTestParameters().getInputParameters()); - new ShardingSQLRewriteContextDecorator(shardingRouteContext).decorate(shardingRule, properties, sqlRewriteContext); + mock(SchemaMetaData.class), routeContext.getSqlStatementContext(), getTestParameters().getInputSQL(), getTestParameters().getInputParameters()); + new ShardingSQLRewriteContextDecorator(routeContext).decorate(shardingRule, properties, sqlRewriteContext); new EncryptSQLRewriteContextDecorator().decorate(shardingRule.getEncryptRule(), properties, sqlRewriteContext); sqlRewriteContext.generateSQLTokens(); Collection result = new LinkedList<>(); - for (RouteUnit each : shardingRouteContext.getRouteResult().getRouteUnits()) { - result.add(new ShardingSQLRewriteEngine(shardingRule, shardingRouteContext.getShardingConditions(), each).rewrite(sqlRewriteContext)); + for (RouteUnit each : routeContext.getRouteResult().getRouteUnits()) { + result.add(new ShardingSQLRewriteEngine(shardingRule, routeContext.getRouteResult().getOriginalDataNodes(), each).rewrite(sqlRewriteContext)); } return result; } diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java index 8ebc7988ea..f2b232c4c5 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java @@ -25,7 +25,6 @@ import org.apache.shardingsphere.core.yaml.swapper.ShardingRuleConfigurationYaml import org.apache.shardingsphere.sharding.rewrite.context.ShardingSQLRewriteContextDecorator; import org.apache.shardingsphere.sharding.rewrite.engine.ShardingSQLRewriteEngine; import org.apache.shardingsphere.sharding.route.engine.ShardingRouteDecorator; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sql.parser.SQLParserEngine; import org.apache.shardingsphere.sql.parser.SQLParserEngineFactory; import org.apache.shardingsphere.sql.parser.binder.metadata.column.ColumnMetaData; @@ -81,14 +80,14 @@ public final class ShardingSQLRewriterParameterizedTest extends AbstractSQLRewri ConfigurationProperties properties = new ConfigurationProperties(ruleConfiguration.getProps()); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(getTestParameters().getInputSQL(), getTestParameters().getInputParameters(), false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext shardingRouteContext = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + routeContext = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); SQLRewriteContext sqlRewriteContext = new SQLRewriteContext( - mock(SchemaMetaData.class), shardingRouteContext.getSqlStatementContext(), getTestParameters().getInputSQL(), getTestParameters().getInputParameters()); - new ShardingSQLRewriteContextDecorator(shardingRouteContext).decorate(shardingRule, properties, sqlRewriteContext); + mock(SchemaMetaData.class), routeContext.getSqlStatementContext(), getTestParameters().getInputSQL(), getTestParameters().getInputParameters()); + new ShardingSQLRewriteContextDecorator(routeContext).decorate(shardingRule, properties, sqlRewriteContext); sqlRewriteContext.generateSQLTokens(); Collection result = new LinkedList<>(); - for (RouteUnit each : shardingRouteContext.getRouteResult().getRouteUnits()) { - result.add(new ShardingSQLRewriteEngine(shardingRule, shardingRouteContext.getShardingConditions(), each).rewrite(sqlRewriteContext)); + for (RouteUnit each : routeContext.getRouteResult().getRouteUnits()) { + result.add(new ShardingSQLRewriteEngine(shardingRule, routeContext.getRouteResult().getOriginalDataNodes(), each).rewrite(sqlRewriteContext)); } return result; } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingRouteDecorator.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingRouteDecorator.java index 015ec7da46..61a3295496 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingRouteDecorator.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/ShardingRouteDecorator.java @@ -29,7 +29,6 @@ import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditi import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions; import org.apache.shardingsphere.sharding.route.engine.condition.engine.InsertClauseShardingConditionEngine; import org.apache.shardingsphere.sharding.route.engine.condition.engine.WhereClauseShardingConditionEngine; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.engine.type.ShardingRouteEngine; import org.apache.shardingsphere.sharding.route.engine.type.ShardingRouteEngineFactory; import org.apache.shardingsphere.sharding.route.engine.validator.ShardingStatementValidatorFactory; @@ -71,7 +70,7 @@ public final class ShardingRouteDecorator implements RouteDecorator parameters, diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingCondition.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingCondition.java index 59297b337f..d860b5b7e0 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingCondition.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/ShardingCondition.java @@ -19,10 +19,8 @@ package org.apache.shardingsphere.sharding.route.engine.condition; import lombok.Getter; import lombok.ToString; -import org.apache.shardingsphere.underlying.common.rule.DataNode; import org.apache.shardingsphere.core.strategy.route.value.RouteValue; -import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -34,6 +32,4 @@ import java.util.List; public class ShardingCondition { private final List routeValues = new LinkedList<>(); - - private final Collection dataNodes = new LinkedList<>(); } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/context/ShardingRouteContext.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/context/ShardingRouteContext.java deleted file mode 100644 index 5cb3454a14..0000000000 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/context/ShardingRouteContext.java +++ /dev/null @@ -1,40 +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.sharding.route.engine.context; - -import lombok.Getter; -import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions; -import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext; -import org.apache.shardingsphere.underlying.route.context.RouteContext; -import org.apache.shardingsphere.underlying.route.context.RouteResult; - -import java.util.List; - -/** - * SQL route context. - */ -@Getter -public final class ShardingRouteContext extends RouteContext { - - private final ShardingConditions shardingConditions; - - public ShardingRouteContext(final SQLStatementContext sqlStatementContext, final List parameters, final RouteResult routeResult, final ShardingConditions shardingConditions) { - super(sqlStatementContext, parameters, routeResult); - this.shardingConditions = shardingConditions; - } -} diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java index eaef67130b..23dac3118b 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java @@ -64,6 +64,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine private final ConfigurationProperties properties; + private final Collection> originalDataNodes = new LinkedList<>(); + @Override public RouteResult route(final ShardingRule shardingRule) { if (isDMLForModify(sqlStatementContext) && 1 != ((TableAvailable) sqlStatementContext).getAllTables().size()) { @@ -78,6 +80,7 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine private RouteResult generateRouteResult(final Collection routedDataNodes) { RouteResult result = new RouteResult(); + result.getOriginalDataNodes().addAll(originalDataNodes); for (DataNode each : routedDataNodes) { result.getRouteUnits().add( new RouteUnit(new RouteMapper(each.getDataSourceName(), each.getDataSourceName()), Collections.singletonList(new RouteMapper(logicTableName, each.getTableName())))); @@ -118,8 +121,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine Collection dataNodes = route0(shardingRule, tableRule, getShardingValuesFromShardingConditions(shardingRule, shardingRule.getDatabaseShardingStrategy(tableRule).getShardingColumns(), each), getShardingValuesFromShardingConditions(shardingRule, shardingRule.getTableShardingStrategy(tableRule).getShardingColumns(), each)); - each.getDataNodes().addAll(dataNodes); result.addAll(dataNodes); + originalDataNodes.add(dataNodes); } return result; } @@ -132,8 +135,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine Collection result = new LinkedList<>(); for (ShardingCondition each : shardingConditions.getConditions()) { Collection dataNodes = route0(shardingRule, tableRule, getDatabaseShardingValues(shardingRule, tableRule, each), getTableShardingValues(shardingRule, tableRule, each)); - each.getDataNodes().addAll(dataNodes); result.addAll(dataNodes); + originalDataNodes.add(dataNodes); } return result; } diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/RoutingHook.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/RoutingHook.java index b09e642872..599b079cb0 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/RoutingHook.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/RoutingHook.java @@ -18,7 +18,7 @@ package org.apache.shardingsphere.sharding.route.hook; import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; +import org.apache.shardingsphere.underlying.route.context.RouteContext; /** * Routing hook. @@ -35,10 +35,10 @@ public interface RoutingHook { /** * Handle when routing finished success. * - * @param shardingRouteContext sharding route context + * @param routeContext route context * @param schemaMetaData schema meta data */ - void finishSuccess(ShardingRouteContext shardingRouteContext, SchemaMetaData schemaMetaData); + void finishSuccess(RouteContext routeContext, SchemaMetaData schemaMetaData); /** * Handle when routing finished failure. diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHook.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHook.java index 4b475bb787..cfbd606191 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHook.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHook.java @@ -17,9 +17,9 @@ package org.apache.shardingsphere.sharding.route.hook; -import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.spi.NewInstanceServiceLoader; +import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import java.util.Collection; @@ -42,9 +42,9 @@ public final class SPIRoutingHook implements RoutingHook { } @Override - public void finishSuccess(final ShardingRouteContext shardingRouteContext, final SchemaMetaData schemaMetaData) { + public void finishSuccess(final RouteContext routeContext, final SchemaMetaData schemaMetaData) { for (RoutingHook each : routingHooks) { - each.finishSuccess(shardingRouteContext, schemaMetaData); + each.finishSuccess(routeContext, schemaMetaData); } } diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/DatabaseTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/DatabaseTest.java index 4f44fc1691..a793b65964 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/DatabaseTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/DatabaseTest.java @@ -24,7 +24,6 @@ import org.apache.shardingsphere.api.config.sharding.strategy.HintShardingStrate import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.sharding.route.engine.ShardingRouteDecorator; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.fixture.HintShardingAlgorithmFixture; import org.apache.shardingsphere.spi.database.metadata.DataSourceMetaData; import org.apache.shardingsphere.sql.parser.SQLParserEngine; @@ -79,7 +78,7 @@ public final class DatabaseTest { ShardingSphereMetaData metaData = getMetaDataForAllRoutingSQL(); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(originSQL, Collections.emptyList(), false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext actual = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + RouteContext actual = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(actual.getRouteResult().getRouteUnits().size(), is(1)); Collection actualDataSources = actual.getRouteResult().getActualDataSourceNames(); assertThat(actualDataSources.size(), is(1)); @@ -103,13 +102,13 @@ public final class DatabaseTest { ShardingSphereMetaData metaData = getMetaDataForPagination(); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(originSQL, Collections.emptyList(), false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext actual = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + RouteContext actual = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(0L)); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orElse(null), is(5L)); originSQL = "select user_id from tbl_pagination limit 5,5"; routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(originSQL, Collections.emptyList(), false); shardingRouteDecorator = new ShardingRouteDecorator(); - actual = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + actual = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L)); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orElse(null), is(5L)); } @@ -143,14 +142,14 @@ public final class DatabaseTest { SQLParserEngine sqlParserEngine = SQLParserEngineFactory.getSQLParserEngine("MySQL"); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(originSQL, Lists.newArrayList(13, 173), false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext actual = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + RouteContext actual = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L)); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orElse(null), is(10L)); assertThat(actual.getRouteResult().getRouteUnits().size(), is(1)); originSQL = "select city_id from t_user where city_id in (?,?) limit 5,10"; routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(originSQL, Lists.newArrayList(89, 84), false); shardingRouteDecorator = new ShardingRouteDecorator(); - actual = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + actual = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L)); assertThat(((SelectStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orElse(null), is(10L)); } diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java index 0663daeed9..b213dd0bb8 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java @@ -19,7 +19,6 @@ package org.apache.shardingsphere.sharding.route.engine.type.standard; import org.apache.shardingsphere.core.rule.ShardingRule; import org.apache.shardingsphere.sharding.route.engine.ShardingRouteDecorator; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.fixture.AbstractRoutingEngineTest; import org.apache.shardingsphere.sql.parser.SQLParserEngine; import org.apache.shardingsphere.sql.parser.SQLParserEngineFactory; @@ -53,7 +52,7 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest { SQLParserEngine sqlParserEngine = SQLParserEngineFactory.getSQLParserEngine("MySQL"); RouteContext routeContext = new DataNodeRouter(metaData, properties, sqlParserEngine).route(sql, parameters, false); ShardingRouteDecorator shardingRouteDecorator = new ShardingRouteDecorator(); - ShardingRouteContext result = (ShardingRouteContext) shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); + RouteContext result = shardingRouteDecorator.decorate(routeContext, metaData, shardingRule, properties); assertThat(result.getRouteResult().getRouteUnits().size(), is(1)); return result; } diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/fixture/RoutingHookFixture.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/fixture/RoutingHookFixture.java index c929c039e2..934c198560 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/fixture/RoutingHookFixture.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/fixture/RoutingHookFixture.java @@ -17,18 +17,17 @@ package org.apache.shardingsphere.sharding.route.fixture; -import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; -import org.apache.shardingsphere.sharding.route.hook.RoutingHook; - import lombok.Getter; +import org.apache.shardingsphere.sharding.route.hook.RoutingHook; +import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; +import org.apache.shardingsphere.underlying.route.context.RouteContext; @Getter public final class RoutingHookFixture implements RoutingHook { private String sql; - private ShardingRouteContext routeContext; + private RouteContext routeContext; private SchemaMetaData schemaMetaData; @@ -40,8 +39,8 @@ public final class RoutingHookFixture implements RoutingHook { } @Override - public void finishSuccess(final ShardingRouteContext shardingRouteContext, final SchemaMetaData schemaMetaData) { - this.routeContext = shardingRouteContext; + public void finishSuccess(final RouteContext routeContext, final SchemaMetaData schemaMetaData) { + this.routeContext = routeContext; this.schemaMetaData = schemaMetaData; } diff --git a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHookTest.java b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHookTest.java index 4898af4d3e..170bf88872 100644 --- a/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHookTest.java +++ b/sharding-core/sharding-core-route/src/test/java/org/apache/shardingsphere/sharding/route/hook/SPIRoutingHookTest.java @@ -18,15 +18,16 @@ package org.apache.shardingsphere.sharding.route.hook; import lombok.SneakyThrows; -import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; -import org.apache.shardingsphere.sharding.route.engine.context.ShardingRouteContext; import org.apache.shardingsphere.sharding.route.fixture.RoutingHookFixture; +import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData; +import org.apache.shardingsphere.underlying.route.context.RouteContext; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.util.Collection; + import java.lang.reflect.Field; +import java.util.Collection; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; @@ -38,7 +39,7 @@ public final class SPIRoutingHookTest { private final SPIRoutingHook spiRoutingHook = new SPIRoutingHook(); @Mock - private ShardingRouteContext routeContext; + private RouteContext routeContext; @Mock private SchemaMetaData schemaMetaData; diff --git a/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/CuratorZookeeperCenterRepositoryTest.java b/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/CuratorZookeeperCenterRepositoryTest.java index c4801a544d..8a931b792b 100644 --- a/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/CuratorZookeeperCenterRepositoryTest.java +++ b/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/CuratorZookeeperCenterRepositoryTest.java @@ -41,7 +41,7 @@ import static org.junit.Assert.assertThat; public final class CuratorZookeeperCenterRepositoryTest { private static CuratorZookeeperCenterRepository centerRepository = new CuratorZookeeperCenterRepository(); - + private static String serverLists; @BeforeClass diff --git a/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/ZookeeperPropertiesTest.java b/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/ZookeeperPropertiesTest.java index 8647b6cf41..6c100dea26 100644 --- a/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/ZookeeperPropertiesTest.java +++ b/sharding-orchestration/sharding-orchestration-center/sharding-orchestration-center-zookeeper-curator/src/test/java/org/apache/shardingsphere/orchestration/center/instance/ZookeeperPropertiesTest.java @@ -25,7 +25,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public final class ZookeeperPropertiesTest { - + @Test public void assertGetValue() { Properties props = new Properties(); @@ -41,7 +41,7 @@ public final class ZookeeperPropertiesTest { assertThat(actual.getValue(ZookeeperPropertyKey.OPERATION_TIMEOUT_MILLISECONDS), is(6000)); assertThat(actual.getValue(ZookeeperPropertyKey.DIGEST), is("any")); } - + @Test public void assertGetDefaultValue() { Properties props = new Properties(); diff --git a/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteContext.java b/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteContext.java index ea348e35d0..398168ddea 100644 --- a/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteContext.java +++ b/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteContext.java @@ -28,7 +28,7 @@ import java.util.List; */ @RequiredArgsConstructor @Getter -public class RouteContext { +public final class RouteContext { private final SQLStatementContext sqlStatementContext; diff --git a/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteResult.java b/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteResult.java index 99f8fe636e..fcf1477703 100644 --- a/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteResult.java +++ b/shardingsphere-underlying/shardingsphere-route/src/main/java/org/apache/shardingsphere/underlying/route/context/RouteResult.java @@ -18,11 +18,13 @@ package org.apache.shardingsphere.underlying.route.context; import lombok.Getter; +import org.apache.shardingsphere.underlying.common.rule.DataNode; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -35,6 +37,8 @@ import java.util.stream.Collectors; @Getter public final class RouteResult { + private final Collection> originalDataNodes = new LinkedList<>(); + private final Collection routeUnits = new LinkedHashSet<>(); /** -- GitLab