Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
ca3e432a
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,体验更适合开发者的 AI 搜索 >>
提交
ca3e432a
编写于
5月 31, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add Tables
上级
2dd6253f
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
175 addition
and
100 deletion
+175
-100
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/SQLParser.java
...ngdang/ddframe/rdb/sharding/parsing/parser/SQLParser.java
+12
-35
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/table/Table.java
...rame/rdb/sharding/parsing/parser/context/table/Table.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/table/Tables.java
...ame/rdb/sharding/parsing/parser/context/table/Tables.java
+115
-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
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/AbstractSQLStatement.java
...arding/parsing/parser/statement/AbstractSQLStatement.java
+2
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/SQLStatement.java
...e/rdb/sharding/parsing/parser/statement/SQLStatement.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
...parsing/parser/statement/insert/AbstractInsertParser.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/InsertStatement.java
...ding/parsing/parser/statement/insert/InsertStatement.java
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java
...parsing/parser/statement/select/AbstractSelectParser.java
+3
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/update/AbstractUpdateParser.java
...parsing/parser/statement/update/AbstractUpdateParser.java
+1
-1
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
...ngdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
+2
-6
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java
...ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java
+9
-19
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/AbstractBaseParseTest.java
...g/ddframe/rdb/sharding/parsing/AbstractBaseParseTest.java
+1
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLPreparedStatementForOneParameterTest.java
...sing/mysql/MySQLPreparedStatementForOneParameterTest.java
+1
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLPreparedStatementForTowParametersTest.java
...ing/mysql/MySQLPreparedStatementForTowParametersTest.java
+1
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLStatementTest.java
...dframe/rdb/sharding/parsing/mysql/MySQLStatementTest.java
+1
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/OrParseTest.java
...gdang/ddframe/rdb/sharding/parsing/mysql/OrParseTest.java
+1
-1
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java
...g/parsing/parser/statement/DeleteStatementParserTest.java
+7
-7
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java
...g/parsing/parser/statement/InsertStatementParserTest.java
+4
-4
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java
...g/parsing/parser/statement/UpdateStatementParserTest.java
+7
-7
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/SQLParser.java
浏览文件 @
ca3e432a
...
...
@@ -22,9 +22,10 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.Lexer;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword
;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Literals
;
import
com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Column
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLExpression
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLIdentifierExpression
;
...
...
@@ -40,7 +41,6 @@ import com.google.common.base.Optional;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.Collection
;
import
java.util.LinkedList
;
import
java.util.List
;
...
...
@@ -148,7 +148,7 @@ public class SQLParser extends AbstractParser {
private
void
setTableToken
(
final
SQLStatement
sqlStatement
,
final
int
beginPosition
,
final
SQLPropertyExpression
propertyExpr
)
{
String
owner
=
propertyExpr
.
getOwner
().
getName
();
if
(
sqlStatement
.
getTables
().
get
(
0
).
get
Name
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
owner
)))
{
if
(
sqlStatement
.
getTables
().
get
SingleTable
Name
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
owner
)))
{
sqlStatement
.
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
-
owner
.
length
(),
owner
));
}
}
...
...
@@ -285,7 +285,7 @@ public class SQLParser extends AbstractParser {
getLexer
().
nextToken
();
SQLExpression
right
=
parseExpression
(
sqlStatement
);
// TODO 如果有多表,且找不到column是哪个表的,则不加入condition,以后需要解析binding table
if
((
1
==
sqlStatement
.
getTables
().
siz
e
()
||
left
instanceof
SQLPropertyExpression
)
if
((
sqlStatement
.
getTables
().
isSingleTabl
e
()
||
left
instanceof
SQLPropertyExpression
)
&&
(
right
instanceof
SQLNumberExpression
||
right
instanceof
SQLTextExpression
||
right
instanceof
SQLPlaceholderExpression
))
{
Optional
<
Column
>
column
=
find
(
sqlStatement
.
getTables
(),
left
);
if
(
column
.
isPresent
()
&&
shardingRule
.
isShardingColumn
(
column
.
get
()))
{
...
...
@@ -328,46 +328,23 @@ public class SQLParser extends AbstractParser {
parseExpression
(
sqlStatement
);
}
private
Optional
<
Column
>
find
(
final
Collection
<
Table
>
tables
,
final
SQLExpression
sqlExpression
)
{
private
Optional
<
Column
>
find
(
final
Tables
tables
,
final
SQLExpression
sqlExpression
)
{
if
(
sqlExpression
instanceof
SQLPropertyExpression
)
{
return
getColumnWith
QualifiedName
(
tables
,
(
SQLPropertyExpression
)
sqlExpression
);
return
getColumnWith
Owner
(
tables
,
(
SQLPropertyExpression
)
sqlExpression
);
}
if
(
sqlExpression
instanceof
SQLIdentifierExpression
)
{
return
getColumnWithoutOwner
(
tables
,
SQLUtil
.
getExactlyValue
(((
SQLIdentifierExpression
)
sqlExpression
).
getName
())
);
return
getColumnWithoutOwner
(
tables
,
(
SQLIdentifierExpression
)
sqlExpression
);
}
return
Optional
.
absent
();
}
private
Optional
<
Column
>
getColumnWith
QualifiedName
(
final
Collection
<
Table
>
tables
,
final
SQLPropertyExpression
propertyExpression
)
{
Optional
<
Table
>
table
=
findTable
(
tables
,
SQLUtil
.
getExactlyValue
((
propertyExpression
.
getOwner
()).
getName
()));
private
Optional
<
Column
>
getColumnWith
Owner
(
final
Tables
tables
,
final
SQLPropertyExpression
propertyExpression
)
{
Optional
<
Table
>
table
=
tables
.
find
(
SQLUtil
.
getExactlyValue
((
propertyExpression
.
getOwner
()).
getName
()));
return
propertyExpression
.
getOwner
()
instanceof
SQLIdentifierExpression
&&
table
.
isPresent
()
?
Optional
.
of
(
new
Column
(
SQLUtil
.
getExactlyValue
(
propertyExpression
.
getName
()),
table
.
get
().
getName
()))
:
Optional
.<
Column
>
absent
();
}
private
Optional
<
Table
>
findTable
(
final
Collection
<
Table
>
tables
,
final
String
tableNameOrAlias
)
{
Optional
<
Table
>
tableFromName
=
findTableFromName
(
tables
,
tableNameOrAlias
);
return
tableFromName
.
isPresent
()
?
tableFromName
:
findTableFromAlias
(
tables
,
tableNameOrAlias
);
}
private
Optional
<
Table
>
findTableFromName
(
final
Collection
<
Table
>
tables
,
final
String
name
)
{
for
(
Table
each
:
tables
)
{
if
(
each
.
getName
().
equalsIgnoreCase
(
name
))
{
return
Optional
.
of
(
each
);
}
}
return
Optional
.
absent
();
}
private
Optional
<
Table
>
findTableFromAlias
(
final
Collection
<
Table
>
tables
,
final
String
alias
)
{
for
(
Table
each
:
tables
)
{
if
(
each
.
getAlias
().
isPresent
()
&&
each
.
getAlias
().
get
().
equalsIgnoreCase
(
alias
))
{
return
Optional
.
of
(
each
);
}
}
return
Optional
.
absent
();
}
private
Optional
<
Column
>
getColumnWithoutOwner
(
final
Collection
<
Table
>
tables
,
final
String
columnName
)
{
return
1
==
tables
.
size
()
?
Optional
.
of
(
new
Column
(
columnName
,
tables
.
iterator
().
next
().
getName
()))
:
Optional
.<
Column
>
absent
();
private
Optional
<
Column
>
getColumnWithoutOwner
(
final
Tables
tables
,
final
SQLIdentifierExpression
identifierExpression
)
{
return
tables
.
isSingleTable
()
?
Optional
.
of
(
new
Column
(
SQLUtil
.
getExactlyValue
(
identifierExpression
.
getName
()),
tables
.
getSingleTableName
()))
:
Optional
.<
Column
>
absent
();
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/Table.java
→
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/
table/
Table.java
浏览文件 @
ca3e432a
...
...
@@ -15,7 +15,7 @@
* </p>
*/
package
com.dangdang.ddframe.rdb.sharding.parsing.parser.context
;
package
com.dangdang.ddframe.rdb.sharding.parsing.parser.context
.table
;
import
com.google.common.base.Optional
;
import
lombok.Getter
;
...
...
@@ -23,7 +23,7 @@ import lombok.RequiredArgsConstructor;
import
lombok.ToString
;
/**
* 表对象.
* 表
解析
对象.
*
* @author zhangliang
*/
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/table/Tables.java
0 → 100644
浏览文件 @
ca3e432a
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table
;
import
com.google.common.base.Optional
;
import
com.google.common.base.Preconditions
;
import
lombok.ToString
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.TreeSet
;
/**
* 表集合对象.
*
* @author zhangliang
*/
@ToString
public
final
class
Tables
{
private
final
List
<
Table
>
tables
=
new
ArrayList
<>();
/**
* 添加表解析对象.
*/
public
void
add
(
final
Table
table
)
{
tables
.
add
(
table
);
}
/**
* 判断是否为空.
*
* @return 是否为空
*/
public
boolean
isEmpty
()
{
return
tables
.
isEmpty
();
}
/**
* 判断是否为单表.
*
* @return 是否为单表
*/
public
boolean
isSingleTable
()
{
return
1
==
tables
.
size
();
}
/**
* 获取表名称.
*
* @return 表名称
*/
public
String
getSingleTableName
()
{
Preconditions
.
checkArgument
(!
isEmpty
());
return
tables
.
get
(
0
).
getName
();
}
/**
* 获取表名称集合.
*
* @return 表名称集合
*/
public
Collection
<
String
>
getTableNames
()
{
Collection
<
String
>
result
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
);
for
(
Table
each
:
tables
)
{
result
.
add
(
each
.
getName
());
}
return
result
;
}
/**
* 根据表名称或别名查找表解析对象.
*
* @param tableNameOrAlias 表名称或别名
* @return 表解析对象
*/
public
Optional
<
Table
>
find
(
final
String
tableNameOrAlias
)
{
Optional
<
Table
>
tableFromName
=
findTableFromName
(
tableNameOrAlias
);
return
tableFromName
.
isPresent
()
?
tableFromName
:
findTableFromAlias
(
tableNameOrAlias
);
}
private
Optional
<
Table
>
findTableFromName
(
final
String
name
)
{
for
(
Table
each
:
tables
)
{
if
(
each
.
getName
().
equalsIgnoreCase
(
name
))
{
return
Optional
.
of
(
each
);
}
}
return
Optional
.
absent
();
}
private
Optional
<
Table
>
findTableFromAlias
(
final
String
alias
)
{
for
(
Table
each
:
tables
)
{
if
(
each
.
getAlias
().
isPresent
()
&&
each
.
getAlias
().
get
().
equalsIgnoreCase
(
alias
))
{
return
Optional
.
of
(
each
);
}
}
return
Optional
.
absent
();
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLInsertParser.java
浏览文件 @
ca3e432a
...
...
@@ -58,7 +58,7 @@ public final class MySQLInsertParser extends AbstractInsertParser {
do
{
getSqlParser
().
getLexer
().
nextToken
();
Column
column
=
new
Column
(
SQLUtil
.
getExactlyValue
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getLiterals
()),
getInsertStatement
().
getTables
().
get
(
0
).
get
Name
());
SQLUtil
.
getExactlyValue
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getLiterals
()),
getInsertStatement
().
getTables
().
get
SingleTable
Name
());
getSqlParser
().
getLexer
().
nextToken
();
getSqlParser
().
accept
(
Symbol
.
EQ
);
SQLExpression
sqlExpression
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/AbstractSQLStatement.java
浏览文件 @
ca3e432a
...
...
@@ -24,13 +24,12 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GroupBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Limit
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.Tables
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.SQLToken
;
import
com.google.common.base.Optional
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedList
;
...
...
@@ -48,7 +47,7 @@ public abstract class AbstractSQLStatement implements SQLStatement {
private
final
SQLType
type
;
private
final
List
<
Table
>
tables
=
new
ArrayList
<>
();
private
final
Tables
tables
=
new
Tables
();
private
final
Map
<
Column
,
Condition
>
conditions
=
new
LinkedHashMap
<>();
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/SQLStatement.java
浏览文件 @
ca3e432a
...
...
@@ -24,7 +24,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GroupBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Limit
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.Tables
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.SQLToken
;
import
com.google.common.base.Optional
;
...
...
@@ -49,7 +49,7 @@ public interface SQLStatement {
*
* @return 表解析对象集合
*/
List
<
Table
>
getTables
();
Tables
getTables
();
/**
* 添加条件对象.
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
浏览文件 @
ca3e432a
...
...
@@ -114,7 +114,7 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
private
void
parseColumns
()
{
Collection
<
Column
>
result
=
new
LinkedList
<>();
if
(
sqlParser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
String
tableName
=
insertStatement
.
getTables
().
get
(
0
).
get
Name
();
String
tableName
=
insertStatement
.
getTables
().
get
SingleTable
Name
();
Optional
<
String
>
generateKeyColumn
=
shardingRule
.
getGenerateKeyColumn
(
tableName
);
int
count
=
0
;
do
{
...
...
@@ -187,7 +187,7 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
}
private
void
appendGenerateKey
()
{
String
tableName
=
insertStatement
.
getTables
().
get
(
0
).
get
Name
();
String
tableName
=
insertStatement
.
getTables
().
get
SingleTable
Name
();
Optional
<
String
>
generateKeyColumn
=
shardingRule
.
getGenerateKeyColumn
(
tableName
);
if
(!
generateKeyColumn
.
isPresent
()
||
null
!=
insertStatement
.
getGeneratedKey
())
{
return
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/InsertStatement.java
浏览文件 @
ca3e432a
...
...
@@ -68,7 +68,7 @@ public final class InsertStatement extends AbstractSQLStatement {
if
(
null
!=
generatedKey
)
{
return
;
}
Optional
<
TableRule
>
tableRule
=
shardingRule
.
tryFindTableRule
(
getTables
().
get
(
0
).
get
Name
());
Optional
<
TableRule
>
tableRule
=
shardingRule
.
tryFindTableRule
(
getTables
().
get
SingleTable
Name
());
if
(!
tableRule
.
isPresent
())
{
return
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java
浏览文件 @
ca3e432a
...
...
@@ -28,7 +28,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.CommonSelectItem
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GroupBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SelectItem
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLExpression
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLIdentifierExpression
;
...
...
@@ -317,10 +317,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return
;
}
SQLPropertyExpression
sqlPropertyExpression
=
(
SQLPropertyExpression
)
sqlExpression
;
for
(
Table
each
:
selectStatement
.
getTables
())
{
if
(
each
.
getName
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
sqlPropertyExpression
.
getOwner
().
getName
())))
{
selectStatement
.
getSqlTokens
().
add
(
new
TableToken
(
startPosition
,
sqlPropertyExpression
.
getOwner
().
getName
()));
}
if
(
selectStatement
.
getTables
().
getTableNames
().
contains
(
SQLUtil
.
getExactlyValue
(
sqlPropertyExpression
.
getOwner
().
getName
())))
{
selectStatement
.
getSqlTokens
().
add
(
new
TableToken
(
startPosition
,
sqlPropertyExpression
.
getOwner
().
getName
()));
}
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/update/AbstractUpdateParser.java
浏览文件 @
ca3e432a
...
...
@@ -73,7 +73,7 @@ public abstract class AbstractUpdateParser implements SQLStatementParser {
String
literals
=
sqlParser
.
getLexer
().
getCurrentToken
().
getLiterals
();
sqlParser
.
getLexer
().
nextToken
();
if
(
sqlParser
.
skipIfEqual
(
Symbol
.
DOT
))
{
if
(
updateStatement
.
getTables
().
get
(
0
).
get
Name
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
literals
)))
{
if
(
updateStatement
.
getTables
().
get
SingleTable
Name
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
literals
)))
{
updateStatement
.
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
-
literals
.
length
(),
literals
));
}
sqlParser
.
getLexer
().
nextToken
();
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/rewrite/SQLRewriteEngine.java
浏览文件 @
ca3e432a
...
...
@@ -20,7 +20,6 @@ package com.dangdang.ddframe.rdb.sharding.rewrite;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Limit
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.ItemsToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.OffsetLimitToken
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.token.RowCountLimitToken
;
...
...
@@ -32,7 +31,6 @@ import java.util.Collections;
import
java.util.Comparator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.TreeSet
;
/**
* SQL重写引擎.
...
...
@@ -45,16 +43,14 @@ public final class SQLRewriteEngine {
private
final
List
<
SQLToken
>
sqlTokens
=
new
LinkedList
<>();
private
final
Collection
<
String
>
tableNames
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
)
;
private
final
Collection
<
String
>
tableNames
;
private
final
Limit
limit
;
public
SQLRewriteEngine
(
final
String
originalSQL
,
final
SQLStatement
sqlStatement
)
{
this
.
originalSQL
=
originalSQL
;
sqlTokens
.
addAll
(
sqlStatement
.
getSqlTokens
());
for
(
Table
each
:
sqlStatement
.
getTables
())
{
tableNames
.
add
(
each
.
getName
());
}
tableNames
=
sqlStatement
.
getTables
().
getTableNames
();
limit
=
sqlStatement
.
getLimit
();
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java
浏览文件 @
ca3e432a
...
...
@@ -24,9 +24,8 @@ import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingContext;
import
com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
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.SQLStatement
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.
context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.
statement.insert.InsertStatement
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLBuilder
;
import
com.dangdang.ddframe.rdb.sharding.rewrite.SQLRewriteEngine
;
import
com.dangdang.ddframe.rdb.sharding.routing.RoutingResult
;
...
...
@@ -35,14 +34,11 @@ import com.dangdang.ddframe.rdb.sharding.routing.SQLRouteResult;
import
com.dangdang.ddframe.rdb.sharding.routing.type.binding.BindingTablesRouter
;
import
com.dangdang.ddframe.rdb.sharding.routing.type.mixed.MixedTablesRouter
;
import
com.dangdang.ddframe.rdb.sharding.routing.type.single.SingleTableRouter
;
import
com.google.common.base.Function
;
import
com.google.common.collect.Collections2
;
import
com.google.common.collect.Sets
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Collection
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Set
;
/**
* 需要解析的SQL路由器.
...
...
@@ -85,7 +81,7 @@ public final class ParsingSQLRouter implements SQLRouter {
if
(
parameters
.
isEmpty
())
{
result
.
getGeneratedKeys
().
add
(
generatedKey
.
getValue
());
}
else
if
(
parameters
.
size
()
==
generatedKey
.
getIndex
())
{
Number
key
=
shardingRule
.
generateKey
(
sqlStatement
.
getTables
().
get
(
0
).
get
Name
());
Number
key
=
shardingRule
.
generateKey
(
sqlStatement
.
getTables
().
get
SingleTable
Name
());
parameters
.
add
(
key
);
setGeneratedKeys
(
result
,
key
);
}
else
if
(-
1
!=
generatedKey
.
getIndex
())
{
...
...
@@ -108,21 +104,15 @@ public final class ParsingSQLRouter implements SQLRouter {
}
private
RoutingResult
route
(
final
List
<
Object
>
parameters
,
final
SQLStatement
sqlStatement
)
{
Set
<
String
>
logicTables
=
Sets
.
newLinkedHashSet
(
Collections2
.
transform
(
sqlStatement
.
getTables
(),
new
Function
<
Table
,
String
>()
{
@Override
public
String
apply
(
final
Table
input
)
{
return
input
.
getName
();
}
}));
if
(
1
==
logicTables
.
size
())
{
return
new
SingleTableRouter
(
shardingRule
,
parameters
,
logicTables
.
iterator
().
next
(),
sqlStatement
,
sqlStatement
.
getType
()).
route
();
Collection
<
String
>
tableNames
=
sqlStatement
.
getTables
().
getTableNames
();
if
(
1
==
tableNames
.
size
())
{
return
new
SingleTableRouter
(
shardingRule
,
parameters
,
tableNames
.
iterator
().
next
(),
sqlStatement
,
sqlStatement
.
getType
()).
route
();
}
if
(
shardingRule
.
isAllBindingTables
(
logicTabl
es
))
{
return
new
BindingTablesRouter
(
shardingRule
,
parameters
,
logicTabl
es
,
sqlStatement
,
sqlStatement
.
getType
()).
route
();
if
(
shardingRule
.
isAllBindingTables
(
tableNam
es
))
{
return
new
BindingTablesRouter
(
shardingRule
,
parameters
,
tableNam
es
,
sqlStatement
,
sqlStatement
.
getType
()).
route
();
}
// TODO 可配置是否执行笛卡尔积
return
new
MixedTablesRouter
(
shardingRule
,
parameters
,
logicTabl
es
,
sqlStatement
,
sqlStatement
.
getType
()).
route
();
return
new
MixedTablesRouter
(
shardingRule
,
parameters
,
tableNam
es
,
sqlStatement
,
sqlStatement
.
getType
()).
route
();
}
private
void
logSQLRouteResult
(
final
SQLRouteResult
routeResult
,
final
List
<
Object
>
parameters
)
{
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/AbstractBaseParseTest.java
浏览文件 @
ca3e432a
...
...
@@ -29,7 +29,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GroupBy;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Limit
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderBy
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Column
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLExpression
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLNumberExpression
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLPlaceholderExpression
;
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLPreparedStatementForOneParameterTest.java
浏览文件 @
ca3e432a
...
...
@@ -22,7 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import
com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLPreparedStatementForTowParametersTest.java
浏览文件 @
ca3e432a
...
...
@@ -22,7 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import
com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/MySQLStatementTest.java
浏览文件 @
ca3e432a
...
...
@@ -22,7 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import
com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/mysql/OrParseTest.java
浏览文件 @
ca3e432a
...
...
@@ -22,7 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import
com.dangdang.ddframe.rdb.sharding.parsing.AbstractBaseParseTest
;
import
com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.context.
table.
Table
;
import
com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement
;
import
org.junit.Ignore
;
import
org.junit.Test
;
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java
浏览文件 @
ca3e432a
...
...
@@ -44,7 +44,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest
ShardingRule
shardingRule
=
createShardingRule
();
SQLParsingEngine
statementParser
=
new
SQLParsingEngine
(
DatabaseType
.
MySQL
,
sql
,
shardingRule
);
DeleteStatement
deleteStatement
=
(
DeleteStatement
)
statementParser
.
parse
();
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
deleteStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
// TODO 放入rewrite模块断言
assertThat
(
new
SQLRewriteEngine
(
sql
,
deleteStatement
).
rewrite
().
toString
(),
is
(
"DELETE FROM [Token(TABLE_XXX)]"
));
}
...
...
@@ -62,8 +62,8 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest
}
private
void
assertDeleteStatementWithoutParameter
(
final
DeleteStatement
deleteStatement
)
{
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getAlias
().
get
(),
is
(
"xxx"
));
assertThat
(
deleteStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
deleteStatement
.
getTables
().
find
(
"xxx"
).
get
(
).
getAlias
().
get
(),
is
(
"xxx"
));
Condition
condition1
=
deleteStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition1
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
@@ -93,8 +93,8 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest
}
private
void
assertDeleteStatementWithParameter
(
final
DeleteStatement
deleteStatement
)
{
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getAlias
().
get
(),
is
(
"xxx"
));
assertThat
(
deleteStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
deleteStatement
.
getTables
().
find
(
"xxx"
).
get
(
).
getAlias
().
get
(),
is
(
"xxx"
));
List
<
Object
>
actualParameters
=
Arrays
.<
Object
>
asList
(
0
,
10
,
20
,
30
,
40
,
50
,
60
,
70
,
80
);
Condition
condition1
=
deleteStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
...
...
@@ -151,8 +151,8 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest
private
void
parseWithSpecialSyntax
(
final
DatabaseType
dbType
,
final
String
actualSQL
,
final
String
expectedSQL
)
{
DeleteStatement
deleteStatement
=
(
DeleteStatement
)
new
SQLParsingEngine
(
dbType
,
actualSQL
,
createShardingRule
()).
parse
();
assertThat
(
deleteStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
deleteStatement
.
getTables
().
get
(
0
).
getAlias
().
isPresent
());
assertThat
(
deleteStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
deleteStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getAlias
().
isPresent
());
Condition
condition
=
deleteStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java
浏览文件 @
ca3e432a
...
...
@@ -85,7 +85,7 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest
}
private
void
assertInsertStatementWithoutParameter
(
final
InsertStatement
insertStatement
)
{
assertThat
(
insertStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
insertStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
Condition
condition
=
insertStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
@@ -105,7 +105,7 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest
}
private
void
assertInsertStatementWithParameter
(
final
InsertStatement
insertStatement
)
{
assertThat
(
insertStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
insertStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
Condition
condition
=
insertStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
(
Collections
.<
Object
>
singletonList
(
0
)).
size
(),
is
(
1
));
...
...
@@ -157,8 +157,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest
private
void
parseWithSpecialSyntax
(
final
DatabaseType
dbType
,
final
String
actualSQL
,
final
String
expectedSQL
)
{
InsertStatement
insertStatement
=
(
InsertStatement
)
new
SQLParsingEngine
(
dbType
,
actualSQL
,
createShardingRule
()).
parse
();
assertThat
(
insertStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
insertStatement
.
getTables
().
get
(
0
).
getAlias
().
isPresent
());
assertThat
(
insertStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
insertStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getAlias
().
isPresent
());
Condition
condition
=
insertStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java
浏览文件 @
ca3e432a
...
...
@@ -44,7 +44,7 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest
ShardingRule
shardingRule
=
createShardingRule
();
SQLParsingEngine
statementParser
=
new
SQLParsingEngine
(
DatabaseType
.
MySQL
,
sql
,
shardingRule
);
UpdateStatement
updateStatement
=
(
UpdateStatement
)
statementParser
.
parse
();
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
// TODO 放入rewrite模块断言
assertThat
(
new
SQLRewriteEngine
(
sql
,
updateStatement
).
rewrite
().
toString
(),
is
(
"UPDATE [Token(TABLE_XXX)] SET field1=field1+1"
));
}
...
...
@@ -64,8 +64,8 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest
}
private
void
assertUpdateStatementWithoutParameter
(
final
UpdateStatement
updateStatement
)
{
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getAlias
().
get
(),
is
(
"xxx"
));
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getAlias
().
get
(),
is
(
"xxx"
));
Condition
condition1
=
updateStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition1
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
@@ -95,8 +95,8 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest
}
private
void
assertUpdateStatementWitParameter
(
final
UpdateStatement
updateStatement
)
{
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getAlias
().
get
(),
is
(
"xxx"
));
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getAlias
().
get
(),
is
(
"xxx"
));
List
<
Object
>
actualParameters
=
Arrays
.<
Object
>
asList
(
0
,
10
,
20
,
30
,
40
,
50
,
60
,
70
,
80
);
Condition
condition1
=
updateStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition1
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
...
...
@@ -146,8 +146,8 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest
private
void
parseWithSpecialSyntax
(
final
DatabaseType
dbType
,
final
String
actualSQL
,
final
String
expectedSQL
)
{
UpdateStatement
updateStatement
=
(
UpdateStatement
)
new
SQLParsingEngine
(
dbType
,
actualSQL
,
createShardingRule
()).
parse
();
assertThat
(
updateStatement
.
getTables
().
get
(
0
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
updateStatement
.
getTables
().
get
(
0
).
getAlias
().
isPresent
());
assertThat
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getName
(),
is
(
"TABLE_XXX"
));
assertFalse
(
updateStatement
.
getTables
().
find
(
"TABLE_XXX"
).
get
(
).
getAlias
().
isPresent
());
Condition
condition
=
updateStatement
.
find
(
new
Column
(
"field1"
,
"TABLE_XXX"
)).
get
();
assertThat
(
condition
.
getOperator
(),
is
(
ShardingOperator
.
EQUAL
));
assertThat
(
condition
.
getValues
(
Collections
.
emptyList
()).
size
(),
is
(
1
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录