Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
abee4c7d
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,发现更多精彩内容 >>
提交
abee4c7d
编写于
5月 10, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
split generate id form parsing to router, will move to rewrite in future
上级
c1d91655
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
102 addition
and
91 deletion
+102
-91
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/AbstractSQLContext.java
...b/sharding/parsing/parser/context/AbstractSQLContext.java
+0
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/InsertSQLContext.java
...rdb/sharding/parsing/parser/context/InsertSQLContext.java
+11
-0
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/SQLContext.java
...frame/rdb/sharding/parsing/parser/context/SQLContext.java
+7
-0
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLInsertParser.java
...rding/parsing/parser/dialect/mysql/MySQLInsertParser.java
+3
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
...parsing/parser/statement/insert/AbstractInsertParser.java
+14
-50
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/PreparedSQLRouter.java
...ngdang/ddframe/rdb/sharding/router/PreparedSQLRouter.java
+0
-12
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
.../dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
+56
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java
...g/parsing/parser/statement/InsertStatementParserTest.java
+11
-24
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/AbstractSQLContext.java
浏览文件 @
abee4c7d
...
...
@@ -48,7 +48,6 @@ public abstract class AbstractSQLContext implements SQLContext {
private
ConditionContext
conditionContext
=
new
ConditionContext
();
@Getter
(
AccessLevel
.
NONE
)
private
SQLBuilderContext
sqlBuilderContext
;
@Setter
(
AccessLevel
.
NONE
)
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/InsertSQLContext.java
浏览文件 @
abee4c7d
...
...
@@ -19,6 +19,10 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.context;
import
com.dangdang.ddframe.rdb.sharding.constant.SQLType
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.Collection
;
import
java.util.LinkedList
;
/**
* Insert SQL上下文.
...
...
@@ -26,10 +30,17 @@ import lombok.Getter;
* @author zhangliang
*/
@Getter
@Setter
public
final
class
InsertSQLContext
extends
AbstractSQLContext
{
private
final
GeneratedKeyContext
generatedKeyContext
=
new
GeneratedKeyContext
();
private
final
Collection
<
ShardingColumnContext
>
shardingColumnContexts
=
new
LinkedList
<>();
private
int
columnsListLastPosition
;
private
int
valuesListLastPosition
;
public
InsertSQLContext
()
{
super
(
SQLType
.
INSERT
);
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/SQLContext.java
浏览文件 @
abee4c7d
...
...
@@ -66,6 +66,13 @@ public interface SQLContext {
*/
Optional
<
ShardingColumnContext
>
findColumn
(
SQLExpr
expr
);
/**
* 获取SQL构建器上下文.
*
* @return SQL构建器上下文
*/
SQLBuilderContext
getSqlBuilderContext
();
/**
* 获取SQL构建器.
*
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLInsertParser.java
浏览文件 @
abee4c7d
...
...
@@ -33,9 +33,9 @@ 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.expr.SQLTextExpr
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.google.common.collect.Sets
;
import
java.util.Collection
;
import
java.util.Set
;
/**
...
...
@@ -55,11 +55,11 @@ public final class MySQLInsertParser extends AbstractInsertParser {
}
private
void
parseInsertSet
()
{
Collection
<
String
>
autoIncrementColumns
=
getShardingRule
().
getAutoIncrementColumns
(
getSqlContext
().
getTables
().
get
(
0
).
getName
());
ConditionContext
conditionContext
=
new
ConditionContext
();
do
{
getSqlParser
().
getLexer
().
nextToken
();
ShardingColumnContext
shardingColumnContext
=
getColumn
(
autoIncrementColumns
);
ShardingColumnContext
shardingColumnContext
=
new
ShardingColumnContext
(
SQLUtil
.
getExactlyValue
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getLiterals
()),
getSqlContext
().
getTables
().
get
(
0
).
getName
());
getSqlParser
().
getLexer
().
nextToken
();
getSqlParser
().
accept
(
Symbol
.
EQ
);
SQLExpr
sqlExpr
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
浏览文件 @
abee4c7d
...
...
@@ -18,19 +18,16 @@
package
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert
;
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.SQLExpr
;
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.lexer.token.Assist
;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword
;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol
;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.TokenType
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser
;
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.ShardingColumnContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLExpr
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.google.common.collect.Sets
;
...
...
@@ -68,12 +65,12 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
public
final
InsertSQLContext
parse
()
{
sqlParser
.
getLexer
().
nextToken
();
parseInto
();
Collection
<
ShardingColumnContext
>
shardingColumnContexts
=
parseColumns
();
parseColumns
();
if
(
sqlParser
.
equalAny
(
DefaultKeyword
.
SELECT
,
Symbol
.
LEFT_PAREN
))
{
throw
new
UnsupportedOperationException
(
"Cannot support subquery"
);
}
if
(
getValuesKeywords
().
contains
(
sqlParser
.
getLexer
().
getCurrentToken
().
getType
()))
{
parseValues
(
shardingColumnContexts
);
parseValues
();
}
else
if
(
getCustomizedInsertKeywords
().
contains
(
sqlParser
.
getLexer
().
getCurrentToken
().
getType
()))
{
parseCustomizedInsert
();
}
...
...
@@ -107,41 +104,25 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
return
Collections
.
emptySet
();
}
private
Collection
<
ShardingColumnContext
>
parseColumns
()
{
private
void
parseColumns
()
{
Collection
<
ShardingColumnContext
>
result
=
new
LinkedList
<>();
Collection
<
String
>
autoIncrementColumns
=
shardingRule
.
getAutoIncrementColumns
(
sqlContext
.
getTables
().
get
(
0
).
getName
());
if
(
sqlParser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
do
{
sqlParser
.
getLexer
().
nextToken
();
result
.
add
(
getColumn
(
autoIncrementColumns
));
result
.
add
(
new
ShardingColumnContext
(
SQLUtil
.
getExactlyValue
(
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
()),
sqlContext
.
getTables
().
get
(
0
).
getName
()
));
sqlParser
.
getLexer
().
nextToken
();
}
while
(!
sqlParser
.
equalAny
(
Symbol
.
RIGHT_PAREN
)
&&
!
sqlParser
.
equalAny
(
Assist
.
END
));
ItemsToken
itemsToken
=
new
ItemsToken
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
for
(
String
each
:
autoIncrementColumns
)
{
itemsToken
.
getItems
().
add
(
each
);
result
.
add
(
new
ShardingColumnContext
(
each
,
sqlContext
.
getTables
().
get
(
0
).
getName
(),
true
));
}
if
(!
itemsToken
.
getItems
().
isEmpty
())
{
sqlParser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
}
sqlContext
.
setColumnsListLastPosition
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
sqlParser
.
getLexer
().
nextToken
();
}
return
result
;
}
protected
final
ShardingColumnContext
getColumn
(
final
Collection
<
String
>
autoIncrementColumns
)
{
String
columnName
=
SQLUtil
.
getExactlyValue
(
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
());
if
(
autoIncrementColumns
.
contains
(
columnName
))
{
autoIncrementColumns
.
remove
(
columnName
);
}
return
new
ShardingColumnContext
(
columnName
,
sqlContext
.
getTables
().
get
(
0
).
getName
());
sqlContext
.
getShardingColumnContexts
().
addAll
(
result
);
}
protected
Set
<
TokenType
>
getValuesKeywords
()
{
return
Sets
.<
TokenType
>
newHashSet
(
DefaultKeyword
.
VALUES
);
}
private
void
parseValues
(
final
Collection
<
ShardingColumnContext
>
shardingColumnContexts
)
{
private
void
parseValues
()
{
boolean
parsed
=
false
;
do
{
if
(
parsed
)
{
...
...
@@ -154,31 +135,14 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
do
{
sqlExprs
.
add
(
sqlParser
.
parseExpression
());
}
while
(
sqlParser
.
skipIfEqual
(
Symbol
.
COMMA
));
ItemsToken
itemsToken
=
new
ItemsToke
n
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
sqlContext
.
setValuesListLastPositio
n
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
int
count
=
0
;
int
offset
=
0
;
for
(
ShardingColumnContext
each
:
shardingColumnContexts
)
{
if
(
each
.
isAutoIncrement
())
{
Number
generatedId
=
getShardingRule
().
findTableRule
(
sqlContext
.
getTables
().
get
(
0
).
getName
()).
generateId
(
each
.
getColumnName
());
if
(
0
==
sqlParser
.
getParametersIndex
())
{
itemsToken
.
getItems
().
add
(
generatedId
.
toString
());
sqlExprs
.
add
(
new
SQLNumberExpr
(
generatedId
));
}
else
{
itemsToken
.
getItems
().
add
(
"?"
);
offset
++;
sqlExprs
.
add
(
new
SQLPlaceholderExpr
(
sqlParser
.
getParametersIndex
()
+
offset
-
1
));
}
sqlContext
.
getGeneratedKeyContext
().
getColumns
().
add
(
each
.
getColumnName
());
sqlContext
.
getGeneratedKeyContext
().
putValue
(
each
.
getColumnName
(),
generatedId
);
}
for
(
ShardingColumnContext
each
:
sqlContext
.
getShardingColumnContexts
())
{
if
(
getShardingRule
().
isShardingColumn
(
each
))
{
conditionContext
.
add
(
new
ConditionContext
.
Condition
(
each
,
sqlExprs
.
get
(
count
)));
}
count
++;
}
if
(!
itemsToken
.
getItems
().
isEmpty
())
{
sqlParser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
}
sqlParser
.
accept
(
Symbol
.
RIGHT_PAREN
);
parsed
=
true
;
sqlContext
.
setConditionContext
(
conditionContext
);
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/PreparedSQLRouter.java
浏览文件 @
abee4c7d
...
...
@@ -30,7 +30,6 @@ import lombok.RequiredArgsConstructor;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.TreeSet
;
/**
* 预解析功能的SQL路由器.
...
...
@@ -58,8 +57,6 @@ public class PreparedSQLRouter {
public
SQLRouteResult
route
(
final
List
<
Object
>
parameters
)
{
if
(
null
==
sqlContext
)
{
sqlContext
=
engine
.
parseSQL
(
logicSql
,
parameters
);
// TODO 提炼至rewrite模块
fillGeneratedId
(
parameters
);
}
else
{
List
<
Number
>
generatedIds
=
generateId
();
parameters
.
addAll
(
generatedIds
);
...
...
@@ -69,15 +66,6 @@ public class PreparedSQLRouter {
return
engine
.
routeSQL
(
sqlContext
,
parameters
);
}
private
void
fillGeneratedId
(
final
List
<
Object
>
parameters
)
{
if
(
sqlContext
instanceof
InsertSQLContext
)
{
InsertSQLContext
insertSQLContext
=
(
InsertSQLContext
)
sqlContext
;
for
(
Integer
each
:
new
TreeSet
<>(
insertSQLContext
.
getGeneratedKeyContext
().
getColumnNameToIndexMap
().
values
()))
{
parameters
.
add
(
insertSQLContext
.
getGeneratedKeyContext
().
getValueTable
().
get
(
0
,
each
));
}
}
}
private
void
setLimit
(
final
List
<
Object
>
parameters
)
{
if
(
null
==
sqlContext
.
getLimitContext
())
{
return
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/router/SQLRouteEngine.java
浏览文件 @
abee4c7d
...
...
@@ -23,17 +23,21 @@ import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import
com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder
;
import
com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingException
;
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.ItemsToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.LimitContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLBuilder
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLBuilderContext
;
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.router.binding.BindingTablesRouter
;
import
com.dangdang.ddframe.rdb.sharding.router.database.DatabaseRouter
;
import
com.dangdang.ddframe.rdb.sharding.router.mixed.MixedTablesRouter
;
...
...
@@ -45,6 +49,7 @@ 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
;
...
...
@@ -92,9 +97,59 @@ 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
);
}
}
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
))
{
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java
浏览文件 @
abee4c7d
...
...
@@ -73,7 +73,7 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest
SQLParsingEngine
statementParser
=
new
SQLParsingEngine
(
DatabaseType
.
MySQL
,
"INSERT INTO `TABLE_XXX` (`field1`) VALUES (10)"
,
shardingRule
);
InsertSQLContext
sqlContext
=
(
InsertSQLContext
)
statementParser
.
parseStatement
();
assertInsertStatementWithoutParameter
(
sqlContext
);
assertThat
(
sqlContext
.
getSqlBuilder
().
toString
(),
is
(
"INSERT INTO [Token(TABLE_XXX)] (`field1`
, field2) VALUES (10, 1
)"
));
assertThat
(
sqlContext
.
getSqlBuilder
().
toString
(),
is
(
"INSERT INTO [Token(TABLE_XXX)] (`field1`
) VALUES (10
)"
));
}
@Test
...
...
@@ -82,37 +82,24 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest
SQLParsingEngine
statementParser
=
new
SQLParsingEngine
(
DatabaseType
.
MySQL
,
"INSERT INTO `TABLE_XXX` (`field1`) VALUES (?)"
,
shardingRule
);
InsertSQLContext
sqlContext
=
(
InsertSQLContext
)
statementParser
.
parseStatement
();
assertInsertStatementWithParameter
(
sqlContext
);
assertThat
(
sqlContext
.
getSqlBuilder
().
toString
(),
is
(
"INSERT INTO [Token(TABLE_XXX)] (`field1`
, field2) VALUES (?,
?)"
));
assertThat
(
sqlContext
.
getSqlBuilder
().
toString
(),
is
(
"INSERT INTO [Token(TABLE_XXX)] (`field1`
) VALUES (
?)"
));
}
private
void
assertInsertStatementWithoutParameter
(
final
InsertSQLContext
sqlContext
)
{
assertThat
(
sqlContext
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
ConditionContext
.
Condition
condition1
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field1"
).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition1
.
getValues
().
size
(),
is
(
1
));
assertThat
(
condition1
.
getValues
().
get
(
0
),
is
((
Comparable
)
10
));
ConditionContext
.
Condition
condition2
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field2"
).
get
();
assertThat
(
condition2
.
getShardingColumnContext
().
getColumnName
(),
is
(
"field2"
));
assertThat
(
condition2
.
getShardingColumnContext
().
getTableName
(),
is
(
"TABLE_XXX"
));
assertThat
(
condition2
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition2
.
getValues
().
size
(),
is
(
1
));
assertThat
(
condition2
.
getValues
().
get
(
0
),
is
((
Comparable
)
1
));
ConditionContext
.
Condition
condition
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field1"
).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
().
size
(),
is
(
1
));
assertThat
(
condition
.
getValues
().
get
(
0
),
is
((
Comparable
)
10
));
}
private
void
assertInsertStatementWithParameter
(
final
InsertSQLContext
sqlContext
)
{
assertThat
(
sqlContext
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
ConditionContext
.
Condition
condition1
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field1"
).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertTrue
(
condition1
.
getValues
().
isEmpty
());
assertThat
(
condition1
.
getValueIndices
().
size
(),
is
(
1
));
assertThat
(
condition1
.
getValueIndices
().
get
(
0
),
is
(
0
));
ConditionContext
.
Condition
condition2
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field2"
).
get
();
assertThat
(
condition2
.
getShardingColumnContext
().
getColumnName
(),
is
(
"field2"
));
assertThat
(
condition2
.
getShardingColumnContext
().
getTableName
(),
is
(
"TABLE_XXX"
));
assertThat
(
condition2
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertTrue
(
condition2
.
getValues
().
isEmpty
());
assertThat
(
condition2
.
getValueIndices
().
size
(),
is
(
1
));
assertThat
(
condition2
.
getValueIndices
().
get
(
0
),
is
(
1
));
ConditionContext
.
Condition
condition
=
sqlContext
.
getConditionContext
().
find
(
"TABLE_XXX"
,
"field1"
).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertTrue
(
condition
.
getValues
().
isEmpty
());
assertThat
(
condition
.
getValueIndices
().
size
(),
is
(
1
));
assertThat
(
condition
.
getValueIndices
().
get
(
0
),
is
(
0
));
}
private
ShardingRule
createShardingRuleWithAutoIncrementColumns
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录