You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/08/11 01:48:02 UTC
(shardingsphere) branch master updated: Fix openGauss LIMIT offset, row-count parameter marker order (#39242)
This is an automated email from the ASF dual-hosted git repository.
terrymanu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 168a565b2ee Fix openGauss LIMIT offset, row-count parameter marker order (#39242)
168a565b2ee is described below
commit 168a565b2ee7e607a38e0f67fe24a9b085a5636a
Author: fudian <fu...@gmail.com>
AuthorDate: Tue Aug 11 09:47:55 2026 +0800
Fix openGauss LIMIT offset, row-count parameter marker order (#39242)
For LIMIT offset, row-count (e.g. LIMIT ?, ?), the openGauss visitor
visited selectLimitValue (row-count) before selectOffsetValue (offset).
Parameter marker indices are assigned in visit order, so this reversed
the indices: the lexical first ? (offset) got index 1 and the second ?
(row-count) got index 0. Visit the offset before the row-count so the
marker indices follow lexical order, matching DorisStatementVisitor.
---
.../visitor/statement/OpenGaussStatementVisitor.java | 2 +-
.../visitor/statement/OpenGaussStatementVisitorTest.java | 12 ++++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
index 50adfdecf8d..ebc4fc942fc 100644
--- a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
+++ b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitor.java
@@ -1544,8 +1544,8 @@ public abstract class OpenGaussStatementVisitor extends OpenGaussStatementParser
private LimitSegment createLimitSegmentWhenRowCountOrOffsetAbsent(final SelectLimitContext ctx) {
if (null != ctx.limitClause()) {
if (null != ctx.limitClause().selectOffsetValue()) {
- LimitValueSegment limit = (LimitValueSegment) visit(ctx.limitClause().selectLimitValue());
LimitValueSegment offset = (LimitValueSegment) visit(ctx.limitClause().selectOffsetValue());
+ LimitValueSegment limit = (LimitValueSegment) visit(ctx.limitClause().selectLimitValue());
return new LimitSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), offset, limit);
}
if (null != ctx.limitClause().selectFetchValue()) {
diff --git a/parser/sql/engine/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitorTest.java b/parser/sql/engine/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitorTest.java
index a221d7d2175..9c8179f0ebd 100644
--- a/parser/sql/engine/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitorTest.java
+++ b/parser/sql/engine/dialect/opengauss/src/test/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/OpenGaussStatementVisitorTest.java
@@ -23,6 +23,8 @@ import org.apache.shardingsphere.sql.parser.engine.api.SQLStatementVisitorEngine
import org.apache.shardingsphere.sql.parser.engine.core.ParseASTNode;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.AggregationProjectionSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.LimitSegment;
+import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.ParameterMarkerLimitValueSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.WindowItemSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.FunctionTableSegment;
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
@@ -65,6 +67,16 @@ class OpenGaussStatementVisitorTest {
assertThat(actualColumns, contains("r"));
}
+ @Test
+ void assertVisitLimitWithOffsetAndRowCountParameterMarkers() {
+ SelectStatement statement = parseSelectStatement("SELECT * FROM t ORDER BY id LIMIT ?, ?");
+ LimitSegment limit = statement.getLimit().get();
+ ParameterMarkerLimitValueSegment offset = (ParameterMarkerLimitValueSegment) limit.getOffset().get();
+ ParameterMarkerLimitValueSegment rowCount = (ParameterMarkerLimitValueSegment) limit.getRowCount().get();
+ assertThat(offset.getParameterIndex(), is(0));
+ assertThat(rowCount.getParameterIndex(), is(1));
+ }
+
private SelectStatement parseSelectStatement(final String sql) {
ParseASTNode parseASTNode = new SQLParserEngine("openGauss", new CacheOption(128, 1024L)).parse(sql, false);
return (SelectStatement) new SQLStatementVisitorEngine("openGauss").visit(parseASTNode);