This is an automated email from the ASF dual-hosted git repository.

jackie 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 d195edf414 Allow Query Plan while dropResult=true (#15136)
d195edf414 is described below

commit d195edf414153b10e642140eead016edd3fd974d
Author: Jhow <44998515+j-howhu...@users.noreply.github.com>
AuthorDate: Wed Feb 26 17:03:36 2025 -0800

    Allow Query Plan while dropResult=true (#15136)
---
 .../BaseSingleStageBrokerRequestHandler.java       |  4 +--
 .../tests/HybridClusterIntegrationTest.java        | 29 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
index 15d8f772c9..465c752428 100644
--- 
a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
+++ 
b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
@@ -888,7 +888,7 @@ public abstract class BaseSingleStageBrokerRequestHandler 
extends BaseBrokerRequ
         .filter(exception -> exception.getErrorCode() == 
QueryException.QUERY_VALIDATION_ERROR_CODE)
         .findFirst()
         .ifPresent(exception -> 
_brokerMetrics.addMeteredGlobalValue(BrokerMeter.QUERY_VALIDATION_EXCEPTIONS, 
1));
-    if (QueryOptionsUtils.shouldDropResults(pinotQuery.getQueryOptions())) {
+    if (!pinotQuery.isExplain() && 
QueryOptionsUtils.shouldDropResults(pinotQuery.getQueryOptions())) {
       brokerResponse.setResultTable(null);
     }
     if (QueryOptionsUtils.isSecondaryWorkload(pinotQuery.getQueryOptions())) {
@@ -1604,7 +1604,7 @@ public abstract class BaseSingleStageBrokerRequestHandler 
extends BaseBrokerRequ
     brokerResponse.setResultTable(resultTable);
     brokerResponse.setTimeUsedMs(System.currentTimeMillis() - 
requestContext.getRequestArrivalTimeMillis());
     augmentStatistics(requestContext, brokerResponse);
-    if (QueryOptionsUtils.shouldDropResults(pinotQuery.getQueryOptions())) {
+    if (!pinotQuery.isExplain() && 
QueryOptionsUtils.shouldDropResults(pinotQuery.getQueryOptions())) {
       brokerResponse.setResultTable(null);
     }
     return brokerResponse;
diff --git 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java
 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java
index 79ab080172..8dc4739912 100644
--- 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java
+++ 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/HybridClusterIntegrationTest.java
@@ -342,6 +342,35 @@ public class HybridClusterIntegrationTest extends 
BaseClusterIntegrationTestSet
     Assert.assertTrue(postQueryWithOptions(query, 
"dropResults=truee").has(resultTag));
   }
 
+  @Test(dataProvider = "useBothQueryEngines")
+  public void testExplainDropResults(boolean useMultiStageQueryEngine)
+      throws Exception {
+    setUseMultiStageQueryEngine(useMultiStageQueryEngine);
+    String resultTag = "resultTable";
+    String query = String.format("EXPLAIN PLAN FOR SELECT * FROM %s limit 10", 
getTableName());
+
+    // dropResults=true - resultTable must be in the response (it is a query 
plan)
+    JsonNode jsonNode = postQueryWithOptions(query, "dropResults=true");
+    Assert.assertTrue(jsonNode.has(resultTag));
+    query = String.format("EXPLAIN PLAN WITHOUT IMPLEMENTATION FOR SELECT * 
FROM %s limit 10", getTableName());
+
+    // dropResults=true - resultTable must be in the response (it is a query 
plan)
+    jsonNode = postQueryWithOptions(query, "dropResults=true");
+    Assert.assertTrue(jsonNode.has(resultTag));
+
+    query = String.format("EXPLAIN IMPLEMENTATION PLAN FOR SELECT * FROM %s 
limit 10", getTableName());
+
+    // dropResults=true - resultTable must be in the response (it is a query 
plan)
+    jsonNode = postQueryWithOptions(query, "dropResults=true");
+    Assert.assertTrue(jsonNode.has(resultTag));
+
+    query = String.format("EXPLAIN PLAN FOR SELECT 1 + 1 FROM %s limit 10", 
getTableName());
+
+    // dropResults=true - resultTable must be in the response (it is a query 
plan)
+    jsonNode = postQueryWithOptions(query, "dropResults=true");
+    Assert.assertTrue(jsonNode.has(resultTag));
+  }
+
   @Test(dataProvider = "useBothQueryEngines")
   public void testHardcodedQueries(boolean useMultiStageQueryEngine)
       throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to