private Function<Sequence<Row>, Sequence<Row>> makePostProcessingFn() { Function<Sequence<Row>, Sequence<Row>> postProcessingFn = limitSpec.build( dimensions, aggregatorSpecs, postAggregatorSpecs, getGranularity(), getContextSortByDimsFirst() ); if (havingSpec != null) { postProcessingFn = Functions.compose( postProcessingFn, (Sequence<Row> input) -> { havingSpec.setRowSignature(GroupByQueryHelper.rowSignatureFor(GroupByQuery.this)); havingSpec.setAggregators(getAggregatorsMap(aggregatorSpecs)); return Sequences.filter(input, havingSpec::eval); } ); } return postProcessingFn; }
.setLimitSpec(query.getLimitSpec().merge(subquery.getLimitSpec())) .build();
); this.havingSpec = havingSpec; this.limitSpec = LimitSpec.nullToNoopLimitSpec(limitSpec);
query.getLimitSpec().build( query.getDimensions(), query.getAggregatorSpecs(),
.setLimitSpec(query.getLimitSpec().merge(subquery.getLimitSpec())) .build();
); this.havingSpec = havingSpec; this.limitSpec = LimitSpec.nullToNoopLimitSpec(limitSpec);
query.getLimitSpec().build( query.getDimensions(), query.getAggregatorSpecs(),
query.getLimitSpec().build( query.getDimensions(), query.getAggregatorSpecs(),
query.getLimitSpec().build( query.getDimensions(), query.getAggregatorSpecs(),
query.getLimitSpec().build( query.getDimensions(), query.getAggregatorSpecs(),
private Function<Sequence<Row>, Sequence<Row>> makePostProcessingFn() { Function<Sequence<Row>, Sequence<Row>> postProcessingFn = limitSpec.build( dimensions, aggregatorSpecs, postAggregatorSpecs, getGranularity(), getContextSortByDimsFirst() ); if (havingSpec != null) { postProcessingFn = Functions.compose( postProcessingFn, (Sequence<Row> input) -> { havingSpec.setRowSignature(GroupByQueryHelper.rowSignatureFor(GroupByQuery.this)); havingSpec.setAggregators(getAggregatorsMap(aggregatorSpecs)); return Sequences.filter(input, havingSpec::eval); } ); } return postProcessingFn; }