Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
bebbbd87
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,发现更多精彩内容 >>
提交
bebbbd87
编写于
7月 08, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor merger into ShardingResultSet 12th version, refactor MergeEngine
上级
f32a0065
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
22 deletion
+26
-22
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingPreparedStatement.java
...arding/jdbc/core/statement/ShardingPreparedStatement.java
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingStatement.java
...e/rdb/sharding/jdbc/core/statement/ShardingStatement.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
...angdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
+23
-19
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingPreparedStatement.java
浏览文件 @
bebbbd87
...
...
@@ -84,7 +84,7 @@ public final class ShardingPreparedStatement extends AbstractPreparedStatementAd
Collection
<
PreparedStatementUnit
>
preparedStatementUnits
=
route
();
List
<
ResultSet
>
resultSets
=
new
PreparedStatementExecutor
(
getShardingConnection
().
getShardingContext
().
getExecutorEngine
(),
getRouteResult
().
getSqlStatement
().
getType
(),
preparedStatementUnits
,
getParameters
()).
executeQuery
();
result
=
new
ShardingResultSet
(
resultSets
,
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()
));
result
=
new
ShardingResultSet
(
resultSets
,
new
MergeEngine
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()).
merge
(
));
}
finally
{
clearBatch
();
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingStatement.java
浏览文件 @
bebbbd87
...
...
@@ -104,7 +104,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
ResultSet
result
;
try
{
List
<
ResultSet
>
resultSets
=
generateExecutor
(
sql
).
executeQuery
();
result
=
new
ShardingResultSet
(
resultSets
,
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()
));
result
=
new
ShardingResultSet
(
resultSets
,
new
MergeEngine
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()).
merge
(
));
}
finally
{
setCurrentResultSet
(
null
);
}
...
...
@@ -248,7 +248,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
for
(
Statement
each
:
routedStatements
)
{
resultSets
.
add
(
each
.
getResultSet
());
}
currentResultSet
=
new
ShardingResultSet
(
resultSets
,
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()
));
currentResultSet
=
new
ShardingResultSet
(
resultSets
,
new
MergeEngine
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
()).
merge
(
));
return
currentResultSet
;
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
浏览文件 @
bebbbd87
...
...
@@ -23,51 +23,55 @@ import com.dangdang.ddframe.rdb.sharding.merger.core.stream.IteratorStreamResult
import
com.dangdang.ddframe.rdb.sharding.merger.core.stream.OrderByStreamResultSetMerger
;
import
com.dangdang.ddframe.rdb.sharding.merger.util.ResultSetUtil
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.SelectStatement
;
import
lombok.AccessLevel
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.util.List
;
import
java.util.Map
;
/**
* 分片结果集归并引擎.
*
* @author zhangliang
*/
@RequiredArgsConstructor
(
access
=
AccessLevel
.
PRIVATE
)
@Slf4j
public
final
class
MergeEngine
{
private
final
List
<
ResultSet
>
resultSets
;
private
final
SelectStatement
selectStatement
;
private
final
Map
<
String
,
Integer
>
columnLabelIndexMap
;
public
MergeEngine
(
final
List
<
ResultSet
>
resultSets
,
final
SelectStatement
selectStatement
)
throws
SQLException
{
this
.
resultSets
=
resultSets
;
this
.
selectStatement
=
selectStatement
;
columnLabelIndexMap
=
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
));
}
/**
*
获取
结果集.
*
合并
结果集.
*
* @param resultSets 结果集列表
* @param selectStatement SQL语句对象
* @return 结果集包装
* @return 归并完毕后的结果集
* @throws SQLException SQL异常
*/
public
static
ResultSetMerger
getResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
SelectStatement
selectStatement
)
throws
SQLException
{
selectStatement
.
setIndexForItems
(
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
)));
ResultSetMerger
result
=
!
selectStatement
.
getGroupByItems
().
isEmpty
()
||
!
selectStatement
.
getAggregationSelectItems
().
isEmpty
()
?
buildMemoryResultSet
(
resultSets
,
selectStatement
)
:
buildStreamResultSet
(
resultSets
,
selectStatement
);
return
buildDecorateResultSet
(
result
,
selectStatement
);
public
ResultSetMerger
merge
()
throws
SQLException
{
selectStatement
.
setIndexForItems
(
columnLabelIndexMap
);
ResultSetMerger
result
=
!
selectStatement
.
getGroupByItems
().
isEmpty
()
||
!
selectStatement
.
getAggregationSelectItems
().
isEmpty
()
?
buildMemoryResultSet
()
:
buildStreamResultSet
();
return
buildDecorateResultSet
(
result
);
}
private
static
ResultSetMerger
buildMemoryResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
SelectStatement
selectStatement
)
throws
SQLException
{
return
new
GroupByMemoryResultSetMerger
(
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
)),
resultSets
,
selectStatement
.
getGroupByItems
(),
selectStatement
.
getOrderByItems
(),
selectStatement
.
getAggregationSelectItems
());
private
ResultSetMerger
buildMemoryResultSet
()
throws
SQLException
{
return
new
GroupByMemoryResultSetMerger
(
columnLabelIndexMap
,
resultSets
,
selectStatement
.
getGroupByItems
(),
selectStatement
.
getOrderByItems
(),
selectStatement
.
getAggregationSelectItems
());
}
private
static
ResultSetMerger
buildStreamResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
SelectStatement
selectStatement
)
throws
SQLException
{
private
ResultSetMerger
buildStreamResultSet
(
)
throws
SQLException
{
if
(
selectStatement
.
getGroupByItems
().
isEmpty
()
&&
selectStatement
.
getOrderByItems
().
isEmpty
())
{
return
new
IteratorStreamResultSetMerger
(
resultSets
);
}
return
new
OrderByStreamResultSetMerger
(
resultSets
,
selectStatement
.
getOrderByItems
());
}
private
static
ResultSetMerger
buildDecorateResultSet
(
final
ResultSetMerger
resultSetMerger
,
final
SelectStatement
selectStatement
)
throws
SQLException
{
private
ResultSetMerger
buildDecorateResultSet
(
final
ResultSetMerger
resultSetMerger
)
throws
SQLException
{
ResultSetMerger
result
=
resultSetMerger
;
if
(
null
!=
selectStatement
.
getLimit
())
{
result
=
new
LimitDecoratorResultSetMerger
(
result
,
selectStatement
.
getLimit
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录