public static <T> Sequence<Result<T>> makeCursorBasedQuery( final StorageAdapter adapter, List<Interval> queryIntervals, Filter filter, VirtualColumns virtualColumns, boolean descending, Granularity granularity, final Function<Cursor, Result<T>> mapFn ) { Preconditions.checkArgument( queryIntervals.size() == 1, "Can only handle a single interval, got[%s]", queryIntervals ); return Sequences.filter( Sequences.map( adapter.makeCursors(filter, queryIntervals.get(0), virtualColumns, granularity, descending, null), new Function<Cursor, Result<T>>() { @Override public Result<T> apply(Cursor input) { return mapFn.apply(input); } } ), Predicates.notNull() ); }
); return Sequences.filter( Sequences.map( adapter.makeCursors(
return Sequences.filter( new CursorSequenceBuilder( this,
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; }
public static <T> Sequence<Result<T>> makeCursorBasedQuery( final StorageAdapter adapter, List<Interval> queryIntervals, Filter filter, VirtualColumns virtualColumns, boolean descending, Granularity granularity, final Function<Cursor, Result<T>> mapFn ) { Preconditions.checkArgument( queryIntervals.size() == 1, "Can only handle a single interval, got[%s]", queryIntervals ); return Sequences.filter( Sequences.map( adapter.makeCursors(filter, queryIntervals.get(0), virtualColumns, granularity, descending, null), new Function<Cursor, Result<T>>() { @Override public Result<T> apply(Cursor input) { return mapFn.apply(input); } } ), Predicates.notNull() ); }
); return Sequences.filter( Sequences.map( adapter.makeCursors(
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; }
return Sequences.filter( new CursorSequenceBuilder( this,