Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
b005981e
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 搜索 >>
提交
b005981e
编写于
3月 14, 2016
作者:
G
gaohongtao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.fix test case error in jdk 8
2.Optimize table sharding rule
上级
7921481a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
29 addition
and
14 deletion
+29
-14
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/TableRuleTest.java
...me/rdb/sharding/config/common/internal/TableRuleTest.java
+9
-6
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
...com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
+16
-4
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategy.java
...me/rdb/sharding/api/strategy/common/ShardingStrategy.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleTableRouter.java
...ddframe/rdb/sharding/router/single/SingleTableRouter.java
+2
-2
未找到文件。
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/internal/TableRuleTest.java
浏览文件 @
b005981e
...
...
@@ -24,6 +24,7 @@ import java.util.HashMap;
import
java.util.Map
;
import
com.dangdang.ddframe.rdb.sharding.api.DatabaseType
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.DataNode
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.TableRule
;
import
com.dangdang.ddframe.rdb.sharding.exception.SQLParserException
;
import
com.dangdang.ddframe.rdb.sharding.router.SQLRouteEngine
;
...
...
@@ -31,6 +32,7 @@ import com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult;
import
com.google.common.collect.Lists
;
import
org.junit.Test
;
import
static
org
.
hamcrest
.
Matchers
.
hasItems
;
import
static
org
.
hamcrest
.
core
.
Is
.
is
;
import
static
org
.
junit
.
Assert
.
assertThat
;
...
...
@@ -45,12 +47,13 @@ public class TableRuleTest extends AbstractConfigTest {
@Test
public
void
testActualTableName
()
{
Map
<
String
,
TableRule
>
tableRuleMap
=
getTableRule
(
"actual_table_name"
);
assertThat
(
tableRuleMap
.
get
(
"order_1"
).
getActualTables
().
toString
(),
is
(
"[DataNode(dataSourceName=db0, tableName=t_order_1), DataNode(dataSourceName=db0, tableName=t_order_3), DataNode(dataSourceName=db1, tableName=t_order_2), DataNode(dataSourceName=db1, tableName=t_order_4)]"
));
assertThat
(
tableRuleMap
.
get
(
"order_2"
).
getActualTables
().
toString
(),
is
(
"[DataNode(dataSourceName=db0, tableName=t_order_1), DataNode(dataSourceName=db1, tableName=t_order_1), DataNode(dataSourceName=db0, tableName=t_order_2), DataNode(dataSourceName=db1, tableName=t_order_2), DataNode(dataSourceName=db0, tableName=t_order_3), DataNode(dataSourceName=db1, tableName=t_order_3), DataNode(dataSourceName=db0, tableName=t_order_bak), DataNode(dataSourceName=db1, tableName=t_order_bak)]"
));
assertThat
(
tableRuleMap
.
get
(
"order_3"
).
getActualTables
().
toString
(),
is
(
"[DataNode(dataSourceName=db0, tableName=table_1), DataNode(dataSourceName=db1, tableName=table_1), DataNode(dataSourceName=db0, tableName=table_1_bak), DataNode(dataSourceName=db1, tableName=table_1_bak), "
+
"DataNode(dataSourceName=db0, tableName=table_2), DataNode(dataSourceName=db1, tableName=table_2), DataNode(dataSourceName=db0, tableName=table_2_bak), DataNode(dataSourceName=db1, tableName=table_2_bak), "
+
"DataNode(dataSourceName=db0, tableName=table_3), DataNode(dataSourceName=db1, tableName=table_3), DataNode(dataSourceName=db0, tableName=table_3_bak), DataNode(dataSourceName=db1, tableName=table_3_bak)]"
));
assertThat
(
tableRuleMap
.
get
(
"order_4"
).
getActualTables
().
toString
(),
is
(
"[DataNode(dataSourceName=db0, tableName=table_1), DataNode(dataSourceName=db1, tableName=table_1)]"
));
assertThat
(
tableRuleMap
.
get
(
"order_1"
).
getActualTables
(),
hasItems
(
new
DataNode
(
"db0"
,
"t_order_1"
),
new
DataNode
(
"db0"
,
"t_order_3"
),
new
DataNode
(
"db1"
,
"t_order_2"
),
new
DataNode
(
"db1"
,
"t_order_4"
)));
assertThat
(
tableRuleMap
.
get
(
"order_2"
).
getActualTables
(),
hasItems
(
new
DataNode
(
"db0"
,
"t_order_1"
),
new
DataNode
(
"db1"
,
"t_order_1"
),
new
DataNode
(
"db0"
,
"t_order_2"
),
new
DataNode
(
"db1"
,
"t_order_2"
),
new
DataNode
(
"db0"
,
"t_order_3"
),
new
DataNode
(
"db1"
,
"t_order_3"
),
new
DataNode
(
"db0"
,
"t_order_bak"
),
new
DataNode
(
"db1"
,
"t_order_bak"
)));
assertThat
(
tableRuleMap
.
get
(
"order_3"
).
getActualTables
(),
hasItems
(
new
DataNode
(
"db0"
,
"table_1"
),
new
DataNode
(
"db1"
,
"table_1"
),
new
DataNode
(
"db0"
,
"table_1_bak"
),
new
DataNode
(
"db1"
,
"table_1_bak"
),
new
DataNode
(
"db0"
,
"table_2"
),
new
DataNode
(
"db1"
,
"table_2"
),
new
DataNode
(
"db0"
,
"table_2_bak"
),
new
DataNode
(
"db1"
,
"table_2_bak"
),
new
DataNode
(
"db0"
,
"table_3"
),
new
DataNode
(
"db1"
,
"table_3"
),
new
DataNode
(
"db0"
,
"table_3_bak"
),
new
DataNode
(
"db1"
,
"table_3_bak"
)));
assertThat
(
tableRuleMap
.
get
(
"order_4"
).
getActualTables
(),
hasItems
(
new
DataNode
(
"db0"
,
"table_1"
),
new
DataNode
(
"db1"
,
"table_1"
)));
}
@Test
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
浏览文件 @
b005981e
...
...
@@ -22,15 +22,14 @@ import java.util.Collection;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy
;
import
com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy
;
import
com.google.common.base.Splitter
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
lombok.ToString
;
import
com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy
;
import
com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy
;
import
com.google.common.base.Splitter
;
/**
* 表规则配置对象.
*
...
...
@@ -98,6 +97,19 @@ public final class TableRule {
return
result
;
}
/**
* 获取真实数据源.
*
* @return 真实表名称
*/
public
Collection
<
String
>
getActualDatasourceNames
()
{
Collection
<
String
>
result
=
new
LinkedHashSet
<>(
actualTables
.
size
());
for
(
DataNode
each
:
actualTables
)
{
result
.
add
(
each
.
getDataSourceName
());
}
return
result
;
}
/**
* 根据数据源名称过滤获取真实表名称.
*
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/strategy/common/ShardingStrategy.java
浏览文件 @
b005981e
...
...
@@ -47,7 +47,7 @@ public class ShardingStrategy {
* 根据分片值计算数据源名称集合.
*
*
* @param sqlStatementType
* @param sqlStatementType
SQL语句的类型
* @param availableTargetNames 所有的可用数据源名称集合
* @param shardingValues 分库片值集合
* @return 分库后指向的数据源名称集合
...
...
@@ -56,7 +56,7 @@ public class ShardingStrategy {
public
Collection
<
String
>
doSharding
(
final
SQLStatementType
sqlStatementType
,
final
Collection
<
String
>
availableTargetNames
,
final
Collection
<
ShardingValue
<?
extends
Comparable
<?>>>
shardingValues
)
{
if
(
shardingValues
.
isEmpty
())
{
if
(
SQLStatementType
.
INSERT
.
equals
(
sqlStatementType
))
{
if
(
SQLStatementType
.
INSERT
.
equals
(
sqlStatementType
)
&&
availableTargetNames
.
size
()
>
1
)
{
throw
new
ShardingJdbcException
(
"INSERT statement must contains sharding value"
);
}
else
{
return
availableTargetNames
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/single/SingleTableRouter.java
浏览文件 @
b005981e
...
...
@@ -86,8 +86,8 @@ public final class SingleTableRouter {
}
else
{
databaseShardingValues
=
getShardingValues
(
strategy
.
getShardingColumns
());
}
logBeforeRoute
(
"database"
,
logicTable
,
shardingRule
.
getDataSourceRule
().
getDataS
ourceNames
(),
strategy
.
getShardingColumns
(),
databaseShardingValues
);
Collection
<
String
>
result
=
new
HashSet
<>(
strategy
.
doSharding
(
sqlStatementType
,
shardingRule
.
getDataSourceRule
().
getDataS
ourceNames
(),
databaseShardingValues
));
logBeforeRoute
(
"database"
,
logicTable
,
tableRule
.
get
().
getActualDatas
ourceNames
(),
strategy
.
getShardingColumns
(),
databaseShardingValues
);
Collection
<
String
>
result
=
new
HashSet
<>(
strategy
.
doSharding
(
sqlStatementType
,
tableRule
.
get
().
getActualDatas
ourceNames
(),
databaseShardingValues
));
logAfterRoute
(
"database"
,
logicTable
,
result
);
Preconditions
.
checkState
(!
result
.
isEmpty
(),
"no database route info"
);
return
result
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录