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 d8764cc  In ServerQueryRequest and ColumnValueSegmentPruner, replace 
BrokerRequest with QueryContext (#5538)
d8764cc is described below

commit d8764cc8646e54c5d5d9a68df01b6c0dc6e52784
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Mon Jun 15 16:50:07 2020 -0700

    In ServerQueryRequest and ColumnValueSegmentPruner, replace BrokerRequest 
with QueryContext (#5538)
    
    ColumnValueSegmentPruner can directly use the Predicate in QueryContext 
instead of creating new ones for each segment
---
 .../query/executor/ServerQueryExecutorV1Impl.java  |  15 ++-
 .../query/pruner/ColumnValueSegmentPruner.java     | 111 ++++++++--------
 .../core/query/request/ServerQueryRequest.java     | 146 ++-------------------
 .../query/pruner/ColumnValueSegmentPrunerTest.java |   8 +-
 .../pinot/core/query/scheduler/TestHelper.java     |   5 +
 5 files changed, 86 insertions(+), 199 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
index aba102d..1eefbae 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/executor/ServerQueryExecutorV1Impl.java
@@ -30,7 +30,6 @@ import org.apache.pinot.common.exception.QueryException;
 import org.apache.pinot.common.metrics.ServerMeter;
 import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.metrics.ServerQueryPhase;
-import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.utils.CommonConstants;
 import org.apache.pinot.common.utils.DataTable;
 import org.apache.pinot.core.common.datatable.DataTableImplV2;
@@ -47,6 +46,7 @@ import org.apache.pinot.core.query.config.QueryExecutorConfig;
 import org.apache.pinot.core.query.exception.BadQueryRequestException;
 import org.apache.pinot.core.query.pruner.SegmentPrunerService;
 import org.apache.pinot.core.query.request.ServerQueryRequest;
+import org.apache.pinot.core.query.request.context.QueryContext;
 import org.apache.pinot.core.query.request.context.TimerContext;
 import org.apache.pinot.core.segment.index.metadata.SegmentMetadata;
 import org.apache.pinot.core.util.QueryOptions;
@@ -105,12 +105,12 @@ public class ServerQueryExecutorV1Impl implements 
QueryExecutor {
     TimerContext.Timer queryProcessingTimer = 
timerContext.startNewPhaseTimer(ServerQueryPhase.QUERY_PROCESSING);
 
     long requestId = queryRequest.getRequestId();
-    BrokerRequest brokerRequest = queryRequest.getBrokerRequest();
     String tableNameWithType = queryRequest.getTableNameWithType();
-    LOGGER.debug("Incoming request Id: {}, query: {}", requestId, 
brokerRequest);
+    QueryContext queryContext = queryRequest.getQueryContext();
+    LOGGER.debug("Incoming request Id: {}, query: {}", requestId, 
queryContext);
     // Use the timeout passed from the request if exists, or the 
instance-level timeout
     long queryTimeoutMs = _defaultTimeOutMs;
-    Map<String, String> queryOptions = brokerRequest.getQueryOptions();
+    Map<String, String> queryOptions = queryContext.getQueryOptions();
     if (queryOptions != null) {
       Long timeoutFromQueryOptions = QueryOptions.getTimeoutMs(queryOptions);
       if (timeoutFromQueryOptions != null) {
@@ -195,7 +195,7 @@ public class ServerQueryExecutorV1Impl implements 
QueryExecutor {
       int numSegmentsMatchedAfterPruning = segmentDataManagers.size();
       LOGGER.debug("Matched {} segments after pruning", 
numSegmentsMatchedAfterPruning);
       if (numSegmentsMatchedAfterPruning == 0) {
-        dataTable = DataTableUtils.buildEmptyDataTable(brokerRequest);
+        dataTable = 
DataTableUtils.buildEmptyDataTable(queryContext.getBrokerRequest());
         Map<String, String> metadata = dataTable.getMetadata();
         metadata.put(DataTable.TOTAL_DOCS_METADATA_KEY, 
String.valueOf(numTotalDocs));
         metadata.put(DataTable.NUM_DOCS_SCANNED_METADATA_KEY, "0");
@@ -205,8 +205,9 @@ public class ServerQueryExecutorV1Impl implements 
QueryExecutor {
         metadata.put(DataTable.NUM_SEGMENTS_MATCHED, "0");
       } else {
         TimerContext.Timer planBuildTimer = 
timerContext.startNewPhaseTimer(ServerQueryPhase.BUILD_QUERY_PLAN);
-        Plan globalQueryPlan =
-            _planMaker.makeInterSegmentPlan(segmentDataManagers, 
brokerRequest, executorService, remainingTimeMs);
+        Plan globalQueryPlan = _planMaker
+            .makeInterSegmentPlan(segmentDataManagers, 
queryContext.getBrokerRequest(), executorService,
+                remainingTimeMs);
         planBuildTimer.stopAndRecord();
 
         if (PRINT_QUERY_PLAN) {
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPruner.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPruner.java
index 518ced9..38c2af4 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPruner.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPruner.java
@@ -22,15 +22,17 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import org.apache.commons.configuration.Configuration;
-import org.apache.pinot.common.request.transform.TransformExpressionTree;
-import org.apache.pinot.common.utils.request.FilterQueryTree;
 import org.apache.pinot.core.common.DataSource;
 import org.apache.pinot.core.common.DataSourceMetadata;
-import org.apache.pinot.core.common.predicate.RangePredicate;
 import org.apache.pinot.core.data.partition.PartitionFunction;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.query.exception.BadQueryRequestException;
 import org.apache.pinot.core.query.request.ServerQueryRequest;
+import org.apache.pinot.core.query.request.context.ExpressionContext;
+import org.apache.pinot.core.query.request.context.FilterContext;
+import org.apache.pinot.core.query.request.context.predicate.EqPredicate;
+import org.apache.pinot.core.query.request.context.predicate.Predicate;
+import org.apache.pinot.core.query.request.context.predicate.RangePredicate;
 import org.apache.pinot.core.segment.index.readers.BloomFilterReader;
 import org.apache.pinot.spi.data.FieldSpec.DataType;
 import org.apache.pinot.spi.utils.BytesUtils;
@@ -55,6 +57,7 @@ import org.apache.pinot.spi.utils.BytesUtils;
  *   </li>
  * </ul>
  */
+@SuppressWarnings({"rawtypes", "unchecked"})
 public class ColumnValueSegmentPruner implements SegmentPruner {
 
   @Override
@@ -63,65 +66,67 @@ public class ColumnValueSegmentPruner implements 
SegmentPruner {
 
   @Override
   public boolean prune(IndexSegment segment, ServerQueryRequest queryRequest) {
-    FilterQueryTree filterQueryTree = queryRequest.getFilterQueryTree();
-    if (filterQueryTree == null) {
+    FilterContext filter = queryRequest.getQueryContext().getFilter();
+    if (filter == null) {
       return false;
     }
 
     // This map caches the data sources
     Map<String, DataSource> dataSourceCache = new HashMap<>();
-    return pruneSegment(segment, filterQueryTree, dataSourceCache);
+    return pruneSegment(segment, filter, dataSourceCache);
   }
 
-  private boolean pruneSegment(IndexSegment segment, FilterQueryTree 
filterQueryTree,
-      Map<String, DataSource> dataSourceCache) {
-    // Only prune columns
-    TransformExpressionTree expression = filterQueryTree.getExpression();
-    if (expression != null && !expression.isColumn()) {
-      return false;
-    }
-
-    switch (filterQueryTree.getOperator()) {
+  private boolean pruneSegment(IndexSegment segment, FilterContext filter, 
Map<String, DataSource> dataSourceCache) {
+    switch (filter.getType()) {
       case AND:
-        for (FilterQueryTree child : filterQueryTree.getChildren()) {
+        for (FilterContext child : filter.getChildren()) {
           if (pruneSegment(segment, child, dataSourceCache)) {
             return true;
           }
         }
         return false;
       case OR:
-        for (FilterQueryTree child : filterQueryTree.getChildren()) {
+        for (FilterContext child : filter.getChildren()) {
           if (!pruneSegment(segment, child, dataSourceCache)) {
             return false;
           }
         }
         return true;
-      case EQUALITY:
-        return pruneEqualityFilter(segment, filterQueryTree, dataSourceCache);
-      case RANGE:
-        return pruneRangeFilter(segment, filterQueryTree, dataSourceCache);
+      case PREDICATE:
+        Predicate predicate = filter.getPredicate();
+        // Only prune columns
+        if (predicate.getLhs().getType() != ExpressionContext.Type.IDENTIFIER) 
{
+          return false;
+        }
+        Predicate.Type predicateType = predicate.getType();
+        if (predicateType == Predicate.Type.EQ) {
+          return pruneEqPredicate(segment, (EqPredicate) predicate, 
dataSourceCache);
+        } else if (predicateType == Predicate.Type.RANGE) {
+          return pruneRangePredicate(segment, (RangePredicate) predicate, 
dataSourceCache);
+        } else {
+          return false;
+        }
       default:
-        return false;
+        throw new IllegalStateException();
     }
   }
 
   /**
-   * For EQUALITY filter, prune the segment based on:
+   * For EQ predicate, prune the segment based on:
    * <ul>
    *   <li>Column min/max value</li>
    *   <li>Column partition</li>
    *   <li>Column bloom filter</li>
    * </ul>
    */
-  @SuppressWarnings("unchecked")
-  private boolean pruneEqualityFilter(IndexSegment segment, FilterQueryTree 
filterQueryTree,
+  private boolean pruneEqPredicate(IndexSegment segment, EqPredicate 
eqPredicate,
       Map<String, DataSource> dataSourceCache) {
-    String column = filterQueryTree.getColumn();
+    String column = eqPredicate.getLhs().getIdentifier();
     DataSource dataSource = dataSourceCache.computeIfAbsent(column, 
segment::getDataSource);
     // NOTE: Column must exist after DataSchemaSegmentPruner
     assert dataSource != null;
     DataSourceMetadata dataSourceMetadata = dataSource.getDataSourceMetadata();
-    Comparable value = convertValue(filterQueryTree.getValue().get(0), 
dataSourceMetadata.getDataType());
+    Comparable value = convertValue(eqPredicate.getValue(), 
dataSourceMetadata.getDataType());
 
     // Check min/max value
     Comparable minValue = dataSourceMetadata.getMinValue();
@@ -155,15 +160,14 @@ public class ColumnValueSegmentPruner implements 
SegmentPruner {
   }
 
   /**
-   * For RANGE filter, prune the segment based on:
+   * For RANGE predicate, prune the segment based on:
    * <ul>
    *   <li>Column min/max value</li>
    * </ul>
    */
-  @SuppressWarnings("unchecked")
-  private boolean pruneRangeFilter(IndexSegment segment, FilterQueryTree 
filterQueryTree,
+  private boolean pruneRangePredicate(IndexSegment segment, RangePredicate 
rangePredicate,
       Map<String, DataSource> dataSourceCache) {
-    String column = filterQueryTree.getColumn();
+    String column = rangePredicate.getLhs().getIdentifier();
     DataSource dataSource = dataSourceCache.computeIfAbsent(column, 
segment::getDataSource);
     // NOTE: Column must exist after DataSchemaSegmentPruner
     assert dataSource != null;
@@ -171,29 +175,28 @@ public class ColumnValueSegmentPruner implements 
SegmentPruner {
 
     // Get lower/upper boundary value
     DataType dataType = dataSourceMetadata.getDataType();
-    RangePredicate rangePredicate = new RangePredicate(null, 
filterQueryTree.getValue());
-    String lowerBoundary = rangePredicate.getLowerBoundary();
-    boolean includeLowerBoundary = rangePredicate.includeLowerBoundary();
-    Comparable lowerBoundaryValue = null;
-    if (!lowerBoundary.equals(RangePredicate.UNBOUNDED)) {
-      lowerBoundaryValue = convertValue(lowerBoundary, dataType);
+    String lowerBound = rangePredicate.getLowerBound();
+    Comparable lowerBoundValue = null;
+    if (!lowerBound.equals(RangePredicate.UNBOUNDED)) {
+      lowerBoundValue = convertValue(lowerBound, dataType);
     }
-    String upperBoundary = rangePredicate.getUpperBoundary();
-    boolean includeUpperBoundary = rangePredicate.includeUpperBoundary();
-    Comparable upperBoundaryValue = null;
-    if (!upperBoundary.equals(RangePredicate.UNBOUNDED)) {
-      upperBoundaryValue = convertValue(upperBoundary, dataType);
+    boolean lowerInclusive = rangePredicate.isLowerInclusive();
+    String upperBound = rangePredicate.getUpperBound();
+    Comparable upperBoundValue = null;
+    if (!upperBound.equals(RangePredicate.UNBOUNDED)) {
+      upperBoundValue = convertValue(upperBound, dataType);
     }
+    boolean upperInclusive = rangePredicate.isUpperInclusive();
 
     // Check if the range is valid
     // TODO: This check should be performed on the broker
-    if (lowerBoundaryValue != null && upperBoundaryValue != null) {
-      if (includeLowerBoundary && includeUpperBoundary) {
-        if (lowerBoundaryValue.compareTo(upperBoundaryValue) > 0) {
+    if (lowerBoundValue != null && upperBoundValue != null) {
+      if (lowerInclusive && upperInclusive) {
+        if (lowerBoundValue.compareTo(upperBoundValue) > 0) {
           return true;
         }
       } else {
-        if (lowerBoundaryValue.compareTo(upperBoundaryValue) >= 0) {
+        if (lowerBoundValue.compareTo(upperBoundValue) >= 0) {
           return true;
         }
       }
@@ -205,24 +208,24 @@ public class ColumnValueSegmentPruner implements 
SegmentPruner {
       Comparable maxValue = dataSourceMetadata.getMaxValue();
       assert maxValue != null;
 
-      if (lowerBoundaryValue != null) {
-        if (includeLowerBoundary) {
-          if (lowerBoundaryValue.compareTo(maxValue) > 0) {
+      if (lowerBoundValue != null) {
+        if (lowerInclusive) {
+          if (lowerBoundValue.compareTo(maxValue) > 0) {
             return true;
           }
         } else {
-          if (lowerBoundaryValue.compareTo(maxValue) >= 0) {
+          if (lowerBoundValue.compareTo(maxValue) >= 0) {
             return true;
           }
         }
       }
-      if (upperBoundaryValue != null) {
-        if (includeUpperBoundary) {
-          if (upperBoundaryValue.compareTo(minValue) < 0) {
+      if (upperBoundValue != null) {
+        if (upperInclusive) {
+          if (upperBoundValue.compareTo(minValue) < 0) {
             return true;
           }
         } else {
-          if (upperBoundaryValue.compareTo(minValue) <= 0) {
+          if (upperBoundValue.compareTo(minValue) <= 0) {
             return true;
           }
         }
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/ServerQueryRequest.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/ServerQueryRequest.java
index 32e1fc3..1763335 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/request/ServerQueryRequest.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/request/ServerQueryRequest.java
@@ -18,23 +18,15 @@
  */
 package org.apache.pinot.core.query.request;
 
-import java.util.HashSet;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-import javax.annotation.Nullable;
-import org.apache.pinot.common.function.AggregationFunctionType;
 import org.apache.pinot.common.metrics.ServerMetrics;
-import org.apache.pinot.common.request.AggregationInfo;
 import org.apache.pinot.common.request.BrokerRequest;
-import org.apache.pinot.common.request.GroupBy;
 import org.apache.pinot.common.request.InstanceRequest;
-import org.apache.pinot.common.request.Selection;
-import org.apache.pinot.common.request.transform.TransformExpressionTree;
-import org.apache.pinot.common.utils.request.FilterQueryTree;
-import org.apache.pinot.common.utils.request.RequestUtils;
-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.TimerContext;
+import 
org.apache.pinot.core.query.request.context.utils.BrokerRequestToQueryContextConverter;
+import org.apache.pinot.core.query.request.context.utils.QueryContextUtils;
 
 
 /**
@@ -45,7 +37,6 @@ import 
org.apache.pinot.core.query.request.context.TimerContext;
  */
 public class ServerQueryRequest {
   private final long _requestId;
-  private final BrokerRequest _brokerRequest;
   private final String _tableNameWithType;
   private final List<String> _segmentsToQuery;
   private final boolean _enableTrace;
@@ -55,104 +46,27 @@ public class ServerQueryRequest {
   private final TimerContext _timerContext;
 
   // Pre-computed segment independent information
+  private final QueryContext _queryContext;
   private final Set<String> _allColumns;
-  private final FilterQueryTree _filterQueryTree;
-  private final Set<String> _filterColumns;
-  private final Set<TransformExpressionTree> _aggregationExpressions;
-  private final Set<String> _aggregationColumns;
-  private final Set<TransformExpressionTree> _groupByExpressions;
-  private final Set<String> _groupByColumns;
-  private final Set<String> _selectionColumns;
-  private final Set<TransformExpressionTree> _selectionExpressions;
-
-  // Query processing context
-  private volatile int _segmentCountAfterPruning = -1;
 
   public ServerQueryRequest(InstanceRequest instanceRequest, ServerMetrics 
serverMetrics, long queryArrivalTimeMs) {
     _requestId = instanceRequest.getRequestId();
-    _brokerRequest = instanceRequest.getQuery();
-    _tableNameWithType = _brokerRequest.getQuerySource().getTableName();
+    BrokerRequest brokerRequest = instanceRequest.getQuery();
+    _tableNameWithType = brokerRequest.getQuerySource().getTableName();
     _segmentsToQuery = instanceRequest.getSearchSegments();
     _enableTrace = instanceRequest.isEnableTrace();
     _brokerId = instanceRequest.getBrokerId() != null ? 
instanceRequest.getBrokerId() : "unknown";
     _timerContext = new TimerContext(_tableNameWithType, serverMetrics, 
queryArrivalTimeMs);
 
     // Pre-compute segment independent information
-    _allColumns = new HashSet<>();
-
-    // Filter
-    _filterQueryTree = RequestUtils.generateFilterQueryTree(_brokerRequest);
-    if (_filterQueryTree != null) {
-      _filterColumns = RequestUtils.extractFilterColumns(_filterQueryTree);
-      _allColumns.addAll(_filterColumns);
-    } else {
-      _filterColumns = null;
-    }
-
-    // Aggregation
-    List<AggregationInfo> aggregationsInfo = 
_brokerRequest.getAggregationsInfo();
-    if (aggregationsInfo != null) {
-      _aggregationExpressions = new HashSet<>();
-      for (AggregationInfo aggregationInfo : aggregationsInfo) {
-        String aggregationType = aggregationInfo.getAggregationType();
-
-        // TODO: Remove special casing of theta-sketch.
-        // This is needed as a work-around because only aggregation functions 
know how to interpret the expressions.
-        // The code below assumes that all expressions have columns in them, 
which may not be true. But only Aggregation
-        // functions have that knowledge, and have not been instantiated yet. 
A clean fix would be to instantiate
-        // aggregation functions upfront to interpret the expressions.
-        if 
(!aggregationType.equalsIgnoreCase(AggregationFunctionType.COUNT.getName()) && 
!aggregationType
-            
.equalsIgnoreCase(AggregationFunctionType.DISTINCTCOUNTTHETASKETCH.getName())) {
-          for (String expressions : 
AggregationFunctionUtils.getArguments(aggregationInfo)) {
-            
_aggregationExpressions.add(TransformExpressionTree.compileToExpressionTree(expressions));
-          }
-        }
-      }
-      _aggregationColumns = 
RequestUtils.extractColumnsFromExpressions(_aggregationExpressions);
-      _allColumns.addAll(_aggregationColumns);
-    } else {
-      _aggregationExpressions = null;
-      _aggregationColumns = null;
-    }
-
-    // Group-by
-    GroupBy groupBy = _brokerRequest.getGroupBy();
-    if (groupBy != null) {
-      _groupByExpressions = new HashSet<>();
-      for (String expression : groupBy.getExpressions()) {
-        
_groupByExpressions.add(TransformExpressionTree.compileToExpressionTree(expression));
-      }
-      _groupByColumns = 
RequestUtils.extractColumnsFromExpressions(_groupByExpressions);
-      _allColumns.addAll(_groupByColumns);
-    } else {
-      _groupByExpressions = null;
-      _groupByColumns = null;
-    }
-
-    // Selection
-    Selection selection = _brokerRequest.getSelections();
-    if (selection != null) {
-      _selectionExpressions = new LinkedHashSet<>();
-      Set<String> selectionColumns = 
RequestUtils.extractSelectionColumns(selection);
-      for (String expression : selectionColumns) {
-        
_selectionExpressions.add(TransformExpressionTree.compileToExpressionTree(expression));
-      }
-      _selectionColumns = 
RequestUtils.extractColumnsFromExpressions(_selectionExpressions);
-      _allColumns.addAll(_selectionColumns);
-    } else {
-      _selectionColumns = null;
-      _selectionExpressions = null;
-    }
+    _queryContext = 
BrokerRequestToQueryContextConverter.convert(brokerRequest);
+    _allColumns = QueryContextUtils.getAllColumns(_queryContext);
   }
 
   public long getRequestId() {
     return _requestId;
   }
 
-  public BrokerRequest getBrokerRequest() {
-    return _brokerRequest;
-  }
-
   public String getTableNameWithType() {
     return _tableNameWithType;
   }
@@ -173,47 +87,11 @@ public class ServerQueryRequest {
     return _timerContext;
   }
 
-  public Set<String> getAllColumns() {
-    return _allColumns;
-  }
-
-  @Nullable
-  public FilterQueryTree getFilterQueryTree() {
-    return _filterQueryTree;
-  }
-
-  @Nullable
-  public Set<String> getFilterColumns() {
-    return _filterColumns;
-  }
-
-  @Nullable
-  public Set<TransformExpressionTree> getAggregationExpressions() {
-    return _aggregationExpressions;
-  }
-
-  @Nullable
-  public Set<String> getAggregationColumns() {
-    return _aggregationColumns;
-  }
-
-  @Nullable
-  public Set<TransformExpressionTree> getGroupByExpressions() {
-    return _groupByExpressions;
+  public QueryContext getQueryContext() {
+    return _queryContext;
   }
 
-  @Nullable
-  public Set<String> getGroupByColumns() {
-    return _groupByColumns;
-  }
-
-  @Nullable
-  public Set<String> getSelectionColumns() {
-    return _selectionColumns;
-  }
-
-  @Nullable
-  public Set<TransformExpressionTree> getSelectionExpressions() {
-    return _selectionExpressions;
+  public Set<String> getAllColumns() {
+    return _allColumns;
   }
 }
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPrunerTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPrunerTest.java
index d62e275..892f3d3 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPrunerTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/query/pruner/ColumnValueSegmentPrunerTest.java
@@ -20,13 +20,13 @@ package org.apache.pinot.core.query.pruner;
 
 import java.util.Collections;
 import org.apache.pinot.common.request.BrokerRequest;
-import org.apache.pinot.common.utils.request.FilterQueryTree;
-import org.apache.pinot.common.utils.request.RequestUtils;
 import org.apache.pinot.core.common.DataSource;
 import org.apache.pinot.core.common.DataSourceMetadata;
 import org.apache.pinot.core.data.partition.PartitionFunctionFactory;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.query.request.ServerQueryRequest;
+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.apache.pinot.spi.data.FieldSpec.DataType;
 import org.testng.annotations.Test;
@@ -119,9 +119,9 @@ public class ColumnValueSegmentPrunerTest {
 
   private boolean runPruner(IndexSegment indexSegment, String query) {
     BrokerRequest brokerRequest = COMPILER.compileToBrokerRequest(query);
-    FilterQueryTree filterQueryTree = 
RequestUtils.generateFilterQueryTree(brokerRequest);
+    QueryContext queryContext = 
BrokerRequestToQueryContextConverter.convert(brokerRequest);
     ServerQueryRequest queryRequest = mock(ServerQueryRequest.class);
-    when(queryRequest.getFilterQueryTree()).thenReturn(filterQueryTree);
+    when(queryRequest.getQueryContext()).thenReturn(queryContext);
     return PRUNER.prune(indexSegment, queryRequest);
   }
 }
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/query/scheduler/TestHelper.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/query/scheduler/TestHelper.java
index cdde6eb..db1e134 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/query/scheduler/TestHelper.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/query/scheduler/TestHelper.java
@@ -19,10 +19,12 @@
 package org.apache.pinot.core.query.scheduler;
 
 import java.util.Arrays;
+import java.util.Collections;
 import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.common.request.BrokerRequest;
 import org.apache.pinot.common.request.InstanceRequest;
 import org.apache.pinot.common.request.QuerySource;
+import org.apache.pinot.common.request.Selection;
 import org.apache.pinot.core.query.request.ServerQueryRequest;
 
 
@@ -39,6 +41,9 @@ public class TestHelper {
     QuerySource qs = new QuerySource();
     qs.setTableName(table);
     br.setQuerySource(qs);
+    Selection selection = new Selection();
+    selection.setSelectionColumns(Collections.singletonList("*"));
+    br.setSelections(selection);
     request.setQuery(br);
     return new ServerQueryRequest(request, metrics, queryArrivalTimeMs);
   }


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

Reply via email to