Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
02e94996
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,发现更多精彩内容 >>
提交
02e94996
编写于
6月 03, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
simplify SQLBuilder
上级
f5238de7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
32 deletion
+30
-32
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
...com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
+25
-26
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilderToken.java
...angdang/ddframe/rdb/sharding/rewrite/SQLBuilderToken.java
+5
-6
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilder.java
浏览文件 @
02e94996
...
...
@@ -21,71 +21,69 @@ import lombok.AccessLevel;
import
lombok.RequiredArgsConstructor
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
/**
* SQL构建器.
*
* @author gaohongtao
* @author zhangliang
*/
@RequiredArgsConstructor
(
access
=
AccessLevel
.
PRIVATE
)
public
final
class
SQLBuilder
{
private
final
List
<
Object
>
segments
;
private
final
Map
<
String
,
SQLBuilderToken
>
tokenMap
;
private
StringBuilder
currentSegment
;
public
SQLBuilder
()
{
this
(
new
LinkedList
<>(),
new
HashMap
<
String
,
SQLBuilderToken
>()
);
segments
=
new
LinkedList
<>(
);
currentSegment
=
new
StringBuilder
();
segments
.
add
(
currentSegment
);
}
/**
* 追加字面量.
*
* @param literals 字面量
*/
public
void
append
(
final
String
literals
)
{
currentSegment
.
append
(
literals
);
}
/**
* 追加占位符.
*
* @param token 占位符
*/
public
void
append
(
final
SQLBuilderToken
token
)
{
if
(!
tokenMap
.
containsKey
(
token
.
getLabel
()))
{
tokenMap
.
put
(
token
.
getLabel
(),
token
);
}
tokenMap
.
get
(
token
.
getLabel
()).
getIndexes
().
add
(
segments
.
size
());
segments
.
add
(
tokenMap
.
get
(
token
.
getLabel
()));
segments
.
add
(
token
);
currentSegment
=
new
StringBuilder
();
segments
.
add
(
currentSegment
);
}
/**
* 追加字面量.
*
* @param literals 字面量
*/
public
void
append
(
final
String
literals
)
{
currentSegment
.
append
(
literals
);
}
/**
* 用实际的值替代占位符,并返回新的构建器.
*
*
* @param tokens 占位符集合
* @return 新SQL构建器
*/
public
SQLBuilder
createNewSQLBuilder
(
final
Collection
<
SQLBuilderToken
>
tokens
)
{
SQLBuilder
result
=
new
SQLBuilder
(
segments
,
tokenMap
);
for
(
Object
each
:
segments
)
{
if
(
each
instanceof
SQLBuilderToken
)
{
setToken
((
SQLBuilderToken
)
each
,
tokens
);
}
}
return
new
SQLBuilder
(
segments
);
}
private
void
setToken
(
final
SQLBuilderToken
targetToken
,
final
Collection
<
SQLBuilderToken
>
tokens
)
{
for
(
SQLBuilderToken
each
:
tokens
)
{
SQLBuilderToken
originalToken
=
tokenMap
.
get
(
each
.
getLabel
());
result
.
tokenMap
.
put
(
each
.
getLabel
(),
each
);
for
(
Integer
index
:
originalToken
.
getIndexes
())
{
result
.
segments
.
set
(
index
,
each
);
if
(
targetToken
.
getLabel
().
equals
(
each
.
getLabel
()))
{
targetToken
.
setValue
(
each
.
getValue
());
}
}
return
result
;
}
/**
...
...
@@ -101,6 +99,7 @@ public final class SQLBuilder {
return
result
.
toString
();
}
// TODO remove
@Override
public
String
toString
()
{
StringBuilder
result
=
new
StringBuilder
();
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLBuilderToken.java
浏览文件 @
02e94996
package
com.dangdang.ddframe.rdb.sharding.rewrite
;
import
com.google.common.base.Joiner
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
java.util.LinkedList
;
import
java.util.List
;
import
lombok.Setter
;
/**
* SQL构建器占位符.
*
* @author zhangliang
*/
@AllArgsConstructor
@RequiredArgsConstructor
@Getter
@Setter
public
final
class
SQLBuilderToken
{
private
final
String
label
;
private
final
String
value
;
private
final
List
<
Integer
>
indexes
=
new
LinkedList
<>();
private
String
value
;
String
toToken
()
{
if
(
null
==
value
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录