mirror of https://github.com/apache/druid.git
Fix for GroupBy with Having+Limit+Orderspec
* Inverted function arguments to compose postProcFn for GroupBy queries with havingspec + limitspec. * Replaced query.getLimitSpec() with null in GroupByQueryToolChest's mergeGroupByResults * Added unittest to verify functionality
This commit is contained in:
parent
ad286cc02e
commit
82da479464
|
@ -104,6 +104,7 @@ public class GroupByQuery extends BaseQuery<Row>
|
|||
|
||||
if (havingSpec != null) {
|
||||
postProcFn = Functions.compose(
|
||||
postProcFn,
|
||||
new Function<Sequence<Row>, Sequence<Row>>()
|
||||
{
|
||||
@Override
|
||||
|
@ -121,8 +122,7 @@ public class GroupByQuery extends BaseQuery<Row>
|
|||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
postProcFn
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -189,7 +189,7 @@ public class GroupByQueryQueryToolChest extends QueryToolChest<Row, GroupByQuery
|
|||
ImmutableList.<PostAggregator>of(),
|
||||
// Don't do "having" clause until the end of this method.
|
||||
null,
|
||||
query.getLimitSpec(),
|
||||
null,
|
||||
query.getContext()
|
||||
).withOverriddenContext(
|
||||
ImmutableMap.<String, Object>of(
|
||||
|
|
|
@ -1406,6 +1406,91 @@ public class GroupByQueryRunnerTest
|
|||
TestHelper.assertExpectedObjects(expectedResults, mergedRunner.run(fullQuery, context), "merged");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGroupByWithOrderLimitHavingSpec()
|
||||
{
|
||||
GroupByQuery.Builder builder = GroupByQuery
|
||||
.builder()
|
||||
.setDataSource(QueryRunnerTestHelper.dataSource)
|
||||
.setInterval("2011-01-25/2011-01-28")
|
||||
.setDimensions(Lists.<DimensionSpec>newArrayList(new DefaultDimensionSpec("quality", "alias")))
|
||||
.setAggregatorSpecs(
|
||||
Arrays.asList(
|
||||
QueryRunnerTestHelper.rowsCount,
|
||||
new DoubleSumAggregatorFactory("index", "index")
|
||||
)
|
||||
)
|
||||
.setGranularity(QueryGranularity.ALL)
|
||||
.setHavingSpec(new GreaterThanHavingSpec("index", 310L))
|
||||
.setLimitSpec(
|
||||
new DefaultLimitSpec(
|
||||
Lists.newArrayList(
|
||||
new OrderByColumnSpec(
|
||||
"index",
|
||||
OrderByColumnSpec.Direction.ASCENDING
|
||||
)
|
||||
),
|
||||
5
|
||||
)
|
||||
);
|
||||
|
||||
List<Row> expectedResults = Arrays.asList(
|
||||
GroupByQueryRunnerTestHelper.createExpectedRow(
|
||||
"2011-01-25",
|
||||
"alias",
|
||||
"business",
|
||||
"rows",
|
||||
3L,
|
||||
"index",
|
||||
312.38165283203125
|
||||
),
|
||||
GroupByQueryRunnerTestHelper.createExpectedRow(
|
||||
"2011-01-25",
|
||||
"alias",
|
||||
"news",
|
||||
"rows",
|
||||
3L,
|
||||
"index",
|
||||
312.7834167480469
|
||||
),
|
||||
GroupByQueryRunnerTestHelper.createExpectedRow(
|
||||
"2011-01-25",
|
||||
"alias",
|
||||
"technology",
|
||||
"rows",
|
||||
3L,
|
||||
"index",
|
||||
324.6412353515625
|
||||
),
|
||||
GroupByQueryRunnerTestHelper.createExpectedRow(
|
||||
"2011-01-25",
|
||||
"alias",
|
||||
"travel",
|
||||
"rows",
|
||||
3L,
|
||||
"index",
|
||||
393.36322021484375
|
||||
),
|
||||
GroupByQueryRunnerTestHelper.createExpectedRow(
|
||||
"2011-01-25",
|
||||
"alias",
|
||||
"health",
|
||||
"rows",
|
||||
3L,
|
||||
"index",
|
||||
511.2996826171875
|
||||
)
|
||||
);
|
||||
|
||||
GroupByQuery fullQuery = builder.build();
|
||||
Iterable<Row> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, fullQuery);
|
||||
TestHelper.assertExpectedObjects(
|
||||
expectedResults,
|
||||
results,
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPostAggHavingSpec()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue