@Override public MapKeyResults getAllKeys(final MapScope scope, final String cursor, final int limit ){ final int[] buckets = BUCKET_LOCATOR.getAllBuckets( scope.getName() ); final List<ByteBuffer> partitionKeys = new ArrayList<>(NUM_BUCKETS.length); for (int bucket : buckets) { partitionKeys.add(getMapKeyPartitionKey(scope, bucket)); } Clause in = QueryBuilder.in("key", partitionKeys); Statement statement; if( isBlank(cursor) ){ statement = QueryBuilder.select().all().from(MAP_KEYS_TABLE) .where(in) .setFetchSize(limit); }else{ statement = QueryBuilder.select().all().from(MAP_KEYS_TABLE) .where(in) .setFetchSize(limit) .setPagingState(PagingState.fromString(cursor)); } ResultSet resultSet = session.execute(statement); PagingState pagingState = resultSet.getExecutionInfo().getPagingState(); final List<String> keys = new ArrayList<>(); Iterator<Row> resultIterator = resultSet.iterator(); int size = 0; while( resultIterator.hasNext() && size < limit){ size++; keys.add((String)DataType.text().deserialize(resultIterator.next().getBytes("column1"), ProtocolVersion.NEWEST_SUPPORTED)); } return new MapKeyResults(pagingState != null ? pagingState.toString() : null, keys); }
private void selectNext() { if (dates.hasNext()) { String date = dates.next(); Statement statement = QueryBuilder.select(fields).from(TABLE_NAME) .where(eq("analyse_id", UUID.fromString(analyseId))) .and(eq("jvm_id", jvmId)) .and(eq("date", date)) .and(gte("written_at", QueryBuilder.fcall("minTimeuuid", range.from().getMillis()))) .and(lte("written_at", QueryBuilder.fcall("maxTimeuuid", range.to().getMillis()))).setFetchSize(fetchSize); LOG.debug("Query: {}", statement); resultIterator = connector.session().execute(statement).iterator(); } }
protected ResultSet events0(String analyseId, String jvmId, Range range, String[] fields) { return connector.session().execute(QueryBuilder.select(fields).from(TABLE_NAME) .where(eq("analyse_id", UUID.fromString(analyseId))) .and(eq("jvm_id", jvmId)) .and(gte("written_at", QueryBuilder.fcall("minTimeuuid", range.from().getMillis()))) .and(lte("written_at", QueryBuilder.fcall("maxTimeuuid", range.to().getMillis()))).setFetchSize(fetchSize)); }
@Test void pagingShouldWork() { int fetchSize = 200; int size = 2 * fetchSize + 50; CompletableFutureUtil.allOf( IntStream.range(0, size) .boxed() .map(i -> executor .executeVoid(insertInto(TABLE_NAME) .value(ID, UUID) .value(CLUSTERING, i)))) .join(); assertThat( executor.execute(select() .from(TABLE_NAME) .where(eq(ID, UUID)) .setFetchSize(fetchSize)) .join()) .hasSize(size); }
@Test void pagingShouldWork() { int fetchSize = 200; int size = 2 * fetchSize + 50; CompletableFutureUtil.allOf( IntStream.range(0, size) .boxed() .map(i -> executor .executeVoid(insertInto(TABLE_NAME) .value(ID, UUID) .value(CLUSTERING, i)))) .join(); assertThat( executor.execute(select() .from(TABLE_NAME) .where(eq(ID, UUID)) .setFetchSize(fetchSize)) .join()) .hasSize(size); }