From e360c9c2ef125aca3f27db4461d24f44b4fefdb0 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 19 May 2016 21:31:42 +0800 Subject: [PATCH] fix #61 --- .../ClosureShardingAlgorithmTest.java | 8 +++++--- .../ddframe/rdb/sharding/api/HintManager.java | 12 ++++++------ .../rdb/sharding/api/ShardingValue.java | 14 ++++++++------ .../parser/result/router/Condition.java | 6 ++++-- .../router/single/SingleRouterUtil.java | 7 ++++--- .../rdb/sharding/api/ShardingValueTest.java | 15 +++++++++------ .../strategy/common/ShardingStrategyTest.java | 18 ++++++++++-------- .../content/post/release_notes.md | 1 + sharding-jdbc-doc/content/post/roadmap.md | 1 - 9 files changed, 47 insertions(+), 35 deletions(-) diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithmTest.java b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithmTest.java index 7ba92c47097c1..f7a366991824e 100644 --- a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithmTest.java +++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithmTest.java @@ -42,14 +42,15 @@ public static void initAlgorithm() { @Test public void testEqual() { - Collection result = algorithm.doSharding(Collections.singletonList("t_order_1"), Collections.>singletonList(new ShardingValue<>("id", 1L))); + Collection result = algorithm.doSharding(Collections.singletonList("t_order_1"), Collections.>singletonList(new ShardingValue<>("t_order", "id", 1L))); assertThat(result.size(), is(1)); assertThat(result, hasItem("t_order_1")); } @Test public void testIn() { - Collection result = algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), Collections.>singletonList(new ShardingValue<>("id", Arrays.asList(1, 2)))); + Collection result = algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), + Collections.>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 void testIn() { @Test(expected = UnsupportedOperationException.class) public void testBetween() { - algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), Collections.>singletonList(new ShardingValue<>("id", Range.range(1, BoundType.CLOSED, 2, BoundType.OPEN)))); + algorithm.doSharding(Arrays.asList("t_order_0", "t_order_1"), + Collections.>singletonList(new ShardingValue<>("t_order", "id", Range.range(1, BoundType.CLOSED, 2, BoundType.OPEN)))); } @Test(expected = NullPointerException.class) diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/HintManager.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/HintManager.java index fff8fdbd1db70..2c2ea76632a31 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/HintManager.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/HintManager.java @@ -76,7 +76,7 @@ public void addDatabaseShardingValue(final String logicTable, final String shard * @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 void addTableShardingValue(final String logicTable, final String sharding * @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>(shardingColumn, values[0]); + return new ShardingValue>(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()); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java index 66e1bc40f9995..d9cd32653c508 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java @@ -42,6 +42,8 @@ @ToString public final class ShardingValue> { + private final String logicTableName; + private final String columnName; private final T value; @@ -50,16 +52,16 @@ public final class ShardingValue> { private final Range valueRange; - public ShardingValue(final String columnName, final T value) { - this(columnName, value, Collections.emptyList(), null); + public ShardingValue(final String logicTableName, final String columnName, final T value) { + this(logicTableName, columnName, value, Collections.emptyList(), null); } - public ShardingValue(final String columnName, final Collection values) { - this(columnName, null, values, null); + public ShardingValue(final String logicTableName, final String columnName, final Collection values) { + this(logicTableName, columnName, null, values, null); } - public ShardingValue(final String columnName, final Range valueRange) { - this(columnName, null, Collections.emptyList(), valueRange); + public ShardingValue(final String logicTableName, final String columnName, final Range valueRange) { + this(logicTableName, columnName, null, Collections.emptyList(), valueRange); } /** diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/result/router/Condition.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/result/router/Condition.java index ba06e1aaa11c7..17fd30545fb87 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/result/router/Condition.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/result/router/Condition.java @@ -45,7 +45,8 @@ public final class Condition { /** * 列对象. * - * @author gaohongtao, zhangliang + * @author gaohongtao + * @author zhangliang */ @RequiredArgsConstructor @Getter @@ -61,7 +62,8 @@ public static final class Column { /** * 操作符枚举. * - * @author gaohongtao, zhangliang + * @author gaohongtao + * @author zhangliang */ @RequiredArgsConstructor public enum BinaryOperator { diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleRouterUtil.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleRouterUtil.java index 3a7a8180ef686..ad6c58ad87a5f 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleRouterUtil.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleRouterUtil.java @@ -46,11 +46,12 @@ public static ShardingValue convertConditionToShardingValue(final Condition c case EQUAL: case IN: if (1 == conditionValues.size()) { - return new ShardingValue>(condition.getColumn().getColumnName(), conditionValues.get(0)); + return new ShardingValue>(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()); } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueTest.java index f24ecda5d547e..32125d2a69590 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueTest.java @@ -30,31 +30,34 @@ public final class ShardingValueTest { @Test public void assertGetTypeWithSingleValue() { - assertThat(new ShardingValue<>("columnName", "value").getType(), is(ShardingValueType.SINGLE)); + assertThat(new ShardingValue<>("logicTableName", "columnName", "value").getType(), is(ShardingValueType.SINGLE)); } @Test public void assertGetTypeWithMultipleValue() { - assertThat(new ShardingValue<>("columnName", Collections.singletonList("value")).getType(), is(ShardingValueType.LIST)); + assertThat(new ShardingValue<>("logicTableName", "columnName", Collections.singletonList("value")).getType(), is(ShardingValueType.LIST)); } @Test public void assertGetTypeWithRangeValue() { - assertThat(new ShardingValue<>("columnName", Range.closed(10, 20)).getType(), is(ShardingValueType.RANGE)); + assertThat(new ShardingValue<>("logicTableName", "columnName", Range.closed(10, 20)).getType(), is(ShardingValueType.RANGE)); } @Test public void assertToStringWithSingleValue() { - assertThat(new ShardingValue<>("columnName", "value").toString(), is("ShardingValue(columnName=columnName, value=value, values=[], valueRange=null)")); + assertThat(new ShardingValue<>("logicTableName", "columnName", "value").toString(), is( + "ShardingValue(logicTableName=logicTableName, columnName=columnName, value=value, values=[], valueRange=null)")); } @Test public void assertToStringWithMultipleValue() { - assertThat(new ShardingValue<>("columnName", Collections.singletonList("value")).toString(), is("ShardingValue(columnName=columnName, value=null, values=[value], valueRange=null)")); + assertThat(new ShardingValue<>("logicTableName", "columnName", Collections.singletonList("value")).toString(), is( + "ShardingValue(logicTableName=logicTableName, columnName=columnName, value=null, values=[value], valueRange=null)")); } @Test public void assertToStringWithRangeValue() { - assertThat(new ShardingValue<>("columnName", Range.closed(10, 20)).toString(), is("ShardingValue(columnName=columnName, value=null, values=[], valueRange=[10‥20])")); + assertThat(new ShardingValue<>("logicTableName", "columnName", Range.closed(10, 20)).toString(), is( + "ShardingValue(logicTableName=logicTableName, columnName=columnName, value=null, values=[], valueRange=[10‥20])")); } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategyTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategyTest.java index 732c333eda8b0..0f47fa8b1c05c 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategyTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategyTest.java @@ -52,27 +52,29 @@ public void assertDoStaticShardingForInsertWithoutShardingColumns() { @Test public void assertDoStaticShardingForEqualSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("column", "1"))), is((Collection) Collections.singletonList("1"))); + assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("logicTable", "column", "1"))), + is((Collection) Collections.singletonList("1"))); } @Test public void assertDoStaticShardingForInSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("column", Arrays.asList("1", "3")))), + assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("logicTable", "column", Arrays.asList("1", "3")))), is((Collection) Arrays.asList("1", "3"))); } @Test public void assertDoStaticShardingForBetweenSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("column", Range.open("1", "3")))), + assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("logicTable", "column", Range.open("1", "3")))), is((Collection) Arrays.asList("1", "2", "3"))); } @Test public void assertDoStaticShardingForMultipleKeys() { ShardingStrategy strategy = new ShardingStrategy("column", new TestMultipleKeysShardingAlgorithm()); - assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("column", "1"))), is((Collection) Arrays.asList("1", "2", "3"))); + assertThat(strategy.doStaticSharding(SQLStatementType.SELECT, targets, createShardingValues(new ShardingValue<>("logicTable", "column", "1"))), + is((Collection) Arrays.asList("1", "2", "3"))); } @Test(expected = IllegalStateException.class) @@ -84,25 +86,25 @@ public void assertDoDynamicShardingWithoutShardingColumns() { @Test public void assertDoDynamicShardingForEqualSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("column", "1"))), is((Collection) Collections.singletonList("1"))); + assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("logicTable", "column", "1"))), is((Collection) Collections.singletonList("1"))); } @Test public void assertDoDynamicShardingForInSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("column", Arrays.asList("1", "3")))), is((Collection) Arrays.asList("1", "3"))); + assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("logicTable", "column", Arrays.asList("1", "3")))), is((Collection) Arrays.asList("1", "3"))); } @Test public void assertDoDynamicShardingForBetweenSingleKey() { ShardingStrategy strategy = new ShardingStrategy("column", new TestSingleKeyShardingAlgorithm()); - assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("column", Range.open("1", "3")))), is((Collection) Arrays.asList("1", "2", "3"))); + assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("logicTable", "column", Range.open("1", "3")))), is((Collection) Arrays.asList("1", "2", "3"))); } @Test public void assertDoDynamicShardingForMultipleKeys() { ShardingStrategy strategy = new ShardingStrategy("column", new TestMultipleKeysShardingAlgorithm()); - assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("column", "1"))), is((Collection) Collections.emptyList())); + assertThat(strategy.doDynamicSharding(createShardingValues(new ShardingValue<>("logicTable", "column", "1"))), is((Collection) Collections.emptyList())); } private Collection> createShardingValues(final ShardingValue shardingValue) { diff --git a/sharding-jdbc-doc/content/post/release_notes.md b/sharding-jdbc-doc/content/post/release_notes.md index 8a87f8a5b84f6..1505105a3c7a7 100644 --- a/sharding-jdbc-doc/content/post/release_notes.md +++ b/sharding-jdbc-doc/content/post/release_notes.md @@ -14,6 +14,7 @@ weight = 1 ### 功能提升 +1. [ISSUE #61](https://github.com/dangdangdotcom/sharding-jdbc/issues/61) 在ShardingValue类中加入逻辑表名 1. [ISSUE #66](https://github.com/dangdangdotcom/sharding-jdbc/issues/66) 在JDBC层的Statement增加对get/set MaxFieldSize,MaxRows和QueryTimeout的支持 ### 缺陷修正 diff --git a/sharding-jdbc-doc/content/post/roadmap.md b/sharding-jdbc-doc/content/post/roadmap.md index bfebc2e82e9ae..549fe990b0afa 100644 --- a/sharding-jdbc-doc/content/post/roadmap.md +++ b/sharding-jdbc-doc/content/post/roadmap.md @@ -15,7 +15,6 @@ weight = 11 ### config 2.0 1. 动态表配置 `(完成)` -1. 只分库不需要逻辑表和真实表对应配置 1. 简化只分库配置,无需配置逻辑表和真实表对应关系 1. 简化只分表配置,可指定默认数据源,简化单库TableRule配置