@Override protected T computeNext() { while (!entityResultPbIter.hasNext() && !lastBatch) { query = query.nextQuery(runQueryResponsePb); sendRequest(); } if (!entityResultPbIter.hasNext()) { cursor = runQueryResponsePb.getBatch().getEndCursor(); return endOfData(); } com.google.datastore.v1.EntityResult entityResultPb = entityResultPbIter.next(); cursor = entityResultPb.getCursor(); @SuppressWarnings("unchecked") T result = (T) actualResultType.convert(entityResultPb.getEntity()); return result; }
private void sendRequest() { com.google.datastore.v1.RunQueryRequest.Builder requestPb = com.google.datastore.v1.RunQueryRequest.newBuilder(); if (readOptionsPb != null) { requestPb.setReadOptions(readOptionsPb); } requestPb.setPartitionId(partitionIdPb); query.populatePb(requestPb); runQueryResponsePb = datastore.runQuery(requestPb.build()); mostRecentQueryPb = runQueryResponsePb.getQuery(); if (mostRecentQueryPb == null) { mostRecentQueryPb = requestPb.getQuery(); } lastBatch = runQueryResponsePb.getBatch().getMoreResults() != MoreResultsType.NOT_FINISHED; entityResultPbIter = runQueryResponsePb.getBatch().getEntityResultsList().iterator(); actualResultType = ResultType.fromPb(runQueryResponsePb.getBatch().getEntityResultType()); if (Objects.equals(queryResultType, ResultType.PROJECTION_ENTITY)) { // projection entity can represent all type of results actualResultType = ResultType.PROJECTION_ENTITY; } Preconditions.checkState( queryResultType.isAssignableFrom(actualResultType), "Unexpected result type " + actualResultType + " vs " + queryResultType); }
private void sendRequest() { com.google.datastore.v1.RunQueryRequest.Builder requestPb = com.google.datastore.v1.RunQueryRequest.newBuilder(); if (readOptionsPb != null) { requestPb.setReadOptions(readOptionsPb); } requestPb.setPartitionId(partitionIdPb); query.populatePb(requestPb); runQueryResponsePb = datastore.runQuery(requestPb.build()); mostRecentQueryPb = runQueryResponsePb.getQuery(); if (mostRecentQueryPb == null) { mostRecentQueryPb = requestPb.getQuery(); } lastBatch = runQueryResponsePb.getBatch().getMoreResults() != MoreResultsType.NOT_FINISHED; entityResultPbIter = runQueryResponsePb.getBatch().getEntityResultsList().iterator(); actualResultType = ResultType.fromPb(runQueryResponsePb.getBatch().getEntityResultType()); if (Objects.equals(queryResultType, ResultType.PROJECTION_ENTITY)) { // projection entity can represent all type of results actualResultType = ResultType.PROJECTION_ENTITY; } Preconditions.checkState( queryResultType.isAssignableFrom(actualResultType), "Unexpected result type " + actualResultType + " vs " + queryResultType); }
@Override protected T computeNext() { while (!entityResultPbIter.hasNext() && !lastBatch) { query = query.nextQuery(runQueryResponsePb); sendRequest(); } if (!entityResultPbIter.hasNext()) { cursor = runQueryResponsePb.getBatch().getEndCursor(); return endOfData(); } com.google.datastore.v1.EntityResult entityResultPb = entityResultPbIter.next(); cursor = entityResultPb.getCursor(); @SuppressWarnings("unchecked") T result = (T) actualResultType.convert(entityResultPb.getEntity()); return result; }
@SuppressWarnings("unchecked") static <V> StructuredQuery<V> fromPb( ResultType<?> resultType, String namespace, com.google.datastore.v1.Query queryPb) { BuilderImpl<?, ?> builder; if (resultType.equals(ResultType.ENTITY)) { builder = new EntityQuery.Builder(); } else if (resultType.equals(ResultType.KEY)) { builder = new KeyQuery.Builder(); } else { builder = new ProjectionEntityQuery.Builder(); } return (StructuredQuery<V>) builder.setNamespace(namespace).mergeFrom(queryPb).build(); } }
@Override public Class<?> getResultClass() { return actualResultType.resultClass(); }
@SuppressWarnings("unchecked") static <V> StructuredQuery<V> fromPb( ResultType<?> resultType, String namespace, com.google.datastore.v1.Query queryPb) { BuilderImpl<?, ?> builder; if (resultType.equals(ResultType.ENTITY)) { builder = new EntityQuery.Builder(); } else if (resultType.equals(ResultType.KEY)) { builder = new KeyQuery.Builder(); } else { builder = new ProjectionEntityQuery.Builder(); } return (StructuredQuery<V>) builder.setNamespace(namespace).mergeFrom(queryPb).build(); } }
@Override public Class<?> getResultClass() { return actualResultType.resultClass(); }