Commit e360c9c2 authored by terrymanu's avatar terrymanu
Browse files

fix #61

parent b5539fc9
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -42,14 +42,15 @@ public class ClosureShardingAlgorithmTest {
    
    @Test
    public void testEqual() {
        Collection<String> result = algorithm.doSharding(Collections.singletonList("t_order_1"), Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("id", 1L)));
        Collection<String> result = algorithm.doSharding(Collections.singletonList("t_order_1"), Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("t_order", "id", 1L)));
        assertThat(result.size(), is(1));
        assertThat(result, hasItem("t_order_1"));
    }
    
    @Test
    public void testIn() {
        Collection<String> result = algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("id", Arrays.asList(1, 2))));
        Collection<String> result = algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), 
                Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("t_order", "id", Arrays.asList(1, 2))));
        assertThat(result.size(), is(2));
        assertThat(result, hasItem("t_order_0"));
        assertThat(result, hasItem("t_order_1"));
@@ -57,7 +58,8 @@ public class ClosureShardingAlgorithmTest {
    
    @Test(expected = UnsupportedOperationException.class)
    public void testBetween() {
        algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("id", Range.range(1, BoundType.CLOSED, 2, BoundType.OPEN))));
        algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), 
                Collections.<ShardingValue<?>>singletonList(new ShardingValue<>("t_order", "id", Range.range(1, BoundType.CLOSED, 2, BoundType.OPEN))));
    }
    
    @Test(expected = NullPointerException.class)
+6 −6
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ public final class HintManager implements AutoCloseable {
     * @param values 分片值
     */
    public void addDatabaseShardingValue(final String logicTable, final String shardingColumn, final Condition.BinaryOperator binaryOperator, final Comparable<?>... values) {
        databaseShardingValues.put(new ShardingKey(logicTable, shardingColumn), getShardingValue(shardingColumn, binaryOperator, values));
        databaseShardingValues.put(new ShardingKey(logicTable, shardingColumn), getShardingValue(logicTable, shardingColumn, binaryOperator, values));
    }
    
    /**
@@ -101,19 +101,19 @@ public final class HintManager implements AutoCloseable {
     * @param values 分片值
     */
    public void addTableShardingValue(final String logicTable, final String shardingColumn, final Condition.BinaryOperator binaryOperator, final Comparable<?>... values) {
        tableShardingValues.put(new ShardingKey(logicTable, shardingColumn), getShardingValue(shardingColumn, binaryOperator, values));
        tableShardingValues.put(new ShardingKey(logicTable, shardingColumn), getShardingValue(logicTable, shardingColumn, binaryOperator, values));
    }
    
    @SuppressWarnings("unchecked")
    private ShardingValue getShardingValue(final String shardingColumn, final Condition.BinaryOperator binaryOperator, final Comparable<?>[] values) {
    private ShardingValue getShardingValue(final String logicTable, final String shardingColumn, final Condition.BinaryOperator binaryOperator, final Comparable<?>[] values) {
        Preconditions.checkArgument(null != values && values.length > 0);
        switch (binaryOperator) {
            case EQUAL:
                return new ShardingValue<Comparable<?>>(shardingColumn, values[0]);
                return new ShardingValue<Comparable<?>>(logicTable, shardingColumn, values[0]);
            case IN:
                return new ShardingValue(shardingColumn, Arrays.asList(values));
                return new ShardingValue(logicTable, shardingColumn, Arrays.asList(values));
            case BETWEEN:
                return new ShardingValue(shardingColumn, Range.range(values[0], BoundType.CLOSED, values[1], BoundType.CLOSED));
                return new ShardingValue(logicTable, shardingColumn, Range.range(values[0], BoundType.CLOSED, values[1], BoundType.CLOSED));
            default:
                throw new UnsupportedOperationException(binaryOperator.getExpression());
        }
+8 −6
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ import com.google.common.collect.Range;
@ToString
public final class ShardingValue<T extends Comparable<?>> {
    
    private final String logicTableName;
    
    private final String columnName;
    
    private final T value;
@@ -50,16 +52,16 @@ public final class ShardingValue<T extends Comparable<?>> {
    
    private final Range<T> valueRange;
    
    public ShardingValue(final String columnName, final T value) {
        this(columnName, value, Collections.<T>emptyList(), null);
    public ShardingValue(final String logicTableName, final String columnName, final T value) {
        this(logicTableName, columnName, value, Collections.<T>emptyList(), null);
    }
    
    public ShardingValue(final String columnName, final Collection<T> values) {
        this(columnName, null, values, null);
    public ShardingValue(final String logicTableName, final String columnName, final Collection<T> values) {
        this(logicTableName, columnName, null, values, null);
    }
    
    public ShardingValue(final String columnName, final Range<T> valueRange) {
        this(columnName, null, Collections.<T>emptyList(), valueRange);
    public ShardingValue(final String logicTableName, final String columnName, final Range<T> valueRange) {
        this(logicTableName, columnName, null, Collections.<T>emptyList(), valueRange);
    }
    
    /**
+4 −2
Original line number Diff line number Diff line
@@ -45,7 +45,8 @@ public final class Condition {
    /**
     * 列对象.
     * 
     * @author gaohongtao, zhangliang
     * @author gaohongtao
     * @author zhangliang
     */
    @RequiredArgsConstructor
    @Getter
@@ -61,7 +62,8 @@ public final class Condition {
    /**
     * 操作符枚举.
     * 
     * @author gaohongtao, zhangliang
     * @author gaohongtao
     * @author zhangliang
     */
    @RequiredArgsConstructor
    public enum BinaryOperator {
+4 −3
Original line number Diff line number Diff line
@@ -46,11 +46,12 @@ public class SingleRouterUtil {
            case EQUAL:
            case IN:
                if (1 == conditionValues.size()) {
                    return new ShardingValue<Comparable<?>>(condition.getColumn().getColumnName(), conditionValues.get(0));
                    return new ShardingValue<Comparable<?>>(condition.getColumn().getTableName(), condition.getColumn().getColumnName(), conditionValues.get(0));
                }
                return new ShardingValue<>(condition.getColumn().getColumnName(), conditionValues);
                return new ShardingValue<>(condition.getColumn().getTableName(), condition.getColumn().getColumnName(), conditionValues);
            case BETWEEN:
                return new ShardingValue<>(condition.getColumn().getColumnName(), Range.range(conditionValues.get(0), BoundType.CLOSED, conditionValues.get(1), BoundType.CLOSED));
                return new ShardingValue<>(condition.getColumn().getTableName(), condition.getColumn().getColumnName(), 
                        Range.range(conditionValues.get(0), BoundType.CLOSED, conditionValues.get(1), BoundType.CLOSED));
            default:
                throw new UnsupportedOperationException(condition.getOperator().getExpression());
        }
Loading