Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
087588b1
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,发现更多精彩内容 >>
提交
087588b1
编写于
8月 26, 2020
作者:
J
JingShang Lu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix visitor of SQLServer for limit
上级
6ba9a428
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
50 addition
and
20 deletion
+50
-20
shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
...sphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
+0
-17
shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
...ql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
+45
-1
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/limit/LimitClauseAssert.java
...arameterized/asserts/segment/limit/LimitClauseAssert.java
+1
-1
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
...er-test/src/main/resources/case/dml/select-pagination.xml
+4
-1
未找到文件。
shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/SQLServerVisitor.java
浏览文件 @
087588b1
...
...
@@ -46,7 +46,6 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Ind
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.LiteralsContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.NullValueLiteralsContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.NumberLiteralsContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OrderByClauseContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OrderByItemContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OwnerContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ParameterMarkerContext
;
...
...
@@ -74,11 +73,9 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.subquery.Subque
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.item.AggregationDistinctProjectionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.item.AggregationProjectionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.item.ExpressionProjectionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.OrderBySegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.ColumnOrderByItemSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.ExpressionOrderByItemSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrderByItemSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue
;
...
...
@@ -486,20 +483,6 @@ public abstract class SQLServerVisitor extends SQLServerStatementBaseVisitor<AST
}
}
@Override
public
final
ASTNode
visitOrderByClause
(
final
OrderByClauseContext
ctx
)
{
Collection
<
OrderByItemSegment
>
items
=
new
LinkedList
<>();
for
(
OrderByItemContext
each
:
ctx
.
orderByItem
())
{
items
.
add
((
OrderByItemSegment
)
visit
(
each
));
}
if
(
null
!=
ctx
.
expr
())
{
for
(
ExprContext
each
:
ctx
.
expr
())
{
visit
(
each
);
}
}
return
new
OrderBySegment
(
ctx
.
getStart
().
getStartIndex
(),
ctx
.
getStop
().
getStopIndex
(),
items
);
}
@Override
public
final
ASTNode
visitOrderByItem
(
final
OrderByItemContext
ctx
)
{
OrderDirection
orderDirection
=
null
!=
ctx
.
DESC
()
?
OrderDirection
.
DESC
:
OrderDirection
.
ASC
;
...
...
shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/impl/SQLServerDMLVisitor.java
浏览文件 @
087588b1
...
...
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sql.parser.sqlserver.visitor.impl;
import
org.apache.shardingsphere.sql.parser.api.ASTNode
;
import
org.apache.shardingsphere.sql.parser.api.visitor.statement.DMLVisitor
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OrderByClauseContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AliasContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AssignmentContext
;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AssignmentValueContext
;
...
...
@@ -65,6 +66,7 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.column.InsertColumns
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.complex.CommonExpressionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.simple.LiteralExpressionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.simple.ParameterMarkerExpressionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.subquery.SubqueryExpressionSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.subquery.SubquerySegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.item.AggregationProjectionSegment
;
...
...
@@ -77,6 +79,10 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.item.SubqueryProject
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.GroupBySegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.OrderBySegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.OrderByItemSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.PaginationValueSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.limit.LimitSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.limit.NumberLiteralLimitValueSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.limit.ParameterMarkerLimitValueSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.rownum.ParameterMarkerRowNumberValueSegment
;
import
org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.rownum.RowNumberValueSegment
;
...
...
@@ -272,10 +278,48 @@ public final class SQLServerDMLVisitor extends SQLServerVisitor implements DMLVi
result
.
setGroupBy
((
GroupBySegment
)
visit
(
ctx
.
groupByClause
()));
}
if
(
null
!=
ctx
.
orderByClause
())
{
result
.
setOrderBy
((
OrderBySegment
)
visit
(
ctx
.
orderByClause
()
));
result
=
visitOrderBy
(
result
,
ctx
.
orderByClause
(
));
}
return
result
;
}
private
SelectStatement
visitOrderBy
(
final
SelectStatement
selectStatement
,
final
OrderByClauseContext
ctx
)
{
Collection
<
OrderByItemSegment
>
items
=
new
LinkedList
<>();
int
orderByStartIndex
=
ctx
.
start
.
getStartIndex
();
int
orderByStopIndex
=
ctx
.
start
.
getStartIndex
();
for
(
OrderByItemContext
each
:
ctx
.
orderByItem
())
{
items
.
add
((
OrderByItemSegment
)
visit
(
each
));
orderByStopIndex
=
each
.
stop
.
getStopIndex
();
}
OrderBySegment
orderBySegment
=
new
OrderBySegment
(
orderByStartIndex
,
orderByStopIndex
,
items
);
selectStatement
.
setOrderBy
(
orderBySegment
);
PaginationValueSegment
offset
=
null
;
PaginationValueSegment
rowcount
=
null
;
LimitSegment
limitSegment
=
null
;
if
(
null
!=
ctx
.
OFFSET
())
{
ASTNode
astNode
=
visit
(
ctx
.
expr
(
0
));
if
(
astNode
instanceof
LiteralExpressionSegment
&&
((
LiteralExpressionSegment
)
astNode
).
getLiterals
()
instanceof
Number
)
{
offset
=
new
NumberLiteralLimitValueSegment
(
ctx
.
expr
(
0
).
start
.
getStartIndex
(),
ctx
.
expr
(
0
).
stop
.
getStopIndex
(),
((
Number
)
((
LiteralExpressionSegment
)
astNode
).
getLiterals
()).
longValue
());
}
else
if
(
astNode
instanceof
ParameterMarkerExpressionSegment
)
{
offset
=
new
ParameterMarkerLimitValueSegment
(
ctx
.
expr
(
0
).
start
.
getStartIndex
(),
ctx
.
expr
(
0
).
stop
.
getStopIndex
(),
getCurrentParameterIndex
());
}
}
if
(
null
!=
ctx
.
FETCH
())
{
ASTNode
astNode
=
visit
(
ctx
.
expr
(
1
));
if
(
astNode
instanceof
LiteralExpressionSegment
&&
((
LiteralExpressionSegment
)
astNode
).
getLiterals
()
instanceof
Number
)
{
rowcount
=
new
NumberLiteralLimitValueSegment
(
ctx
.
expr
(
1
).
start
.
getStartIndex
(),
ctx
.
expr
(
1
).
stop
.
getStopIndex
(),
((
Number
)
((
LiteralExpressionSegment
)
astNode
).
getLiterals
()).
longValue
());
}
else
if
(
astNode
instanceof
ParameterMarkerExpressionSegment
)
{
rowcount
=
new
ParameterMarkerLimitValueSegment
(
ctx
.
expr
(
1
).
start
.
getStartIndex
(),
ctx
.
expr
(
1
).
stop
.
getStopIndex
(),
getCurrentParameterIndex
());
}
}
if
(
null
!=
offset
)
{
limitSegment
=
new
LimitSegment
(
ctx
.
OFFSET
().
getSymbol
().
getStartIndex
(),
ctx
.
stop
.
getStopIndex
(),
offset
,
rowcount
);
}
selectStatement
.
setLimit
(
limitSegment
);
return
selectStatement
;
}
private
boolean
isDistinct
(
final
SelectClauseContext
ctx
)
{
return
((
BooleanLiteralValue
)
visit
(
ctx
.
duplicateSpecification
())).
getValue
();
...
...
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/limit/LimitClauseAssert.java
浏览文件 @
087588b1
...
...
@@ -49,7 +49,7 @@ public final class LimitClauseAssert {
assertNull
(
assertContext
.
getText
(
"Offset should not exist."
),
expected
);
return
;
}
if
(
SQLCaseType
.
Placeholder
==
assertContext
.
getSqlCaseType
()
)
{
if
(
actual
instanceof
ParameterMarkerPaginationValueSegment
)
{
assertThat
(
assertContext
.
getText
(
"Offset index assertion error: "
),
((
ParameterMarkerPaginationValueSegment
)
actual
).
getParameterIndex
(),
is
(
expected
.
getParameterIndex
()));
}
else
{
...
...
shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
浏览文件 @
087588b1
...
...
@@ -1465,6 +1465,9 @@
<order-by>
<column-item
name=
"order_id"
start-index=
"31"
stop-index=
"38"
/>
</order-by>
<row-count
value=
"20"
parameter-index=
"0"
/>
<limit
literal-start-index=
"40"
literal-stop-index=
"75"
start-index=
"40"
stop-index=
"74"
>
<offset
value=
"0"
start-index=
"47"
stop-index=
"47"
literal-start-index=
"47"
literal-stop-index=
"47"
/>
<row-count
value=
"20"
parameter-index=
"1"
literal-start-index=
"64"
literal-stop-index=
"65"
start-index=
"64"
stop-index=
"64"
/>
</limit>
</select>
</sql-parser-test-cases>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录