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 b20bcc0e80808369f7d16be23bb09006e1f40ea8..dbc125038ffab0b1673e341a494bf8c70365dca9 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 7f56124328fc07c63dea7fa91d1d0ba678e181d2..5f7ea3942f8a7e15e6a4b3b371f5b17abeff597d 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 78ef181bd4549513fe08a9b1bb6a3cae8cb327bf..2ad2cb5ba67570e3763e0f33d7a542b7f855ac2a 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 0aa55280c35e0251a4c55465d21ac445b832b627..bea851da0a15b5b3f56b8fa46877593fedbff0d5 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 7ecb572d31a99bfcf9fa848cec861323ae6e945a..c7372de40bdd6428a9447dc1802ec341d01dcc09 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 f490484026bca60e71010362d6c334ab1c0a785d..2f0d4cb51fac2f291b8c1b114a8db28e9939b33a 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 1bfcd8452b439d64ec5804517047c474569dacc1..1b9568270ebaa8c9dd497a55e6b6c1ab83cacd59 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 5ee1d977387328ce95ee340d3d78cfb80006737f..f833c04670c953bfaed5b4c1ffcf872d85c83017 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 4eca7147bcb5c648f3d1381de898e771644f27db..d442cdc3eca77a8282bdaa6b477412b41c1901bc 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 bc1d6fe61c69208d58d0fd376b8a3b77f7e38d15..a28cccf63c7ac45247ea41d7c91e8bbb594a8890 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 e2d900f3fa4cdb2a71f187fb41c9cc6fa5040c9c..9f48209003c019836880039bd8c2f838b9799730 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 8ebc7988ea7cf67873eb2621775445bdf1b384f5..f2b232c4c5951a663f7c610ff1746a85458008f3 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 015ec7da46624745946e60a775d336ce21db8371..61a3295496250f4b3a0824a61ab6f1d516017199 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 59297b337f900badefa46f767e3a93481b565c2d..d860b5b7e0d551361f1cd3d9310bc6cb48d24e6d 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 5cb3454a14375768bff1b2700690a3891957915f..0000000000000000000000000000000000000000 --- 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 eaef67130b6fe607e4c7a2f4bc5bc054bbaa2de5..23dac3118ba8fe9e7c8926c5e74588606986b869 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 b09e64287213a8cc17e9c2293284b02547c93fb9..599b079cb0a8029d1f641b8eea87ed47ef3f9821 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 4b475bb7870e603ae985d059dd794651e3a505f4..cfbd606191c5fab8e15b4887ca4a1e3608df0718 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 4f44fc16914d39540373889730f3082e5915921c..a793b659641462bf2315dcdacb207eb359a14cb3 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 0663daeed913ae36ab30798f9aaf49aa7a497c25..b213dd0bb8a5cd50b3b23a8d50a048a723d80710 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 c929c039e253a0f65713bacd0d8e2af1fda9ab84..934c198560f7bf704f5466e5bea4e28c65df1223 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 4898af4d3e772e250566b492147c40e4a582dbd9..170bf888728328ac51d40c37944a7bdd1f7f71b9 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 c4801a544d7c7c56685d1e7599aee1f02d913f89..8a931b792be083d148837b2cad3b1982ef3e06ff 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 8647b6cf4176ce47f5dc5a471dad5c7ed62b025f..6c100dea2691bfe3451fc0b6e8b5aae5d9e0c76d 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 ea348e35d012d07f723db2f2972a5e12e611cc4c..398168ddea44e38ae1b01995cd59b2f5442ae0d2 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 99f8fe636ed34a2e9da3aec2d1551035102c1949..fcf14777034e49a7f3332e708d145d66db2e34c7 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<>(); /**