1 package com
.google
.appengine
.api
.datastore
;
3 import com
.google
.datastore
.v1beta3
.QueryResultBatch
;
4 import com
.google
.datastore
.v1beta3
.RunQueryRequest
;
5 import com
.google
.datastore
.v1beta3
.RunQueryResponse
;
7 import java
.util
.concurrent
.Future
;
9 class QueryResultsSourceCloudDatastoreV1
extends
10 BaseQueryResultsSource
<RunQueryResponse
, RunQueryRequest
, RunQueryResponse
> {
12 private final CloudDatastoreV1Proxy cloudDatastoreV1Proxy
;
13 private final RunQueryRequest initialRequest
;
14 private int remainingLimit
;
16 QueryResultsSourceCloudDatastoreV1(DatastoreCallbacks callbacks
, FetchOptions fetchOptions
,
17 Transaction txn
, Query query
, RunQueryRequest request
,
18 Future
<RunQueryResponse
> runQueryResponse
, CloudDatastoreV1Proxy cloudDatastoreV1Proxy
) {
19 super(callbacks
, fetchOptions
, txn
, query
, runQueryResponse
);
20 this.initialRequest
= request
;
21 this.cloudDatastoreV1Proxy
= cloudDatastoreV1Proxy
;
22 remainingLimit
= fetchOptions
.getLimit() != null ? fetchOptions
.getLimit() : -1;
26 RunQueryRequest
buildNextCallPrototype(RunQueryResponse initialResponse
) {
27 return initialRequest
;
31 Future
<RunQueryResponse
> makeNextCall(RunQueryRequest prototype
, WrappedQueryResult latestResult
, Integer fetchCount
, Integer offset
) {
32 RunQueryRequest
.Builder runQueryRequest
= prototype
.toBuilder();
33 com
.google
.datastore
.v1beta3
.Query
.Builder query
= runQueryRequest
.getQueryBuilder();
34 query
.setStartCursor(latestResult
.getEndCursor().toByteString());
35 QueryResultBatch latestBatch
= ((WrappedQueryResultCloudDatastoreV1
) latestResult
).getBatch();
36 if (query
.hasLimit()) {
37 remainingLimit
-= latestBatch
.getEntityResultsCount();
38 query
.getLimitBuilder().setValue(Math
.max(remainingLimit
, 0));
41 query
.setOffset(offset
);
45 return cloudDatastoreV1Proxy
.runQuery(runQueryRequest
.build());
49 WrappedQueryResult
wrapInitialResult(RunQueryResponse initialResponse
) {
50 return new WrappedQueryResultCloudDatastoreV1(initialResponse
.getBatch());
54 WrappedQueryResult
wrapResult(RunQueryResponse res
) {
55 return new WrappedQueryResultCloudDatastoreV1(res
.getBatch());