Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ public Sequence<ResultRow> processSubqueryResult(
GroupByRowProcessor.ResultSupplier resultSupplier = null;

try {
final GroupByQuery queryToRun;
GroupByQuery queryToRun;

if (wasQueryPushedDown) {
// If the query was pushed down, filters would have been applied downstream, so skip it here.
Expand All @@ -607,6 +607,13 @@ public Sequence<ResultRow> processSubqueryResult(
queryToRun = query;
}

if (queryToRun.getLimitSpec() instanceof DefaultLimitSpec) {
// If the query has an offset, incorporate it into the limit before processing subquery results.
// This allows limit pushdown to work properly during processing. Later on, we'll use the GroupByQuery's
// postProcessingFn to apply the offset.
queryToRun = queryToRun.withLimitSpec(((DefaultLimitSpec) queryToRun.getLimitSpec()).withOffsetToLimit());
}

resultSupplier = GroupByRowProcessor.process(
queryToRun,
wasQueryPushedDown ? queryToRun : subquery,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6569,6 +6569,39 @@ public void testSubqueryWithPostAggregators()
TestHelper.assertExpectedObjects(expectedResults, results, "subquery-postaggs");
}

@Test
public void testSubqueryWithOuterOffsetAndLimit()
{
// Granularity != ALL requires time-ordering.
assumeTimeOrdered();

final GroupByQuery subquery = makeQueryBuilder()
.setDataSource(QueryRunnerTestHelper.DATA_SOURCE)
.setQuerySegmentSpec(QueryRunnerTestHelper.FIRST_TO_THIRD)
.setDimensions(new DefaultDimensionSpec("quality", "alias"))
.setAggregatorSpecs(QueryRunnerTestHelper.ROWS_COUNT)
.setGranularity(QueryRunnerTestHelper.DAY_GRAN)
.build();

final GroupByQuery query = makeQueryBuilder()
.setDataSource(subquery)
.setQuerySegmentSpec(QueryRunnerTestHelper.FIRST_TO_THIRD)
.setDimensions(new DefaultDimensionSpec("alias", "alias"))
.setAggregatorSpecs(new LongSumAggregatorFactory("rows", "rows"))
.setGranularity(QueryRunnerTestHelper.DAY_GRAN)
.setLimitSpec(new DefaultLimitSpec(null, 1, 2))
.build();

List<ResultRow> expectedResults = Arrays.asList(
makeRow(query, "2011-04-01", "alias", "business", "rows", 1L),
makeRow(query, "2011-04-01", "alias", "entertainment", "rows", 1L)
);

// Subqueries are handled by the ToolChest
Iterable<ResultRow> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, query);
TestHelper.assertExpectedObjects(expectedResults, results, "subquery-postaggs");
}

@Test
public void testSubqueryWithPostAggregatorsAndHaving()
{
Expand Down
Loading