Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
46e7a71e
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,发现更多精彩内容 >>
提交
46e7a71e
编写于
9月 05, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor ShardingStrategy: auto merge in, split range strategy 7th version
上级
cf0bbda9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
45 deletion
+45
-45
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
...rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
+45
-45
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/type/simple/SimpleRoutingEngine.java
浏览文件 @
46e7a71e
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录