Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
c5ef7e32
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,发现更多精彩内容 >>
提交
c5ef7e32
编写于
5月 11, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
extract token package
上级
773e9dea
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
5 addition
and
56 deletion
+5
-56
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/GenerateKeysUtils.java
...gdang/ddframe/rdb/sharding/rewrite/GenerateKeysUtils.java
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
.../dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
+4
-55
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/GenerateKeysUtils.java
浏览文件 @
c5ef7e32
...
...
@@ -3,10 +3,10 @@ package com.dangdang.ddframe.rdb.sharding.rewrite;
import
com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ConditionContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.InsertSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ItemsToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ShardingColumnContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLNumberExpr
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLPlaceholderExpr
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.ItemsToken
;
import
java.util.Collection
;
import
java.util.List
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
浏览文件 @
c5ef7e32
...
...
@@ -26,18 +26,15 @@ 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.token.ItemsToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.LimitContext
;
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.parsing.parser.context.SQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SelectSQLContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ShardingColumnContext
;
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.expr.SQLNumberExpr
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLPlaceholderExpr
;
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.GenerateKeysUtils
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLBuilder
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLBuilderContext
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLRewriteEngine
;
...
...
@@ -52,7 +49,6 @@ import com.google.common.collect.Sets;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Set
;
...
...
@@ -100,59 +96,12 @@ public final class SQLRouteEngine {
log
.
debug
(
"Logic SQL: {}, {}"
,
logicSql
,
parameters
);
SQLContext
result
=
new
SQLParsingEngine
(
databaseType
,
logicSql
,
shardingRule
).
parseStatement
();
MetricsContext
.
stop
(
context
);
// TODO 提炼至rewrite模块
if
(
result
instanceof
InsertSQLContext
)
{
String
tableName
=
result
.
getTables
().
get
(
0
).
getName
();
ItemsToken
columnsToken
=
new
ItemsToken
(((
InsertSQLContext
)
result
).
getColumnsListLastPosition
());
Collection
<
String
>
autoIncrementColumns
=
shardingRule
.
getAutoIncrementColumns
(
tableName
);
for
(
String
each
:
autoIncrementColumns
)
{
if
(!
isIncluded
((
InsertSQLContext
)
result
,
each
))
{
columnsToken
.
getItems
().
add
(
each
);
}
}
if
(!
columnsToken
.
getItems
().
isEmpty
())
{
result
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
columnsToken
);
}
ItemsToken
valuesToken
=
new
ItemsToken
(((
InsertSQLContext
)
result
).
getValuesListLastPosition
());
int
offset
=
parameters
.
size
()
-
1
;
for
(
String
each
:
autoIncrementColumns
)
{
if
(
isIncluded
((
InsertSQLContext
)
result
,
each
))
{
continue
;
}
Number
generatedId
=
shardingRule
.
findTableRule
(
tableName
).
generateId
(
each
);
ShardingColumnContext
shardingColumnContext
=
new
ShardingColumnContext
(
each
,
tableName
,
true
);
if
(
parameters
.
isEmpty
())
{
valuesToken
.
getItems
().
add
(
generatedId
.
toString
());
if
(
shardingRule
.
isShardingColumn
(
shardingColumnContext
))
{
result
.
getConditionContext
().
add
(
new
ConditionContext
.
Condition
(
shardingColumnContext
,
new
SQLNumberExpr
(
generatedId
)));
}
}
else
{
valuesToken
.
getItems
().
add
(
"?"
);
parameters
.
add
(
generatedId
);
offset
++;
if
(
shardingRule
.
isShardingColumn
(
shardingColumnContext
))
{
result
.
getConditionContext
().
add
(
new
ConditionContext
.
Condition
(
shardingColumnContext
,
new
SQLPlaceholderExpr
(
offset
)));
}
}
((
InsertSQLContext
)
result
).
getGeneratedKeyContext
().
getColumns
().
add
(
each
);
((
InsertSQLContext
)
result
).
getGeneratedKeyContext
().
putValue
(
each
,
generatedId
);
}
if
(!
valuesToken
.
getItems
().
isEmpty
())
{
result
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
valuesToken
);
}
GenerateKeysUtils
.
appendGenerateKeys
(
shardingRule
,
parameters
,
(
InsertSQLContext
)
result
);
}
return
result
;
}
private
boolean
isIncluded
(
final
InsertSQLContext
insertSQLContext
,
final
String
autoIncrementColumn
)
{
for
(
ShardingColumnContext
shardingColumnContext
:
insertSQLContext
.
getShardingColumnContexts
())
{
if
(
shardingColumnContext
.
getColumnName
().
equalsIgnoreCase
(
autoIncrementColumn
))
{
return
true
;
}
}
return
false
;
}
private
SQLContext
buildHintParsedResult
(
final
String
logicSql
)
{
SQLContext
result
;
switch
(
SQLUtil
.
getTypeByStart
(
logicSql
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录