@Override public QueryRunner<T> getRunner(QuerySegmentWalker walker) { return getQuerySegmentSpecForLookUp(this).lookup(this, walker); }
@VisibleForTesting public static QuerySegmentSpec getQuerySegmentSpecForLookUp(BaseQuery query) { if (query.getDataSource() instanceof QueryDataSource) { QueryDataSource ds = (QueryDataSource) query.getDataSource(); Query subquery = ds.getQuery(); if (subquery instanceof BaseQuery) { return getQuerySegmentSpecForLookUp((BaseQuery) subquery); } throw new IllegalStateException("Invalid subquery type " + subquery.getClass()); } return query.getQuerySegmentSpec(); }
@Test public void testSegmentLookUpForNestedQueries() { QuerySegmentSpec innerQuerySegmentSpec = new MultipleIntervalSegmentSpec(Collections.singletonList(Intervals.of( "2011-11-07/2011-11-08"))); QuerySegmentSpec outerQuerySegmentSpec = new MultipleIntervalSegmentSpec(Collections.singletonList((Intervals.of( "2011-11-04/2011-11-08")))); List<AggregatorFactory> aggs = Collections.singletonList(QueryRunnerTestHelper.rowsCount); final GroupByQuery innerQuery = GroupByQuery.builder() .setDataSource("blah") .setInterval(innerQuerySegmentSpec) .setGranularity(Granularities.DAY) .setAggregatorSpecs(aggs) .build(); final GroupByQuery query = GroupByQuery .builder() .setDataSource(innerQuery) .setInterval(outerQuerySegmentSpec) .setAggregatorSpecs(aggs) .setGranularity(Granularities.DAY) .build(); Assert.assertEquals(innerQuerySegmentSpec, BaseQuery.getQuerySegmentSpecForLookUp(query)); } }
@Override public QueryRunner<T> getRunner(QuerySegmentWalker walker) { return getQuerySegmentSpecForLookUp(this).lookup(this, walker); }
@VisibleForTesting public static QuerySegmentSpec getQuerySegmentSpecForLookUp(BaseQuery query) { if (query.getDataSource() instanceof QueryDataSource) { QueryDataSource ds = (QueryDataSource) query.getDataSource(); Query subquery = ds.getQuery(); if (subquery instanceof BaseQuery) { return getQuerySegmentSpecForLookUp((BaseQuery) subquery); } throw new IllegalStateException("Invalid subquery type " + subquery.getClass()); } return query.getQuerySegmentSpec(); }