This is an automated email from the ASF dual-hosted git repository.
xiangfu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 2f48060d37 override leaf query limit to 0 if set explicitly from
outside (#11479)
2f48060d37 is described below
commit 2f48060d37f94a4570a0b15b13a58391e177ee8a
Author: Xiang Fu <[email protected]>
AuthorDate: Fri Sep 1 08:08:33 2023 -0700
override leaf query limit to 0 if set explicitly from outside (#11479)
---
.../test/resources/queries/BasicQueryPlans.json | 24 ++++++++++++++++++++++
.../resources/queries/ValidationErrorPlan.json | 10 +++++++++
.../plan/server/ServerPlanRequestVisitor.java | 8 ++++----
3 files changed, 38 insertions(+), 4 deletions(-)
diff --git
a/pinot-query-planner/src/test/resources/queries/BasicQueryPlans.json
b/pinot-query-planner/src/test/resources/queries/BasicQueryPlans.json
index 46eb14d55b..8cbd90fde5 100644
--- a/pinot-query-planner/src/test/resources/queries/BasicQueryPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/BasicQueryPlans.json
@@ -10,6 +10,30 @@
"\n"
]
},
+ {
+ "description": "Select * with limit 0",
+ "sql": "EXPLAIN PLAN FOR SELECT * FROM d LIMIT 0",
+ "output": [
+ "Execution Plan",
+ "\nLogicalSort(offset=[0], fetch=[0])",
+ "\n PinotLogicalSortExchange(distribution=[hash], collation=[[]],
isSortOnSender=[false], isSortOnReceiver=[false])",
+ "\n LogicalSort(fetch=[0])",
+ "\n LogicalTableScan(table=[[d]])",
+ "\n"
+ ]
+ },
+ {
+ "description": "Select * with limit 0 offset 0",
+ "sql": "EXPLAIN PLAN FOR SELECT * FROM d LIMIT 0 OFFSET 0",
+ "output": [
+ "Execution Plan",
+ "\nLogicalSort(offset=[0], fetch=[0])",
+ "\n PinotLogicalSortExchange(distribution=[hash], collation=[[]],
isSortOnSender=[false], isSortOnReceiver=[false])",
+ "\n LogicalSort(fetch=[0])",
+ "\n LogicalTableScan(table=[[d]])",
+ "\n"
+ ]
+ },
{
"description": "Select with filters",
"sql": "EXPLAIN PLAN FOR SELECT a.col1, a.col3 + a.ts FROM a WHERE
a.col3 >= 0 AND a.col2 = 'a'",
diff --git
a/pinot-query-planner/src/test/resources/queries/ValidationErrorPlan.json
b/pinot-query-planner/src/test/resources/queries/ValidationErrorPlan.json
index 2d4edda388..1544ef66f4 100644
--- a/pinot-query-planner/src/test/resources/queries/ValidationErrorPlan.json
+++ b/pinot-query-planner/src/test/resources/queries/ValidationErrorPlan.json
@@ -10,6 +10,16 @@
"description": "arrayToMV validation error 2",
"sql": "EXPLAIN PLAN FOR SELECT SUM(a.col3) as sumCol3,
arrayToMv(e.mcol1), a.col2 FROM a JOIN e on a.col1=e.col1 GROUP BY
arrayToMv(e.mcol1), a.col2",
"expectedException": "Error composing query plan for.*"
+ },
+ {
+ "description": "Select * with negative limit -1",
+ "sql": "EXPLAIN PLAN FOR SELECT * FROM d LIMIT -1",
+ "expectedException": "Caught exception while parsing query.*"
+ },
+ {
+ "description": "Select * with negative offset",
+ "sql": "EXPLAIN PLAN FOR SELECT * FROM d LIMIT 10 OFFSET -1",
+ "expectedException": "Caught exception while parsing query.*"
}
]
}
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/server/ServerPlanRequestVisitor.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/server/ServerPlanRequestVisitor.java
index be7db3ea63..e451c42815 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/server/ServerPlanRequestVisitor.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/server/ServerPlanRequestVisitor.java
@@ -122,7 +122,7 @@ public class ServerPlanRequestVisitor implements
PlanNodeVisitor<Void, ServerPla
}
}
- if (resultDataContainer.size() > 0) {
+ if (!resultDataContainer.isEmpty()) {
// rewrite SEMI-JOIN as filter clause.
ServerPlanRequestUtils.attachDynamicFilter(context.getPinotQuery(),
node.getJoinKeys(), resultDataContainer,
dataSchema);
@@ -157,13 +157,13 @@ public class ServerPlanRequestVisitor implements
PlanNodeVisitor<Void, ServerPla
public Void visitSort(SortNode node, ServerPlanRequestContext context) {
visitChildren(node, context);
PinotQuery pinotQuery = context.getPinotQuery();
- if (node.getCollationKeys().size() > 0) {
+ if (!node.getCollationKeys().isEmpty()) {
pinotQuery.setOrderByList(CalciteRexExpressionParser.convertOrderByList(node,
pinotQuery));
}
- if (node.getFetch() > 0) {
+ if (node.getFetch() >= 0) {
pinotQuery.setLimit(node.getFetch());
}
- if (node.getOffset() > 0) {
+ if (node.getOffset() >= 0) {
pinotQuery.setOffset(node.getOffset());
}
return null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]