提交 0b4baa04 编写于 作者: M maxiaoguang

1、move some function with sharding value to ParsingSQLRouter class(将sharding...

1、move some function with sharding value to ParsingSQLRouter class(将sharding value相关方法移到ParsingSQLRouter中)
2、rename package name io.shardingjdbc.core.routing.condition to io.shardingjdbc.core.routing.sharding(重命名包io.shardingjdbc.core.routing.condition为io.shardingjdbc.core.routing.sharding)
3、modify sharding value package class(修改sharding value的包装类)
上级 fdf671a5
......@@ -19,22 +19,12 @@ package io.shardingjdbc.core.parsing.parser.context.condition;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.collect.BoundType;
import com.google.common.collect.Range;
import io.shardingjdbc.core.api.algorithm.sharding.ListShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.RangeShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValueUnit;
import io.shardingjdbc.core.constant.ShardingOperator;
import io.shardingjdbc.core.exception.ShardingJdbcException;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* And conditions.
......@@ -104,106 +94,4 @@ public final class AndCondition {
public int size() {
return conditions.size();
}
/**
* Get sharding values via conditions.
*
* @param parameters parameters
* @return sharding value unit
*/
public ShardingValueUnit getShardingValueUnit(final List<Object> parameters) {
ShardingValueUnit result = new ShardingValueUnit();
if (conditions.isEmpty()) {
return result;
}
Map<Column, List<Condition>> conditionsMap = getConditionsMap();
for (Map.Entry<Column, List<Condition>> entry : conditionsMap.entrySet()) {
List<Comparable<?>> listValue = null;
Range<Comparable<?>> rangeValue = null;
for (Condition each : entry.getValue()) {
List<Comparable<?>> values = each.getValues(parameters);
if (Objects.equal(each.getOperator(), ShardingOperator.EQUAL) || Objects.equal(each.getOperator(), ShardingOperator.IN)) {
listValue = mergeValue(values, listValue);
if (null == listValue) {
return null;
}
}
if (Objects.equal(each.getOperator(), ShardingOperator.BETWEEN)) {
try {
rangeValue = mergeValue(Range.range(values.get(0), BoundType.CLOSED, values.get(1), BoundType.CLOSED), rangeValue);
} catch (IllegalArgumentException e) {
return null;
} catch (ClassCastException e) {
throw new ShardingJdbcException("Found different java type for sharding value `%s`.", each.getColumn());
}
}
}
if (null == listValue) {
result.add(new RangeShardingValue<>(entry.getKey().getTableName(), entry.getKey().getName(), rangeValue));
} else {
if (null != rangeValue) {
listValue = mergeValue(listValue, rangeValue);
if (null == listValue) {
return null;
}
}
result.add(new ListShardingValue<>(entry.getKey().getTableName(), entry.getKey().getName(), listValue));
}
}
return result;
}
private Map<Column, List<Condition>> getConditionsMap() {
Map<Column, List<Condition>> result = new LinkedHashMap<>();
for (Condition each : conditions) {
if (null == result.get(each.getColumn())) {
result.put(each.getColumn(), new LinkedList<Condition>());
}
result.get(each.getColumn()).add(each);
}
return result;
}
private List<Comparable<?>> mergeValue(List<Comparable<?>> listValue1, List<Comparable<?>> listValue2) {
if (null == listValue1) {
return listValue2;
}
if (null == listValue2) {
return listValue1;
}
listValue1.retainAll(listValue2);
if (listValue1.isEmpty()) {
return null;
}
return listValue1;
}
private Range<Comparable<?>> mergeValue(Range<Comparable<?>> rangeValue1, Range<Comparable<?>> rangeValue2) {
if (null == rangeValue1) {
return rangeValue2;
}
if (null == rangeValue2) {
return rangeValue1;
}
try {
return rangeValue1.intersection(rangeValue2);
} catch (IllegalArgumentException e) {
return null;
} catch (ClassCastException e) {
throw new ShardingJdbcException("Found different java type for same sharding value.");
}
}
private List<Comparable<?>> mergeValue(List<Comparable<?>> listValue, Range<Comparable<?>> rangeValue) {
List<Comparable<?>> result = new LinkedList<>();
for (Comparable<?> each : listValue) {
if (rangeValue.contains(each)) {
result.add(each);
}
}
if (result.isEmpty()) {
return null;
}
return result;
}
}
......@@ -46,14 +46,13 @@ import java.util.Map.Entry;
* @author zhangliang
*/
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@EqualsAndHashCode
@ToString
public final class Condition {
@Getter
private final Column column;
@Getter
private final ShardingOperator operator;
private final Map<Integer, Comparable<?>> positionValueMap = new LinkedHashMap<>();
......
......@@ -18,15 +18,11 @@
package io.shardingjdbc.core.parsing.parser.context.condition;
import com.google.common.base.Optional;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import io.shardingjdbc.core.rule.ShardingRule;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
/**
* Conditions collection.
*
......@@ -67,7 +63,7 @@ public final class Conditions {
}
/**
* Find condition via column in index and condition.
* Find condition via column.
*
* @param column column
* @param index index of and conditions
......@@ -76,14 +72,4 @@ public final class Conditions {
public Optional<Condition> find(final Column column, final int index) {
return orCondition.find(column, index);
}
/**
* Get sharding values via or condition.
*
* @param parameters parameters
* @return multiple sharding values
*/
public ShardingValues getShardingValues(final List<Object> parameters) {
return orCondition.getShardingValues(parameters);
}
}
......@@ -18,8 +18,6 @@
package io.shardingjdbc.core.parsing.parser.context.condition;
import com.google.common.base.Optional;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValueUnit;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
......@@ -98,27 +96,4 @@ public final class OrCondition {
public int size() {
return andConditions.size();
}
/**
* Get multiple sharding values via and conditions.
*
* @param parameters parameters
* @return sharding values
*/
public ShardingValues getShardingValues(final List<Object> parameters) {
ShardingValues result = null;
if (andConditions.isEmpty()) {
result = new ShardingValues();
}
for (AndCondition each : andConditions) {
ShardingValueUnit shardingValueUnit = each.getShardingValueUnit(parameters);
if (null != shardingValueUnit) {
if (null == result) {
result = new ShardingValues();
}
result.add(shardingValueUnit);
}
}
return result;
}
}
......@@ -38,7 +38,7 @@ import io.shardingjdbc.core.parsing.parser.token.TableToken;
import io.shardingjdbc.core.rewrite.placeholder.IndexPlaceholder;
import io.shardingjdbc.core.rewrite.placeholder.SchemaPlaceholder;
import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import io.shardingjdbc.core.routing.type.TableUnit;
import io.shardingjdbc.core.routing.type.complex.CartesianTableReference;
import io.shardingjdbc.core.rule.BindingTableRule;
......
......@@ -18,7 +18,7 @@
package io.shardingjdbc.core.routing;
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package io.shardingjdbc.core.routing.condition;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.List;
/**
* Sharding conditions.
*
* @author zhangliang
*/
@RequiredArgsConstructor
@Getter
public final class ShardingConditions {
private final List<Object> parameters;
private final ShardingValues shardingValues;
private final GeneratedKey generatedKey;
}
......@@ -17,12 +17,21 @@
package io.shardingjdbc.core.routing.router;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import com.google.common.collect.BoundType;
import com.google.common.collect.Range;
import io.shardingjdbc.core.api.algorithm.sharding.ListShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.RangeShardingValue;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.constant.ShardingOperator;
import io.shardingjdbc.core.exception.ShardingJdbcException;
import io.shardingjdbc.core.parsing.SQLParsingEngine;
import io.shardingjdbc.core.parsing.parser.context.condition.AndCondition;
import io.shardingjdbc.core.parsing.parser.context.condition.Column;
import io.shardingjdbc.core.parsing.parser.context.condition.Condition;
import io.shardingjdbc.core.parsing.parser.context.condition.OrCondition;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement;
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement;
......@@ -34,9 +43,11 @@ import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.parsing.parser.token.GeneratedKeyToken;
import io.shardingjdbc.core.rewrite.SQLBuilder;
import io.shardingjdbc.core.rewrite.SQLRewriteEngine;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.SQLExecutionUnit;
import io.shardingjdbc.core.routing.SQLRouteResult;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.ShardingCondition;
import io.shardingjdbc.core.routing.sharding.ShardingConditions;
import io.shardingjdbc.core.routing.type.RoutingEngine;
import io.shardingjdbc.core.routing.type.RoutingResult;
import io.shardingjdbc.core.routing.type.TableUnit;
......@@ -55,8 +66,10 @@ import io.shardingjdbc.core.util.SQLLogger;
import lombok.RequiredArgsConstructor;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* SQL router with parse.
......@@ -115,7 +128,7 @@ public final class ParsingSQLRouter implements SQLRouter {
private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement, final GeneratedKey generatedKey) {
Collection<String> tableNames = sqlStatement.getTables().getTableNames();
ShardingValues shardingValues = sqlStatement.getConditions().getShardingValues(parameters);
ShardingConditions shardingConditions = getShardingConditions(sqlStatement.getConditions().getOrCondition(), parameters, generatedKey);
RoutingEngine routingEngine;
if (sqlStatement instanceof UseStatement) {
routingEngine = new IgnoreRoutingEngine();
......@@ -123,7 +136,7 @@ public final class ParsingSQLRouter implements SQLRouter {
routingEngine = new TableBroadcastRoutingEngine(shardingRule, sqlStatement);
} else if (sqlStatement instanceof ShowDatabasesStatement || sqlStatement instanceof ShowTablesStatement) {
routingEngine = new DatabaseBroadcastRoutingEngine(shardingRule);
} else if (null == shardingValues) {
} else if (null == shardingConditions) {
routingEngine = new UnicastRoutingEngine(shardingRule, sqlStatement, tableNames);
} else if (sqlStatement instanceof DALStatement) {
routingEngine = new UnicastRoutingEngine(shardingRule, sqlStatement, tableNames);
......@@ -132,10 +145,10 @@ public final class ParsingSQLRouter implements SQLRouter {
} else if (tableNames.isEmpty()) {
routingEngine = new DatabaseBroadcastRoutingEngine(shardingRule);
} else if (1 == tableNames.size() || shardingRule.isAllBindingTables(tableNames) || shardingRule.isAllInDefaultDataSource(tableNames)) {
routingEngine = new StandardRoutingEngine(shardingRule, parameters, tableNames.iterator().next(), shardingValues, generatedKey);
routingEngine = new StandardRoutingEngine(shardingRule, parameters, tableNames.iterator().next(), shardingConditions);
} else {
// TODO config for cartesian set
routingEngine = new ComplexRoutingEngine(shardingRule, parameters, tableNames, shardingValues);
routingEngine = new ComplexRoutingEngine(shardingRule, parameters, tableNames, shardingConditions);
}
return routingEngine.route();
}
......@@ -177,6 +190,129 @@ public final class ParsingSQLRouter implements SQLRouter {
sqlRouteResult.getGeneratedKey().getGeneratedKeys().addAll(generatedKeys);
}
private ShardingConditions getShardingConditions(final OrCondition orCondition, final List<Object> parameters, final GeneratedKey generatedKey) {
ShardingConditions result = null;
if (orCondition.isEmpty()) {
result = new ShardingConditions(generatedKey);
}
for (AndCondition each : orCondition.getAndConditions()) {
ShardingCondition shardingCondition = getShardingCondition(each, parameters);
if (null != shardingCondition) {
if (null == result) {
result = new ShardingConditions(generatedKey);
}
result.add(shardingCondition);
}
}
return result;
}
private ShardingCondition getShardingCondition(final AndCondition andCondition, final List<Object> parameters) {
ShardingCondition result = new ShardingCondition();
if (andCondition.getConditions().isEmpty()) {
return result;
}
Map<Column, List<Condition>> conditionsMap = getConditionsMap(andCondition);
for (Map.Entry<Column, List<Condition>> entry : conditionsMap.entrySet()) {
List<Comparable<?>> listValue = null;
Range<Comparable<?>> rangeValue = null;
for (Condition each : entry.getValue()) {
List<Comparable<?>> values = getValues(each, parameters);
if (Objects.equal(each.getOperator(), ShardingOperator.EQUAL) || Objects.equal(each.getOperator(), ShardingOperator.IN)) {
listValue = mergeValue(values, listValue);
if (null == listValue) {
return null;
}
}
if (Objects.equal(each.getOperator(), ShardingOperator.BETWEEN)) {
try {
rangeValue = mergeValue(Range.range(values.get(0), BoundType.CLOSED, values.get(1), BoundType.CLOSED), rangeValue);
} catch (IllegalArgumentException e) {
return null;
} catch (ClassCastException e) {
throw new ShardingJdbcException("Found different java type for sharding value `%s`.", each.getColumn());
}
}
}
if (null == listValue) {
result.add(new RangeShardingValue<>(entry.getKey().getTableName(), entry.getKey().getName(), rangeValue));
} else {
if (null != rangeValue) {
listValue = mergeValue(listValue, rangeValue);
if (null == listValue) {
return null;
}
}
result.add(new ListShardingValue<>(entry.getKey().getTableName(), entry.getKey().getName(), listValue));
}
}
return result;
}
private Map<Column, List<Condition>> getConditionsMap(AndCondition andCondition) {
Map<Column, List<Condition>> result = new LinkedHashMap<>();
for (Condition each : andCondition.getConditions()) {
if (null == result.get(each.getColumn())) {
result.put(each.getColumn(), new LinkedList<Condition>());
}
result.get(each.getColumn()).add(each);
}
return result;
}
private List<Comparable<?>> getValues(final Condition condition, final List<?> parameters) {
List<Comparable<?>> result = new LinkedList<>(condition.getPositionValueMap().values());
for (Map.Entry<Integer, Integer> entry : condition.getPositionIndexMap().entrySet()) {
Object parameter = parameters.get(entry.getValue());
if (!(parameter instanceof Comparable<?>)) {
throw new ShardingJdbcException("Parameter `%s` should extends Comparable for sharding value.", parameter);
}
if (entry.getKey() < result.size()) {
result.add(entry.getKey(), (Comparable<?>) parameter);
} else {
result.add((Comparable<?>) parameter);
}
}
return result;
}
private List<Comparable<?>> mergeValue(List<Comparable<?>> listValue1, List<Comparable<?>> listValue2) {
if (null == listValue1) {
return listValue2;
}
if (null == listValue2) {
return listValue1;
}
listValue1.retainAll(listValue2);
if (listValue1.isEmpty()) {
return null;
}
return listValue1;
}
private Range<Comparable<?>> mergeValue(Range<Comparable<?>> rangeValue1, Range<Comparable<?>> rangeValue2) {
if (null == rangeValue1) {
return rangeValue2;
}
if (null == rangeValue2) {
return rangeValue1;
}
return rangeValue1.intersection(rangeValue2);
}
private List<Comparable<?>> mergeValue(List<Comparable<?>> listValue, Range<Comparable<?>> rangeValue) {
List<Comparable<?>> result = new LinkedList<>();
for (Comparable<?> each : listValue) {
if (rangeValue.contains(each)) {
result.add(each);
}
}
if (result.isEmpty()) {
return null;
}
return result;
}
private void processLimit(final List<Object> parameters, final SelectStatement selectStatement, final boolean isSingleRouting) {
if (isSingleRouting) {
selectStatement.setLimit(null);
......
......@@ -15,7 +15,7 @@
* </p>
*/
package io.shardingjdbc.core.routing.condition;
package io.shardingjdbc.core.routing.sharding;
import io.shardingjdbc.core.parsing.parser.context.condition.GeneratedKeyCondition;
import lombok.Getter;
......
......@@ -15,8 +15,9 @@
* </p>
*/
package io.shardingjdbc.core.api.algorithm.sharding;
package io.shardingjdbc.core.routing.sharding;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
......@@ -25,14 +26,14 @@ import java.util.LinkedList;
import java.util.List;
/**
* Sharding value unit.
* Sharding condition.
*
* @author maxiaoguang
*/
@RequiredArgsConstructor
@Getter
@ToString
public class ShardingValueUnit {
public class ShardingCondition {
private final List<ShardingValue> shardingValues = new LinkedList<>();
......
......@@ -15,66 +15,66 @@
* </p>
*/
package io.shardingjdbc.core.api.algorithm.sharding;
package io.shardingjdbc.core.routing.sharding;
import com.google.common.base.Optional;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import java.util.LinkedList;
import java.util.List;
/**
* Sharding values collection.
*
* @author maxiaoguang
* Sharding conditions.
*
* @author zhangliang
*/
@RequiredArgsConstructor
@Getter
@ToString
public class ShardingValues {
public final class ShardingConditions {
private final GeneratedKey generatedKey;
private final List<ShardingValueUnit> shardingValueUnits = new LinkedList<>();
private final List<ShardingCondition> shardingConditions = new LinkedList<>();
/**
* Add sharding value unit.
* Add sharding value.
*
* @param shardingValueUnit sharding value unit
* @param shardingCondition sharding condition
*/
public void add(final ShardingValueUnit shardingValueUnit) {
shardingValueUnits.add(shardingValueUnit);
public void add(final ShardingCondition shardingCondition) {
shardingConditions.add(shardingCondition);
}
/**
* Get and condition via index.
* Get sharding condition via index.
*
* @param index index of and conditions
* @param index index of sharding conditions
* @return found and conditions
*/
public Optional<ShardingValueUnit> get(final int index) {
ShardingValueUnit result = null;
public Optional<ShardingCondition> get(final int index) {
ShardingCondition result = null;
if (size() > index) {
result = shardingValueUnits.get(index);
result = shardingConditions.get(index);
}
return Optional.fromNullable(result);
}
/**
* Adjust sharding value units is empty or not.
* Adjust sharding conditions is empty or not.
*
* @return and conditions is empty or not
* @return sharding conditions is empty or not
*/
public boolean isEmpty() {
return shardingValueUnits.isEmpty();
return shardingConditions.isEmpty();
}
/**
* Returns the number of sharding value units in this.
* Returns the number of sharding conditions in this.
*
* @return the number of sharding value units in this
* @return the number of sharding conditions in this
*/
public int size() {
return shardingValueUnits.size();
return shardingConditions.size();
}
}
......@@ -20,8 +20,8 @@ package io.shardingjdbc.core.routing.type.complex;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import io.shardingjdbc.core.exception.ShardingJdbcException;
import io.shardingjdbc.core.routing.sharding.ShardingConditions;
import io.shardingjdbc.core.routing.type.RoutingEngine;
import io.shardingjdbc.core.routing.type.RoutingResult;
import io.shardingjdbc.core.routing.type.standard.StandardRoutingEngine;
......@@ -52,7 +52,7 @@ public final class ComplexRoutingEngine implements RoutingEngine {
private final Collection<String> logicTables;
private final ShardingValues shardingValues;
private final ShardingConditions shardingConditions;
@Override
public RoutingResult route() {
......@@ -62,7 +62,7 @@ public final class ComplexRoutingEngine implements RoutingEngine {
Optional<TableRule> tableRule = shardingRule.tryFindTableRuleByLogicTable(each);
if (tableRule.isPresent()) {
if (!bindingTableNames.contains(each)) {
result.add(new StandardRoutingEngine(shardingRule, parameters, tableRule.get().getLogicTable(), shardingValues, null).route());
result.add(new StandardRoutingEngine(shardingRule, parameters, tableRule.get().getLogicTable(), shardingConditions).route());
}
Optional<BindingTableRule> bindingTableRule = shardingRule.findBindingTableRule(each);
if (bindingTableRule.isPresent()) {
......
......@@ -21,12 +21,10 @@ import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValueUnit;
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValues;
import io.shardingjdbc.core.hint.HintManagerHolder;
import io.shardingjdbc.core.hint.ShardingKey;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.condition.ShardingConditions;
import io.shardingjdbc.core.routing.sharding.ShardingCondition;
import io.shardingjdbc.core.routing.sharding.ShardingConditions;
import io.shardingjdbc.core.routing.strategy.ShardingStrategy;
import io.shardingjdbc.core.routing.type.RoutingEngine;
import io.shardingjdbc.core.routing.type.RoutingResult;
......@@ -55,10 +53,10 @@ public final class StandardRoutingEngine implements RoutingEngine {
private final ShardingConditions shardingConditions;
public StandardRoutingEngine(final ShardingRule shardingRule, final List<Object> parameters, final String logicTableName, final ShardingValues shardingValues, final GeneratedKey generatedKey) {
public StandardRoutingEngine(final ShardingRule shardingRule, final List<Object> parameters, final String logicTableName, final ShardingConditions shardingConditions) {
this.shardingRule = shardingRule;
this.logicTableName = logicTableName;
shardingConditions = new ShardingConditions(parameters, shardingValues, generatedKey);
this.shardingConditions = shardingConditions;
}
@Override
......@@ -77,13 +75,13 @@ public final class StandardRoutingEngine implements RoutingEngine {
private List<ShardingValue> getDatabaseShardingValues(final TableRule tableRule) {
ShardingStrategy strategy = shardingRule.getDatabaseShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint()
? getDatabaseShardingValuesFromHint(strategy.getShardingColumns()) : findShardingValues(strategy.getShardingColumns());
? getDatabaseShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
private List<ShardingValue> getTableShardingValues(final TableRule tableRule) {
ShardingStrategy strategy = shardingRule.getTableShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint()
? getTableShardingValuesFromHint(strategy.getShardingColumns()) : findShardingValues(strategy.getShardingColumns());
? getTableShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
private List<ShardingValue> getDatabaseShardingValuesFromHint(final Collection<String> shardingColumns) {
......@@ -108,12 +106,12 @@ public final class StandardRoutingEngine implements RoutingEngine {
return result;
}
private List<ShardingValue> findShardingValues(Collection<String> shardingColumns) {
private List<ShardingValue> getShardingValues(Collection<String> shardingColumns) {
List<ShardingValue> result = new LinkedList<>();
if (!shardingConditions.getShardingValues().isEmpty()) {
Optional<ShardingValueUnit> shardingValueUnit = shardingConditions.getShardingValues().get(0);
if (shardingValueUnit.isPresent()) {
for (ShardingValue each : shardingValueUnit.get().getShardingValues()) {
if (!shardingConditions.isEmpty()) {
Optional<ShardingCondition> shardingCondition = shardingConditions.get(0);
if (shardingCondition.isPresent()) {
for (ShardingValue each : shardingCondition.get().getShardingValues()) {
if (Objects.equal(each.getLogicTableName(), logicTableName) && shardingColumns.contains(each.getColumnName())) {
result.add(each);
}
......
......@@ -35,7 +35,7 @@ import io.shardingjdbc.core.parsing.parser.token.OrderByToken;
import io.shardingjdbc.core.parsing.parser.token.RowCountToken;
import io.shardingjdbc.core.parsing.parser.token.SchemaToken;
import io.shardingjdbc.core.parsing.parser.token.TableToken;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import io.shardingjdbc.core.routing.type.TableUnit;
import io.shardingjdbc.core.routing.type.complex.CartesianTableReference;
import io.shardingjdbc.core.rule.ShardingRule;
......
......@@ -38,7 +38,7 @@ import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import io.shardingjdbc.core.routing.PreparedStatementRoutingEngine;
import io.shardingjdbc.core.routing.SQLExecutionUnit;
import io.shardingjdbc.core.routing.SQLRouteResult;
......
......@@ -34,7 +34,7 @@ import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.core.routing.condition.GeneratedKey;
import io.shardingjdbc.core.routing.sharding.GeneratedKey;
import io.shardingjdbc.core.routing.SQLExecutionUnit;
import io.shardingjdbc.core.routing.SQLRouteResult;
import io.shardingjdbc.core.routing.StatementRoutingEngine;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册