Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
f92ec7e4
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,发现更多精彩内容 >>
提交
f92ec7e4
编写于
5月 08, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
exprParser => sqlParser
上级
1701d99f
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
374 addition
and
374 deletion
+374
-374
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLDeleteParser.java
...rding/parsing/parser/dialect/mysql/MySQLDeleteParser.java
+4
-4
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLInsertParser.java
...rding/parsing/parser/dialect/mysql/MySQLInsertParser.java
+19
-19
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLSelectParser.java
...rding/parsing/parser/dialect/mysql/MySQLSelectParser.java
+31
-31
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLUpdateParser.java
...rding/parsing/parser/dialect/mysql/MySQLUpdateParser.java
+3
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleDeleteParser.java
...ing/parsing/parser/dialect/oracle/OracleDeleteParser.java
+4
-4
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleInsertParser.java
...ing/parsing/parser/dialect/oracle/OracleInsertParser.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java
...ing/parsing/parser/dialect/oracle/OracleSelectParser.java
+114
-114
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleUpdateParser.java
...ing/parsing/parser/dialect/oracle/OracleUpdateParser.java
+3
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLDeleteParser.java
...ing/parser/dialect/postgresql/PostgreSQLDeleteParser.java
+4
-4
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLInsertParser.java
...ing/parser/dialect/postgresql/PostgreSQLInsertParser.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java
...ing/parser/dialect/postgresql/PostgreSQLSelectParser.java
+28
-28
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLUpdateParser.java
...ing/parser/dialect/postgresql/PostgreSQLUpdateParser.java
+3
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerDeleteParser.java
...rsing/parser/dialect/sqlserver/SQLServerDeleteParser.java
+5
-5
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerInsertParser.java
...rsing/parser/dialect/sqlserver/SQLServerInsertParser.java
+2
-2
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerSelectParser.java
...rsing/parser/dialect/sqlserver/SQLServerSelectParser.java
+23
-23
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerUpdateParser.java
...rsing/parser/dialect/sqlserver/SQLServerUpdateParser.java
+3
-3
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/delete/AbstractDeleteParser.java
...parsing/parser/statement/delete/AbstractDeleteParser.java
+8
-8
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
...parsing/parser/statement/insert/AbstractInsertParser.java
+33
-33
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java
...parsing/parser/statement/select/AbstractSelectParser.java
+61
-61
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/update/AbstractUpdateParser.java
...parsing/parser/statement/update/AbstractUpdateParser.java
+22
-22
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLDeleteParser.java
浏览文件 @
f92ec7e4
...
...
@@ -29,13 +29,13 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
MySQLDeleteParser
extends
AbstractDeleteParser
{
public
MySQLDeleteParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
MySQLDeleteParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenDeleteAndTable
()
{
get
Expr
Parser
().
skipAll
(
MySQLKeyword
.
LOW_PRIORITY
,
MySQLKeyword
.
QUICK
,
MySQLKeyword
.
IGNORE
);
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
get
Sql
Parser
().
skipAll
(
MySQLKeyword
.
LOW_PRIORITY
,
MySQLKeyword
.
QUICK
,
MySQLKeyword
.
IGNORE
);
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLInsertParser.java
浏览文件 @
f92ec7e4
...
...
@@ -46,8 +46,8 @@ import java.util.Set;
*/
public
final
class
MySQLInsertParser
extends
AbstractInsertParser
{
public
MySQLInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
expr
Parser
)
{
super
(
shardingRule
,
parameters
,
expr
Parser
);
public
MySQLInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
sql
Parser
)
{
super
(
shardingRule
,
parameters
,
sql
Parser
);
}
@Override
...
...
@@ -59,34 +59,34 @@ public final class MySQLInsertParser extends AbstractInsertParser {
Collection
<
String
>
autoIncrementColumns
=
getShardingRule
().
getAutoIncrementColumns
(
getSqlContext
().
getTables
().
get
(
0
).
getName
());
ConditionContext
conditionContext
=
new
ConditionContext
();
do
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
getLexer
().
nextToken
();
ShardingColumnContext
shardingColumnContext
=
getColumn
(
autoIncrementColumns
);
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
accept
(
Symbol
.
EQ
);
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
accept
(
Symbol
.
EQ
);
SQLExpr
sqlExpr
;
if
(
get
Expr
Parser
().
equalAny
(
Literals
.
INT
))
{
sqlExpr
=
new
SQLNumberExpr
(
Integer
.
parseInt
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
()));
}
else
if
(
get
Expr
Parser
().
equalAny
(
Literals
.
FLOAT
))
{
sqlExpr
=
new
SQLNumberExpr
(
Double
.
parseDouble
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
()));
}
else
if
(
get
Expr
Parser
().
equalAny
(
Literals
.
CHARS
))
{
sqlExpr
=
new
SQLTextExpr
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
());
}
else
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
NULL
))
{
if
(
get
Sql
Parser
().
equalAny
(
Literals
.
INT
))
{
sqlExpr
=
new
SQLNumberExpr
(
Integer
.
parseInt
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
()));
}
else
if
(
get
Sql
Parser
().
equalAny
(
Literals
.
FLOAT
))
{
sqlExpr
=
new
SQLNumberExpr
(
Double
.
parseDouble
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
()));
}
else
if
(
get
Sql
Parser
().
equalAny
(
Literals
.
CHARS
))
{
sqlExpr
=
new
SQLTextExpr
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
());
}
else
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
NULL
))
{
sqlExpr
=
new
SQLIgnoreExpr
();
}
else
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
sqlExpr
=
new
SQLPlaceholderExpr
(
get
ExprParser
().
getParametersIndex
(),
getExprParser
().
getParameters
().
get
(
getExpr
Parser
().
getParametersIndex
()));
get
ExprParser
().
setParametersIndex
(
getExpr
Parser
().
getParametersIndex
()
+
1
);
}
else
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
sqlExpr
=
new
SQLPlaceholderExpr
(
get
SqlParser
().
getParametersIndex
(),
getSqlParser
().
getParameters
().
get
(
getSql
Parser
().
getParametersIndex
()));
get
SqlParser
().
setParametersIndex
(
getSql
Parser
().
getParametersIndex
()
+
1
);
}
else
{
throw
new
UnsupportedOperationException
(
""
);
}
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
COMMA
,
DefaultKeyword
.
ON
,
Assist
.
END
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
COMMA
,
DefaultKeyword
.
ON
,
Assist
.
END
))
{
if
(
getShardingRule
().
isShardingColumn
(
shardingColumnContext
))
{
conditionContext
.
add
(
new
ConditionContext
.
Condition
(
shardingColumnContext
,
sqlExpr
));
}
}
else
{
get
Expr
Parser
().
skipUntil
(
Symbol
.
COMMA
,
DefaultKeyword
.
ON
);
get
Sql
Parser
().
skipUntil
(
Symbol
.
COMMA
,
DefaultKeyword
.
ON
);
}
}
while
(
get
Expr
Parser
().
equalAny
(
Symbol
.
COMMA
));
}
while
(
get
Sql
Parser
().
equalAny
(
Symbol
.
COMMA
));
getSqlContext
().
setConditionContext
(
conditionContext
);
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLSelectParser.java
浏览文件 @
f92ec7e4
...
...
@@ -27,16 +27,16 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
public
class
MySQLSelectParser
extends
AbstractSelectParser
{
public
MySQLSelectParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
MySQLSelectParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
public
void
query
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
parseDistinct
();
get
Expr
Parser
().
skipAll
(
MySQLKeyword
.
HIGH_PRIORITY
,
DefaultKeyword
.
STRAIGHT_JOIN
,
MySQLKeyword
.
SQL_SMALL_RESULT
,
MySQLKeyword
.
SQL_BIG_RESULT
,
MySQLKeyword
.
SQL_BUFFER_RESULT
,
get
Sql
Parser
().
skipAll
(
MySQLKeyword
.
HIGH_PRIORITY
,
DefaultKeyword
.
STRAIGHT_JOIN
,
MySQLKeyword
.
SQL_SMALL_RESULT
,
MySQLKeyword
.
SQL_BIG_RESULT
,
MySQLKeyword
.
SQL_BUFFER_RESULT
,
MySQLKeyword
.
SQL_CACHE
,
MySQLKeyword
.
SQL_NO_CACHE
,
MySQLKeyword
.
SQL_CALC_FOUND_ROWS
);
parseSelectList
();
skipToFrom
();
...
...
@@ -45,59 +45,59 @@ public class MySQLSelectParser extends AbstractSelectParser {
parseWhere
();
parseGroupBy
();
getSqlContext
().
getOrderByContexts
().
addAll
(
parseOrderBy
(
getSqlContext
()));
if
(
get
Expr
Parser
().
equalAny
(
MySQLKeyword
.
LIMIT
))
{
getSqlContext
().
setLimitContext
(((
MySQLParser
)
get
Expr
Parser
()).
parseLimit
(
getParametersIndex
()));
if
(
get
Sql
Parser
().
equalAny
(
MySQLKeyword
.
LIMIT
))
{
getSqlContext
().
setLimitContext
(((
MySQLParser
)
get
Sql
Parser
()).
parseLimit
(
getParametersIndex
()));
}
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
PROCEDURE
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
PROCEDURE
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
queryRest
();
}
private
void
skipToFrom
()
{
while
(!
get
ExprParser
().
equalAny
(
DefaultKeyword
.
FROM
)
&&
!
getExpr
Parser
().
equalAny
(
Assist
.
END
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
while
(!
get
SqlParser
().
equalAny
(
DefaultKeyword
.
FROM
)
&&
!
getSql
Parser
().
equalAny
(
Assist
.
END
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
}
@Override
protected
void
parseJoinTable
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
USING
))
{
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
USING
))
{
return
;
}
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
USE
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
USE
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
parseIndexHint
();
}
if
(
get
Expr
Parser
().
equalAny
(
OracleKeyword
.
IGNORE
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
OracleKeyword
.
IGNORE
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
parseIndexHint
();
}
if
(
get
Expr
Parser
().
equalAny
(
OracleKeyword
.
FORCE
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
OracleKeyword
.
FORCE
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
parseIndexHint
();
}
super
.
parseJoinTable
();
}
private
void
parseIndexHint
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
INDEX
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
INDEX
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
KEY
);
get
Sql
Parser
().
accept
(
DefaultKeyword
.
KEY
);
}
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
JOIN
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
ORDER
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
JOIN
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
ORDER
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
}
else
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
GROUP
);
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
get
Sql
Parser
().
accept
(
DefaultKeyword
.
GROUP
);
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
}
}
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
skipParentheses
();
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLUpdateParser.java
浏览文件 @
f92ec7e4
...
...
@@ -28,12 +28,12 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
MySQLUpdateParser
extends
AbstractUpdateParser
{
public
MySQLUpdateParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
MySQLUpdateParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenUpdateAndTable
()
{
get
Expr
Parser
().
skipAll
(
MySQLKeyword
.
LOW_PRIORITY
,
MySQLKeyword
.
IGNORE
);
get
Sql
Parser
().
skipAll
(
MySQLKeyword
.
LOW_PRIORITY
,
MySQLKeyword
.
IGNORE
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleDeleteParser.java
浏览文件 @
f92ec7e4
...
...
@@ -24,13 +24,13 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
public
class
OracleDeleteParser
extends
AbstractDeleteParser
{
public
OracleDeleteParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
OracleDeleteParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenDeleteAndTable
()
{
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
);
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleInsertParser.java
浏览文件 @
f92ec7e4
...
...
@@ -35,8 +35,8 @@ import java.util.Set;
*/
public
final
class
OracleInsertParser
extends
AbstractInsertParser
{
public
OracleInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
expr
Parser
)
{
super
(
shardingRule
,
parameters
,
expr
Parser
);
public
OracleInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
sql
Parser
)
{
super
(
shardingRule
,
parameters
,
sql
Parser
);
}
@Override
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java
浏览文件 @
f92ec7e4
...
...
@@ -29,13 +29,13 @@ import com.google.common.base.Optional;
public
class
OracleSelectParser
extends
AbstractSelectParser
{
public
OracleSelectParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
OracleSelectParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
customizedSelect
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
skipForUpdate
();
}
if
(
getSqlContext
().
getOrderByContexts
().
isEmpty
())
{
...
...
@@ -45,8 +45,8 @@ public class OracleSelectParser extends AbstractSelectParser {
@Override
public
void
query
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
parseDistinct
();
parseSelectList
();
}
...
...
@@ -60,8 +60,8 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipInto
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
...
...
@@ -73,36 +73,36 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipStart
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
START
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
WITH
);
get
Expr
Parser
().
parseComparisonCondition
(
getSqlContext
());
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
START
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
WITH
);
get
Sql
Parser
().
parseComparisonCondition
(
getSqlContext
());
}
}
private
void
skipConnect
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
CONNECT
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
PRIOR
);
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
NOCYCLE
))
{
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
PRIOR
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
CONNECT
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
PRIOR
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
NOCYCLE
))
{
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
PRIOR
);
}
get
Expr
Parser
().
parseComparisonCondition
(
getSqlContext
());
get
Sql
Parser
().
parseComparisonCondition
(
getSqlContext
());
}
}
private
void
skipModelClause
()
{
if
(!
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
MODEL
))
{
if
(!
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
MODEL
))
{
return
;
}
skipCellReferenceOptions
();
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
RETURN
);
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
ALL
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
UPDATED
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
ROWS
);
while
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
REFERENCE
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
accept
(
DefaultKeyword
.
ON
);
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
RETURN
);
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
ALL
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
UPDATED
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
ROWS
);
while
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
REFERENCE
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
accept
(
DefaultKeyword
.
ON
);
get
Sql
Parser
().
skipParentheses
();
skipModelColumnClause
();
skipCellReferenceOptions
();
}
...
...
@@ -110,55 +110,55 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipCellReferenceOptions
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
IGNORE
))
{
get
Expr
Parser
().
accept
(
OracleKeyword
.
NAV
);
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
KEEP
))
{
get
Expr
Parser
().
accept
(
OracleKeyword
.
NAV
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
IGNORE
))
{
get
Sql
Parser
().
accept
(
OracleKeyword
.
NAV
);
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
KEEP
))
{
get
Sql
Parser
().
accept
(
OracleKeyword
.
NAV
);
}
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
UNIQUE
))
{
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
DIMENSION
,
OracleKeyword
.
SINGLE
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
REFERENCE
);
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
UNIQUE
))
{
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
DIMENSION
,
OracleKeyword
.
SINGLE
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
REFERENCE
);
}
}
private
void
skipMainModelClause
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
MAIN
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
MAIN
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
skipQueryPartitionClause
();
get
Expr
Parser
().
accept
(
OracleKeyword
.
DIMENSION
);
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
get
Expr
Parser
().
skipParentheses
();
get
Expr
Parser
().
accept
(
OracleKeyword
.
MEASURES
);
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
accept
(
OracleKeyword
.
DIMENSION
);
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
get
Sql
Parser
().
skipParentheses
();
get
Sql
Parser
().
accept
(
OracleKeyword
.
MEASURES
);
get
Sql
Parser
().
skipParentheses
();
skipCellReferenceOptions
();
skipModelRulesClause
();
}
private
void
skipModelRulesClause
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
RULES
))
{
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
UPDATE
);
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
UPSERT
);
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
AUTOMATIC
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
ORDER
);
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
SEQUENTIAL
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
ORDER
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
RULES
))
{
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
UPDATE
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
UPSERT
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
AUTOMATIC
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
ORDER
);
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
SEQUENTIAL
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
ORDER
);
}
}
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
ITERATE
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
UNTIL
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
ITERATE
))
{
get
Sql
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
UNTIL
))
{
get
Sql
Parser
().
skipParentheses
();
}
}
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
skipParentheses
();
}
private
void
skipQueryPartitionClause
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
PARTITION
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
PARTITION
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
get
Sql
Parser
().
skipParentheses
();
}
else
{
throw
new
UnsupportedOperationException
(
"Cannot support PARTITION BY without ()"
);
}
...
...
@@ -166,42 +166,42 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipModelColumnClause
()
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
@Override
protected
void
parseGroupBy
()
{
// TODO
// if (get
Expr
Parser().equalAny(DefaultKeyword.GROUP)) {
// get
Expr
Parser().getLexer().nextToken();
// get
Expr
Parser().accept(DefaultKeyword.BY);
// if (get
Sql
Parser().equalAny(DefaultKeyword.GROUP)) {
// get
Sql
Parser().getLexer().nextToken();
// get
Sql
Parser().accept(DefaultKeyword.BY);
// while (true) {
// if (get
Expr
Parser().getLexer().identifierEquals("GROUPING")) {
// if (get
Sql
Parser().getLexer().identifierEquals("GROUPING")) {
// throw new UnsupportedOperationException("Cannot support GROUPING SETS");
// }
// addGroupByItem(get
Expr
Parser().expr());
// if (!get
Expr
Parser().equalAny(Symbol.COMMA)) {
// addGroupByItem(get
Sql
Parser().expr());
// if (!get
Sql
Parser().equalAny(Symbol.COMMA)) {
// break;
// }
// get
Expr
Parser().getLexer().nextToken();
// get
Sql
Parser().getLexer().nextToken();
// }
// if (get
Expr
Parser().skipIfEqual(Token.HAVING)) {
// get
Expr
Parser().expr();
// if (get
Sql
Parser().skipIfEqual(Token.HAVING)) {
// get
Sql
Parser().expr();
// }
// } else if (get
Expr
Parser().skipIfEqual(Token.HAVING)) {
// } else if (get
Sql
Parser().skipIfEqual(Token.HAVING)) {
// SQLSelectGroupByClause groupBy = new SQLSelectGroupByClause();
// groupBy.setHaving(get
Expr
Parser().expr());
// if (get
Expr
Parser().skipIfEqual(DefaultKeyword.GROUP)) {
// get
Expr
Parser().accept(DefaultKeyword.BY);
// groupBy.setHaving(get
Sql
Parser().expr());
// if (get
Sql
Parser().skipIfEqual(DefaultKeyword.GROUP)) {
// get
Sql
Parser().accept(DefaultKeyword.BY);
// while (true) {
// if (get
Expr
Parser().getLexer().identifierEquals("GROUPING")) {
// if (get
Sql
Parser().getLexer().identifierEquals("GROUPING")) {
// throw new UnsupportedOperationException("Cannot support GROUPING SETS");
// }
// addGroupByItem(get
Expr
Parser().expr());
// if (!get
Expr
Parser().equalAny(Symbol.COMMA)) {
// addGroupByItem(get
Sql
Parser().expr());
// if (!get
Sql
Parser().equalAny(Symbol.COMMA)) {
// break;
// }
// get
Expr
Parser().getLexer().nextToken();
// get
Sql
Parser().getLexer().nextToken();
// }
// }
// }
...
...
@@ -209,16 +209,16 @@ public class OracleSelectParser extends AbstractSelectParser {
@Override
public
final
void
parseTable
()
{
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
throw
new
UnsupportedOperationException
(
"Cannot support subquery"
);
}
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
SELECT
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
))
{
get
Expr
Parser
().
skipIfEqual
(
Symbol
.
LEFT_PAREN
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
))
{
get
Sql
Parser
().
skipIfEqual
(
Symbol
.
LEFT_PAREN
);
parseQueryTableExpression
();
get
Expr
Parser
().
skipIfEqual
(
Symbol
.
RIGHT_PAREN
);
get
Sql
Parser
().
skipIfEqual
(
Symbol
.
RIGHT_PAREN
);
skipFlashbackQueryClause
();
}
else
{
parseQueryTableExpression
();
...
...
@@ -235,11 +235,11 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
parseSample
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
SAMPLE
))
{
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
BLOCK
);
get
Expr
Parser
().
skipParentheses
();
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
SEED
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
SAMPLE
))
{
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
BLOCK
);
get
Sql
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
SEED
))
{
get
Sql
Parser
().
skipParentheses
();
}
}
}
...
...
@@ -250,34 +250,34 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipPartition
(
final
OracleKeyword
keyword
)
{
if
(
get
Expr
Parser
().
skipIfEqual
(
keyword
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FOR
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
keyword
))
{
get
Sql
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FOR
))
{
get
Sql
Parser
().
skipParentheses
();
}
}
}
private
void
skipPivotClause
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
PIVOT
))
{
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
XML
);
get
Expr
Parser
().
skipParentheses
();
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
UNPIVOT
))
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
INCLUDE
))
{
get
Expr
Parser
().
accept
(
OracleKeyword
.
NULLS
);
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
EXCLUDE
))
{
get
Expr
Parser
().
accept
(
OracleKeyword
.
NULLS
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
PIVOT
))
{
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
XML
);
get
Sql
Parser
().
skipParentheses
();
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
UNPIVOT
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
INCLUDE
))
{
get
Sql
Parser
().
accept
(
OracleKeyword
.
NULLS
);
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
EXCLUDE
))
{
get
Sql
Parser
().
accept
(
OracleKeyword
.
NULLS
);
}
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
skipParentheses
();
}
}
private
void
skipFlashbackQueryClause
()
{
if
(
get
Expr
Parser
().
equalAny
(
OracleKeyword
.
VERSIONS
))
{
if
(
get
Sql
Parser
().
equalAny
(
OracleKeyword
.
VERSIONS
))
{
throw
new
UnsupportedOperationException
(
"Cannot support Flashback Query"
);
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
AS
))
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
OF
))
{
if
(
get
ExprParser
().
skipIfEqual
(
OracleKeyword
.
SCN
)
||
getExpr
Parser
().
skipIfEqual
(
OracleKeyword
.
TIMESTAMP
))
{
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
AS
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
OF
))
{
if
(
get
SqlParser
().
skipIfEqual
(
OracleKeyword
.
SCN
)
||
getSql
Parser
().
skipIfEqual
(
OracleKeyword
.
TIMESTAMP
))
{
throw
new
UnsupportedOperationException
(
"Cannot support Flashback Query"
);
}
}
...
...
@@ -285,17 +285,17 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipForUpdate
()
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
accept
(
DefaultKeyword
.
UPDATE
);
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
OF
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
accept
(
DefaultKeyword
.
UPDATE
);
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
OF
))
{
do
{
get
Expr
Parser
().
parseExpression
();
}
while
(
get
Expr
Parser
().
skipIfEqual
(
Symbol
.
COMMA
));
get
Sql
Parser
().
parseExpression
();
}
while
(
get
Sql
Parser
().
skipIfEqual
(
Symbol
.
COMMA
));
}
if
(
get
Expr
Parser
().
equalAny
(
OracleKeyword
.
NOWAIT
,
OracleKeyword
.
WAIT
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
SKIP
))
{
get
Expr
Parser
().
accept
(
OracleKeyword
.
LOCKED
);
if
(
get
Sql
Parser
().
equalAny
(
OracleKeyword
.
NOWAIT
,
OracleKeyword
.
WAIT
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
SKIP
))
{
get
Sql
Parser
().
accept
(
OracleKeyword
.
LOCKED
);
}
}
...
...
@@ -307,10 +307,10 @@ public class OracleSelectParser extends AbstractSelectParser {
}
private
void
skipAfterOrderByItem
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
NULLS
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(!
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
FIRST
,
OracleKeyword
.
LAST
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
NULLS
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(!
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
FIRST
,
OracleKeyword
.
LAST
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleUpdateParser.java
浏览文件 @
f92ec7e4
...
...
@@ -23,12 +23,12 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
public
class
OracleUpdateParser
extends
AbstractUpdateParser
{
public
OracleUpdateParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
OracleUpdateParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenUpdateAndTable
()
{
get
Expr
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
);
get
Sql
Parser
().
skipIfEqual
(
OracleKeyword
.
ONLY
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLDeleteParser.java
浏览文件 @
f92ec7e4
...
...
@@ -29,13 +29,13 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
PostgreSQLDeleteParser
extends
AbstractDeleteParser
{
public
PostgreSQLDeleteParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
PostgreSQLDeleteParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenDeleteAndTable
()
{
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
get
Expr
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ONLY
);
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
get
Sql
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ONLY
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLInsertParser.java
浏览文件 @
f92ec7e4
...
...
@@ -30,7 +30,7 @@ import java.util.List;
*/
public
final
class
PostgreSQLInsertParser
extends
AbstractInsertParser
{
public
PostgreSQLInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
expr
Parser
)
{
super
(
shardingRule
,
parameters
,
expr
Parser
);
public
PostgreSQLInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
sql
Parser
)
{
super
(
shardingRule
,
parameters
,
sql
Parser
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java
浏览文件 @
f92ec7e4
...
...
@@ -29,39 +29,39 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
public
class
PostgreSQLSelectParser
extends
AbstractSelectParser
{
public
PostgreSQLSelectParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
PostgreSQLSelectParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
public
void
query
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
parseSelectList
();
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
INTO
))
{
get
Expr
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
TEMPORARY
,
PostgreSQLKeyword
.
TEMP
,
PostgreSQLKeyword
.
UNLOGGED
);
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
TABLE
);
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
INTO
))
{
get
Sql
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
TEMPORARY
,
PostgreSQLKeyword
.
TEMP
,
PostgreSQLKeyword
.
UNLOGGED
);
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
TABLE
);
// TODO
// get
Expr
Parser().name();
// get
Sql
Parser().name();
}
}
parseFrom
();
parseWhere
();
parseGroupBy
();
if
(
get
Expr
Parser
().
equalAny
(
PostgreSQLKeyword
.
WINDOW
))
{
if
(
get
Sql
Parser
().
equalAny
(
PostgreSQLKeyword
.
WINDOW
))
{
throw
new
SQLParsingUnsupportedException
(
PostgreSQLKeyword
.
WINDOW
);
}
getSqlContext
().
getOrderByContexts
().
addAll
(
parseOrderBy
(
getSqlContext
()));
parseLimit
();
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FETCH
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FETCH
))
{
throw
new
SQLParsingUnsupportedException
(
DefaultKeyword
.
FETCH
);
}
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FOR
))
{
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
UPDATE
,
PostgreSQLKeyword
.
SHARE
);
if
(
get
Expr
Parser
().
equalAny
(
PostgreSQLKeyword
.
OF
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FOR
))
{
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
UPDATE
,
PostgreSQLKeyword
.
SHARE
);
if
(
get
Sql
Parser
().
equalAny
(
PostgreSQLKeyword
.
OF
))
{
throw
new
SQLParsingUnsupportedException
(
PostgreSQLKeyword
.
OF
);
}
get
Expr
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
NOWAIT
);
get
Sql
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
NOWAIT
);
}
queryRest
();
}
...
...
@@ -69,31 +69,31 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
// TODO 解析和改写limit
private
void
parseLimit
()
{
while
(
true
)
{
if
(
get
Expr
Parser
().
equalAny
(
PostgreSQLKeyword
.
LIMIT
))
{
if
(
get
Sql
Parser
().
equalAny
(
PostgreSQLKeyword
.
LIMIT
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
ALL
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
ALL
))
{
new
SQLIdentifierExpr
(
"ALL"
);
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
{
// rowCount
if
(
get
Expr
Parser
().
equalAny
(
Literals
.
INT
))
{
}
else
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
if
(
get
Sql
Parser
().
equalAny
(
Literals
.
INT
))
{
}
else
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
}
else
{
throw
new
SQLParsingException
(
get
Expr
Parser
().
getLexer
());
throw
new
SQLParsingException
(
get
Sql
Parser
().
getLexer
());
}
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
getLexer
().
nextToken
();
}
}
else
if
(
get
Expr
Parser
().
equalAny
(
PostgreSQLKeyword
.
OFFSET
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
equalAny
(
PostgreSQLKeyword
.
OFFSET
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
// offset
if
(
get
Expr
Parser
().
equalAny
(
Literals
.
INT
))
{
}
else
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
if
(
get
Sql
Parser
().
equalAny
(
Literals
.
INT
))
{
}
else
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
QUESTION
))
{
}
else
{
throw
new
SQLParsingException
(
get
Expr
Parser
().
getLexer
());
throw
new
SQLParsingException
(
get
Sql
Parser
().
getLexer
());
}
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ROW
,
PostgreSQLKeyword
.
ROWS
);
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ROW
,
PostgreSQLKeyword
.
ROWS
);
}
else
{
break
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLUpdateParser.java
浏览文件 @
f92ec7e4
...
...
@@ -28,12 +28,12 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
PostgreSQLUpdateParser
extends
AbstractUpdateParser
{
public
PostgreSQLUpdateParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
PostgreSQLUpdateParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenUpdateAndTable
()
{
get
Expr
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ONLY
);
get
Sql
Parser
().
skipIfEqual
(
PostgreSQLKeyword
.
ONLY
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerDeleteParser.java
浏览文件 @
f92ec7e4
...
...
@@ -28,14 +28,14 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
SQLServerDeleteParser
extends
AbstractDeleteParser
{
public
SQLServerDeleteParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
SQLServerDeleteParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenDeleteAndTable
()
{
((
SQLServerParser
)
get
Expr
Parser
()).
parseTop
();
((
SQLServerParser
)
get
Expr
Parser
()).
skipOutput
();
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
((
SQLServerParser
)
get
Sql
Parser
()).
parseTop
();
((
SQLServerParser
)
get
Sql
Parser
()).
skipOutput
();
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerInsertParser.java
浏览文件 @
f92ec7e4
...
...
@@ -30,7 +30,7 @@ import java.util.List;
*/
public
final
class
SQLServerInsertParser
extends
AbstractInsertParser
{
public
SQLServerInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
expr
Parser
)
{
super
(
shardingRule
,
parameters
,
expr
Parser
);
public
SQLServerInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
sql
Parser
)
{
super
(
shardingRule
,
parameters
,
sql
Parser
);
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerSelectParser.java
浏览文件 @
f92ec7e4
...
...
@@ -26,32 +26,32 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
public
class
SQLServerSelectParser
extends
AbstractSelectParser
{
public
SQLServerSelectParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
SQLServerSelectParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
customizedSelect
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
FOR
))
{
parseFor
();
}
if
(
get
Expr
Parser
().
equalAny
(
SQLServerKeyword
.
OFFSET
))
{
((
SQLServerParser
)
get
Expr
Parser
()).
parseOffset
(
getSqlContext
());
if
(
get
Sql
Parser
().
equalAny
(
SQLServerKeyword
.
OFFSET
))
{
((
SQLServerParser
)
get
Sql
Parser
()).
parseOffset
(
getSqlContext
());
}
}
@Override
public
void
query
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
if
(
get
Expr
Parser
().
equalAny
(
SQLServerKeyword
.
TOP
))
{
if
(
get
Sql
Parser
().
equalAny
(
SQLServerKeyword
.
TOP
))
{
// TODO save topContext
((
SQLServerParser
)
get
Expr
Parser
()).
parseTop
();
((
SQLServerParser
)
get
Sql
Parser
()).
parseTop
();
}
parseSelectList
();
}
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
parseFrom
();
parseWhere
();
...
...
@@ -61,33 +61,33 @@ public class SQLServerSelectParser extends AbstractSelectParser {
@Override
protected
void
parseJoinTable
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
WITH
))
{
get
Expr
Parser
().
skipParentheses
();
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
WITH
))
{
get
Sql
Parser
().
skipParentheses
();
}
super
.
parseJoinTable
();
}
private
void
parseFor
()
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Expr
Parser
().
equalAny
(
SQLServerKeyword
.
BROWSE
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
SQLServerKeyword
.
XML
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
SQLServerKeyword
.
BROWSE
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
SQLServerKeyword
.
XML
))
{
while
(
true
)
{
if
(
get
Expr
Parser
().
equalAny
(
SQLServerKeyword
.
AUTO
,
SQLServerKeyword
.
TYPE
,
SQLServerKeyword
.
XMLSCHEMA
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
SQLServerKeyword
.
ELEMENTS
))
{
get
Expr
Parser
().
skipIfEqual
(
SQLServerKeyword
.
XSINIL
);
if
(
get
Sql
Parser
().
equalAny
(
SQLServerKeyword
.
AUTO
,
SQLServerKeyword
.
TYPE
,
SQLServerKeyword
.
XMLSCHEMA
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
SQLServerKeyword
.
ELEMENTS
))
{
get
Sql
Parser
().
skipIfEqual
(
SQLServerKeyword
.
XSINIL
);
}
else
{
break
;
}
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
COMMA
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
COMMA
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
{
break
;
}
}
}
else
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerUpdateParser.java
浏览文件 @
f92ec7e4
...
...
@@ -27,12 +27,12 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
*/
public
final
class
SQLServerUpdateParser
extends
AbstractUpdateParser
{
public
SQLServerUpdateParser
(
final
SQLParser
expr
Parser
)
{
super
(
expr
Parser
);
public
SQLServerUpdateParser
(
final
SQLParser
sql
Parser
)
{
super
(
sql
Parser
);
}
@Override
protected
void
skipBetweenUpdateAndTable
()
{
((
SQLServerParser
)
get
Expr
Parser
()).
parseTop
();
((
SQLServerParser
)
get
Sql
Parser
()).
parseTop
();
}
}
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/delete/AbstractDeleteParser.java
浏览文件 @
f92ec7e4
...
...
@@ -33,14 +33,14 @@ import lombok.RequiredArgsConstructor;
public
abstract
class
AbstractDeleteParser
{
@Getter
(
AccessLevel
.
PROTECTED
)
private
final
SQLParser
expr
Parser
;
private
final
SQLParser
sql
Parser
;
private
final
DeleteSQLContext
sqlContext
;
public
AbstractDeleteParser
(
final
SQLParser
expr
Parser
)
{
this
.
exprParser
=
expr
Parser
;
public
AbstractDeleteParser
(
final
SQLParser
sql
Parser
)
{
this
.
sqlParser
=
sql
Parser
;
sqlContext
=
new
DeleteSQLContext
();
sqlContext
.
setSqlBuilderContext
(
expr
Parser
.
getSqlBuilderContext
());
sqlContext
.
setSqlBuilderContext
(
sql
Parser
.
getSqlBuilderContext
());
}
/**
...
...
@@ -49,11 +49,11 @@ public abstract class AbstractDeleteParser {
* @return 解析结果
*/
public
DeleteSQLContext
parse
()
{
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
skipBetweenDeleteAndTable
();
expr
Parser
.
parseSingleTable
(
sqlContext
);
expr
Parser
.
skipUntil
(
DefaultKeyword
.
WHERE
);
expr
Parser
.
parseWhere
(
sqlContext
);
sql
Parser
.
parseSingleTable
(
sqlContext
);
sql
Parser
.
skipUntil
(
DefaultKeyword
.
WHERE
);
sql
Parser
.
parseWhere
(
sqlContext
);
return
sqlContext
;
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/insert/AbstractInsertParser.java
浏览文件 @
f92ec7e4
...
...
@@ -50,7 +50,7 @@ import java.util.Set;
@Getter
(
AccessLevel
.
PROTECTED
)
public
abstract
class
AbstractInsertParser
{
private
final
SQLParser
expr
Parser
;
private
final
SQLParser
sql
Parser
;
private
final
ShardingRule
shardingRule
;
...
...
@@ -58,12 +58,12 @@ public abstract class AbstractInsertParser {
private
final
InsertSQLContext
sqlContext
;
public
AbstractInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
expr
Parser
)
{
this
.
exprParser
=
expr
Parser
;
public
AbstractInsertParser
(
final
ShardingRule
shardingRule
,
final
List
<
Object
>
parameters
,
final
SQLParser
sql
Parser
)
{
this
.
sqlParser
=
sql
Parser
;
this
.
shardingRule
=
shardingRule
;
this
.
parameters
=
parameters
;
sqlContext
=
new
InsertSQLContext
();
sqlContext
.
setSqlBuilderContext
(
expr
Parser
.
getSqlBuilderContext
());
sqlContext
.
setSqlBuilderContext
(
sql
Parser
.
getSqlBuilderContext
());
}
/**
...
...
@@ -72,15 +72,15 @@ public abstract class AbstractInsertParser {
* @return 解析结果
*/
public
final
InsertSQLContext
parse
()
{
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
parseInto
();
Collection
<
ShardingColumnContext
>
shardingColumnContexts
=
parseColumns
();
if
(
expr
Parser
.
equalAny
(
DefaultKeyword
.
SELECT
,
Symbol
.
LEFT_PAREN
))
{
if
(
sql
Parser
.
equalAny
(
DefaultKeyword
.
SELECT
,
Symbol
.
LEFT_PAREN
))
{
throw
new
UnsupportedOperationException
(
"Cannot support subquery"
);
}
if
(
getValuesKeywords
().
contains
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
if
(
getValuesKeywords
().
contains
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
parseValues
(
shardingColumnContexts
);
}
else
if
(
getCustomizedInsertKeywords
().
contains
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
}
else
if
(
getCustomizedInsertKeywords
().
contains
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
parseCustomizedInsert
();
}
return
sqlContext
;
...
...
@@ -91,20 +91,20 @@ public abstract class AbstractInsertParser {
}
private
void
parseInto
()
{
if
(
getUnsupportedKeywords
().
contains
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
throw
new
SQLParsingUnsupportedException
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getType
());
if
(
getUnsupportedKeywords
().
contains
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
throw
new
SQLParsingUnsupportedException
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getType
());
}
expr
Parser
.
skipUntil
(
DefaultKeyword
.
INTO
);
expr
Parser
.
getLexer
().
nextToken
();
expr
Parser
.
parseSingleTable
(
sqlContext
);
sql
Parser
.
skipUntil
(
DefaultKeyword
.
INTO
);
sql
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
parseSingleTable
(
sqlContext
);
skipBetweenTableAndValues
();
}
private
void
skipBetweenTableAndValues
()
{
while
(
getSkippedKeywordsBetweenTableAndValues
().
contains
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
expr
Parser
.
getLexer
().
nextToken
();
if
(
expr
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
expr
Parser
.
skipParentheses
();
while
(
getSkippedKeywordsBetweenTableAndValues
().
contains
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getType
()))
{
sql
Parser
.
getLexer
().
nextToken
();
if
(
sql
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
sql
Parser
.
skipParentheses
();
}
}
}
...
...
@@ -116,27 +116,27 @@ public abstract class AbstractInsertParser {
private
Collection
<
ShardingColumnContext
>
parseColumns
()
{
Collection
<
ShardingColumnContext
>
result
=
new
LinkedList
<>();
Collection
<
String
>
autoIncrementColumns
=
shardingRule
.
getAutoIncrementColumns
(
sqlContext
.
getTables
().
get
(
0
).
getName
());
if
(
expr
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
if
(
sql
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
do
{
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
result
.
add
(
getColumn
(
autoIncrementColumns
));
expr
Parser
.
getLexer
().
nextToken
();
}
while
(!
exprParser
.
equalAny
(
Symbol
.
RIGHT_PAREN
)
&&
!
expr
Parser
.
equalAny
(
Assist
.
END
));
ItemsToken
itemsToken
=
new
ItemsToken
(
exprParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
expr
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
sql
Parser
.
getLexer
().
nextToken
();
}
while
(!
sqlParser
.
equalAny
(
Symbol
.
RIGHT_PAREN
)
&&
!
sql
Parser
.
equalAny
(
Assist
.
END
));
ItemsToken
itemsToken
=
new
ItemsToken
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sql
Parser
.
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
())
{
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
}
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
}
return
result
;
}
protected
final
ShardingColumnContext
getColumn
(
final
Collection
<
String
>
autoIncrementColumns
)
{
String
columnName
=
SQLUtil
.
getExactlyValue
(
expr
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
());
String
columnName
=
SQLUtil
.
getExactlyValue
(
sql
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
());
if
(
autoIncrementColumns
.
contains
(
columnName
))
{
autoIncrementColumns
.
remove
(
columnName
);
}
...
...
@@ -153,14 +153,14 @@ public abstract class AbstractInsertParser {
if
(
parsed
)
{
throw
new
UnsupportedOperationException
(
"Cannot support multiple insert"
);
}
expr
Parser
.
getLexer
().
nextToken
();
expr
Parser
.
accept
(
Symbol
.
LEFT_PAREN
);
sql
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
accept
(
Symbol
.
LEFT_PAREN
);
List
<
SQLExpr
>
sqlExprs
=
new
LinkedList
<>();
ConditionContext
conditionContext
=
new
ConditionContext
();
do
{
sqlExprs
.
add
(
expr
Parser
.
parseExpression
());
}
while
(
expr
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
ItemsToken
itemsToken
=
new
ItemsToken
(
exprParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
expr
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
sqlExprs
.
add
(
sql
Parser
.
parseExpression
());
}
while
(
sql
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
ItemsToken
itemsToken
=
new
ItemsToken
(
sqlParser
.
getLexer
().
getCurrentToken
().
getEndPosition
()
-
sql
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
int
count
=
0
;
for
(
ShardingColumnContext
each
:
shardingColumnContexts
)
{
if
(
each
.
isAutoIncrement
())
{
...
...
@@ -182,13 +182,13 @@ public abstract class AbstractInsertParser {
count
++;
}
if
(!
itemsToken
.
getItems
().
isEmpty
())
{
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
}
expr
Parser
.
accept
(
Symbol
.
RIGHT_PAREN
);
sql
Parser
.
accept
(
Symbol
.
RIGHT_PAREN
);
parsed
=
true
;
sqlContext
.
setConditionContext
(
conditionContext
);
}
while
(
expr
Parser
.
equalAny
(
Symbol
.
COMMA
));
while
(
sql
Parser
.
equalAny
(
Symbol
.
COMMA
));
}
protected
Set
<
TokenType
>
getCustomizedInsertKeywords
()
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java
浏览文件 @
f92ec7e4
...
...
@@ -51,7 +51,7 @@ public abstract class AbstractSelectParser {
private
static
final
String
SHARDING_GEN_ALIAS
=
"sharding_gen_%s"
;
private
SQLParser
expr
Parser
;
private
SQLParser
sql
Parser
;
private
final
SelectSQLContext
sqlContext
;
...
...
@@ -62,10 +62,10 @@ public abstract class AbstractSelectParser {
private
ItemsToken
itemsToken
;
public
AbstractSelectParser
(
final
SQLParser
expr
Parser
)
{
this
.
exprParser
=
expr
Parser
;
public
AbstractSelectParser
(
final
SQLParser
sql
Parser
)
{
this
.
sqlParser
=
sql
Parser
;
sqlContext
=
new
SelectSQLContext
();
sqlContext
.
setSqlBuilderContext
(
expr
Parser
.
getSqlBuilderContext
());
sqlContext
.
setSqlBuilderContext
(
sql
Parser
.
getSqlBuilderContext
());
}
/**
...
...
@@ -78,7 +78,7 @@ public abstract class AbstractSelectParser {
sqlContext
.
getOrderByContexts
().
addAll
(
parseOrderBy
(
getSqlContext
()));
customizedSelect
();
if
(!
itemsToken
.
getItems
().
isEmpty
())
{
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
itemsToken
);
}
return
sqlContext
;
}
...
...
@@ -87,7 +87,7 @@ public abstract class AbstractSelectParser {
}
protected
void
query
()
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
SELECT
);
get
Sql
Parser
().
accept
(
DefaultKeyword
.
SELECT
);
parseDistinct
();
parseSelectList
();
parseFrom
();
...
...
@@ -97,15 +97,15 @@ public abstract class AbstractSelectParser {
}
protected
final
void
parseDistinct
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
DISTINCT
,
DefaultKeyword
.
DISTINCTROW
,
DefaultKeyword
.
UNION
))
{
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
DISTINCT
,
DefaultKeyword
.
DISTINCTROW
,
DefaultKeyword
.
UNION
))
{
sqlContext
.
setDistinct
(
true
);
get
Expr
Parser
().
getLexer
().
nextToken
();
if
(
hasDistinctOn
()
&&
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
ON
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
skipParentheses
();
get
Sql
Parser
().
getLexer
().
nextToken
();
if
(
hasDistinctOn
()
&&
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
ON
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
skipParentheses
();
}
}
else
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
ALL
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
ALL
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
}
...
...
@@ -116,14 +116,14 @@ public abstract class AbstractSelectParser {
protected
final
void
parseSelectList
()
{
int
index
=
1
;
do
{
SelectItemContext
selectItemContext
=
expr
Parser
.
parseSelectItem
(
index
);
SelectItemContext
selectItemContext
=
sql
Parser
.
parseSelectItem
(
index
);
sqlContext
.
getItemContexts
().
add
(
selectItemContext
);
if
(
selectItemContext
instanceof
CommonSelectItemContext
&&
((
CommonSelectItemContext
)
selectItemContext
).
isStar
())
{
sqlContext
.
setContainStar
(
true
);
}
index
++;
}
while
(
get
Expr
Parser
().
skipIfEqual
(
Symbol
.
COMMA
));
sqlContext
.
setSelectListLastPosition
(
get
ExprParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getExpr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
}
while
(
get
Sql
Parser
().
skipIfEqual
(
Symbol
.
COMMA
));
sqlContext
.
setSelectListLastPosition
(
get
SqlParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getSql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
itemsToken
=
new
ItemsToken
(
sqlContext
.
getSelectListLastPosition
());
for
(
SelectItemContext
each
:
sqlContext
.
getItemContexts
())
{
if
(
each
instanceof
AggregationSelectItemContext
)
{
...
...
@@ -144,8 +144,8 @@ public abstract class AbstractSelectParser {
}
protected
void
queryRest
()
{
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
UNION
,
DefaultKeyword
.
EXCEPT
,
DefaultKeyword
.
INTERSECT
,
DefaultKeyword
.
MINUS
))
{
throw
new
SQLParsingUnsupportedException
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getType
());
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
UNION
,
DefaultKeyword
.
EXCEPT
,
DefaultKeyword
.
INTERSECT
,
DefaultKeyword
.
MINUS
))
{
throw
new
SQLParsingUnsupportedException
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
...
...
@@ -153,8 +153,8 @@ public abstract class AbstractSelectParser {
if
(
sqlContext
.
getTables
().
isEmpty
())
{
return
;
}
expr
Parser
.
parseWhere
(
sqlContext
);
parametersIndex
=
expr
Parser
.
getParametersIndex
();
sql
Parser
.
parseWhere
(
sqlContext
);
parametersIndex
=
sql
Parser
.
getParametersIndex
();
}
/**
...
...
@@ -164,28 +164,28 @@ public abstract class AbstractSelectParser {
* @return 排序上下文
*/
public
final
List
<
OrderByContext
>
parseOrderBy
(
final
SelectSQLContext
sqlContext
)
{
if
(!
expr
Parser
.
skipIfEqual
(
DefaultKeyword
.
ORDER
))
{
if
(!
sql
Parser
.
skipIfEqual
(
DefaultKeyword
.
ORDER
))
{
return
Collections
.
emptyList
();
}
List
<
OrderByContext
>
result
=
new
LinkedList
<>();
expr
Parser
.
skipIfEqual
(
DefaultKeyword
.
SIBLINGS
);
expr
Parser
.
accept
(
DefaultKeyword
.
BY
);
sql
Parser
.
skipIfEqual
(
DefaultKeyword
.
SIBLINGS
);
sql
Parser
.
accept
(
DefaultKeyword
.
BY
);
do
{
Optional
<
OrderByContext
>
orderByContext
=
parseSelectOrderByItem
(
sqlContext
);
if
(
orderByContext
.
isPresent
())
{
result
.
add
(
orderByContext
.
get
());
}
}
while
(
expr
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
while
(
sql
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
return
result
;
}
protected
Optional
<
OrderByContext
>
parseSelectOrderByItem
(
final
SelectSQLContext
sqlContext
)
{
SQLExpr
expr
=
expr
Parser
.
parseExpression
(
sqlContext
);
SQLExpr
expr
=
sql
Parser
.
parseExpression
(
sqlContext
);
OrderType
orderByType
=
OrderType
.
ASC
;
if
(
expr
Parser
.
skipIfEqual
(
DefaultKeyword
.
ASC
))
{
if
(
sql
Parser
.
skipIfEqual
(
DefaultKeyword
.
ASC
))
{
orderByType
=
OrderType
.
ASC
;
}
else
if
(
expr
Parser
.
skipIfEqual
(
DefaultKeyword
.
DESC
))
{
}
else
if
(
sql
Parser
.
skipIfEqual
(
DefaultKeyword
.
DESC
))
{
orderByType
=
OrderType
.
DESC
;
}
OrderByContext
result
;
...
...
@@ -218,31 +218,31 @@ public abstract class AbstractSelectParser {
}
protected
void
parseGroupBy
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
GROUP
))
{
get
Expr
Parser
().
accept
(
DefaultKeyword
.
BY
);
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
GROUP
))
{
get
Sql
Parser
().
accept
(
DefaultKeyword
.
BY
);
while
(
true
)
{
addGroupByItem
(
expr
Parser
.
parseExpression
(
sqlContext
));
if
(!
get
Expr
Parser
().
equalAny
(
Symbol
.
COMMA
))
{
addGroupByItem
(
sql
Parser
.
parseExpression
(
sqlContext
));
if
(!
get
Sql
Parser
().
equalAny
(
Symbol
.
COMMA
))
{
break
;
}
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
getLexer
().
nextToken
();
}
while
(
get
ExprParser
().
equalAny
(
DefaultKeyword
.
WITH
)
||
getExpr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
equalsIgnoreCase
(
"ROLLUP"
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
while
(
get
SqlParser
().
equalAny
(
DefaultKeyword
.
WITH
)
||
getSql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
equalsIgnoreCase
(
"ROLLUP"
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
HAVING
))
{
expr
Parser
.
parseExpression
(
sqlContext
);
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
HAVING
))
{
sql
Parser
.
parseExpression
(
sqlContext
);
}
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
HAVING
))
{
expr
Parser
.
parseExpression
(
sqlContext
);
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
HAVING
))
{
sql
Parser
.
parseExpression
(
sqlContext
);
}
}
protected
final
void
addGroupByItem
(
final
SQLExpr
sqlExpr
)
{
OrderType
orderByType
=
OrderType
.
ASC
;
if
(
get
Expr
Parser
().
equalAny
(
DefaultKeyword
.
ASC
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
DESC
))
{
if
(
get
Sql
Parser
().
equalAny
(
DefaultKeyword
.
ASC
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
DESC
))
{
orderByType
=
OrderType
.
DESC
;
}
GroupByContext
groupByContext
;
...
...
@@ -294,13 +294,13 @@ public abstract class AbstractSelectParser {
}
public
final
void
parseFrom
()
{
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
FROM
))
{
parseTable
();
}
}
public
void
parseTable
()
{
if
(
get
Expr
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
if
(
get
Sql
Parser
().
equalAny
(
Symbol
.
LEFT_PAREN
))
{
throw
new
UnsupportedOperationException
(
"Cannot support subquery"
);
}
parseTableFactor
();
...
...
@@ -308,45 +308,45 @@ public abstract class AbstractSelectParser {
}
protected
final
void
parseTableFactor
()
{
int
beginPosition
=
get
ExprParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getExpr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
();
String
literals
=
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
();
get
Expr
Parser
().
getLexer
().
nextToken
();
int
beginPosition
=
get
SqlParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getSql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
();
String
literals
=
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
();
get
Sql
Parser
().
getLexer
().
nextToken
();
// TODO 包含Schema解析
if
(
get
Expr
Parser
().
skipIfEqual
(
Symbol
.
DOT
))
{
get
Expr
Parser
().
getLexer
().
nextToken
();
get
Expr
Parser
().
parseAlias
();
if
(
get
Sql
Parser
().
skipIfEqual
(
Symbol
.
DOT
))
{
get
Sql
Parser
().
getLexer
().
nextToken
();
get
Sql
Parser
().
parseAlias
();
return
;
}
// FIXME 根据shardingRule过滤table
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
,
literals
,
SQLUtil
.
getExactlyValue
(
literals
)));
sqlContext
.
getTables
().
add
(
new
TableContext
(
literals
,
SQLUtil
.
getExactlyValue
(
literals
),
get
Expr
Parser
().
parseAlias
()));
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
,
literals
,
SQLUtil
.
getExactlyValue
(
literals
)));
sqlContext
.
getTables
().
add
(
new
TableContext
(
literals
,
SQLUtil
.
getExactlyValue
(
literals
),
get
Sql
Parser
().
parseAlias
()));
}
protected
void
parseJoinTable
()
{
if
(
get
Expr
Parser
().
skipJoin
())
{
if
(
get
Sql
Parser
().
skipJoin
())
{
parseTable
();
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
ON
))
{
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
ON
))
{
do
{
parseTableCondition
(
get
Expr
Parser
().
getLexer
().
getCurrentToken
().
getEndPosition
());
get
Expr
Parser
().
accept
(
Symbol
.
EQ
);
parseTableCondition
(
get
ExprParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getExpr
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
}
while
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
AND
));
}
else
if
(
get
Expr
Parser
().
skipIfEqual
(
DefaultKeyword
.
USING
))
{
get
Expr
Parser
().
skipParentheses
();
parseTableCondition
(
get
Sql
Parser
().
getLexer
().
getCurrentToken
().
getEndPosition
());
get
Sql
Parser
().
accept
(
Symbol
.
EQ
);
parseTableCondition
(
get
SqlParser
().
getLexer
().
getCurrentToken
().
getEndPosition
()
-
getSql
Parser
().
getLexer
().
getCurrentToken
().
getLiterals
().
length
());
}
while
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
AND
));
}
else
if
(
get
Sql
Parser
().
skipIfEqual
(
DefaultKeyword
.
USING
))
{
get
Sql
Parser
().
skipParentheses
();
}
parseJoinTable
();
}
}
private
void
parseTableCondition
(
final
int
startPosition
)
{
SQLExpr
sqlExpr
=
expr
Parser
.
parseExpression
();
SQLExpr
sqlExpr
=
sql
Parser
.
parseExpression
();
if
(!(
sqlExpr
instanceof
SQLPropertyExpr
))
{
return
;
}
SQLPropertyExpr
sqlPropertyExpr
=
(
SQLPropertyExpr
)
sqlExpr
;
for
(
TableContext
each
:
sqlContext
.
getTables
())
{
if
(
each
.
getName
().
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
sqlPropertyExpr
.
getOwner
().
getName
())))
{
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
new
TableToken
(
startPosition
,
sqlPropertyExpr
.
getOwner
().
getName
(),
SQLUtil
.
getExactlyValue
(
sqlPropertyExpr
.
getOwner
().
getName
())));
}
}
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/update/AbstractUpdateParser.java
浏览文件 @
f92ec7e4
...
...
@@ -34,16 +34,16 @@ import lombok.Getter;
@Getter
(
AccessLevel
.
PROTECTED
)
public
abstract
class
AbstractUpdateParser
{
private
final
SQLParser
expr
Parser
;
private
final
SQLParser
sql
Parser
;
private
final
UpdateSQLContext
sqlContext
;
private
int
parametersIndex
;
public
AbstractUpdateParser
(
final
SQLParser
expr
Parser
)
{
this
.
exprParser
=
expr
Parser
;
public
AbstractUpdateParser
(
final
SQLParser
sql
Parser
)
{
this
.
sqlParser
=
sql
Parser
;
sqlContext
=
new
UpdateSQLContext
();
sqlContext
.
setSqlBuilderContext
(
expr
Parser
.
getSqlBuilderContext
());
sqlContext
.
setSqlBuilderContext
(
sql
Parser
.
getSqlBuilderContext
());
}
/**
...
...
@@ -52,42 +52,42 @@ public abstract class AbstractUpdateParser {
* @return 解析结果
*/
public
UpdateSQLContext
parse
()
{
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
skipBetweenUpdateAndTable
();
expr
Parser
.
parseSingleTable
(
sqlContext
);
sql
Parser
.
parseSingleTable
(
sqlContext
);
parseSetItems
();
expr
Parser
.
skipUntil
(
DefaultKeyword
.
WHERE
);
expr
Parser
.
setParametersIndex
(
parametersIndex
);
expr
Parser
.
parseWhere
(
sqlContext
);
sql
Parser
.
skipUntil
(
DefaultKeyword
.
WHERE
);
sql
Parser
.
setParametersIndex
(
parametersIndex
);
sql
Parser
.
parseWhere
(
sqlContext
);
return
sqlContext
;
}
protected
abstract
void
skipBetweenUpdateAndTable
();
private
void
parseSetItems
()
{
expr
Parser
.
accept
(
DefaultKeyword
.
SET
);
sql
Parser
.
accept
(
DefaultKeyword
.
SET
);
do
{
parseSetItem
();
}
while
(
expr
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
}
while
(
sql
Parser
.
skipIfEqual
(
Symbol
.
COMMA
));
}
private
void
parseSetItem
()
{
if
(
expr
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
expr
Parser
.
skipParentheses
();
if
(
sql
Parser
.
equalAny
(
Symbol
.
LEFT_PAREN
))
{
sql
Parser
.
skipParentheses
();
}
else
{
int
beginPosition
=
expr
Parser
.
getLexer
().
getCurrentToken
().
getEndPosition
();
String
literals
=
expr
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
();
expr
Parser
.
getLexer
().
nextToken
();
int
beginPosition
=
sql
Parser
.
getLexer
().
getCurrentToken
().
getEndPosition
();
String
literals
=
sql
Parser
.
getLexer
().
getCurrentToken
().
getLiterals
();
sql
Parser
.
getLexer
().
nextToken
();
String
tableName
=
sqlContext
.
getTables
().
get
(
0
).
getName
();
if
(
expr
Parser
.
skipIfEqual
(
Symbol
.
DOT
))
{
if
(
sql
Parser
.
skipIfEqual
(
Symbol
.
DOT
))
{
if
(
tableName
.
equalsIgnoreCase
(
SQLUtil
.
getExactlyValue
(
literals
)))
{
expr
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
-
literals
.
length
(),
literals
,
tableName
));
sql
Parser
.
getSqlBuilderContext
().
getSqlTokens
().
add
(
new
TableToken
(
beginPosition
-
literals
.
length
(),
literals
,
tableName
));
}
expr
Parser
.
getLexer
().
nextToken
();
sql
Parser
.
getLexer
().
nextToken
();
}
}
expr
Parser
.
skipIfEqual
(
Symbol
.
EQ
,
Symbol
.
COLON_EQ
);
expr
Parser
.
parseExpression
(
sqlContext
);
parametersIndex
=
expr
Parser
.
getParametersIndex
();
sql
Parser
.
skipIfEqual
(
Symbol
.
EQ
,
Symbol
.
COLON_EQ
);
sql
Parser
.
parseExpression
(
sqlContext
);
parametersIndex
=
sql
Parser
.
getParametersIndex
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录