未验证 提交 09753004 编写于 作者: L Liang Zhang 提交者: GitHub

Use standard RouteContext and remove ShardingRouteContext for special interface (#4925)

* Add RouteResult.originalDataNodes

* remove ShardingRouteContext

* remove ShardingCondition.dataNodes
上级 ed614ad0
......@@ -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<Object> parameters) {
List<Object> 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.<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
ShardingSQLLogger.logSQL(sql, properties.<Boolean>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<Object> parameters);
private ShardingRouteContext executeRoute(final String sql, final List<Object> clonedParameters) {
private RouteContext executeRoute(final String sql, final List<Object> 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<ExecutionUnit> convert(final String sql, final List<Object> parameters, final ShardingRouteContext shardingRouteContext) {
private Collection<ExecutionUnit> convert(final String sql, final List<Object> parameters, final RouteContext routeContext) {
Collection<ExecutionUnit> 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<ExecutionUnit> rewriteAndConvert(final String sql, final List<Object> parameters, final ShardingRouteContext shardingRouteContext) {
private Collection<ExecutionUnit> rewriteAndConvert(final String sql, final List<Object> parameters, final RouteContext routeContext) {
Collection<ExecutionUnit> 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());
}
......
......@@ -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) {
......
......@@ -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
......
......@@ -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);
}
......@@ -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<ShardingRule> {
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());
}
}
......@@ -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<Collection<DataNode>> originalDataNodes;
private final RouteUnit routeUnit;
......@@ -52,12 +51,12 @@ public final class ShardingSQLRewriteEngine implements SQLRewriteEngine {
}
private List<Object> 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<Object> result = new LinkedList<>();
int count = 0;
for (ShardingCondition each : shardingConditions.getConditions()) {
for (Collection<DataNode> 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<DataNode> 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;
}
......
......@@ -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<ParameterRewriter> 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);
}
}
}
......@@ -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<SelectStatementContext>, ShardingRouteContextAware {
public final class ShardingPaginationParameterRewriter implements ParameterRewriter<SelectStatementContext>, 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
......
......@@ -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<InsertStatementContext>, ShardingRouteContextAware {
public final class ShardingInsertValuesTokenGenerator implements OptionalSQLTokenGenerator<InsertStatementContext>, 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<InsertValuesSegment> insertValuesSegments = (insertStatementContext.getSqlStatement()).getValues();
InsertValuesToken result = new ShardingInsertValuesToken(getStartIndex(insertValuesSegments), getStopIndex(insertValuesSegments));
Iterator<ShardingCondition> shardingConditionIterator = null == shardingRouteContext || shardingRouteContext.getShardingConditions().getConditions().isEmpty()
? null : shardingRouteContext.getShardingConditions().getConditions().iterator();
Iterator<Collection<DataNode>> originalDataNodesIterator = null == routeContext || routeContext.getRouteResult().getOriginalDataNodes().isEmpty()
? null : routeContext.getRouteResult().getOriginalDataNodes().iterator();
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
List<ExpressionSegment> expressionSegments = each.getValueExpressions();
Collection<DataNode> dataNodes = null == shardingConditionIterator ? Collections.emptyList() : shardingConditionIterator.next().getDataNodes();
Collection<DataNode> dataNodes = null == originalDataNodesIterator ? Collections.emptyList() : originalDataNodesIterator.next();
result.getInsertValues().add(new ShardingInsertValue(expressionSegments, dataNodes));
}
return result;
......
......@@ -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<SQLTokenGenerator> 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<SQLTokenGenerator> sqlTokenGenerators, final SQLTokenGenerator toBeAddedSQLTokenGenerator) {
if (toBeAddedSQLTokenGenerator instanceof IgnoreForSingleRoute && shardingRouteContext.getRouteResult().isSingleRouting()) {
if (toBeAddedSQLTokenGenerator instanceof IgnoreForSingleRoute && routeContext.getRouteResult().isSingleRouting()) {
return;
}
sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
......
......@@ -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<SQLRewriteResult> 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;
}
......
......@@ -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<SQLRewriteResult> 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;
}
......
......@@ -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<ShardingRule
if (needMergeShardingValues) {
Preconditions.checkState(1 == routeResult.getRouteUnits().size(), "Must have one sharding with subquery.");
}
return new ShardingRouteContext(sqlStatementContext, parameters, routeResult, shardingConditions);
return new RouteContext(sqlStatementContext, parameters, routeResult);
}
private ShardingConditions getShardingConditions(final List<Object> parameters,
......
......@@ -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<RouteValue> routeValues = new LinkedList<>();
private final Collection<DataNode> dataNodes = new LinkedList<>();
}
/*
* 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<Object> parameters, final RouteResult routeResult, final ShardingConditions shardingConditions) {
super(sqlStatementContext, parameters, routeResult);
this.shardingConditions = shardingConditions;
}
}
......@@ -64,6 +64,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
private final ConfigurationProperties properties;
private final Collection<Collection<DataNode>> 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<DataNode> 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<DataNode> 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<DataNode> result = new LinkedList<>();
for (ShardingCondition each : shardingConditions.getConditions()) {
Collection<DataNode> dataNodes = route0(shardingRule, tableRule, getDatabaseShardingValues(shardingRule, tableRule, each), getTableShardingValues(shardingRule, tableRule, each));
each.getDataNodes().addAll(dataNodes);
result.addAll(dataNodes);
originalDataNodes.add(dataNodes);
}
return result;
}
......
......@@ -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.
......
......@@ -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);
}
}
......
......@@ -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<String> 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));
}
......
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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
......
......@@ -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();
......
......@@ -28,7 +28,7 @@ import java.util.List;
*/
@RequiredArgsConstructor
@Getter
public class RouteContext {
public final class RouteContext {
private final SQLStatementContext sqlStatementContext;
......
......@@ -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<Collection<DataNode>> originalDataNodes = new LinkedList<>();
private final Collection<RouteUnit> routeUnits = new LinkedHashSet<>();
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册