This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 04f3cb9474f Support postgresql limit and offset as null (#32427)
04f3cb9474f is described below
commit 04f3cb9474f12d26a0ba9ba61cb9239449834ac6
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Aug 8 18:11:12 2024 +0800
Support postgresql limit and offset as null (#32427)
* Support postgresql limit and offset as null
* Support postgresql limit and offset as null
* Support postgresql limit and offset as null
* Increase maven jvm config
---
.mvn/jvm.config | 2 +-
.../sharding/merge/dql/ShardingDQLResultMergerTest.java | 10 +++++-----
.../merge/dql/pagination/LimitDecoratorMergedResultTest.java | 2 +-
.../pagination/TopAndRowNumberDecoratorMergedResultTest.java | 2 +-
.../token/generator/ShardingRowCountTokenGeneratorTest.java | 4 ++--
.../context/segment/select/pagination/PaginationContext.java | 9 ++++++---
.../pagination/engine/RowNumberPaginationContextEngine.java | 2 +-
.../select/pagination/engine/TopPaginationContextEngine.java | 2 +-
.../visitor/statement/PostgreSQLStatementVisitor.java | 9 ++++++---
.../dml/pagination/NumberLiteralPaginationValueSegment.java | 2 +-
.../dml/pagination/limit/NumberLiteralLimitValueSegment.java | 4 ++--
.../pagination/rownum/NumberLiteralRowNumberValueSegment.java | 4 ++--
.../apache/shardingsphere/test/e2e/cases/value/SQLValue.java | 3 +++
.../src/test/resources/cases/dql/e2e-dql-select-pagination.xml | 5 +++++
14 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/.mvn/jvm.config b/.mvn/jvm.config
index 7a36713456c..298a0335999 100644
--- a/.mvn/jvm.config
+++ b/.mvn/jvm.config
@@ -1 +1 @@
--Xmx2g -XX:MaxMetaspaceSize=512m
+-Xmx4g -XX:MaxMetaspaceSize=512m
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
index 7e59de44d21..2722a32e9a7 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
@@ -130,7 +130,7 @@ class ShardingDQLResultMergerTest {
WhereSegment whereSegment = mock(WhereSegment.class);
BinaryOperationExpression binaryOperationExpression =
mock(BinaryOperationExpression.class);
when(binaryOperationExpression.getLeft()).thenReturn(new
ColumnSegment(0, 0, new IdentifierValue("row_id")));
- when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1));
+ when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1L));
when(binaryOperationExpression.getOperator()).thenReturn(">=");
when(whereSegment.getExpr()).thenReturn(binaryOperationExpression);
SubqueryTableSegment subqueryTableSegment =
mock(SubqueryTableSegment.class);
@@ -202,7 +202,7 @@ class ShardingDQLResultMergerTest {
WhereSegment whereSegment = mock(WhereSegment.class);
BinaryOperationExpression binaryOperationExpression =
mock(BinaryOperationExpression.class);
when(binaryOperationExpression.getLeft()).thenReturn(new
ColumnSegment(0, 0, new IdentifierValue("row_id")));
- when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1));
+ when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1L));
when(binaryOperationExpression.getOperator()).thenReturn(">=");
when(whereSegment.getExpr()).thenReturn(binaryOperationExpression);
SubqueryTableSegment subqueryTableSegment =
mock(SubqueryTableSegment.class);
@@ -281,7 +281,7 @@ class ShardingDQLResultMergerTest {
WhereSegment whereSegment = mock(WhereSegment.class);
BinaryOperationExpression binaryOperationExpression =
mock(BinaryOperationExpression.class);
when(binaryOperationExpression.getLeft()).thenReturn(new
ColumnSegment(0, 0, new IdentifierValue("row_id")));
- when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1));
+ when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1L));
when(binaryOperationExpression.getOperator()).thenReturn(">=");
when(whereSegment.getExpr()).thenReturn(binaryOperationExpression);
SubqueryTableSegment subqueryTableSegment =
mock(SubqueryTableSegment.class);
@@ -360,7 +360,7 @@ class ShardingDQLResultMergerTest {
WhereSegment whereSegment = mock(WhereSegment.class);
BinaryOperationExpression binaryOperationExpression =
mock(BinaryOperationExpression.class);
when(binaryOperationExpression.getLeft()).thenReturn(new
ColumnSegment(0, 0, new IdentifierValue("row_id")));
- when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1));
+ when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1L));
when(binaryOperationExpression.getOperator()).thenReturn(">=");
when(whereSegment.getExpr()).thenReturn(binaryOperationExpression);
SubqueryTableSegment subqueryTableSegment =
mock(SubqueryTableSegment.class);
@@ -442,7 +442,7 @@ class ShardingDQLResultMergerTest {
WhereSegment whereSegment = mock(WhereSegment.class);
BinaryOperationExpression binaryOperationExpression =
mock(BinaryOperationExpression.class);
when(binaryOperationExpression.getLeft()).thenReturn(new
ColumnSegment(0, 0, new IdentifierValue("row_id")));
- when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1));
+ when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, 1L));
when(binaryOperationExpression.getOperator()).thenReturn(">=");
when(whereSegment.getExpr()).thenReturn(binaryOperationExpression);
SubqueryTableSegment subqueryTableSegment =
mock(SubqueryTableSegment.class);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
index ca8a5b5e4d7..746ad5f37b5 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
@@ -53,7 +53,7 @@ class LimitDecoratorMergedResultTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
MySQLSelectStatement selectStatement = new MySQLSelectStatement();
selectStatement.setProjections(new ProjectionsSegment(0, 0));
- selectStatement.setLimit(new LimitSegment(0, 0, new
NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE), null));
+ selectStatement.setLimit(new LimitSegment(0, 0, new
NumberLiteralLimitValueSegment(0, 0, Long.MAX_VALUE), null));
SelectStatementContext selectStatementContext =
new
SelectStatementContext(createShardingSphereMetaData(database),
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME,
Collections.emptyList());
when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
index 8348a2a03bf..9f3de6d04ba 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
@@ -64,7 +64,7 @@ class TopAndRowNumberDecoratorMergedResultTest {
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
SQLServerSelectStatement sqlStatement = new SQLServerSelectStatement();
sqlStatement.setProjections(new ProjectionsSegment(0, 0));
- sqlStatement.setLimit(new LimitSegment(0, 0, new
NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null));
+ sqlStatement.setLimit(new LimitSegment(0, 0, new
NumberLiteralRowNumberValueSegment(0, 0, Long.MAX_VALUE, true), null));
SelectStatementContext selectStatementContext =
new
SelectStatementContext(createShardingSphereMetaData(database),
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME,
Collections.emptyList());
ShardingDQLResultMerger resultMerger = new
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class,
"SQLServer"));
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRowCountTokenGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRowCountTokenGeneratorTest.java
index e6d029398b5..111657a153e 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRowCountTokenGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRowCountTokenGeneratorTest.java
@@ -53,9 +53,9 @@ class ShardingRowCountTokenGeneratorTest {
@Test
void assertGenerateSQLToken() {
- final int testOffsetSegmentValue = 12;
+ final long testOffsetSegmentValue = 12L;
NumberLiteralLimitValueSegment offsetSegment = new
NumberLiteralLimitValueSegment(1, 2, testOffsetSegmentValue);
- final int testRowCountSegmentValue = 8;
+ final long testRowCountSegmentValue = 8L;
NumberLiteralLimitValueSegment rowCountSegment = new
NumberLiteralLimitValueSegment(4, 5, testRowCountSegmentValue);
PaginationContext paginationContext = new
PaginationContext(offsetSegment, rowCountSegment, null);
SelectStatementContext selectStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContext.java
index 160702843d4..69876d3c8cf 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContext.java
@@ -40,7 +40,7 @@ public final class PaginationContext {
private final PaginationValueSegment rowCountSegment;
- private final long actualOffset;
+ private final Long actualOffset;
private final Long actualRowCount;
@@ -48,13 +48,16 @@ public final class PaginationContext {
hasPagination = null != offsetSegment || null != rowCountSegment;
this.offsetSegment = offsetSegment;
this.rowCountSegment = rowCountSegment;
- actualOffset = null == offsetSegment ? 0L : getValue(offsetSegment,
params);
+ actualOffset = null == offsetSegment ? Long.valueOf(0L) :
getValue(offsetSegment, params);
actualRowCount = null == rowCountSegment ? null :
getValue(rowCountSegment, params);
}
- private long getValue(final PaginationValueSegment paginationValueSegment,
final List<Object> params) {
+ private Long getValue(final PaginationValueSegment paginationValueSegment,
final List<Object> params) {
if (paginationValueSegment instanceof
ParameterMarkerPaginationValueSegment) {
Object obj = null == params || params.isEmpty() ? 0L :
params.get(((ParameterMarkerPaginationValueSegment)
paginationValueSegment).getParameterIndex());
+ if (null == obj) {
+ return null;
+ }
return obj instanceof Long ? (long) obj : (int) obj;
}
if (paginationValueSegment instanceof ExpressionRowNumberValueSegment)
{
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
index dee7a2fae07..96dd3ae1b8d 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
@@ -150,7 +150,7 @@ public final class RowNumberPaginationContextEngine {
int startIndex = expression.getStartIndex();
int stopIndex = expression.getStopIndex();
if (expression instanceof LiteralExpressionSegment) {
- return new NumberLiteralRowNumberValueSegment(startIndex,
stopIndex, (int) ((LiteralExpressionSegment) expression).getLiterals(),
boundOpened);
+ return new NumberLiteralRowNumberValueSegment(startIndex,
stopIndex, Long.parseLong(((LiteralExpressionSegment)
expression).getLiterals().toString()), boundOpened);
}
if (expression instanceof ParameterMarkerExpressionSegment) {
return new ParameterMarkerRowNumberValueSegment(startIndex,
stopIndex, ((ParameterMarkerExpressionSegment)
expression).getParameterMarkerIndex(), boundOpened);
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/TopPaginationContextEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/TopPaginationContextEngine.java
index be9b92c3dd2..eab9fd8fe20 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/TopPaginationContextEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/TopPaginationContextEngine.java
@@ -103,7 +103,7 @@ public final class TopPaginationContextEngine {
int startIndex = expression.getStartIndex();
int stopIndex = expression.getStopIndex();
return expression instanceof LiteralExpressionSegment
- ? new NumberLiteralRowNumberValueSegment(startIndex,
stopIndex, (int) ((LiteralExpressionSegment) expression).getLiterals(),
boundOpened)
+ ? new NumberLiteralRowNumberValueSegment(startIndex,
stopIndex, Long.parseLong(((LiteralExpressionSegment)
expression).getLiterals().toString()), boundOpened)
: new ParameterMarkerRowNumberValueSegment(startIndex,
stopIndex, ((ParameterMarkerExpressionSegment)
expression).getParameterMarkerIndex(), boundOpened);
}
}
diff --git
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
index f518ffa4c7a..7696ef1bd2c 100644
---
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
+++
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/PostgreSQLStatementVisitor.java
@@ -1299,7 +1299,8 @@ public abstract class PostgreSQLStatementVisitor extends
PostgreSQLStatementPars
if (astNode instanceof ParameterMarkerExpressionSegment) {
return new
ParameterMarkerLimitValueSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), ((ParameterMarkerExpressionSegment)
astNode).getParameterMarkerIndex());
}
- return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
+ return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(),
+ (null == ((LiteralExpressionSegment) astNode).getLiterals()) ?
null : Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
}
@Override
@@ -1308,7 +1309,8 @@ public abstract class PostgreSQLStatementVisitor extends
PostgreSQLStatementPars
if (astNode instanceof ParameterMarkerExpressionSegment) {
return new
ParameterMarkerLimitValueSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), ((ParameterMarkerExpressionSegment)
astNode).getParameterMarkerIndex());
}
- return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
+ return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(),
+ (null == ((LiteralExpressionSegment) astNode).getLiterals()) ?
null : Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
}
@Override
@@ -1317,7 +1319,8 @@ public abstract class PostgreSQLStatementVisitor extends
PostgreSQLStatementPars
if (astNode instanceof ParameterMarkerExpressionSegment) {
return new
ParameterMarkerLimitValueSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), ((ParameterMarkerExpressionSegment)
astNode).getParameterMarkerIndex());
}
- return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
+ return new NumberLiteralLimitValueSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(),
+ (null == ((LiteralExpressionSegment) astNode).getLiterals()) ?
null : Long.parseLong(((LiteralExpressionSegment)
astNode).getLiterals().toString()));
}
private LimitSegment createLimitSegmentWhenLimitAndOffset(final
SelectLimitContext ctx) {
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/NumberLiteralPaginationValueSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/NumberLiteralPaginationValueSegment.java
index 0fdce70978d..1db292b3e64 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/NumberLiteralPaginationValueSegment.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/NumberLiteralPaginationValueSegment.java
@@ -27,5 +27,5 @@ public interface NumberLiteralPaginationValueSegment extends
PaginationValueSegm
*
* @return value
*/
- long getValue();
+ Long getValue();
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/limit/NumberLiteralLimitValueSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/limit/NumberLiteralLimitValueSegment.java
index 78bc5a9c032..fe2503aa31c 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/limit/NumberLiteralLimitValueSegment.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/limit/NumberLiteralLimitValueSegment.java
@@ -26,9 +26,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.paginatio
@Getter
public final class NumberLiteralLimitValueSegment extends LimitValueSegment
implements NumberLiteralPaginationValueSegment {
- private final long value;
+ private final Long value;
- public NumberLiteralLimitValueSegment(final int startIndex, final int
stopIndex, final long value) {
+ public NumberLiteralLimitValueSegment(final int startIndex, final int
stopIndex, final Long value) {
super(startIndex, stopIndex);
this.value = value;
}
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/rownum/NumberLiteralRowNumberValueSegment.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/rownum/NumberLiteralRowNumberValueSegment.java
index 4eb83d597de..097d2db9176 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/rownum/NumberLiteralRowNumberValueSegment.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/pagination/rownum/NumberLiteralRowNumberValueSegment.java
@@ -26,9 +26,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.paginatio
@Getter
public final class NumberLiteralRowNumberValueSegment extends
RowNumberValueSegment implements NumberLiteralPaginationValueSegment {
- private final long value;
+ private final Long value;
- public NumberLiteralRowNumberValueSegment(final int startIndex, final int
stopIndex, final long value, final boolean boundOpened) {
+ public NumberLiteralRowNumberValueSegment(final int startIndex, final int
stopIndex, final Long value, final boolean boundOpened) {
super(startIndex, stopIndex, boundOpened);
this.value = value;
}
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/value/SQLValue.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/value/SQLValue.java
index eaa12f815bf..72b9f043139 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/value/SQLValue.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/value/SQLValue.java
@@ -117,6 +117,9 @@ public final class SQLValue {
@Override
public String toString() {
+ if (null == value) {
+ return null;
+ }
if (value instanceof String) {
return formatString((String) value);
}
diff --git
a/test/e2e/sql/src/test/resources/cases/dql/e2e-dql-select-pagination.xml
b/test/e2e/sql/src/test/resources/cases/dql/e2e-dql-select-pagination.xml
index 1f046ce0327..b79d07199ed 100644
--- a/test/e2e/sql/src/test/resources/cases/dql/e2e-dql-select-pagination.xml
+++ b/test/e2e/sql/src/test/resources/cases/dql/e2e-dql-select-pagination.xml
@@ -40,4 +40,9 @@
<!--<test-case sql="SELECT o.*, i.* FROM t_order_federate o,
t_order_item_federate i WHERE o.order_id = ? AND i.item_id = ? LIMIT ?"
scenario-types="db,dbtbl_with_readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt,sharding_and_encrypt,encrypt_and_readwrite_splitting">
<assertion parameters="1000:int, 100000:int, 3:int"
expected-data-source-name="read_dataset" />
</test-case>-->
+
+ <test-case sql="SELECT * FROM t_order WHERE order_id = ? ORDER BY order_id
limit ? offset ?" db-types="PostgreSQL" scenario-types="encrypt"
+ scenario-comments="Test postgresql paging query parameter is
null scenario">
+ <assertion parameters="1000:int, null:int, null:int"
expected-data-source-name="read_dataset" />
+ </test-case>
</e2e-test-cases>