Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
04712f8c
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,发现更多精彩内容 >>
提交
04712f8c
编写于
7月 07, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor merger into ShardingResultSet 6th version, merge only for select
上级
d365e254
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
24 deletion
+26
-24
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingPreparedStatement.java
...arding/jdbc/core/statement/ShardingPreparedStatement.java
+2
-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
+3
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
...angdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
+21
-21
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingPreparedStatement.java
浏览文件 @
04712f8c
...
...
@@ -27,6 +27,7 @@ import com.dangdang.ddframe.rdb.sharding.jdbc.core.resultset.ShardingResultSet;
import
com.dangdang.ddframe.rdb.sharding.merger.core.ResultSetMerger
;
import
com.dangdang.ddframe.rdb.sharding.merger.core.MergeEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GeneratedKey
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.SelectStatement
;
import
com.dangdang.ddframe.rdb.sharding.routing.PreparedStatementRoutingEngine
;
import
com.dangdang.ddframe.rdb.sharding.routing.SQLExecutionUnit
;
import
com.google.common.base.Optional
;
...
...
@@ -85,7 +86,7 @@ public final class ShardingPreparedStatement extends AbstractPreparedStatementAd
// TODO refactor
List
<
ResultSet
>
resultSets
=
new
PreparedStatementExecutor
(
getShardingConnection
().
getShardingContext
().
getExecutorEngine
(),
getRouteResult
().
getSqlStatement
().
getType
(),
preparedStatementUnits
,
getParameters
()).
executeQuery
();
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
getRouteResult
().
getSqlStatement
());
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
());
if
(
mergeResultSet
.
isPresent
())
{
result
=
new
ShardingResultSet
(
resultSets
,
mergeResultSet
.
get
());
}
else
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/core/statement/ShardingStatement.java
浏览文件 @
04712f8c
...
...
@@ -27,6 +27,7 @@ import com.dangdang.ddframe.rdb.sharding.merger.core.ResultSetMerger;
import
com.dangdang.ddframe.rdb.sharding.merger.core.MergeEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GeneratedKey
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.InsertStatement
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.SelectStatement
;
import
com.dangdang.ddframe.rdb.sharding.routing.SQLExecutionUnit
;
import
com.dangdang.ddframe.rdb.sharding.routing.SQLRouteResult
;
import
com.dangdang.ddframe.rdb.sharding.routing.StatementRoutingEngine
;
...
...
@@ -105,7 +106,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
try
{
// TODO refactor
List
<
ResultSet
>
resultSets
=
generateExecutor
(
sql
).
executeQuery
();
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
getRouteResult
().
getSqlStatement
());
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
());
if
(
mergeResultSet
.
isPresent
())
{
result
=
new
ShardingResultSet
(
resultSets
,
mergeResultSet
.
get
());
}
else
{
...
...
@@ -255,7 +256,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
resultSets
.
add
(
each
.
getResultSet
());
}
// TODO refactor
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
getRouteResult
().
getSqlStatement
());
Optional
<
ResultSetMerger
>
mergeResultSet
=
MergeEngine
.
getResultSet
(
resultSets
,
(
SelectStatement
)
getRouteResult
().
getSqlStatement
());
if
(
mergeResultSet
.
isPresent
())
{
currentResultSet
=
new
ShardingResultSet
(
resultSets
,
mergeResultSet
.
get
());
}
else
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/core/MergeEngine.java
浏览文件 @
04712f8c
...
...
@@ -25,7 +25,7 @@ import com.dangdang.ddframe.rdb.sharding.merger.core.stream.OrderByStreamResultS
import
com.dangdang.ddframe.rdb.sharding.merger.util.ResultSetUtil
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderItem
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.
SQL
Statement
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.
select.Select
Statement
;
import
com.google.common.base.Optional
;
import
com.google.common.base.Preconditions
;
import
lombok.AccessLevel
;
...
...
@@ -51,20 +51,20 @@ public final class MergeEngine {
* 获取结果集.
*
* @param resultSets 结果集列表
* @param s
ql
Statement SQL语句对象
* @param s
elect
Statement SQL语句对象
* @return 结果集包装
* @throws SQLException SQL异常
*/
public
static
Optional
<
ResultSetMerger
>
getResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
QLStatement
sql
Statement
)
throws
SQLException
{
return
buildResultSet
(
resultSets
,
s
ql
Statement
);
public
static
Optional
<
ResultSetMerger
>
getResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
electStatement
select
Statement
)
throws
SQLException
{
return
buildResultSet
(
resultSets
,
s
elect
Statement
);
}
private
static
Optional
<
ResultSetMerger
>
buildResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
QLStatement
sql
Statement
)
throws
SQLException
{
private
static
Optional
<
ResultSetMerger
>
buildResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
electStatement
select
Statement
)
throws
SQLException
{
// TODO MOVE TO sqlStatement
Map
<
String
,
Integer
>
columnLabelIndexMap
=
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
));
setIndexForAggregationItem
(
s
ql
Statement
,
columnLabelIndexMap
);
setIndexForOrderItem
(
columnLabelIndexMap
,
s
ql
Statement
.
getOrderByItems
());
setIndexForOrderItem
(
columnLabelIndexMap
,
s
ql
Statement
.
getGroupByItems
());
setIndexForAggregationItem
(
s
elect
Statement
,
columnLabelIndexMap
);
setIndexForOrderItem
(
columnLabelIndexMap
,
s
elect
Statement
.
getOrderByItems
());
setIndexForOrderItem
(
columnLabelIndexMap
,
s
elect
Statement
.
getGroupByItems
());
List
<
ResultSet
>
filteredResults
=
new
ArrayList
<>(
resultSets
.
size
());
...
...
@@ -76,33 +76,33 @@ public final class MergeEngine {
if
(
filteredResults
.
isEmpty
())
{
return
Optional
.
absent
();
}
ResultSetMerger
result
=
!
s
qlStatement
.
getGroupByItems
().
isEmpty
()
||
!
sql
Statement
.
getAggregationSelectItems
().
isEmpty
()
?
buildMemoryResultSet
(
filteredResults
,
s
qlStatement
)
:
buildStreamResultSet
(
filteredResults
,
sql
Statement
);
return
Optional
.
of
(
buildDecorateResultSet
(
result
,
s
ql
Statement
));
ResultSetMerger
result
=
!
s
electStatement
.
getGroupByItems
().
isEmpty
()
||
!
select
Statement
.
getAggregationSelectItems
().
isEmpty
()
?
buildMemoryResultSet
(
filteredResults
,
s
electStatement
)
:
buildStreamResultSet
(
filteredResults
,
select
Statement
);
return
Optional
.
of
(
buildDecorateResultSet
(
result
,
s
elect
Statement
));
}
private
static
ResultSetMerger
buildMemoryResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
QLStatement
sql
Statement
)
throws
SQLException
{
private
static
ResultSetMerger
buildMemoryResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
electStatement
select
Statement
)
throws
SQLException
{
return
new
GroupByMemoryResultSetMerger
(
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
)),
resultSets
,
s
qlStatement
.
getGroupByItems
(),
sqlStatement
.
getOrderByItems
(),
sql
Statement
.
getAggregationSelectItems
());
ResultSetUtil
.
getColumnLabelIndexMap
(
resultSets
.
get
(
0
)),
resultSets
,
s
electStatement
.
getGroupByItems
(),
selectStatement
.
getOrderByItems
(),
select
Statement
.
getAggregationSelectItems
());
}
private
static
ResultSetMerger
buildStreamResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
QLStatement
sql
Statement
)
throws
SQLException
{
if
(
s
qlStatement
.
getGroupByItems
().
isEmpty
()
&&
sql
Statement
.
getOrderByItems
().
isEmpty
())
{
private
static
ResultSetMerger
buildStreamResultSet
(
final
List
<
ResultSet
>
resultSets
,
final
S
electStatement
select
Statement
)
throws
SQLException
{
if
(
s
electStatement
.
getGroupByItems
().
isEmpty
()
&&
select
Statement
.
getOrderByItems
().
isEmpty
())
{
return
new
IteratorStreamResultSetMerger
(
resultSets
);
}
return
new
OrderByStreamResultSetMerger
(
resultSets
,
s
ql
Statement
.
getOrderByItems
());
return
new
OrderByStreamResultSetMerger
(
resultSets
,
s
elect
Statement
.
getOrderByItems
());
}
private
static
ResultSetMerger
buildDecorateResultSet
(
final
ResultSetMerger
resultSetMerger
,
final
S
QLStatement
sql
Statement
)
throws
SQLException
{
private
static
ResultSetMerger
buildDecorateResultSet
(
final
ResultSetMerger
resultSetMerger
,
final
S
electStatement
select
Statement
)
throws
SQLException
{
ResultSetMerger
result
=
resultSetMerger
;
if
(
null
!=
s
ql
Statement
.
getLimit
())
{
result
=
new
LimitDecoratorResultSetMerger
(
result
,
s
ql
Statement
.
getLimit
());
if
(
null
!=
s
elect
Statement
.
getLimit
())
{
result
=
new
LimitDecoratorResultSetMerger
(
result
,
s
elect
Statement
.
getLimit
());
}
return
result
;
}
private
static
void
setIndexForAggregationItem
(
final
S
QLStatement
sql
Statement
,
final
Map
<
String
,
Integer
>
columnLabelIndexMap
)
{
for
(
AggregationSelectItem
each
:
s
ql
Statement
.
getAggregationSelectItems
())
{
private
static
void
setIndexForAggregationItem
(
final
S
electStatement
select
Statement
,
final
Map
<
String
,
Integer
>
columnLabelIndexMap
)
{
for
(
AggregationSelectItem
each
:
s
elect
Statement
.
getAggregationSelectItems
())
{
Preconditions
.
checkState
(
columnLabelIndexMap
.
containsKey
(
each
.
getColumnLabel
()),
String
.
format
(
"Can't find index: %s, please add alias for aggregate selections"
,
each
));
each
.
setIndex
(
columnLabelIndexMap
.
get
(
each
.
getColumnLabel
()));
for
(
AggregationSelectItem
derived
:
each
.
getDerivedAggregationSelectItems
())
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录