提交 46e7a71e 编写于 作者: T terrymanu

refactor ShardingStrategy: auto merge in, split range strategy 7th version

上级 cf0bbda9
......@@ -76,18 +76,45 @@ public final class SimpleRoutingEngine implements RoutingEngine {
return generateRoutingResult(tableRule, routedMap);
}
private boolean isAccurateSharding(final List<ShardingValue> shardingValues, final ShardingStrategy shardingStrategy) {
return 1 == shardingValues.size() && shardingStrategy.getShardingAlgorithm() instanceof SingleKeyShardingAlgorithm && ShardingValue.ShardingValueType.RANGE != shardingValues.get(0).getType();
private List<ShardingValue> getDatabaseShardingValues(final TableRule tableRule) {
DatabaseShardingStrategy strategy = shardingRule.getDatabaseShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint() ? getDatabaseShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
@SuppressWarnings("unchecked")
private List<ShardingValue> transferToShardingValues(final ShardingValue<?> shardingValue) {
if (ShardingValue.ShardingValueType.SINGLE == shardingValue.getType()) {
return Collections.<ShardingValue>singletonList(shardingValue);
private List<ShardingValue> getTableShardingValues(final TableRule tableRule) {
TableShardingStrategy strategy = shardingRule.getTableShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint() ? getTableShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
private List<ShardingValue> getDatabaseShardingValuesFromHint(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<ShardingValue<?>> shardingValue = HintManagerHolder.getDatabaseShardingValue(new ShardingKey(logicTableName, each));
if (shardingValue.isPresent()) {
result.add(shardingValue.get());
}
}
List<ShardingValue> result = new ArrayList<>(shardingValue.getValues().size());
for (Comparable<?> each : shardingValue.getValues()) {
result.add(new ShardingValue(shardingValue.getLogicTableName(), shardingValue.getColumnName(), each));
return result;
}
private List<ShardingValue> getTableShardingValuesFromHint(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<ShardingValue<?>> shardingValue = HintManagerHolder.getTableShardingValue(new ShardingKey(logicTableName, each));
if (shardingValue.isPresent()) {
result.add(shardingValue.get());
}
}
return result;
}
private List<ShardingValue> getShardingValues(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<Condition> condition = sqlStatement.getConditions().find(new Column(each, logicTableName));
if (condition.isPresent()) {
result.add(condition.get().getShardingValue(parameters));
}
}
return result;
}
......@@ -107,11 +134,6 @@ public final class SimpleRoutingEngine implements RoutingEngine {
return result;
}
private List<ShardingValue> getDatabaseShardingValues(final TableRule tableRule) {
DatabaseShardingStrategy strategy = shardingRule.getDatabaseShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint() ? getDatabaseShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
private Collection<String> routeTables(final TableRule tableRule, final String routedDataSource, final List<ShardingValue> tableShardingValues) {
TableShardingStrategy strategy = shardingRule.getTableShardingStrategy(tableRule);
if (isAccurateSharding(tableShardingValues, strategy)) {
......@@ -128,40 +150,18 @@ public final class SimpleRoutingEngine implements RoutingEngine {
return result;
}
private List<ShardingValue> getTableShardingValues(final TableRule tableRule) {
TableShardingStrategy strategy = shardingRule.getTableShardingStrategy(tableRule);
return HintManagerHolder.isUseShardingHint() ? getTableShardingValuesFromHint(strategy.getShardingColumns()) : getShardingValues(strategy.getShardingColumns());
}
private List<ShardingValue> getDatabaseShardingValuesFromHint(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<ShardingValue<?>> shardingValue = HintManagerHolder.getDatabaseShardingValue(new ShardingKey(logicTableName, each));
if (shardingValue.isPresent()) {
result.add(shardingValue.get());
}
}
return result;
private boolean isAccurateSharding(final List<ShardingValue> shardingValues, final ShardingStrategy shardingStrategy) {
return 1 == shardingValues.size() && shardingStrategy.getShardingAlgorithm() instanceof SingleKeyShardingAlgorithm && ShardingValue.ShardingValueType.RANGE != shardingValues.get(0).getType();
}
private List<ShardingValue> getTableShardingValuesFromHint(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<ShardingValue<?>> shardingValue = HintManagerHolder.getTableShardingValue(new ShardingKey(logicTableName, each));
if (shardingValue.isPresent()) {
result.add(shardingValue.get());
}
@SuppressWarnings("unchecked")
private List<ShardingValue> transferToShardingValues(final ShardingValue<?> shardingValue) {
if (ShardingValue.ShardingValueType.SINGLE == shardingValue.getType()) {
return Collections.<ShardingValue>singletonList(shardingValue);
}
return result;
}
private List<ShardingValue> getShardingValues(final Collection<String> shardingColumns) {
List<ShardingValue> result = new ArrayList<>(shardingColumns.size());
for (String each : shardingColumns) {
Optional<Condition> condition = sqlStatement.getConditions().find(new Column(each, logicTableName));
if (condition.isPresent()) {
result.add(condition.get().getShardingValue(parameters));
}
List<ShardingValue> result = new ArrayList<>(shardingValue.getValues().size());
for (Comparable<?> each : shardingValue.getValues()) {
result.add(new ShardingValue(shardingValue.getLogicTableName(), shardingValue.getColumnName(), each));
}
return result;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册