@@ -72,20 +72,22 @@ public Query getQuery() {
72
72
*/
73
73
@ Nonnull
74
74
public ApiFuture <AggregateQuerySnapshot > get () {
75
- return get (null );
75
+ return get (null , null );
76
76
}
77
77
78
78
@ Nonnull
79
- ApiFuture <AggregateQuerySnapshot > get (@ Nullable final ByteString transactionId ) {
79
+ ApiFuture <AggregateQuerySnapshot > get (
80
+ @ Nullable final ByteString transactionId , @ Nullable com .google .protobuf .Timestamp readTime ) {
80
81
AggregateQueryResponseDeliverer responseDeliverer =
81
82
new AggregateQueryResponseDeliverer (
82
- transactionId , /* startTimeNanos= */ query .rpcContext .getClock ().nanoTime ());
83
+ transactionId , readTime , /* startTimeNanos= */ query .rpcContext .getClock ().nanoTime ());
83
84
runQuery (responseDeliverer );
84
85
return responseDeliverer .getFuture ();
85
86
}
86
87
87
88
private void runQuery (AggregateQueryResponseDeliverer responseDeliverer ) {
88
- RunAggregationQueryRequest request = toProto (responseDeliverer .getTransactionId ());
89
+ RunAggregationQueryRequest request =
90
+ toProto (responseDeliverer .transactionId , responseDeliverer .readTime );
89
91
AggregateQueryResponseObserver responseObserver =
90
92
new AggregateQueryResponseObserver (responseDeliverer );
91
93
ServerStreamingCallable <RunAggregationQueryRequest , RunAggregationQueryResponse > callable =
@@ -96,28 +98,24 @@ private void runQuery(AggregateQueryResponseDeliverer responseDeliverer) {
96
98
private final class AggregateQueryResponseDeliverer {
97
99
98
100
@ Nullable private final ByteString transactionId ;
101
+ @ Nullable private final com .google .protobuf .Timestamp readTime ;
99
102
private final long startTimeNanos ;
100
103
private final SettableApiFuture <AggregateQuerySnapshot > future = SettableApiFuture .create ();
101
104
private final AtomicBoolean isFutureCompleted = new AtomicBoolean (false );
102
105
103
- AggregateQueryResponseDeliverer (@ Nullable ByteString transactionId , long startTimeNanos ) {
106
+ AggregateQueryResponseDeliverer (
107
+ @ Nullable ByteString transactionId ,
108
+ @ Nullable com .google .protobuf .Timestamp readTime ,
109
+ long startTimeNanos ) {
104
110
this .transactionId = transactionId ;
111
+ this .readTime = readTime ;
105
112
this .startTimeNanos = startTimeNanos ;
106
113
}
107
114
108
115
ApiFuture <AggregateQuerySnapshot > getFuture () {
109
116
return future ;
110
117
}
111
118
112
- @ Nullable
113
- ByteString getTransactionId () {
114
- return transactionId ;
115
- }
116
-
117
- long getStartTimeNanos () {
118
- return startTimeNanos ;
119
- }
120
-
121
119
void deliverResult (@ Nonnull Map <String , Value > data , Timestamp readTime ) {
122
120
if (isFutureCompleted .compareAndSet (false , true )) {
123
121
Map <String , Value > mappedData = new HashMap <>();
@@ -176,8 +174,8 @@ private boolean shouldRetry(Throwable throwable) {
176
174
FirestoreSettings .newBuilder ().runAggregationQuerySettings ().getRetryableCodes ();
177
175
return query .shouldRetryQuery (
178
176
throwable ,
179
- responseDeliverer .getTransactionId () ,
180
- responseDeliverer .getStartTimeNanos () ,
177
+ responseDeliverer .transactionId ,
178
+ responseDeliverer .startTimeNanos ,
181
179
retryableCodes );
182
180
}
183
181
@@ -193,18 +191,23 @@ public void onComplete() {}
193
191
*/
194
192
@ Nonnull
195
193
public RunAggregationQueryRequest toProto () {
196
- return toProto (null );
194
+ return toProto (null , null );
197
195
}
198
196
199
197
@ Nonnull
200
- RunAggregationQueryRequest toProto (@ Nullable final ByteString transactionId ) {
198
+ RunAggregationQueryRequest toProto (
199
+ @ Nullable final ByteString transactionId ,
200
+ @ Nullable final com .google .protobuf .Timestamp readTime ) {
201
201
RunQueryRequest runQueryRequest = query .toProto ();
202
202
203
203
RunAggregationQueryRequest .Builder request = RunAggregationQueryRequest .newBuilder ();
204
204
request .setParent (runQueryRequest .getParent ());
205
205
if (transactionId != null ) {
206
206
request .setTransaction (transactionId );
207
207
}
208
+ if (readTime != null ) {
209
+ request .setReadTime (readTime );
210
+ }
208
211
209
212
StructuredAggregationQuery .Builder structuredAggregationQuery =
210
213
request .getStructuredAggregationQueryBuilder ();
0 commit comments