You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2023/09/01 15:08:39 UTC
[pinot] branch master updated: override leaf query limit to 0 if set explicitly from outside (#11479)
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 <xi...@gmail.com>
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: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org