Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
cabbee11
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,发现更多精彩内容 >>
提交
cabbee11
编写于
5月 07, 2019
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
for #2084, use 3rd parse engine to parse limit for pg
上级
333e33f5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
26 addition
and
17 deletion
+26
-17
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/LimitExtractor.java
...parse/antlr/extractor/impl/dml/select/LimitExtractor.java
+5
-9
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/common/dml/LimitFiller.java
...phere/core/parse/antlr/filler/common/dml/LimitFiller.java
+3
-1
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/limit/LimitSegment.java
.../core/parse/antlr/sql/segment/dml/limit/LimitSegment.java
+7
-4
sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
...gresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
+11
-3
未找到文件。
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/extractor/impl/dml/select/LimitExtractor.java
浏览文件 @
cabbee11
...
...
@@ -47,18 +47,14 @@ public final class LimitExtractor implements OptionalSQLSegmentExtractor {
@Override
public
Optional
<
LimitSegment
>
extract
(
final
ParserRuleContext
ancestorNode
,
final
Map
<
ParserRuleContext
,
Integer
>
parameterMarkerIndexes
)
{
Optional
<
ParserRuleContext
>
limitNode
=
ExtractorUtils
.
findFirstChildNode
(
ancestorNode
,
RuleName
.
LIMIT_CLAUSE
);
if
(!
limitNode
.
isPresent
())
{
return
Optional
.
absent
();
}
LimitValueSegment
rowCount
=
extractRowCount
(
limitNode
.
get
(),
parameterMarkerIndexes
);
Optional
<
LimitValueSegment
>
offset
=
extractOffset
(
limitNode
.
get
(),
parameterMarkerIndexes
);
return
offset
.
isPresent
()
?
Optional
.
of
(
new
LimitSegment
(
rowCount
,
offset
.
get
()))
:
Optional
.
of
(
new
LimitSegment
(
rowCount
));
return
limitNode
.
isPresent
()
?
Optional
.
of
(
new
LimitSegment
(
extractRowCount
(
limitNode
.
get
(),
parameterMarkerIndexes
).
orNull
(),
extractOffset
(
limitNode
.
get
(),
parameterMarkerIndexes
).
orNull
()))
:
Optional
.<
LimitSegment
>
absent
();
}
private
LimitValueSegment
extractRowCount
(
final
ParserRuleContext
limitNode
,
final
Map
<
ParserRuleContext
,
Integer
>
parameterMarkerIndexes
)
{
private
Optional
<
LimitValueSegment
>
extractRowCount
(
final
ParserRuleContext
limitNode
,
final
Map
<
ParserRuleContext
,
Integer
>
parameterMarkerIndexes
)
{
Optional
<
ParserRuleContext
>
rowCountNode
=
ExtractorUtils
.
findFirstChildNode
(
limitNode
,
RuleName
.
LIMIT_ROW_COUNT
);
Preconditions
.
checkState
(
rowCountNode
.
isPresent
());
return
extractLimitValue
(
rowCountNode
.
get
(),
parameterMarkerIndexes
);
return
rowCountNode
.
isPresent
()
?
Optional
.
of
(
extractLimitValue
(
rowCountNode
.
get
(),
parameterMarkerIndexes
))
:
Optional
.<
LimitValueSegment
>
absent
();
}
private
Optional
<
LimitValueSegment
>
extractOffset
(
final
ParserRuleContext
limitNode
,
final
Map
<
ParserRuleContext
,
Integer
>
parameterMarkerIndexes
)
{
...
...
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/filler/common/dml/LimitFiller.java
浏览文件 @
cabbee11
...
...
@@ -40,7 +40,9 @@ public final class LimitFiller implements SQLSegmentFiller<LimitSegment> {
public
void
fill
(
final
LimitSegment
sqlSegment
,
final
SQLStatement
sqlStatement
)
{
SelectStatement
selectStatement
=
(
SelectStatement
)
sqlStatement
;
selectStatement
.
setLimit
(
new
Limit
());
fillRowCount
(
sqlSegment
.
getRowCount
(),
selectStatement
);
if
(
sqlSegment
.
getRowCount
().
isPresent
())
{
fillRowCount
(
sqlSegment
.
getRowCount
().
get
(),
selectStatement
);
}
if
(
sqlSegment
.
getOffset
().
isPresent
())
{
fillOffset
(
sqlSegment
.
getOffset
().
get
(),
selectStatement
);
}
...
...
sharding-core/sharding-core-parse/sharding-core-parse-common/src/main/java/org/apache/shardingsphere/core/parse/antlr/sql/segment/dml/limit/LimitSegment.java
浏览文件 @
cabbee11
...
...
@@ -18,7 +18,6 @@
package
org.apache.shardingsphere.core.parse.antlr.sql.segment.dml.limit
;
import
com.google.common.base.Optional
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.shardingsphere.core.parse.antlr.sql.segment.SQLSegment
;
...
...
@@ -28,15 +27,19 @@ import org.apache.shardingsphere.core.parse.antlr.sql.segment.SQLSegment;
* @author duhongjun
*/
@RequiredArgsConstructor
@Getter
public
final
class
LimitSegment
implements
SQLSegment
{
private
final
LimitValueSegment
rowCount
;
private
final
LimitValueSegment
offset
;
public
LimitSegment
(
final
LimitValueSegment
rowCount
)
{
this
(
rowCount
,
null
);
/**
* Get row count.
*
* @return row count
*/
public
Optional
<
LimitValueSegment
>
getRowCount
()
{
return
Optional
.
fromNullable
(
rowCount
);
}
/**
...
...
sharding-core/sharding-core-parse/sharding-core-parse-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
浏览文件 @
cabbee11
...
...
@@ -149,15 +149,23 @@ havingClause
: HAVING expr
;
// TODO limitRowCount can be null on PG
limitClause
: (LIMIT (ALL | limitRowCount)) (OFFSET limitOffset (ROW | ROWS)?)?
: limitRowCountSyntax_ limitOffsetSyntax_?
| limitOffsetSyntax_ limitRowCountSyntax_?
;
limitRowCountSyntax_
: LIMIT (ALL | limitRowCount)
;
limitRowCount
: numberLiterals | parameterMarker
;
limitOffsetSyntax_
: OFFSET limitOffset (ROW | ROWS)?
;
limitOffset
: numberLiterals | parameterMarker
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录