private static SegmentId makeIdentifier(IncrementalIndex index, String version) { return makeIdentifier(index.getInterval(), version); }
@Test public void testAllGranularity() { runAllGranularityTest( newBuilder().build(), new int[][]{ {2, -1, -1, -1, 3}, {3, 1, -1, -1, 3}, {-1, 3, 0, -1, 3}, {-1, -1, 3, -1, 3}, {-1, -1, 4, 1, 3}, {-1, -1, -1, 4, 3}, {-1, -1, -1, 7, 3}, {-1, -1, -1, 10, 3}, {-1, -1, -1, 12, 2}, {-1, -1, -1, 13, 0} } ); runAllGranularityTest( newBuilder().descending(true).build(), new int[][]{ {0, 0, 0, -3, 3}, {0, 0, 0, -6, 3}, {0, 0, 0, -9, 3}, {0, 0, 0, -12, 3}, {0, 0, -2, -13, 3}, {0, 0, -5, 0, 3}, {0, -3, 0, 0, 3}, {-2, -4, 0, 0, 3}, {-4, 0, 0, 0, 2}, {-5, 0, 0, 0, 0} } ); }
private static IncrementalIndex newIndex(String minTimeStamp) { return newIndex(minTimeStamp, 10000); }
@Test public void testDayGranularity() { runDayGranularityTest( newBuilder().granularity(QueryRunnerTestHelper.dayGran).build(), new int[][]{ {2, -1, -1, 2, 3, 0, 0, 3}, {3, 1, -1, 5, 1, 2, 0, 3}, {-1, 3, 0, 8, 0, 2, 1, 3}, {-1, -1, 3, 11, 0, 0, 3, 3}, {-1, -1, 4, 12, 0, 0, 1, 1}, {-1, -1, 5, 13, 0, 0, 0, 0} } ); runDayGranularityTest( newBuilder().granularity(QueryRunnerTestHelper.dayGran).descending(true).build(), new int[][]{ {0, 0, -3, -3, 0, 0, 3, 3}, {0, -1, -5, -6, 0, 1, 2, 3}, {0, -4, 0, -9, 0, 3, 0, 3}, {-3, 0, 0, -12, 3, 0, 0, 3}, {-4, 0, 0, -13, 1, 0, 0, 1}, {-5, 0, 0, -14, 0, 0, 0, 0} } ); }
@BeforeClass public static void setup() throws IOException { CharSource v_0112 = CharSource.wrap(StringUtils.join(V_0112, "\n")); CharSource v_0113 = CharSource.wrap(StringUtils.join(V_0113, "\n")); CharSource v_override = CharSource.wrap(StringUtils.join(V_OVERRIDE, "\n")); IncrementalIndex index0 = TestIndex.loadIncrementalIndex(newIndex("2011-01-12T00:00:00.000Z"), v_0112); IncrementalIndex index1 = TestIndex.loadIncrementalIndex(newIndex("2011-01-13T00:00:00.000Z"), v_0113); IncrementalIndex index2 = TestIndex.loadIncrementalIndex(newIndex("2011-01-12T04:00:00.000Z"), v_override); segment0 = new IncrementalIndexSegment(index0, makeIdentifier(index0, "v1")); segment1 = new IncrementalIndexSegment(index1, makeIdentifier(index1, "v1")); segment_override = new IncrementalIndexSegment(index2, makeIdentifier(index2, "v2")); VersionedIntervalTimeline<String, Segment> timeline = new VersionedIntervalTimeline<>(StringComparators.LEXICOGRAPHIC); timeline.add(index0.getInterval(), "v1", new SingleElementPartitionChunk<>(segment0)); timeline.add(index1.getInterval(), "v1", new SingleElementPartitionChunk<>(segment1)); timeline.add(index2.getInterval(), "v2", new SingleElementPartitionChunk<>(segment_override)); segmentIdentifiers = new ArrayList<>(); for (TimelineObjectHolder<String, ?> holder : timeline.lookup(Intervals.of("2011-01-12/2011-01-14"))) { segmentIdentifiers.add(makeIdentifier(holder.getInterval(), holder.getVersion()).toString()); } runner = QueryRunnerTestHelper.makeFilteringQueryRunner(timeline, factory); }
private void runDayGranularityTest(SelectQuery query, int[][] expectedOffsets) { for (int[] expected : expectedOffsets) { List<Result<SelectResultValue>> results = runner.run(QueryPlus.wrap(query), ImmutableMap.of()).toList(); Assert.assertEquals(2, results.size()); SelectResultValue value0 = results.get(0).getValue(); SelectResultValue value1 = results.get(1).getValue(); Map<String, Integer> pagingIdentifiers0 = value0.getPagingIdentifiers(); Map<String, Integer> pagingIdentifiers1 = value1.getPagingIdentifiers(); Map<String, Integer> merged = PagingSpec.merge(Arrays.asList(pagingIdentifiers0, pagingIdentifiers1)); for (int i = 0; i < 4; i++) { if (query.isDescending() ^ expected[i] >= 0) { Assert.assertEquals(expected[i], merged.get(segmentIdentifiers.get(i)).intValue()); } } query = query.withPagingSpec(toNextCursor(merged, query, 3)); } }
private void runAllGranularityTest(SelectQuery query, int[][] expectedOffsets) { for (int[] expected : expectedOffsets) { List<Result<SelectResultValue>> results = runner.run(QueryPlus.wrap(query), ImmutableMap.of()).toList(); Assert.assertEquals(1, results.size()); SelectResultValue value = results.get(0).getValue(); Map<String, Integer> pagingIdentifiers = value.getPagingIdentifiers(); Map<String, Integer> merged = PagingSpec.merge(Collections.singletonList(pagingIdentifiers)); for (int i = 0; i < 4; i++) { if (query.isDescending() ^ expected[i] >= 0) { Assert.assertEquals(expected[i], pagingIdentifiers.get(segmentIdentifiers.get(i)).intValue()); } } Assert.assertEquals(expected[4], value.getEvents().size()); query = query.withPagingSpec(toNextCursor(merged, query, 3)); } }
@Test public void testPagingIdentifiersForUnionDatasource() { Druids.SelectQueryBuilder selectQueryBuilder = Druids .newSelectQueryBuilder() .dataSource( new UnionDataSource( ImmutableList.of( new TableDataSource(QueryRunnerTestHelper.dataSource), new TableDataSource("testing-2") ) ) ) .intervals(SelectQueryRunnerTest.I_0112_0114_SPEC) .granularity(QueryRunnerTestHelper.allGran) .dimensionSpecs(DefaultDimensionSpec.toSpec(QueryRunnerTestHelper.dimensions)) .pagingSpec(PagingSpec.newSpec(3)); SelectQuery query = selectQueryBuilder.build(); QueryRunner unionQueryRunner = new UnionQueryRunner(runner); List<Result<SelectResultValue>> results = unionQueryRunner.run(QueryPlus.wrap(query), ImmutableMap.of()).toList(); Map<String, Integer> pagingIdentifiers = results.get(0).getValue().getPagingIdentifiers(); query = query.withPagingSpec(toNextCursor(PagingSpec.merge(Collections.singletonList(pagingIdentifiers)), query, 3)); unionQueryRunner.run(QueryPlus.wrap(query), ImmutableMap.of()).toList(); }