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]