Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
8daa85a7
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 搜索 >>
提交
8daa85a7
编写于
8月 09, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor select parser 2nd version
上级
4d01a607
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
76 addition
and
65 deletion
+76
-65
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLSelectParser.java
...rding/parsing/parser/dialect/mysql/MySQLSelectParser.java
+14
-19
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java
...ing/parsing/parser/dialect/oracle/OracleSelectParser.java
+11
-15
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java
...ing/parser/dialect/postgresql/PostgreSQLSelectParser.java
+8
-13
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerSelectParser.java
...rsing/parser/dialect/sqlserver/SQLServerSelectParser.java
+9
-13
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java
...ing/parser/statement/dql/select/AbstractSelectParser.java
+34
-5
未找到文件。
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLSelectParser.java
浏览文件 @
8daa85a7
...
...
@@ -39,23 +39,24 @@ public class MySQLSelectParser extends AbstractSelectParser {
}
@Override
public
void
query
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
getSqlParser
().
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
();
}
parseFrom
();
parseWhere
();
parseGroupBy
();
parseOrderBy
();
protected
void
parseBetweenSelectAndList
()
{
getSqlParser
().
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
);
}
@Override
protected
final
void
skipToFrom
()
{
while
(!
getSqlParser
().
equalAny
(
DefaultKeyword
.
FROM
)
&&
!
getSqlParser
().
equalAny
(
Assist
.
END
))
{
getSqlParser
().
getLexer
().
nextToken
();
}
}
@Override
protected
void
customizedQuery
()
{
parseLimit
();
if
(
getSqlParser
().
equalAny
(
DefaultKeyword
.
PROCEDURE
))
{
throw
new
SQLParsingUnsupportedException
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getType
());
}
queryRest
();
}
private
void
parseLimit
()
{
...
...
@@ -151,12 +152,6 @@ public class MySQLSelectParser extends AbstractSelectParser {
return
result
;
}
private
void
skipToFrom
()
{
while
(!
getSqlParser
().
equalAny
(
DefaultKeyword
.
FROM
)
&&
!
getSqlParser
().
equalAny
(
Assist
.
END
))
{
getSqlParser
().
getLexer
().
nextToken
();
}
}
@Override
protected
void
parseJoinTable
()
{
if
(
getSqlParser
().
equalAny
(
DefaultKeyword
.
USING
))
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java
浏览文件 @
8daa85a7
...
...
@@ -33,26 +33,17 @@ public class OracleSelectParser extends AbstractSelectParser {
}
@Override
public
void
query
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
parseSelectList
();
}
skipInto
();
parseFrom
();
parseWhere
();
skipHierarchicalQueryClause
();
parseGroupBy
();
skipModelClause
();
queryRest
();
}
private
void
skipInto
()
{
protected
final
void
skipToFrom
()
{
if
(
getSqlParser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
@Override
protected
void
customizedBetweenWhereAndGroupBy
()
{
skipHierarchicalQueryClause
();
}
private
void
skipHierarchicalQueryClause
()
{
skipConnect
();
skipStart
();
...
...
@@ -77,6 +68,11 @@ public class OracleSelectParser extends AbstractSelectParser {
}
}
@Override
protected
final
void
customizedBetweenGroupByAndOrderBy
()
{
skipModelClause
();
}
private
void
skipModelClause
()
{
if
(!
getSqlParser
().
skipIfEqual
(
OracleKeyword
.
MODEL
))
{
return
;
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java
浏览文件 @
8daa85a7
...
...
@@ -39,22 +39,18 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
}
@Override
public
void
query
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
parseSelectList
();
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
INTO
))
{
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
TEMPORARY
,
PostgreSQLKeyword
.
TEMP
,
PostgreSQLKeyword
.
UNLOGGED
);
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
TABLE
);
}
protected
final
void
skipToFrom
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
INTO
))
{
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
TEMPORARY
,
PostgreSQLKeyword
.
TEMP
,
PostgreSQLKeyword
.
UNLOGGED
);
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
TABLE
);
}
parseFrom
();
parseWhere
();
parseGroupBy
();
}
@Override
protected
void
customizedQuery
()
{
if
(
getSqlParser
().
equalAny
(
PostgreSQLKeyword
.
WINDOW
))
{
throw
new
SQLParsingUnsupportedException
(
PostgreSQLKeyword
.
WINDOW
);
}
parseOrderBy
();
parseLimit
();
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
FETCH
))
{
throw
new
SQLParsingUnsupportedException
(
DefaultKeyword
.
FETCH
);
...
...
@@ -66,7 +62,6 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
}
getSqlParser
().
skipIfEqual
(
PostgreSQLKeyword
.
NOWAIT
);
}
queryRest
();
}
private
void
parseLimit
()
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerSelectParser.java
浏览文件 @
8daa85a7
...
...
@@ -42,19 +42,8 @@ public class SQLServerSelectParser extends AbstractSelectParser {
}
@Override
public
void
query
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
SELECT
))
{
parseDistinct
();
parseTop
();
parseSelectList
();
}
if
(
getSqlParser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getType
());
}
parseFrom
();
parseWhere
();
parseGroupBy
();
queryRest
();
protected
void
parseBetweenSelectAndList
()
{
parseTop
();
}
private
void
parseTop
()
{
...
...
@@ -112,6 +101,13 @@ public class SQLServerSelectParser extends AbstractSelectParser {
return
new
CommonSelectItem
(
"ROW_NUMBER"
,
getSqlParser
().
parseAlias
());
}
@Override
protected
final
void
skipToFrom
()
{
if
(
getSqlParser
().
equalAny
(
DefaultKeyword
.
INTO
))
{
throw
new
SQLParsingUnsupportedException
(
getSqlParser
().
getLexer
().
getCurrentToken
().
getType
());
}
}
@Override
protected
void
parseJoinTable
()
{
if
(
getSqlParser
().
skipIfEqual
(
DefaultKeyword
.
WITH
))
{
...
...
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java
浏览文件 @
8daa85a7
...
...
@@ -85,7 +85,21 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return
selectStatement
;
}
protected
abstract
void
query
();
protected
final
void
query
()
{
getSqlParser
().
getLexer
().
nextToken
();
parseDistinct
();
parseBetweenSelectAndList
();
parseSelectList
();
skipToFrom
();
parseFrom
();
parseWhere
();
customizedBetweenWhereAndGroupBy
();
parseGroupBy
();
customizedBetweenGroupByAndOrderBy
();
parseOrderBy
();
customizedQuery
();
queryRest
();
}
protected
final
void
parseDistinct
()
{
if
(
sqlParser
.
equalAny
(
DefaultKeyword
.
DISTINCT
,
DefaultKeyword
.
DISTINCTROW
,
DefaultKeyword
.
UNION
))
{
...
...
@@ -104,6 +118,9 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return
false
;
}
protected
void
parseBetweenSelectAndList
()
{
}
protected
final
void
parseSelectList
()
{
do
{
parseSelectItem
();
...
...
@@ -183,10 +200,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return
new
CommonSelectItem
(
SQLUtil
.
getExactlyValue
(
expression
.
substring
(
0
,
expression
.
lastIndexOf
(
lastToken
.
getLiterals
()))),
Optional
.
of
(
lastToken
.
getLiterals
()));
}
protected
void
queryRest
()
{
if
(
sqlParser
.
equalAny
(
DefaultKeyword
.
UNION
,
DefaultKeyword
.
EXCEPT
,
DefaultKeyword
.
INTERSECT
,
DefaultKeyword
.
MINUS
))
{
throw
new
SQLParsingUnsupportedException
(
sqlParser
.
getLexer
().
getCurrentToken
().
getType
());
}
protected
void
skipToFrom
()
{
}
protected
final
void
parseWhere
()
{
...
...
@@ -197,6 +211,12 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
parametersIndex
=
sqlParser
.
getParametersIndex
();
}
protected
void
customizedBetweenWhereAndGroupBy
()
{
}
protected
void
customizedBetweenGroupByAndOrderBy
()
{
}
protected
final
void
parseOrderBy
()
{
if
(!
sqlParser
.
skipIfEqual
(
DefaultKeyword
.
ORDER
))
{
return
;
...
...
@@ -370,6 +390,15 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
}
}
protected
void
customizedQuery
()
{
}
protected
final
void
queryRest
()
{
if
(
sqlParser
.
equalAny
(
DefaultKeyword
.
UNION
,
DefaultKeyword
.
EXCEPT
,
DefaultKeyword
.
INTERSECT
,
DefaultKeyword
.
MINUS
))
{
throw
new
SQLParsingUnsupportedException
(
sqlParser
.
getLexer
().
getCurrentToken
().
getType
());
}
}
protected
void
customizedSelect
()
{
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录