Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
4f445dc7
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,发现更多精彩内容 >>
提交
4f445dc7
编写于
3月 03, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor insert
上级
ad840c78
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
32 addition
and
40 deletion
+32
-40
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySQLInsertParser.java
...aba/druid/sql/dialect/mysql/parser/MySQLInsertParser.java
+12
-17
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleInsertParser.java
...a/druid/sql/dialect/oracle/parser/OracleInsertParser.java
+2
-5
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/parser/AbstractInsertParser.java
...va/com/alibaba/druid/sql/parser/AbstractInsertParser.java
+18
-18
未找到文件。
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySQLInsertParser.java
浏览文件 @
4f445dc7
package
com.alibaba.druid.sql.dialect.mysql.parser
;
import
com.alibaba.druid.sql.ast.SQLExpr
;
import
com.alibaba.druid.sql.ast.SQLName
;
import
com.alibaba.druid.sql.context.InsertSQLContext
;
import
com.alibaba.druid.sql.lexer.Token
;
import
com.alibaba.druid.sql.parser.AbstractInsertParser
;
...
...
@@ -10,10 +9,11 @@ import com.alibaba.druid.sql.parser.SQLExprParser;
import
com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule
;
import
com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext
;
import
com.google.common.collect.Sets
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.TreeSet
;
/**
* MySQL Insert语句解析器.
...
...
@@ -34,35 +34,30 @@ public final class MySQLInsertParser extends AbstractInsertParser {
private
void
parseInsertSet
(
final
InsertSQLContext
sqlContext
)
{
ParserUtil
parserUtil
=
new
ParserUtil
(
getExprParser
(),
getShardingRule
(),
getParameters
(),
sqlContext
.
getTables
().
get
(
0
),
sqlContext
,
0
);
ParseContext
parseContext
=
parserUtil
.
getParseContext
();
Collection
<
String
>
autoIncrementColumns
=
parseContext
.
getShardingRule
().
getAutoIncrementColumns
(
sqlContext
.
getTables
().
get
(
0
).
getName
());
do
{
getLexer
().
nextToken
();
SQLName
column
=
getExprParser
().
name
();
Condition
.
Column
column
=
getColumn
(
sqlContext
,
autoIncrementColumns
);
getLexer
().
nextToken
();
getLexer
().
accept
(
Token
.
EQ
);
SQLExpr
value
=
getExprParser
().
expr
();
parseContext
.
addCondition
(
column
.
get
SimpleName
(),
sqlContext
.
getTables
().
get
(
0
).
get
Name
(),
Condition
.
BinaryOperator
.
EQUAL
,
value
,
getParameters
());
parseContext
.
addCondition
(
column
.
get
ColumnName
(),
column
.
getTable
Name
(),
Condition
.
BinaryOperator
.
EQUAL
,
value
,
getParameters
());
}
while
(
getLexer
().
equalToken
(
Token
.
COMMA
));
sqlContext
.
getConditionContexts
().
add
(
parseContext
.
getCurrentConditionContext
());
}
@Override
protected
Set
<
String
>
getIdentifiersBetweenTableAndValues
()
{
Set
<
String
>
result
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
);
result
.
add
(
Token
.
PARTITION
.
getName
());
return
result
;
protected
Set
<
Token
>
getSkippedTokensBetweenTableAndValues
()
{
return
Sets
.
newHashSet
(
Token
.
PARTITION
);
}
@Override
protected
Set
<
String
>
getValuesIdentifiers
()
{
Set
<
String
>
result
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
);
result
.
add
(
Token
.
VALUES
.
getName
());
result
.
add
(
Token
.
VALUE
.
getName
());
return
result
;
protected
Set
<
Token
>
getValuesTokens
()
{
return
Sets
.
newHashSet
(
Token
.
VALUES
,
Token
.
VALUE
);
}
@Override
protected
Set
<
String
>
getCustomizedInsertIdentifiers
()
{
Set
<
String
>
result
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
);
result
.
add
(
Token
.
SET
.
getName
());
return
result
;
protected
Set
<
Token
>
getCustomizedInsertTokens
()
{
return
Sets
.
newHashSet
(
Token
.
SET
);
}
}
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleInsertParser.java
浏览文件 @
4f445dc7
...
...
@@ -4,8 +4,8 @@ import com.alibaba.druid.sql.lexer.Token;
import
com.alibaba.druid.sql.parser.AbstractInsertParser
;
import
com.alibaba.druid.sql.parser.SQLExprParser
;
import
com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule
;
import
com.google.common.collect.Sets
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
...
...
@@ -22,9 +22,6 @@ public final class OracleInsertParser extends AbstractInsertParser {
@Override
protected
Set
<
Token
>
getUnsupportedTokens
()
{
Set
<
Token
>
result
=
new
HashSet
<>();
result
.
add
(
Token
.
ALL
);
result
.
add
(
Token
.
FIRST
);
return
result
;
return
Sets
.
newHashSet
(
Token
.
ALL
,
Token
.
FIRST
);
}
}
sharding-jdbc-core/src/main/java/com/alibaba/druid/sql/parser/AbstractInsertParser.java
浏览文件 @
4f445dc7
...
...
@@ -12,6 +12,7 @@ import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import
com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition
;
import
com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext
;
import
com.dangdang.ddframe.rdb.sharding.util.SQLUtil
;
import
com.google.common.collect.Sets
;
import
lombok.Getter
;
import
java.util.Collection
;
...
...
@@ -19,7 +20,6 @@ import java.util.Collections;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.TreeSet
;
/**
* Insert语句解析器.
...
...
@@ -55,9 +55,9 @@ public abstract class AbstractInsertParser extends SQLParser {
if
(
getLexer
().
equalToken
(
Token
.
SELECT
,
Token
.
LEFT_PAREN
))
{
throw
new
UnsupportedOperationException
(
"Cannot support subquery"
);
}
if
(
getValues
Identifiers
().
contains
(
getLexer
().
getLiterals
()))
{
if
(
getValues
Tokens
().
contains
(
getLexer
().
getToken
()))
{
parseValues
(
columns
,
result
);
}
else
if
(
getCustomizedInsert
Identifiers
().
contains
(
getLexer
().
getToken
().
getName
()))
{
}
else
if
(
getCustomizedInsert
Tokens
().
contains
(
getLexer
().
getToken
()))
{
parseCustomizedInsert
(
result
);
}
return
result
;
...
...
@@ -79,7 +79,7 @@ public abstract class AbstractInsertParser extends SQLParser {
}
private
void
skipBetweenTableAndValues
()
{
while
(
get
IdentifiersBetweenTableAndValues
().
contains
(
getLexer
().
getLiterals
()))
{
while
(
get
SkippedTokensBetweenTableAndValues
().
contains
(
getLexer
().
getToken
()))
{
getLexer
().
nextToken
();
if
(
getLexer
().
equalToken
(
Token
.
LEFT_PAREN
))
{
getLexer
().
skipParentheses
();
...
...
@@ -87,7 +87,7 @@ public abstract class AbstractInsertParser extends SQLParser {
}
}
protected
Set
<
String
>
getIdentifier
sBetweenTableAndValues
()
{
protected
Set
<
Token
>
getSkippedToken
sBetweenTableAndValues
()
{
return
Collections
.
emptySet
();
}
...
...
@@ -98,14 +98,9 @@ public abstract class AbstractInsertParser extends SQLParser {
if
(
getLexer
().
equalToken
(
Token
.
LEFT_PAREN
))
{
do
{
getLexer
().
nextToken
();
String
columnName
=
SQLUtil
.
getExactlyValue
(
getLexer
().
getLiterals
());
if
(
autoIncrementColumns
.
contains
(
columnName
))
{
autoIncrementColumns
.
remove
(
columnName
);
}
result
.
add
(
new
Condition
.
Column
(
columnName
,
sqlContext
.
getTables
().
get
(
0
).
getName
()));
result
.
add
(
getColumn
(
sqlContext
,
autoIncrementColumns
));
getLexer
().
nextToken
();
}
while
(!
getLexer
().
equalToken
(
Token
.
RIGHT_PAREN
)
&&
!
getLexer
().
equalToken
(
Token
.
EOF
));
}
while
(!
getLexer
().
equalToken
(
Token
.
RIGHT_PAREN
)
&&
!
getLexer
().
equalToken
(
Token
.
EOF
));
ItemsToken
itemsToken
=
new
ItemsToken
(
getLexer
().
getCurrentPosition
()
-
getLexer
().
getLiterals
().
length
());
for
(
String
each
:
autoIncrementColumns
)
{
itemsToken
.
getItems
().
add
(
each
);
...
...
@@ -119,10 +114,16 @@ public abstract class AbstractInsertParser extends SQLParser {
return
result
;
}
protected
Set
<
String
>
getValuesIdentifiers
()
{
Set
<
String
>
result
=
new
TreeSet
<>(
String
.
CASE_INSENSITIVE_ORDER
);
result
.
add
(
Token
.
VALUES
.
getName
());
return
result
;
protected
final
Condition
.
Column
getColumn
(
final
InsertSQLContext
sqlContext
,
final
Collection
<
String
>
autoIncrementColumns
)
{
String
columnName
=
SQLUtil
.
getExactlyValue
(
getLexer
().
getLiterals
());
if
(
autoIncrementColumns
.
contains
(
columnName
))
{
autoIncrementColumns
.
remove
(
columnName
);
}
return
new
Condition
.
Column
(
columnName
,
sqlContext
.
getTables
().
get
(
0
).
getName
());
}
protected
Set
<
Token
>
getValuesTokens
()
{
return
Sets
.
newHashSet
(
Token
.
VALUES
);
}
private
void
parseValues
(
final
Collection
<
Condition
.
Column
>
columns
,
final
InsertSQLContext
sqlContext
)
{
...
...
@@ -130,7 +131,6 @@ public abstract class AbstractInsertParser extends SQLParser {
ParseContext
parseContext
=
parserUtil
.
getParseContext
();
boolean
parsed
=
false
;
do
{
// TODO support multiple insert
if
(
parsed
)
{
throw
new
UnsupportedOperationException
(
"Cannot support multiple insert"
);
}
...
...
@@ -175,7 +175,7 @@ public abstract class AbstractInsertParser extends SQLParser {
sqlContext
.
getConditionContexts
().
add
(
parseContext
.
getCurrentConditionContext
());
}
protected
Set
<
String
>
getCustomizedInsertIdentifier
s
()
{
protected
Set
<
Token
>
getCustomizedInsertToken
s
()
{
return
Collections
.
emptySet
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录