public Query getQuery() { return queryPlus.getQuery(); }
@Override public Sequence<Result<TopNResultValue>> run( QueryPlus<Result<TopNResultValue>> input, Map<String, Object> responseContext ) { if (!(input.getQuery() instanceof TopNQuery)) { throw new ISE("Got a [%s] which isn't a %s", input.getClass(), TopNQuery.class); } TopNQuery query = (TopNQuery) input.getQuery(); return queryEngine.query(query, segment.asStorageAdapter(), (TopNQueryMetrics) input.getQueryMetrics()); } };
@Override public Sequence<Result<TimeseriesResultValue>> run( QueryPlus<Result<TimeseriesResultValue>> queryPlus, Map<String, Object> responseContext ) { Query<Result<TimeseriesResultValue>> input = queryPlus.getQuery(); if (!(input instanceof TimeseriesQuery)) { throw new ISE("Got a [%s] which isn't a %s", input.getClass(), TimeseriesQuery.class); } return engine.process((TimeseriesQuery) input, adapter); } }
@Override public Sequence<Result<SelectResultValue>> run( QueryPlus<Result<SelectResultValue>> queryPlus, Map<String, Object> responseContext ) { Query<Result<SelectResultValue>> input = queryPlus.getQuery(); if (!(input instanceof SelectQuery)) { throw new ISE("Got a [%s] which isn't a %s", input.getClass(), SelectQuery.class); } return engine.process((SelectQuery) input, segment); } }
@Override public Sequence<ScanResultValue> run( QueryPlus<ScanResultValue> queryPlus, Map<String, Object> responseContext ) { Query<ScanResultValue> query = queryPlus.getQuery(); if (!(query instanceof ScanQuery)) { throw new ISE("Got a [%s] which isn't a %s", query.getClass(), ScanQuery.class); } // it happens in unit tests final Number timeoutAt = (Number) responseContext.get(CTX_TIMEOUT_AT); if (timeoutAt == null || timeoutAt.longValue() == 0L) { responseContext.put(CTX_TIMEOUT_AT, JodaUtils.MAX_INSTANT); } return engine.process((ScanQuery) query, segment, responseContext); } }
@Override public Sequence<Row> run(QueryPlus<Row> queryPlus, Map<String, Object> responseContext) { Query<Row> query = queryPlus.getQuery(); if (!(query instanceof GroupByQuery)) { throw new ISE("Got a [%s] which isn't a %s", query.getClass(), GroupByQuery.class); } return strategySelector.strategize((GroupByQuery) query).process((GroupByQuery) query, adapter); } }
@Override public Sequence<Result<TimeseriesResultValue>> doRun( QueryRunner<Result<TimeseriesResultValue>> baseRunner, QueryPlus<Result<TimeseriesResultValue>> queryPlus, Map<String, Object> context ) { return super.doRun( baseRunner, // Don't do post aggs until makePostComputeManipulatorFn() is called queryPlus.withQuery(((TimeseriesQuery) queryPlus.getQuery()).withPostAggregatorSpecs(ImmutableList.of())), context ); }
@Override public Sequence<Row> run(QueryPlus<Row> queryPlus, Map<String, Object> responseContext) { if (QueryContexts.isBySegment(queryPlus.getQuery())) { return runner.run(queryPlus, responseContext); } final GroupByQuery groupByQuery = (GroupByQuery) queryPlus.getQuery(); if (strategySelector.strategize(groupByQuery).doMergeResults(groupByQuery)) { return initAndMergeGroupByResults( groupByQuery, runner, responseContext ); } return runner.run(queryPlus, responseContext); } };
@Override public Sequence run(QueryPlus queryPlus, Map responseContext) { return baseRunner.run( QueryPlus.wrap((Query) withTimeoutAndMaxScatterGatherBytes( queryPlus.getQuery(), serverConfig )), responseContext ); }
@Override public Sequence<T> run(QueryPlus<T> queryPlus, Map<String, Object> responseContext) { if (QueryContexts.isBySegment(queryPlus.getQuery())) { return baseRunner.run(queryPlus, responseContext); } return doRun(baseRunner, queryPlus, responseContext); }
@Override public Sequence<Row> run(QueryPlus<Row> queryPlus, Map<String, Object> responseContext) { QueryRunner<Row> rowQueryRunner = strategySelector.strategize((GroupByQuery) queryPlus.getQuery()).mergeRunners( queryExecutor, queryRunners ); return rowQueryRunner.run(queryPlus, responseContext); } };
@Override protected Sequence<Result<TimeBoundaryResultValue>> doRun( QueryRunner<Result<TimeBoundaryResultValue>> baseRunner, QueryPlus<Result<TimeBoundaryResultValue>> input, Map<String, Object> context ) { TimeBoundaryQuery query = (TimeBoundaryQuery) input.getQuery(); return Sequences.simple( query.mergeResults( Sequences.toList(baseRunner.run(input, context), Lists.<Result<TimeBoundaryResultValue>>newArrayList()) ) ); } };
@Override protected Sequence<Result<DataSourceMetadataResultValue>> doRun( QueryRunner<Result<DataSourceMetadataResultValue>> baseRunner, QueryPlus<Result<DataSourceMetadataResultValue>> input, Map<String, Object> context ) { DataSourceMetadataQuery query = (DataSourceMetadataQuery) input.getQuery(); return Sequences.simple( query.mergeResults( Sequences.toList( baseRunner.run(input, context), Lists.<Result<DataSourceMetadataResultValue>>newArrayList() ) ) ); } };
@Override public Sequence<T> doRun(QueryRunner<T> baseRunner, QueryPlus<T> queryPlus, Map<String, Object> context) { Query<T> query = queryPlus.getQuery(); return CombiningSequence.create(baseRunner.run(queryPlus, context), makeOrdering(query), createMergeFn(query)); }
@Override public Sequence<T> run(final QueryPlus<T> queryPlus, Map<String, Object> responseContext) { DataSource dataSource = queryPlus.getQuery().getDataSource(); if (dataSource instanceof QueryDataSource) { return run(queryPlus.withQuery((Query<T>) ((QueryDataSource) dataSource).getQuery()), responseContext); } else { return baseRunner.run(queryPlus, responseContext); } } }
@Override public Sequence<Result<SearchResultValue>> run( QueryPlus<Result<SearchResultValue>> queryPlus, Map<String, Object> responseContext ) { SearchQuery searchQuery = (SearchQuery) queryPlus.getQuery(); if (searchQuery.getDimensionsFilter() != null) { searchQuery = searchQuery.withDimFilter(searchQuery.getDimensionsFilter().optimize()); queryPlus = queryPlus.withQuery(searchQuery); } return runner.run(queryPlus, responseContext); } },
@Override public Sequence<ScanResultValue> run( QueryPlus<ScanResultValue> queryPlus, Map<String, Object> responseContext ) { ScanQuery scanQuery = (ScanQuery) queryPlus.getQuery(); if (scanQuery.getFilter() != null) { scanQuery = scanQuery.withDimFilter(scanQuery.getFilter().optimize()); queryPlus = queryPlus.withQuery(scanQuery); } return runner.run(queryPlus, responseContext); } };
@Override public Sequence<Result<TimeseriesResultValue>> run( QueryPlus<Result<TimeseriesResultValue>> queryPlus, Map<String, Object> responseContext ) { TimeseriesQuery timeseriesQuery = (TimeseriesQuery) queryPlus.getQuery(); if (timeseriesQuery.getDimensionsFilter() != null) { timeseriesQuery = timeseriesQuery.withDimFilter(timeseriesQuery.getDimensionsFilter().optimize()); queryPlus = queryPlus.withQuery(timeseriesQuery); } return runner.run(queryPlus, responseContext); } }, this);
@Override public Sequence<Result<SelectResultValue>> run( QueryPlus<Result<SelectResultValue>> queryPlus, Map<String, Object> responseContext ) { SelectQuery selectQuery = (SelectQuery) queryPlus.getQuery(); if (selectQuery.getDimensionsFilter() != null) { selectQuery = selectQuery.withDimFilter(selectQuery.getDimensionsFilter().optimize()); queryPlus = queryPlus.withQuery(selectQuery); } return runner.run(queryPlus, responseContext); } }, this);
SpecificQueryRunnable(final QueryPlus<T> queryPlus, final Map<String, Object> responseContext) { this.queryPlus = queryPlus; this.responseContext = responseContext; this.query = queryPlus.getQuery(); this.toolChest = warehouse.getToolChest(query); this.strategy = toolChest.getCacheStrategy(query); this.useCache = CacheUtil.useCacheOnBrokers(query, strategy, cacheConfig); this.populateCache = CacheUtil.populateCacheOnBrokers(query, strategy, cacheConfig); this.isBySegment = QueryContexts.isBySegment(query); // Note that enabling this leads to putting uncovered intervals information in the response headers // and might blow up in some cases https://github.com/druid-io/druid/issues/2108 this.uncoveredIntervalsLimit = QueryContexts.getUncoveredIntervalsLimit(query); this.downstreamQuery = query.withOverriddenContext(makeDownstreamQueryContext()); }