@Override public SelectQueryMetrics makeMetrics(SelectQuery query) { SelectQueryMetrics queryMetrics = queryMetricsFactory.makeMetrics(query); queryMetrics.query(query); return queryMetrics; }
public static PagingOffset of(int startOffset, int threshold) { return startOffset < 0 ? new Descending(startOffset, threshold) : new Ascending(startOffset, threshold); }
@Override protected BinaryFn<Result<SelectResultValue>, Result<SelectResultValue>, Result<SelectResultValue>> createMergeFn( Query<Result<SelectResultValue>> input ) { SelectQuery query = (SelectQuery) input; return new SelectBinaryFn( query.getGranularity(), query.getPagingSpec(), query.isDescending() ); } };
@Test public void testZeroThreshold() { PagingOffset offset = PagingOffset.of(PagingOffset.toOffset(3, false), 0); Assert.assertEquals(3, offset.startOffset()); Assert.assertEquals(3, offset.startDelta()); Assert.assertArrayEquals(new int[]{}, toArray(offset)); offset = PagingOffset.of(PagingOffset.toOffset(3, true), 0); Assert.assertEquals(-4, offset.startOffset()); Assert.assertEquals(3, offset.startDelta()); Assert.assertArrayEquals(new int[]{}, toArray(offset)); }
/** * Don't run this benchmark with a query that doesn't use {@link Granularities#ALL}, * this pagination function probably doesn't work correctly in that case. */ private SelectQuery incrementQueryPagination(SelectQuery query, SelectResultValue prevResult) { Map<String, Integer> pagingIdentifiers = prevResult.getPagingIdentifiers(); Map<String, Integer> newPagingIdentifers = new HashMap<>(); for (String segmentId : pagingIdentifiers.keySet()) { int newOffset = pagingIdentifiers.get(segmentId) + 1; newPagingIdentifers.put(segmentId, newOffset); } return query.withPagingSpec(new PagingSpec(newPagingIdentifers, pagingThreshold)); }
private PagingSpec toNextCursor(Map<String, Integer> merged, SelectQuery query, int threshold) { if (!fromNext) { merged = PagingSpec.next(merged, query.isDescending()); } return new PagingSpec(merged, threshold, fromNext); } }
public static PagingSpec newSpec(int threshold) { return new PagingSpec(null, threshold); }
@Override public String toString() { return "SelectQuery{" + "dataSource='" + getDataSource() + '\'' + ", querySegmentSpec=" + getQuerySegmentSpec() + ", descending=" + isDescending() + ", dimFilter=" + dimFilter + ", granularity=" + getGranularity() + ", dimensions=" + dimensions + ", metrics=" + metrics + ", virtualColumns=" + virtualColumns + ", pagingSpec=" + pagingSpec + '}'; }
public Result<SelectResultValue> build() { return new Result<>(timestamp, new SelectResultValue(pagingIdentifiers, dimensions, metrics, getEventHolders())); }
public PagingOffset getOffset(String identifier, boolean descending) { Integer offset = pagingIdentifiers.get(identifier); if (offset == null) { offset = PagingOffset.toOffset(0, descending); } else if (fromNext) { offset = descending ? offset - 1 : offset + 1; } return PagingOffset.of(offset, threshold); }
public PagingSpec(Map<String, Integer> pagingIdentifiers, int threshold) { this(pagingIdentifiers, threshold, null, new SelectQueryConfig(true)); }
public PagingOffset getPagingOffset(String identifier) { return pagingSpec.getOffset(identifier, isDescending()); }
public SelectQuery build() { return new SelectQuery( dataSource, querySegmentSpec, descending, dimFilter, granularity, dimensions, metrics, virtualColumns, pagingSpec, context ); }
@Override public QueryRunner<Result<SelectResultValue>> createRunner(final Segment segment) { return new SelectQueryRunner(engine, segment); }
private static IncrementalIndex newIndex(String minTimeStamp) { return newIndex(minTimeStamp, 10000); }
private List<List<Map<String, Object>>> toFullEvents(final String[]... valueSet) { return toEvents(new String[]{EventHolder.timestampKey + ":TIME", QueryRunnerTestHelper.marketDimension + ":STRING", QueryRunnerTestHelper.qualityDimension + ":STRING", "qualityLong" + ":LONG", "qualityFloat" + ":FLOAT", "qualityNumericString" + ":STRING", QueryRunnerTestHelper.placementDimension + ":STRING", QueryRunnerTestHelper.placementishDimension + ":STRINGS", QueryRunnerTestHelper.indexMetric + ":FLOAT", QueryRunnerTestHelper.partialNullDimension + ":STRING"}, valueSet); }
private void verifyEvents(List<EventHolder> events1, List<EventHolder> events2) { Iterator<EventHolder> ex = events1.iterator(); Iterator<EventHolder> ac = events2.iterator(); verifyIters(ex, ac); } }
@Test public void testDescending() { PagingOffset offset = PagingOffset.of(PagingOffset.toOffset(3, true), 3); Assert.assertEquals(-4, offset.startOffset()); Assert.assertEquals(3, offset.startDelta()); Assert.assertArrayEquals(new int[]{-4, -5, -6}, toArray(offset)); }
public PagingSpec(Map<String, Integer> pagingIdentifiers, int threshold, Boolean fromNext) { this(pagingIdentifiers, threshold, fromNext, new SelectQueryConfig(true)); }
@Test public void testAscending() { PagingOffset offset = PagingOffset.of(PagingOffset.toOffset(3, false), 3); Assert.assertEquals(3, offset.startOffset()); Assert.assertEquals(3, offset.startDelta()); Assert.assertArrayEquals(new int[]{3, 4, 5}, toArray(offset)); }