Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
f65638bc
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,发现更多精彩内容 >>
提交
f65638bc
编写于
5月 12, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor amend for rewrite module
上级
90083bac
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
39 addition
and
23 deletion
+39
-23
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
...com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
...ngdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
+18
-0
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
.../dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
+20
-22
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
浏览文件 @
f65638bc
...
...
@@ -96,7 +96,7 @@ public class SQLBuilder {
* @param label 占位符
* @param token 实际的值
*/
public
void
buildSQL
(
final
String
label
,
final
String
token
)
{
public
void
amend
(
final
String
label
,
final
String
token
)
{
if
(!
tokenMap
.
containsKey
(
label
))
{
return
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
浏览文件 @
f65638bc
...
...
@@ -139,4 +139,22 @@ public final class SQLRewriteEngine {
int
endPosition
=
sqlTokens
.
size
()
-
1
==
count
?
originalSQL
.
length
()
:
sqlTokens
.
get
(
count
+
1
).
getBeginPosition
();
sqlBuilder
.
append
(
originalSQL
.
substring
(
beginPosition
,
endPosition
));
}
/**
* 修订SQL和参数.
*
* @param parameters 参数
*/
public
void
amend
(
final
List
<
Object
>
parameters
)
{
if
(
limit
.
getOffsetParameterIndex
()
>
-
1
)
{
parameters
.
set
(
limit
.
getOffsetParameterIndex
(),
limit
.
getOffset
());
}
else
{
sqlBuilder
.
amend
(
OffsetLimitToken
.
OFFSET_NAME
,
String
.
valueOf
(
limit
.
getOffset
()));
}
if
(
limit
.
getRowCountParameterIndex
()
>
-
1
)
{
parameters
.
set
(
limit
.
getRowCountParameterIndex
(),
limit
.
getRowCount
());
}
else
{
sqlBuilder
.
amend
(
RowCountLimitToken
.
COUNT_NAME
,
String
.
valueOf
(
limit
.
getRowCount
()));
}
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
浏览文件 @
f65638bc
...
...
@@ -26,17 +26,13 @@ import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ConditionContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.DeleteSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.InsertSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.LimitContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SelectSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.TableContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.UpdateSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingException
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.OffsetLimitToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.RowCountLimitToken
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.DerivedColumnUtils
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.GenerateKeysUtils
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLBuilder
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLRewriteEngine
;
import
com.dangdang.ddframe.rdb.sharding.router.binding.BindingTablesRouter
;
import
com.dangdang.ddframe.rdb.sharding.router.database.DatabaseRouter
;
...
...
@@ -135,7 +131,9 @@ public final class SQLRouteEngine {
RoutingResult
routingResult
=
routeSQL
(
sqlContext
.
getConditionContext
(),
sqlContext
,
parameters
);
SQLRewriteEngine
sqlRewriteEngine
=
new
SQLRewriteEngine
(
logicSQL
,
sqlContext
);
result
.
getExecutionUnits
().
addAll
(
routingResult
.
getSQLExecutionUnits
(
sqlRewriteEngine
.
rewrite
()));
amendSQLAccordingToRouteResult
(
parameters
,
result
,
sqlRewriteEngine
);
if
(
null
!=
sqlContext
.
getLimitContext
()
&&
1
==
result
.
getExecutionUnits
().
size
())
{
sqlRewriteEngine
.
amend
(
parameters
);
}
MetricsContext
.
stop
(
context
);
log
.
debug
(
"final route result is {} target"
,
result
.
getExecutionUnits
().
size
());
for
(
SQLExecutionUnit
each
:
result
.
getExecutionUnits
())
{
...
...
@@ -165,21 +163,21 @@ public final class SQLRouteEngine {
return
new
MixedTablesRouter
(
shardingRule
,
parameters
,
logicTables
,
conditionContext
,
sqlContext
.
getType
()).
route
();
}
private
void
amendSQLAccordingToRouteResult
(
final
List
<
Object
>
parameters
,
final
SQLRouteResult
sqlRouteResult
,
final
SQLRewriteEngine
sqlRewriteEngine
)
{
LimitContext
limit
=
sqlRouteResult
.
getSqlContext
().
getLimitContext
();
SQLBuilder
sqlBuilder
=
sqlRewriteEngine
.
rewrite
();
if
(
null
==
limit
||
1
!=
sqlRouteResult
.
getExecutionUnits
().
size
())
{
return
;
}
if
(
limit
.
getOffsetParameterIndex
()
>
-
1
)
{
parameters
.
set
(
limit
.
getOffsetParameterIndex
(),
limit
.
getOffset
());
}
else
{
sqlBuilder
.
buildSQL
(
OffsetLimitToken
.
OFFSET_NAME
,
String
.
valueOf
(
limit
.
getOffset
()));
}
if
(
limit
.
getRowCountParameterIndex
()
>
-
1
)
{
parameters
.
set
(
limit
.
getRowCountParameterIndex
(),
limit
.
getRowCount
());
}
else
{
sqlBuilder
.
buildSQL
(
RowCountLimitToken
.
COUNT_NAME
,
String
.
valueOf
(
limit
.
getRowCount
()));
}
}
//
private void amendSQLAccordingToRouteResult(final List<Object> parameters, final SQLRouteResult sqlRouteResult, final SQLRewriteEngine sqlRewriteEngine) {
//
LimitContext limit = sqlRouteResult.getSqlContext().getLimitContext();
//
SQLBuilder sqlBuilder = sqlRewriteEngine.rewrite();
//
if (null == limit || 1 != sqlRouteResult.getExecutionUnits().size()) {
//
return;
//
}
//
if (limit.getOffsetParameterIndex() > -1) {
//
parameters.set(limit.getOffsetParameterIndex(), limit.getOffset());
//
} else {
// sqlBuilder.amend
(OffsetLimitToken.OFFSET_NAME, String.valueOf(limit.getOffset()));
//
}
//
if (limit.getRowCountParameterIndex() > -1) {
//
parameters.set(limit.getRowCountParameterIndex(), limit.getRowCount());
//
} else {
// sqlBuilder.amend
(RowCountLimitToken.COUNT_NAME, String.valueOf(limit.getRowCount()));
//
}
//
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录