Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
98d7732d
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
98d7732d
编写于
9月 07, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor ShardingStrategy: auto merge in, split range strategy 13th version
上级
289759ac
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
21 addition
and
78 deletion
+21
-78
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithm.java
...g/common/internal/algorithm/ClosureShardingAlgorithm.java
+4
-9
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ListShardingValue.java
.../dangdang/ddframe/rdb/sharding/api/ListShardingValue.java
+0
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/RangeShardingValue.java
...dangdang/ddframe/rdb/sharding/api/RangeShardingValue.java
+0
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java
.../com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java
+0
-7
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueType.java
.../dangdang/ddframe/rdb/sharding/api/ShardingValueType.java
+0
-24
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/SingleShardingValue.java
...angdang/ddframe/rdb/sharding/api/SingleShardingValue.java
+0
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/strategy/ShardingStrategy.java
...frame/rdb/sharding/routing/strategy/ShardingStrategy.java
+3
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/hint/DatabaseHintRoutingEngine.java
...sharding/routing/type/hint/DatabaseHintRoutingEngine.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
...rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
+3
-3
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/fixture/MultipleKeysModuloDatabaseShardingAlgorithm.java
.../fixture/MultipleKeysModuloDatabaseShardingAlgorithm.java
+9
-9
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/HintManagerTest.java
...om/dangdang/ddframe/rdb/sharding/api/HintManagerTest.java
+0
-4
未找到文件。
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/algorithm/ClosureShardingAlgorithm.java
浏览文件 @
98d7732d
...
...
@@ -17,6 +17,7 @@
package
com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm
;
import
com.dangdang.ddframe.rdb.sharding.api.RangeShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ListShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.routing.strategy.MultipleKeysShardingAlgorithm
;
...
...
@@ -59,16 +60,10 @@ public class ClosureShardingAlgorithm implements MultipleKeysShardingAlgorithm {
List
<
String
>
columnNames
=
new
ArrayList
<>(
shardingValues
.
size
());
for
(
ShardingValue
<?>
each
:
shardingValues
)
{
columnNames
.
add
(
each
.
getColumnName
());
switch
(
each
.
getType
())
{
case
SINGLE:
case
LIST:
valuesDim
.
add
(
Sets
.<
Comparable
>
newHashSet
(((
ListShardingValue
)
each
).
getValues
()));
break
;
case
RANGE:
throw
new
UnsupportedOperationException
(
"Inline expression does not support BETWEEN, please use Java API Config"
);
default
:
throw
new
UnsupportedOperationException
(
each
.
getType
().
name
());
if
(
each
instanceof
RangeShardingValue
)
{
throw
new
UnsupportedOperationException
(
"Inline expression does not support BETWEEN, please use Java API Config"
);
}
valuesDim
.
add
(
Sets
.<
Comparable
>
newHashSet
(((
ListShardingValue
)
each
).
getValues
()));
}
Set
<
List
<
Comparable
>>
cartesianValues
=
Sets
.
cartesianProduct
(
valuesDim
);
List
<
String
>
result
=
new
ArrayList
<>(
cartesianValues
.
size
());
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ListShardingValue.java
浏览文件 @
98d7732d
...
...
@@ -38,9 +38,4 @@ public final class ListShardingValue<T extends Comparable<?>> implements Shardin
private
final
String
columnName
;
private
final
Collection
<
T
>
values
;
@Override
public
ShardingValueType
getType
()
{
return
ShardingValueType
.
LIST
;
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/RangeShardingValue.java
浏览文件 @
98d7732d
...
...
@@ -37,9 +37,4 @@ public final class RangeShardingValue<T extends Comparable<?>> implements Shardi
private
final
String
columnName
;
private
final
Range
<
T
>
valueRange
;
@Override
public
ShardingValueType
getType
()
{
return
ShardingValueType
.
RANGE
;
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValue.java
浏览文件 @
98d7732d
...
...
@@ -37,11 +37,4 @@ public interface ShardingValue<T extends Comparable<?>> {
* @return column name
*/
String
getColumnName
();
/**
* Get sharding value type.
*
* @return sharding value type
*/
ShardingValueType
getType
();
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingValueType.java
已删除
100644 → 0
浏览文件 @
289759ac
package
com.dangdang.ddframe.rdb.sharding.api
;
/**
* Sharding value type.
*
* @author zhangliang
*/
public
enum
ShardingValueType
{
/**
* Sharding for {@code =}.
*/
SINGLE
,
/**
* Sharding for {@code IN}.
*/
LIST
,
/**
* Sharding for {@code BETWEEN}.
*/
RANGE
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/SingleShardingValue.java
浏览文件 @
98d7732d
...
...
@@ -36,9 +36,4 @@ public final class SingleShardingValue<T extends Comparable<?>> implements Shard
private
final
String
columnName
;
private
final
T
value
;
@Override
public
ShardingValueType
getType
()
{
return
ShardingValueType
.
SINGLE
;
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/strategy/ShardingStrategy.java
浏览文件 @
98d7732d
...
...
@@ -105,12 +105,10 @@ public class ShardingStrategy {
if
(
shardingAlgorithm
instanceof
SingleKeyShardingAlgorithm
)
{
SingleKeyShardingAlgorithm
<?>
singleKeyShardingAlgorithm
=
(
SingleKeyShardingAlgorithm
<?>)
shardingAlgorithm
;
ShardingValue
shardingValue
=
shardingValues
.
iterator
().
next
();
switch
(
shardingValue
.
getType
())
{
case
RANGE:
return
singleKeyShardingAlgorithm
.
doBetweenSharding
(
availableTargetNames
,
(
RangeShardingValue
)
shardingValue
);
default
:
throw
new
UnsupportedOperationException
(
shardingValue
.
getType
().
getClass
().
getName
());
if
(
shardingValue
instanceof
RangeShardingValue
)
{
return
singleKeyShardingAlgorithm
.
doBetweenSharding
(
availableTargetNames
,
(
RangeShardingValue
)
shardingValue
);
}
throw
new
UnsupportedOperationException
(
"Cannot support shardingValue:"
+
shardingValue
);
}
if
(
shardingAlgorithm
instanceof
MultipleKeysShardingAlgorithm
)
{
return
((
MultipleKeysShardingAlgorithm
)
shardingAlgorithm
).
doSharding
(
availableTargetNames
,
shardingValues
);
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/hint/DatabaseHintRoutingEngine.java
浏览文件 @
98d7732d
...
...
@@ -17,9 +17,9 @@
package
com.dangdang.ddframe.rdb.sharding.routing.type.hint
;
import
com.dangdang.ddframe.rdb.sharding.api.RangeShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ListShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValueType
;
import
com.dangdang.ddframe.rdb.sharding.api.SingleShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule
;
import
com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy
;
...
...
@@ -80,7 +80,7 @@ public final class DatabaseHintRoutingEngine implements RoutingEngine {
}
private
boolean
isAccurateSharding
(
final
ShardingValue
shardingValue
,
final
ShardingStrategy
shardingStrategy
)
{
return
shardingStrategy
.
getShardingAlgorithm
()
instanceof
SingleKeyShardingAlgorithm
&&
ShardingValueType
.
RANGE
!=
shardingValue
.
getType
(
);
return
shardingStrategy
.
getShardingAlgorithm
()
instanceof
SingleKeyShardingAlgorithm
&&
!(
shardingValue
instanceof
RangeShardingValue
);
}
@SuppressWarnings
(
"unchecked"
)
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
浏览文件 @
98d7732d
...
...
@@ -17,9 +17,9 @@
package
com.dangdang.ddframe.rdb.sharding.routing.type.simple
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ListShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValueType
;
import
com.dangdang.ddframe.rdb.sharding.api.RangeShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.ShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.SingleShardingValue
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.DataNode
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule
;
...
...
@@ -155,7 +155,7 @@ public final class SimpleRoutingEngine implements RoutingEngine {
}
private
boolean
isAccurateSharding
(
final
List
<
ShardingValue
>
shardingValues
,
final
ShardingStrategy
shardingStrategy
)
{
return
1
==
shardingValues
.
size
()
&&
shardingStrategy
.
getShardingAlgorithm
()
instanceof
SingleKeyShardingAlgorithm
&&
ShardingValueType
.
RANGE
!=
shardingValues
.
get
(
0
).
getType
(
);
return
1
==
shardingValues
.
size
()
&&
shardingStrategy
.
getShardingAlgorithm
()
instanceof
SingleKeyShardingAlgorithm
&&
!(
shardingValues
.
get
(
0
)
instanceof
RangeShardingValue
);
}
@SuppressWarnings
(
"unchecked"
)
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/fixture/MultipleKeysModuloDatabaseShardingAlgorithm.java
浏览文件 @
98d7732d
...
...
@@ -34,16 +34,16 @@ public final class MultipleKeysModuloDatabaseShardingAlgorithm implements Multip
@Override
public
Collection
<
String
>
doSharding
(
final
Collection
<
String
>
availableTargetNames
,
final
Collection
<
ShardingValue
>
shardingValues
)
{
ShardingValue
shardingValue
=
shardingValues
.
iterator
().
next
();
switch
(
shardingValue
.
getType
())
{
case
SINGLE:
return
doEqualSharding
(
availableTargetNames
,
(
SingleShardingValue
<
Integer
>)
shardingValue
);
case
LIST:
return
doInSharding
(
availableTargetNames
,
(
ListShardingValue
<
Integer
>)
shardingValue
);
case
RANGE:
return
doBetweenSharding
(
availableTargetNames
,
(
RangeShardingValue
<
Integer
>)
shardingValue
);
default
:
throw
new
UnsupportedOperationException
();
if
(
shardingValue
instanceof
SingleShardingValue
)
{
return
doEqualSharding
(
availableTargetNames
,
(
SingleShardingValue
<
Integer
>)
shardingValue
);
}
if
(
shardingValue
instanceof
ListShardingValue
)
{
return
doInSharding
(
availableTargetNames
,
(
ListShardingValue
<
Integer
>)
shardingValue
);
}
if
(
shardingValue
instanceof
RangeShardingValue
)
{
return
doBetweenSharding
(
availableTargetNames
,
(
RangeShardingValue
<
Integer
>)
shardingValue
);
}
throw
new
UnsupportedOperationException
();
}
private
Collection
<
String
>
doEqualSharding
(
final
Collection
<
String
>
availableTargetNames
,
final
SingleShardingValue
<
Integer
>
shardingValue
)
{
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/HintManagerTest.java
浏览文件 @
98d7732d
...
...
@@ -46,7 +46,6 @@ public final class HintManagerTest {
ShardingKey
shardingKey
=
new
ShardingKey
(
"logicTable"
,
"shardingColumn"
);
assertTrue
(
HintManagerHolder
.
getDatabaseShardingValue
(
shardingKey
).
isPresent
());
assertThat
(
hintManager
.
getDatabaseShardingValue
(
shardingKey
).
getColumnName
(),
is
(
"shardingColumn"
));
assertThat
(
hintManager
.
getDatabaseShardingValue
(
shardingKey
).
getType
(),
is
(
ShardingValueType
.
LIST
));
assertThat
(((
ListShardingValue
)
hintManager
.
getDatabaseShardingValue
(
shardingKey
)).
getValues
().
size
(),
is
(
3
));
}
}
...
...
@@ -58,7 +57,6 @@ public final class HintManagerTest {
ShardingKey
shardingKey
=
new
ShardingKey
(
"logicTable"
,
"shardingColumn"
);
assertTrue
(
HintManagerHolder
.
getDatabaseShardingValue
(
shardingKey
).
isPresent
());
assertThat
(
hintManager
.
getDatabaseShardingValue
(
shardingKey
).
getColumnName
(),
is
(
"shardingColumn"
));
assertThat
(
hintManager
.
getDatabaseShardingValue
(
shardingKey
).
getType
(),
is
(
ShardingValueType
.
RANGE
));
assertThat
(((
RangeShardingValue
)
hintManager
.
getDatabaseShardingValue
(
shardingKey
)).
getValueRange
().
lowerEndpoint
(),
is
((
Comparable
)
1
));
assertThat
(((
RangeShardingValue
)
hintManager
.
getDatabaseShardingValue
(
shardingKey
)).
getValueRange
().
upperEndpoint
(),
is
((
Comparable
)
10
));
}
...
...
@@ -83,7 +81,6 @@ public final class HintManagerTest {
ShardingKey
shardingKey
=
new
ShardingKey
(
"logicTable"
,
"shardingColumn"
);
assertTrue
(
HintManagerHolder
.
getTableShardingValue
(
shardingKey
).
isPresent
());
assertThat
(
hintManager
.
getTableShardingValue
(
shardingKey
).
getColumnName
(),
is
(
"shardingColumn"
));
assertThat
(
hintManager
.
getTableShardingValue
(
shardingKey
).
getType
(),
is
(
ShardingValueType
.
LIST
));
assertThat
(((
ListShardingValue
)
hintManager
.
getTableShardingValue
(
shardingKey
)).
getValues
().
size
(),
is
(
3
));
}
}
...
...
@@ -95,7 +92,6 @@ public final class HintManagerTest {
ShardingKey
shardingKey
=
new
ShardingKey
(
"logicTable"
,
"shardingColumn"
);
assertTrue
(
HintManagerHolder
.
getTableShardingValue
(
shardingKey
).
isPresent
());
assertThat
(
hintManager
.
getTableShardingValue
(
shardingKey
).
getColumnName
(),
is
(
"shardingColumn"
));
assertThat
(
hintManager
.
getTableShardingValue
(
shardingKey
).
getType
(),
is
(
ShardingValueType
.
RANGE
));
assertThat
(((
RangeShardingValue
)
hintManager
.
getTableShardingValue
(
shardingKey
)).
getValueRange
().
lowerEndpoint
(),
is
((
Comparable
)
1
));
assertThat
(((
RangeShardingValue
)
hintManager
.
getTableShardingValue
(
shardingKey
)).
getValueRange
().
upperEndpoint
(),
is
((
Comparable
)
10
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录