/** */ @Override public Cursor getCursorAfter() { return source.getCursorAfter(); }
break; query = query.toBuilder().setStartCursor(results.getCursorAfter()).build();
@Override public Cursor getCursorAfter() { return ((QueryResults<F>)this.base).getCursorAfter(); }
@Override public Cursor getCursorAfter() { return base.getCursorAfter(); }
@Override public boolean hasNext() { final boolean hasNext = stream.hasNext(); // This addresses the edge case of iterating on an empty result set. In that case, the // cursor we get after calling source.hasNext() is different from the one we get before. if (!hasNext) this.cursorAfter = source.getCursorAfter(); return hasNext; }
assertEquals(expectedEndCursor, results.getCursorAfter()); if (resultCount < limit) { break; query = query.toBuilder().setStartCursor(results.getCursorAfter()).build();
@Override public ResultWithCursor<T> next() { final T next = base.next(); final Cursor cursor = base.getCursorAfter(); return new ResultWithCursor<>(next, cursor); } }
/** * @param chunkSize can be MAX_VALUE to indicate "just one chunk" */ public HybridQueryResults( final LoadEngine loadEngine, final QueryResults<Key<T>> source, final int chunkSize) { this.loadEngine = loadEngine; this.source = source; // Always start with whatever was in the source to begin with this.cursorAfter = source.getCursorAfter(); // Turn the result in to {key, cursor} pairs final Iterator<ResultWithCursor<Key<T>>> withCursor = new ResultWithCursor.Iterator<>(source); // Break it into chunks final Iterator<Iterator<ResultWithCursor<Key<T>>>> chunked = safePartition(withCursor, chunkSize); // Load each chunk as a batch final Iterator<Iterator<ResultWithCursor<T>>> loaded = Iterators.transform(chunked, this::load); // Put the chunks back into a linear stream final Iterator<ResultWithCursor<T>> concatenated = Iterators.concat(loaded); // Filter out any null results this.stream = Iterators.filter(concatenated, rwc -> rwc.getResult() != null); }
@Override public Cursor getCursorAfter() { return results.getCursorAfter(); }
DefaultQueryResponse<String> response = new DefaultQueryResponse<>(); List<String> namespaces = new ArrayList<>(Math.max(limit, 50)); response.setStartCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); while (results.hasNext()) { Key key = results.next(); response.setEndCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); return response; } catch (DatastoreException exp) {
List<DatastoreKey> entities = new ArrayList<>(); DefaultQueryResponse<DatastoreKey> response = new DefaultQueryResponse<>(); response.setStartCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); while (results.hasNext()) { Key result = results.next(); response.setEndCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); return response; } catch (DatastoreException exp) {
List<E> entities = new ArrayList<>(); DefaultQueryResponse<E> response = new DefaultQueryResponse<>(); response.setStartCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); while (results.hasNext()) { ProjectionEntity result = results.next(); response.setEndCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe()));
List<E> entities = new ArrayList<>(); DefaultQueryResponse<E> response = new DefaultQueryResponse<>(); response.setStartCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); while (results.hasNext()) { Entity result = results.next(); response.setEndCursor(new DefaultDatastoreCursor(results.getCursorAfter().toUrlSafe())); entityManager.executeEntityListeners(CallbackType.POST_LOAD, entities); return response;