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/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 51fa476  [QueryContext] Use QueryContext in all PlanNodes (#5579)
51fa476 is described below

commit 51fa4761d5e843d7007e8035a608dee42fbc8c09
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Thu Jun 18 18:42:35 2020 -0700

    [QueryContext] Use QueryContext in all PlanNodes (#5579)
    
    Replace BrokerRequest with QueryContext in all PlanNodes
    This change can save the redundant expression compilation of:
    - Group by expressions
    - Selection expreesions
    - Order by expressions
    
    Expressions in aggregation and filter will be addressed in the following PRs
---
 .../plan/AggregationGroupByOrderByPlanNode.java    | 20 ++++---
 .../core/plan/AggregationGroupByPlanNode.java      | 20 ++++---
 .../pinot/core/plan/AggregationPlanNode.java       | 14 ++---
 .../apache/pinot/core/plan/CombinePlanNode.java    | 23 ++++----
 .../plan/DictionaryBasedAggregationPlanNode.java   |  8 +--
 .../apache/pinot/core/plan/DocIdSetPlanNode.java   | 10 +---
 .../org/apache/pinot/core/plan/FilterPlanNode.java | 16 +++---
 .../plan/MetadataBasedAggregationPlanNode.java     |  8 +--
 .../apache/pinot/core/plan/SelectionPlanNode.java  | 64 +++++++++++-----------
 .../apache/pinot/core/plan/TransformPlanNode.java  | 29 ++++------
 .../core/plan/maker/InstancePlanMakerImplV2.java   | 16 +++---
 .../query/request/context/ExpressionContext.java   | 27 +++++++++
 .../query/selection/SelectionOperatorUtils.java    |  2 +
 .../apache/pinot/core/startree/StarTreeUtils.java  |  7 ++-
 .../pinot/core/plan/CombinePlanNodeTest.java       | 17 +++---
 .../pinot/core/startree/v2/BaseStarTreeV2Test.java |  5 +-
 .../DictionaryBasedGroupKeyGeneratorTest.java      | 10 +++-
 .../groupby/NoDictionaryGroupKeyGeneratorTest.java |  8 ++-
 18 files changed, 171 insertions(+), 133 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByOrderByPlanNode.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByOrderByPlanNode.java
index 6b72e2f..817362f 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByOrderByPlanNode.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByOrderByPlanNode.java
@@ -20,7 +20,6 @@ package org.apache.pinot.core.plan;
 
 import java.util.List;
 import java.util.Set;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.request.FilterQueryTree;
 import org.apache.pinot.common.utils.request.RequestUtils;
@@ -28,6 +27,8 @@ import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.query.AggregationGroupByOrderByOperator;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.ExpressionContext;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.startree.StarTreeUtils;
 import org.apache.pinot.core.startree.plan.StarTreeTransformPlanNode;
 import org.apache.pinot.core.startree.v2.AggregationFunctionColumnPair;
@@ -48,22 +49,23 @@ public class AggregationGroupByOrderByPlanNode implements 
PlanNode {
   private final TransformPlanNode _transformPlanNode;
   private final StarTreeTransformPlanNode _starTreeTransformPlanNode;
 
-  public AggregationGroupByOrderByPlanNode(IndexSegment indexSegment, 
BrokerRequest brokerRequest,
+  public AggregationGroupByOrderByPlanNode(IndexSegment indexSegment, 
QueryContext queryContext,
       int maxInitialResultHolderCapacity, int numGroupsLimit) {
     _indexSegment = indexSegment;
     _maxInitialResultHolderCapacity = maxInitialResultHolderCapacity;
     _numGroupsLimit = numGroupsLimit;
-    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
-    List<String> groupByExpressions = 
brokerRequest.getGroupBy().getExpressions();
+    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(queryContext.getBrokerRequest());
+    List<ExpressionContext> groupByExpressions = 
queryContext.getGroupByExpressions();
+    assert groupByExpressions != null;
     int numGroupByExpressions = groupByExpressions.size();
     _groupByExpressions = new TransformExpressionTree[numGroupByExpressions];
     for (int i = 0; i < numGroupByExpressions; i++) {
-      _groupByExpressions[i] = 
TransformExpressionTree.compileToExpressionTree(groupByExpressions.get(i));
+      _groupByExpressions[i] = 
groupByExpressions.get(i).toTransformExpressionTree();
     }
 
     List<StarTreeV2> starTrees = indexSegment.getStarTrees();
     if (starTrees != null) {
-      if (!StarTreeUtils.isStarTreeDisabled(brokerRequest)) {
+      if (!StarTreeUtils.isStarTreeDisabled(queryContext)) {
         int numAggregationFunctions = _aggregationFunctions.length;
         AggregationFunctionColumnPair[] aggregationFunctionColumnPairs =
             new AggregationFunctionColumnPair[numAggregationFunctions];
@@ -79,7 +81,7 @@ public class AggregationGroupByOrderByPlanNode implements 
PlanNode {
           }
         }
         if (!hasUnsupportedAggregationFunction) {
-          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(brokerRequest);
+          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(queryContext.getBrokerRequest());
           for (StarTreeV2 starTreeV2 : starTrees) {
             if (StarTreeUtils
                 .isFitForStarTree(starTreeV2.getMetadata(), 
aggregationFunctionColumnPairs, _groupByExpressions,
@@ -87,7 +89,7 @@ public class AggregationGroupByOrderByPlanNode implements 
PlanNode {
               _transformPlanNode = null;
               _starTreeTransformPlanNode =
                   new StarTreeTransformPlanNode(starTreeV2, 
aggregationFunctionColumnPairs, _groupByExpressions,
-                      rootFilterNode, brokerRequest.getDebugOptions());
+                      rootFilterNode, queryContext.getDebugOptions());
               return;
             }
           }
@@ -97,7 +99,7 @@ public class AggregationGroupByOrderByPlanNode implements 
PlanNode {
 
     Set<TransformExpressionTree> expressionsToTransform =
         
AggregationFunctionUtils.collectExpressionsToTransform(_aggregationFunctions, 
_groupByExpressions);
-    _transformPlanNode = new TransformPlanNode(_indexSegment, brokerRequest, 
expressionsToTransform);
+    _transformPlanNode = new TransformPlanNode(_indexSegment, queryContext, 
expressionsToTransform);
     _starTreeTransformPlanNode = null;
   }
 
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByPlanNode.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByPlanNode.java
index d5245a4..b652fa2 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByPlanNode.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationGroupByPlanNode.java
@@ -20,7 +20,6 @@ package org.apache.pinot.core.plan;
 
 import java.util.List;
 import java.util.Set;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.request.FilterQueryTree;
 import org.apache.pinot.common.utils.request.RequestUtils;
@@ -28,6 +27,8 @@ import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.query.AggregationGroupByOperator;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.ExpressionContext;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.startree.StarTreeUtils;
 import org.apache.pinot.core.startree.plan.StarTreeTransformPlanNode;
 import org.apache.pinot.core.startree.v2.AggregationFunctionColumnPair;
@@ -48,22 +49,23 @@ public class AggregationGroupByPlanNode implements PlanNode 
{
   private final TransformPlanNode _transformPlanNode;
   private final StarTreeTransformPlanNode _starTreeTransformPlanNode;
 
-  public AggregationGroupByPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest,
+  public AggregationGroupByPlanNode(IndexSegment indexSegment, QueryContext 
queryContext,
       int maxInitialResultHolderCapacity, int numGroupsLimit) {
     _indexSegment = indexSegment;
     _maxInitialResultHolderCapacity = maxInitialResultHolderCapacity;
     _numGroupsLimit = numGroupsLimit;
-    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
-    List<String> groupByExpressions = 
brokerRequest.getGroupBy().getExpressions();
+    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(queryContext.getBrokerRequest());
+    List<ExpressionContext> groupByExpressions = 
queryContext.getGroupByExpressions();
+    assert groupByExpressions != null;
     int numGroupByExpressions = groupByExpressions.size();
     _groupByExpressions = new TransformExpressionTree[numGroupByExpressions];
     for (int i = 0; i < numGroupByExpressions; i++) {
-      _groupByExpressions[i] = 
TransformExpressionTree.compileToExpressionTree(groupByExpressions.get(i));
+      _groupByExpressions[i] = 
groupByExpressions.get(i).toTransformExpressionTree();
     }
 
     List<StarTreeV2> starTrees = indexSegment.getStarTrees();
     if (starTrees != null) {
-      if (!StarTreeUtils.isStarTreeDisabled(brokerRequest)) {
+      if (!StarTreeUtils.isStarTreeDisabled(queryContext)) {
         int numAggregationFunctions = _aggregationFunctions.length;
         AggregationFunctionColumnPair[] aggregationFunctionColumnPairs =
             new AggregationFunctionColumnPair[numAggregationFunctions];
@@ -79,7 +81,7 @@ public class AggregationGroupByPlanNode implements PlanNode {
           }
         }
         if (!hasUnsupportedAggregationFunction) {
-          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(brokerRequest);
+          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(queryContext.getBrokerRequest());
           for (StarTreeV2 starTreeV2 : starTrees) {
             if (StarTreeUtils
                 .isFitForStarTree(starTreeV2.getMetadata(), 
aggregationFunctionColumnPairs, _groupByExpressions,
@@ -87,7 +89,7 @@ public class AggregationGroupByPlanNode implements PlanNode {
               _transformPlanNode = null;
               _starTreeTransformPlanNode =
                   new StarTreeTransformPlanNode(starTreeV2, 
aggregationFunctionColumnPairs, _groupByExpressions,
-                      rootFilterNode, brokerRequest.getDebugOptions());
+                      rootFilterNode, queryContext.getDebugOptions());
               return;
             }
           }
@@ -97,7 +99,7 @@ public class AggregationGroupByPlanNode implements PlanNode {
 
     Set<TransformExpressionTree> expressionsToTransform =
         
AggregationFunctionUtils.collectExpressionsToTransform(_aggregationFunctions, 
_groupByExpressions);
-    _transformPlanNode = new TransformPlanNode(_indexSegment, brokerRequest, 
expressionsToTransform);
+    _transformPlanNode = new TransformPlanNode(_indexSegment, queryContext, 
expressionsToTransform);
     _starTreeTransformPlanNode = null;
   }
 
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationPlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationPlanNode.java
index bf92218..1d0657c 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationPlanNode.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/AggregationPlanNode.java
@@ -20,7 +20,6 @@ package org.apache.pinot.core.plan;
 
 import java.util.List;
 import java.util.Set;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.request.FilterQueryTree;
 import org.apache.pinot.common.utils.request.RequestUtils;
@@ -28,6 +27,7 @@ import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.query.AggregationOperator;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.startree.StarTreeUtils;
 import org.apache.pinot.core.startree.plan.StarTreeTransformPlanNode;
 import org.apache.pinot.core.startree.v2.AggregationFunctionColumnPair;
@@ -45,13 +45,13 @@ public class AggregationPlanNode implements PlanNode {
   private final TransformPlanNode _transformPlanNode;
   private final StarTreeTransformPlanNode _starTreeTransformPlanNode;
 
-  public AggregationPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest) {
+  public AggregationPlanNode(IndexSegment indexSegment, QueryContext 
queryContext) {
     _indexSegment = indexSegment;
-    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
+    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(queryContext.getBrokerRequest());
 
     List<StarTreeV2> starTrees = indexSegment.getStarTrees();
     if (starTrees != null) {
-      if (!StarTreeUtils.isStarTreeDisabled(brokerRequest)) {
+      if (!StarTreeUtils.isStarTreeDisabled(queryContext)) {
         int numAggregationFunctions = _aggregationFunctions.length;
         AggregationFunctionColumnPair[] aggregationFunctionColumnPairs =
             new AggregationFunctionColumnPair[numAggregationFunctions];
@@ -67,14 +67,14 @@ public class AggregationPlanNode implements PlanNode {
           }
         }
         if (!hasUnsupportedAggregationFunction) {
-          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(brokerRequest);
+          FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(queryContext.getBrokerRequest());
           for (StarTreeV2 starTreeV2 : starTrees) {
             if (StarTreeUtils
                 .isFitForStarTree(starTreeV2.getMetadata(), 
aggregationFunctionColumnPairs, null, rootFilterNode)) {
               _transformPlanNode = null;
               _starTreeTransformPlanNode =
                   new StarTreeTransformPlanNode(starTreeV2, 
aggregationFunctionColumnPairs, null, rootFilterNode,
-                      brokerRequest.getDebugOptions());
+                      queryContext.getDebugOptions());
               return;
             }
           }
@@ -84,7 +84,7 @@ public class AggregationPlanNode implements PlanNode {
 
     Set<TransformExpressionTree> expressionsToTransform =
         
AggregationFunctionUtils.collectExpressionsToTransform(_aggregationFunctions, 
null);
-    _transformPlanNode = new TransformPlanNode(_indexSegment, brokerRequest, 
expressionsToTransform);
+    _transformPlanNode = new TransformPlanNode(_indexSegment, queryContext, 
expressionsToTransform);
     _starTreeTransformPlanNode = null;
   }
 
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/CombinePlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/CombinePlanNode.java
index 3a63e64..04a7d4c 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/CombinePlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/CombinePlanNode.java
@@ -25,13 +25,14 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.Phaser;
 import java.util.concurrent.TimeUnit;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.core.common.Operator;
 import org.apache.pinot.core.operator.CombineGroupByOperator;
 import org.apache.pinot.core.operator.CombineGroupByOrderByOperator;
 import org.apache.pinot.core.operator.CombineOperator;
 import org.apache.pinot.core.operator.blocks.IntermediateResultsBlock;
 import org.apache.pinot.core.query.exception.BadQueryRequestException;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import org.apache.pinot.core.query.request.context.utils.QueryContextUtils;
 import org.apache.pinot.core.util.QueryOptions;
 import org.apache.pinot.core.util.trace.TraceCallable;
 
@@ -51,7 +52,7 @@ public class CombinePlanNode implements PlanNode {
   private static final int TIME_OUT_IN_MILLISECONDS_FOR_PARALLEL_RUN = 10_000;
 
   private final List<PlanNode> _planNodes;
-  private final BrokerRequest _brokerRequest;
+  private final QueryContext _queryContext;
   private final ExecutorService _executorService;
   private final long _timeOutMs;
   private final int _numGroupsLimit;
@@ -60,15 +61,15 @@ public class CombinePlanNode implements PlanNode {
    * Constructor for the class.
    *
    * @param planNodes List of underlying plan nodes
-   * @param brokerRequest Broker request
+   * @param queryContext Query context
    * @param executorService Executor service
    * @param timeOutMs Time out in milliseconds for query execution (not for 
planning phase)
    * @param numGroupsLimit Limit of number of groups stored in each segment
    */
-  public CombinePlanNode(List<PlanNode> planNodes, BrokerRequest 
brokerRequest, ExecutorService executorService,
+  public CombinePlanNode(List<PlanNode> planNodes, QueryContext queryContext, 
ExecutorService executorService,
       long timeOutMs, int numGroupsLimit) {
     _planNodes = planNodes;
-    _brokerRequest = brokerRequest;
+    _queryContext = queryContext;
     _executorService = executorService;
     _timeOutMs = timeOutMs;
     _numGroupsLimit = numGroupsLimit;
@@ -158,17 +159,19 @@ public class CombinePlanNode implements PlanNode {
     }
 
     // TODO: use the same combine operator for both aggregation and selection 
query.
-    if (_brokerRequest.isSetAggregationsInfo() && _brokerRequest.getGroupBy() 
!= null) {
+    if (QueryContextUtils.isAggregationQuery(_queryContext) && 
_queryContext.getGroupByExpressions() != null) {
       // Aggregation group-by query
-      QueryOptions queryOptions = new 
QueryOptions(_brokerRequest.getQueryOptions());
+      QueryOptions queryOptions = new 
QueryOptions(_queryContext.getQueryOptions());
       // new Combine operator only when GROUP_BY_MODE explicitly set to SQL
       if (queryOptions.isGroupByModeSQL()) {
-        return new CombineGroupByOrderByOperator(operators, _brokerRequest, 
_executorService, _timeOutMs);
+        return new CombineGroupByOrderByOperator(operators, 
_queryContext.getBrokerRequest(), _executorService,
+            _timeOutMs);
       }
-      return new CombineGroupByOperator(operators, _brokerRequest, 
_executorService, _timeOutMs, _numGroupsLimit);
+      return new CombineGroupByOperator(operators, 
_queryContext.getBrokerRequest(), _executorService, _timeOutMs,
+          _numGroupsLimit);
     } else {
       // Selection or aggregation only query
-      return new CombineOperator(operators, _executorService, _timeOutMs, 
_brokerRequest);
+      return new CombineOperator(operators, _executorService, _timeOutMs, 
_queryContext.getBrokerRequest());
     }
   }
 }
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/DictionaryBasedAggregationPlanNode.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/DictionaryBasedAggregationPlanNode.java
index 3168759..19286b5 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/DictionaryBasedAggregationPlanNode.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/DictionaryBasedAggregationPlanNode.java
@@ -20,12 +20,12 @@ package org.apache.pinot.core.plan;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.query.DictionaryBasedAggregationOperator;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.segment.index.readers.Dictionary;
 
 
@@ -42,11 +42,11 @@ public class DictionaryBasedAggregationPlanNode implements 
PlanNode {
    * Constructor for the class.
    *
    * @param indexSegment Segment to process
-   * @param brokerRequest Broker request
+   * @param queryContext Query context
    */
-  public DictionaryBasedAggregationPlanNode(IndexSegment indexSegment, 
BrokerRequest brokerRequest) {
+  public DictionaryBasedAggregationPlanNode(IndexSegment indexSegment, 
QueryContext queryContext) {
     _indexSegment = indexSegment;
-    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
+    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(queryContext.getBrokerRequest());
     _dictionaryMap = new HashMap<>();
     for (AggregationFunction aggregationFunction : _aggregationFunctions) {
       String column = ((TransformExpressionTree) 
aggregationFunction.getInputExpressions().get(0)).getValue();
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/DocIdSetPlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/DocIdSetPlanNode.java
index a4884cd..160fac3 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/DocIdSetPlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/DocIdSetPlanNode.java
@@ -19,9 +19,9 @@
 package org.apache.pinot.core.plan;
 
 import com.google.common.base.Preconditions;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.DocIdSetOperator;
+import org.apache.pinot.core.query.request.context.QueryContext;
 
 
 public class DocIdSetPlanNode implements PlanNode {
@@ -30,16 +30,12 @@ public class DocIdSetPlanNode implements PlanNode {
   private final FilterPlanNode _filterPlanNode;
   private final int _maxDocPerCall;
 
-  public DocIdSetPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest, int maxDocPerCall) {
+  public DocIdSetPlanNode(IndexSegment indexSegment, QueryContext 
queryContext, int maxDocPerCall) {
     Preconditions.checkState(maxDocPerCall > 0 && maxDocPerCall <= 
MAX_DOC_PER_CALL);
-    _filterPlanNode = new FilterPlanNode(indexSegment, brokerRequest);
+    _filterPlanNode = new FilterPlanNode(indexSegment, queryContext);
     _maxDocPerCall = maxDocPerCall;
   }
 
-  public DocIdSetPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest) {
-    this(indexSegment, brokerRequest, MAX_DOC_PER_CALL);
-  }
-
   @Override
   public DocIdSetOperator run() {
     return new DocIdSetOperator(_filterPlanNode.run(), _maxDocPerCall);
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/FilterPlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/FilterPlanNode.java
index 7090599..12dceba 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/FilterPlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/FilterPlanNode.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.Nullable;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.FilterOperator;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.request.FilterQueryTree;
@@ -40,22 +39,23 @@ import 
org.apache.pinot.core.operator.filter.MatchAllFilterOperator;
 import org.apache.pinot.core.operator.filter.TextMatchFilterOperator;
 import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
 import 
org.apache.pinot.core.operator.filter.predicate.PredicateEvaluatorProvider;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.segment.index.readers.NullValueVectorReader;
 
 
 public class FilterPlanNode implements PlanNode {
-  private final BrokerRequest _brokerRequest;
-  private final IndexSegment _segment;
+  private final IndexSegment _indexSegment;
+  private final QueryContext _queryContext;
 
-  public FilterPlanNode(IndexSegment segment, BrokerRequest brokerRequest) {
-    _segment = segment;
-    _brokerRequest = brokerRequest;
+  public FilterPlanNode(IndexSegment indexSegment, QueryContext queryContext) {
+    _indexSegment = indexSegment;
+    _queryContext = queryContext;
   }
 
   @Override
   public BaseFilterOperator run() {
-    FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(_brokerRequest);
-    return constructPhysicalOperator(rootFilterNode, _segment, 
_brokerRequest.getDebugOptions());
+    FilterQueryTree rootFilterNode = 
RequestUtils.generateFilterQueryTree(_queryContext.getBrokerRequest());
+    return constructPhysicalOperator(rootFilterNode, _indexSegment, 
_queryContext.getDebugOptions());
   }
 
   /**
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/MetadataBasedAggregationPlanNode.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/MetadataBasedAggregationPlanNode.java
index 72263e7..66f4cb1 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/MetadataBasedAggregationPlanNode.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/MetadataBasedAggregationPlanNode.java
@@ -21,13 +21,13 @@ package org.apache.pinot.core.plan;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.pinot.common.function.AggregationFunctionType;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.core.common.DataSource;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.query.MetadataBasedAggregationOperator;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.QueryContext;
 
 
 /**
@@ -43,11 +43,11 @@ public class MetadataBasedAggregationPlanNode implements 
PlanNode {
    * Constructor for the class.
    *
    * @param indexSegment Segment to process
-   * @param brokerRequest Broker request
+   * @param queryContext Query context
    */
-  public MetadataBasedAggregationPlanNode(IndexSegment indexSegment, 
BrokerRequest brokerRequest) {
+  public MetadataBasedAggregationPlanNode(IndexSegment indexSegment, 
QueryContext queryContext) {
     _indexSegment = indexSegment;
-    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
+    _aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(queryContext.getBrokerRequest());
     _dataSourceMap = new HashMap<>();
     for (AggregationFunction aggregationFunction : _aggregationFunctions) {
       if (aggregationFunction.getType() != AggregationFunctionType.COUNT) {
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/SelectionPlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/SelectionPlanNode.java
index 7d5ef46..f770780 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/SelectionPlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/SelectionPlanNode.java
@@ -18,12 +18,10 @@
  */
 package org.apache.pinot.core.plan;
 
-import java.util.LinkedHashSet;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.Selection;
-import org.apache.pinot.common.request.SelectionSort;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.core.common.Operator;
 import org.apache.pinot.core.indexsegment.IndexSegment;
@@ -32,7 +30,10 @@ import 
org.apache.pinot.core.operator.query.EmptySelectionOperator;
 import org.apache.pinot.core.operator.query.SelectionOnlyOperator;
 import org.apache.pinot.core.operator.query.SelectionOrderByOperator;
 import org.apache.pinot.core.operator.transform.TransformOperator;
-import org.apache.pinot.pql.parsers.pql2.ast.IdentifierAstNode;
+import org.apache.pinot.core.query.request.context.ExpressionContext;
+import org.apache.pinot.core.query.request.context.OrderByExpressionContext;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import org.apache.pinot.core.query.selection.SelectionOperatorUtils;
 
 
 /**
@@ -40,58 +41,55 @@ import 
org.apache.pinot.pql.parsers.pql2.ast.IdentifierAstNode;
  */
 public class SelectionPlanNode implements PlanNode {
   private final IndexSegment _indexSegment;
-  private final Selection _selection;
+  private final QueryContext _queryContext;
   private final TransformPlanNode _transformPlanNode;
 
-  public SelectionPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest) {
+  public SelectionPlanNode(IndexSegment indexSegment, QueryContext 
queryContext) {
     _indexSegment = indexSegment;
-    _selection = brokerRequest.getSelections();
-    _transformPlanNode =
-        new TransformPlanNode(_indexSegment, brokerRequest, 
collectExpressionsToTransform(indexSegment, brokerRequest));
+    _queryContext = queryContext;
+    _transformPlanNode = new TransformPlanNode(_indexSegment, queryContext, 
collectExpressions());
   }
 
   @Override
   public Operator<IntermediateResultsBlock> run() {
     TransformOperator transformOperator = _transformPlanNode.run();
-    if (_selection.getSize() > 0) {
-      if (_selection.getSelectionSortSequence() == null) {
-        return new SelectionOnlyOperator(_indexSegment, _selection, 
transformOperator);
+    Selection selection = _queryContext.getBrokerRequest().getSelections();
+    if (_queryContext.getLimit() > 0) {
+      if (_queryContext.getOrderByExpressions() == null) {
+        return new SelectionOnlyOperator(_indexSegment, selection, 
transformOperator);
       } else {
-        return new SelectionOrderByOperator(_indexSegment, _selection, 
transformOperator);
+        return new SelectionOrderByOperator(_indexSegment, selection, 
transformOperator);
       }
     } else {
-      return new EmptySelectionOperator(_indexSegment, _selection, 
transformOperator);
+      return new EmptySelectionOperator(_indexSegment, selection, 
transformOperator);
     }
   }
 
-  private Set<TransformExpressionTree> 
collectExpressionsToTransform(IndexSegment indexSegment,
-      BrokerRequest brokerRequest) {
-
-    Set<TransformExpressionTree> expressionTrees = new LinkedHashSet<>();
-    Selection selection = brokerRequest.getSelections();
+  private Set<TransformExpressionTree> collectExpressions() {
+    Set<TransformExpressionTree> expressionTrees = new HashSet<>();
 
     // Extract selection expressions
-    List<String> selectionColumns = selection.getSelectionColumns();
-    if (selectionColumns.size() == 1 && selectionColumns.get(0).equals("*")) {
-      for (String column : indexSegment.getPhysicalColumnNames()) {
-        expressionTrees.add(new TransformExpressionTree(new 
IdentifierAstNode(column)));
+    List<ExpressionContext> selectExpressions = 
_queryContext.getSelectExpressions();
+    if (selectExpressions.size() == 1 && 
selectExpressions.get(0).equals(SelectionOperatorUtils.IDENTIFIER_STAR)) {
+      for (String column : _indexSegment.getPhysicalColumnNames()) {
+        expressionTrees
+            .add(new 
TransformExpressionTree(TransformExpressionTree.ExpressionType.IDENTIFIER, 
column, null));
       }
     } else {
-      for (String selectionColumn : selectionColumns) {
-        
expressionTrees.add(TransformExpressionTree.compileToExpressionTree(selectionColumn));
+      for (ExpressionContext selectExpression : selectExpressions) {
+        expressionTrees.add(selectExpression.toTransformExpressionTree());
       }
     }
 
-    // Extract order-by expressions.
-    if (selection.getSize() > 0) {
-      List<SelectionSort> sortSequence = selection.getSelectionSortSequence();
-      if (sortSequence != null) {
-        for (SelectionSort selectionSort : sortSequence) {
-          String orderByColumn = selectionSort.getColumn();
-          
expressionTrees.add(TransformExpressionTree.compileToExpressionTree(orderByColumn));
-        }
+    // Extract order-by expressions
+    List<OrderByExpressionContext> orderByExpressions = 
_queryContext.getOrderByExpressions();
+    // NOTE: queries with LIMIT 0 are solved by EmptySelectionOperator where 
order-by expressions are not required.
+    if (_queryContext.getLimit() > 0 && orderByExpressions != null) {
+      for (OrderByExpressionContext orderByExpression : orderByExpressions) {
+        
expressionTrees.add(orderByExpression.getExpression().toTransformExpressionTree());
       }
     }
+
     return expressionTrees;
   }
 }
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/TransformPlanNode.java 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/TransformPlanNode.java
index 6de2c2e..931da55 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/plan/TransformPlanNode.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/plan/TransformPlanNode.java
@@ -19,14 +19,12 @@
 package org.apache.pinot.core.plan;
 
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
-import org.apache.pinot.common.request.BrokerRequest;
-import org.apache.pinot.common.request.Selection;
-import org.apache.pinot.common.request.SelectionSort;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.transform.TransformOperator;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import org.apache.pinot.core.query.request.context.utils.QueryContextUtils;
 
 
 /**
@@ -37,15 +35,15 @@ public class TransformPlanNode implements PlanNode {
   private final Set<TransformExpressionTree> _expressions;
   private int _maxDocPerNextCall = DocIdSetPlanNode.MAX_DOC_PER_CALL;
 
-  public TransformPlanNode(IndexSegment indexSegment, BrokerRequest 
brokerRequest,
+  public TransformPlanNode(IndexSegment indexSegment, QueryContext 
queryContext,
       Set<TransformExpressionTree> expressionsToPlan) {
-    setMaxDocsForSelection(brokerRequest);
+    setMaxDocsForSelection(queryContext);
     Set<String> projectionColumns = new HashSet<>();
     extractProjectionColumns(expressionsToPlan, projectionColumns);
 
     _expressions = expressionsToPlan;
     _projectionPlanNode = new ProjectionPlanNode(indexSegment, 
projectionColumns,
-        new DocIdSetPlanNode(indexSegment, brokerRequest, _maxDocPerNextCall));
+        new DocIdSetPlanNode(indexSegment, queryContext, _maxDocPerNextCall));
   }
 
   private void extractProjectionColumns(Set<TransformExpressionTree> 
expressionsToPlan, Set<String> projectionColumns) {
@@ -79,16 +77,13 @@ public class TransformPlanNode implements PlanNode {
   /**
    * Helper method to set the max number of docs to return for selection 
queries
    */
-  private void setMaxDocsForSelection(BrokerRequest brokerRequest) {
-    if (!brokerRequest.isSetAggregationsInfo()) {
-      Selection selection = brokerRequest.getSelections();
-
-      // Update MaxDocPerNextCall
-      if (selection.getSize() > 0) {
-        List<SelectionSort> sortSequence = 
selection.getSelectionSortSequence();
-        if (sortSequence == null) {
-          // For selection only queries, select minimum number of documents
-          _maxDocPerNextCall = Math.min(selection.getSize(), 
_maxDocPerNextCall);
+  private void setMaxDocsForSelection(QueryContext queryContext) {
+    if (!QueryContextUtils.isAggregationQuery(queryContext)) {
+      // Selection queries
+      if (queryContext.getLimit() > 0) {
+        if (queryContext.getOrderByExpressions() == null) {
+          // For selection-only queries, select minimum number of documents
+          _maxDocPerNextCall = Math.min(queryContext.getLimit(), 
_maxDocPerNextCall);
         }
       } else {
         // For LIMIT 0 queries, fetch at least 1 document per 
DocIdSetPlanNode's requirement
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
index 4b388a3..3d81a51 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/plan/maker/InstancePlanMakerImplV2.java
@@ -23,7 +23,6 @@ import com.google.common.base.Preconditions;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.plan.AggregationGroupByOrderByPlanNode;
 import org.apache.pinot.core.plan.AggregationGroupByPlanNode;
@@ -102,13 +101,12 @@ public class InstancePlanMakerImplV2 implements PlanMaker 
{
       planNodes.add(makeSegmentPlanNode(indexSegment, queryContext));
     }
     CombinePlanNode combinePlanNode =
-        new CombinePlanNode(planNodes, queryContext.getBrokerRequest(), 
executorService, timeOutMs, _numGroupsLimit);
+        new CombinePlanNode(planNodes, queryContext, executorService, 
timeOutMs, _numGroupsLimit);
     return new GlobalPlanImplV0(new InstanceResponsePlanNode(combinePlanNode));
   }
 
   @Override
   public PlanNode makeSegmentPlanNode(IndexSegment indexSegment, QueryContext 
queryContext) {
-    BrokerRequest brokerRequest = queryContext.getBrokerRequest();
     if (QueryContextUtils.isAggregationQuery(queryContext)) {
       // Aggregation query
       List<ExpressionContext> groupByExpressions = 
queryContext.getGroupByExpressions();
@@ -117,25 +115,25 @@ public class InstancePlanMakerImplV2 implements PlanMaker 
{
         QueryOptions queryOptions = new 
QueryOptions(queryContext.getQueryOptions());
         // new Combine operator only when GROUP_BY_MODE explicitly set to SQL
         if (queryOptions.isGroupByModeSQL()) {
-          return new AggregationGroupByOrderByPlanNode(indexSegment, 
brokerRequest, _maxInitialResultHolderCapacity,
+          return new AggregationGroupByOrderByPlanNode(indexSegment, 
queryContext, _maxInitialResultHolderCapacity,
               _numGroupsLimit);
         }
-        return new AggregationGroupByPlanNode(indexSegment, brokerRequest, 
_maxInitialResultHolderCapacity,
+        return new AggregationGroupByPlanNode(indexSegment, queryContext, 
_maxInitialResultHolderCapacity,
             _numGroupsLimit);
       } else {
         // Aggregation only query
         if (queryContext.getFilter() == null) {
           if (isFitForMetadataBasedPlan(queryContext)) {
-            return new MetadataBasedAggregationPlanNode(indexSegment, 
brokerRequest);
+            return new MetadataBasedAggregationPlanNode(indexSegment, 
queryContext);
           } else if (isFitForDictionaryBasedPlan(queryContext, indexSegment)) {
-            return new DictionaryBasedAggregationPlanNode(indexSegment, 
brokerRequest);
+            return new DictionaryBasedAggregationPlanNode(indexSegment, 
queryContext);
           }
         }
-        return new AggregationPlanNode(indexSegment, brokerRequest);
+        return new AggregationPlanNode(indexSegment, queryContext);
       }
     } else {
       // Selection query
-      return new SelectionPlanNode(indexSegment, brokerRequest);
+      return new SelectionPlanNode(indexSegment, queryContext);
     }
   }
 
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/ExpressionContext.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/ExpressionContext.java
index 75fc467..8ff881f 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/ExpressionContext.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/context/ExpressionContext.java
@@ -18,8 +18,12 @@
  */
 package org.apache.pinot.core.query.request.context;
 
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import org.apache.pinot.common.request.transform.TransformExpressionTree;
 
 
 /**
@@ -85,6 +89,29 @@ public class ExpressionContext {
     }
   }
 
+  /**
+   * Temporary helper method to help the migration from BrokerRequest to 
QueryContext.
+   */
+  public TransformExpressionTree toTransformExpressionTree() {
+    switch (_type) {
+      case LITERAL:
+        return new 
TransformExpressionTree(TransformExpressionTree.ExpressionType.LITERAL, _value, 
null);
+      case IDENTIFIER:
+        return new 
TransformExpressionTree(TransformExpressionTree.ExpressionType.IDENTIFIER, 
_value, null);
+      case FUNCTION:
+        Preconditions.checkState(_function.getType() == 
FunctionContext.Type.TRANSFORM);
+        List<ExpressionContext> arguments = _function.getArguments();
+        List<TransformExpressionTree> children = new 
ArrayList<>(arguments.size());
+        for (ExpressionContext argument : arguments) {
+          children.add(argument.toTransformExpressionTree());
+        }
+        return new 
TransformExpressionTree(TransformExpressionTree.ExpressionType.FUNCTION, 
_function.getFunctionName(),
+            children);
+      default:
+        throw new IllegalStateException();
+    }
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) {
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
index 7bdd38c..8632d3c 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java
@@ -40,6 +40,7 @@ import org.apache.pinot.common.utils.DataSchema;
 import org.apache.pinot.common.utils.DataTable;
 import org.apache.pinot.core.common.datatable.DataTableBuilder;
 import org.apache.pinot.core.indexsegment.IndexSegment;
+import org.apache.pinot.core.query.request.context.ExpressionContext;
 import org.apache.pinot.core.util.ArrayCopyUtils;
 import org.apache.pinot.pql.parsers.pql2.ast.IdentifierAstNode;
 import org.apache.pinot.spi.utils.ByteArray;
@@ -68,6 +69,7 @@ public class SelectionOperatorUtils {
   private SelectionOperatorUtils() {
   }
 
+  public static final ExpressionContext IDENTIFIER_STAR = 
ExpressionContext.forIdentifier("*");
   public static final int MAX_ROW_HOLDER_INITIAL_CAPACITY = 10_000;
 
   private static final String INT_PATTERN = "##########";
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/startree/StarTreeUtils.java 
b/pinot-core/src/main/java/org/apache/pinot/core/startree/StarTreeUtils.java
index 3810826..f87f03c 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/startree/StarTreeUtils.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/startree/StarTreeUtils.java
@@ -26,6 +26,7 @@ import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.FilterOperator;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.request.FilterQueryTree;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.startree.v2.AggregationFunctionColumnPair;
 import org.apache.pinot.core.startree.v2.StarTreeV2Metadata;
 
@@ -37,10 +38,10 @@ public class StarTreeUtils {
   public static final String USE_STAR_TREE_KEY = "useStarTree";
 
   /**
-   * Returns whether star-tree is disabled in broker request.
+   * Returns whether star-tree is disabled for the query.
    */
-  public static boolean isStarTreeDisabled(BrokerRequest brokerRequest) {
-    Map<String, String> debugOptions = brokerRequest.getDebugOptions();
+  public static boolean isStarTreeDisabled(QueryContext queryContext) {
+    Map<String, String> debugOptions = queryContext.getDebugOptions();
     return debugOptions != null && 
"false".equalsIgnoreCase(debugOptions.get(USE_STAR_TREE_KEY));
   }
 
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/plan/CombinePlanNodeTest.java 
b/pinot-core/src/test/java/org/apache/pinot/core/plan/CombinePlanNodeTest.java
index 17b5ab8..4785d69 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/plan/CombinePlanNodeTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/plan/CombinePlanNodeTest.java
@@ -27,12 +27,16 @@ import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import junit.framework.Assert;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import 
org.apache.pinot.core.query.request.context.utils.BrokerRequestToQueryContextConverter;
+import org.apache.pinot.pql.parsers.Pql2Compiler;
 import org.testng.annotations.Test;
 
 
 public class CombinePlanNodeTest {
+  private final QueryContext _queryContext =
+      BrokerRequestToQueryContextConverter.convert(new 
Pql2Compiler().compileToBrokerRequest("SELECT * FROM table"));
   private final ExecutorService _executorService = 
Executors.newFixedThreadPool(10);
 
   /**
@@ -40,7 +44,6 @@ public class CombinePlanNodeTest {
    */
   @Test
   public void testParallelExecution() {
-
     AtomicInteger count = new AtomicInteger(0);
 
     Random rand = new Random();
@@ -54,7 +57,7 @@ public class CombinePlanNodeTest {
           return null;
         });
       }
-      CombinePlanNode combinePlanNode = new CombinePlanNode(planNodes, new 
BrokerRequest(), _executorService, 1000,
+      CombinePlanNode combinePlanNode = new CombinePlanNode(planNodes, 
_queryContext, _executorService, 1000,
           InstancePlanMakerImplV2.DEFAULT_NUM_GROUPS_LIMIT);
       combinePlanNode.run();
       Assert.assertEquals(numPlans, count.get());
@@ -80,8 +83,8 @@ public class CombinePlanNodeTest {
         return null;
       });
     }
-    CombinePlanNode combinePlanNode =
-        new CombinePlanNode(planNodes, null, _executorService, 0, 
InstancePlanMakerImplV2.DEFAULT_NUM_GROUPS_LIMIT);
+    CombinePlanNode combinePlanNode = new CombinePlanNode(planNodes, 
_queryContext, _executorService, 0,
+        InstancePlanMakerImplV2.DEFAULT_NUM_GROUPS_LIMIT);
     try {
       combinePlanNode.run();
     } catch (RuntimeException e) {
@@ -101,8 +104,8 @@ public class CombinePlanNodeTest {
         throw new RuntimeException("Inner exception message.");
       });
     }
-    CombinePlanNode combinePlanNode =
-        new CombinePlanNode(planNodes, null, _executorService, 0, 
InstancePlanMakerImplV2.DEFAULT_NUM_GROUPS_LIMIT);
+    CombinePlanNode combinePlanNode = new CombinePlanNode(planNodes, 
_queryContext, _executorService, 0,
+        InstancePlanMakerImplV2.DEFAULT_NUM_GROUPS_LIMIT);
     try {
       combinePlanNode.run();
     } catch (RuntimeException e) {
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
index 5c4c864..6cc4a67 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
@@ -50,6 +50,8 @@ import org.apache.pinot.core.plan.FilterPlanNode;
 import org.apache.pinot.core.plan.PlanNode;
 import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
 import 
org.apache.pinot.core.query.aggregation.function.AggregationFunctionUtils;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import 
org.apache.pinot.core.query.request.context.utils.BrokerRequestToQueryContextConverter;
 import 
org.apache.pinot.core.segment.creator.impl.SegmentIndexCreationDriverImpl;
 import org.apache.pinot.core.segment.index.readers.Dictionary;
 import org.apache.pinot.core.startree.plan.StarTreeFilterPlanNode;
@@ -181,6 +183,7 @@ abstract class BaseStarTreeV2Test<R, A> {
   @SuppressWarnings("unchecked")
   void testQuery(String query) {
     BrokerRequest brokerRequest = COMPILER.compileToBrokerRequest(query);
+    QueryContext queryContext = 
BrokerRequestToQueryContextConverter.convert(brokerRequest);
 
     // Aggregations
     AggregationFunction[] aggregationFunctions = 
AggregationFunctionUtils.getAggregationFunctions(brokerRequest);
@@ -230,7 +233,7 @@ abstract class BaseStarTreeV2Test<R, A> {
             starTreeGroupByColumnValueSets);
 
     // Extract values without star-tree
-    PlanNode nonStarTreeFilterPlanNode = new FilterPlanNode(_indexSegment, 
brokerRequest);
+    PlanNode nonStarTreeFilterPlanNode = new FilterPlanNode(_indexSegment, 
queryContext);
     List<SingleValueSet> nonStarTreeAggregationColumnValueSets = new 
ArrayList<>(numAggregations);
     List<Dictionary> nonStarTreeAggregationColumnDictionaries = new 
ArrayList<>(numAggregations);
     for (AggregationFunctionColumnPair aggregationFunctionColumnPair : 
functionColumnPairs) {
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/DictionaryBasedGroupKeyGeneratorTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/DictionaryBasedGroupKeyGeneratorTest.java
index 4fffcef..7d4aa3a 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/DictionaryBasedGroupKeyGeneratorTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/DictionaryBasedGroupKeyGeneratorTest.java
@@ -31,6 +31,7 @@ import java.util.Random;
 import java.util.Set;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.segment.ReadMode;
 import org.apache.pinot.core.data.readers.GenericRowRecordReader;
@@ -43,6 +44,8 @@ import org.apache.pinot.core.plan.TransformPlanNode;
 import org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2;
 import 
org.apache.pinot.core.query.aggregation.groupby.DictionaryBasedGroupKeyGenerator;
 import org.apache.pinot.core.query.aggregation.groupby.GroupKeyGenerator;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import 
org.apache.pinot.core.query.request.context.utils.BrokerRequestToQueryContextConverter;
 import 
org.apache.pinot.core.segment.creator.impl.SegmentIndexCreationDriverImpl;
 import org.apache.pinot.pql.parsers.Pql2Compiler;
 import org.apache.pinot.spi.config.table.TableConfig;
@@ -145,18 +148,19 @@ public class DictionaryBasedGroupKeyGeneratorTest {
     String query = String
         .format("SELECT COUNT(*) FROM table WHERE %s IN (%d, %d) GROUP BY %s, 
%s", FILTER_COLUMN, docId1, docId2,
             StringUtils.join(SV_COLUMNS, ", "), StringUtils.join(MV_COLUMNS, 
", "));
+    BrokerRequest brokerRequest = new 
Pql2Compiler().compileToBrokerRequest(query);
+    QueryContext queryContext = 
BrokerRequestToQueryContextConverter.convert(brokerRequest);
 
     // Compute the transform expressions
     Set<TransformExpressionTree> expressionTrees = new LinkedHashSet<>();
     ArrayList<String> allColumns = new ArrayList<>(Arrays.asList(SV_COLUMNS));
     allColumns.addAll(Arrays.asList(MV_COLUMNS));
 
-    for (String columnName: allColumns) {
+    for (String columnName : allColumns) {
       
expressionTrees.add(TransformExpressionTree.compileToExpressionTree(columnName));
     }
 
-    TransformPlanNode transformPlanNode =
-        new TransformPlanNode(indexSegment, new 
Pql2Compiler().compileToBrokerRequest(query), expressionTrees);
+    TransformPlanNode transformPlanNode = new TransformPlanNode(indexSegment, 
queryContext, expressionTrees);
     _transformOperator = transformPlanNode.run();
     _transformBlock = _transformOperator.nextBlock();
   }
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/NoDictionaryGroupKeyGeneratorTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/NoDictionaryGroupKeyGeneratorTest.java
index e8ca22a..0fc13e8 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/NoDictionaryGroupKeyGeneratorTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/query/aggregation/groupby/NoDictionaryGroupKeyGeneratorTest.java
@@ -31,6 +31,7 @@ import java.util.Random;
 import java.util.Set;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.segment.ReadMode;
 import org.apache.pinot.core.data.readers.GenericRowRecordReader;
@@ -44,6 +45,8 @@ import 
org.apache.pinot.core.plan.maker.InstancePlanMakerImplV2;
 import org.apache.pinot.core.query.aggregation.groupby.GroupKeyGenerator;
 import 
org.apache.pinot.core.query.aggregation.groupby.NoDictionaryMultiColumnGroupKeyGenerator;
 import 
org.apache.pinot.core.query.aggregation.groupby.NoDictionarySingleColumnGroupKeyGenerator;
+import org.apache.pinot.core.query.request.context.QueryContext;
+import 
org.apache.pinot.core.query.request.context.utils.BrokerRequestToQueryContextConverter;
 import 
org.apache.pinot.core.segment.creator.impl.SegmentIndexCreationDriverImpl;
 import org.apache.pinot.pql.parsers.Pql2Compiler;
 import org.apache.pinot.spi.config.table.TableConfig;
@@ -93,14 +96,15 @@ public class NoDictionaryGroupKeyGeneratorTest {
     // Create transform operator and block
     // NOTE: put all columns into group-by so that transform operator has 
expressions for all columns
     String query = String.format("SELECT COUNT(*) FROM table GROUP BY %s", 
StringUtils.join(COLUMN_NAMES, ", "));
+    BrokerRequest brokerRequest = new 
Pql2Compiler().compileToBrokerRequest(query);
+    QueryContext queryContext = 
BrokerRequestToQueryContextConverter.convert(brokerRequest);
 
     // Compute the transform expressions
     Set<TransformExpressionTree> expressionTrees = new LinkedHashSet<>();
     for (String columnName : COLUMN_NAMES) {
       
expressionTrees.add(TransformExpressionTree.compileToExpressionTree(columnName));
     }
-    TransformPlanNode transformPlanNode =
-        new TransformPlanNode(indexSegment, new 
Pql2Compiler().compileToBrokerRequest(query), expressionTrees);
+    TransformPlanNode transformPlanNode = new TransformPlanNode(indexSegment, 
queryContext, expressionTrees);
     _transformOperator = transformPlanNode.run();
     _transformBlock = _transformOperator.nextBlock();
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to