xref: /aosp_15_r20/external/googleapis/google/datastore/v1beta3/query.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2018 Google Inc.
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker
15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
16*d5c09012SAndroid Build Coastguard Worker
17*d5c09012SAndroid Build Coastguard Workerpackage google.datastore.v1beta3;
18*d5c09012SAndroid Build Coastguard Worker
19*d5c09012SAndroid Build Coastguard Workerimport "google/api/annotations.proto";
20*d5c09012SAndroid Build Coastguard Workerimport "google/datastore/v1beta3/entity.proto";
21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/wrappers.proto";
22*d5c09012SAndroid Build Coastguard Workerimport "google/type/latlng.proto";
23*d5c09012SAndroid Build Coastguard Worker
24*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Datastore.V1Beta3";
25*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/datastore/v1beta3;datastore";
26*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true;
27*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "QueryProto";
28*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.datastore.v1beta3";
29*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Datastore\\V1beta3";
30*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Datastore::V1beta3";
31*d5c09012SAndroid Build Coastguard Worker
32*d5c09012SAndroid Build Coastguard Worker// The result of fetching an entity from Datastore.
33*d5c09012SAndroid Build Coastguard Workermessage EntityResult {
34*d5c09012SAndroid Build Coastguard Worker  // Specifies what data the 'entity' field contains.
35*d5c09012SAndroid Build Coastguard Worker  // A `ResultType` is either implied (for example, in `LookupResponse.missing`
36*d5c09012SAndroid Build Coastguard Worker  // from `datastore.proto`, it is always `KEY_ONLY`) or specified by context
37*d5c09012SAndroid Build Coastguard Worker  // (for example, in message `QueryResultBatch`, field `entity_result_type`
38*d5c09012SAndroid Build Coastguard Worker  // specifies a `ResultType` for all the values in field `entity_results`).
39*d5c09012SAndroid Build Coastguard Worker  enum ResultType {
40*d5c09012SAndroid Build Coastguard Worker    // Unspecified. This value is never used.
41*d5c09012SAndroid Build Coastguard Worker    RESULT_TYPE_UNSPECIFIED = 0;
42*d5c09012SAndroid Build Coastguard Worker
43*d5c09012SAndroid Build Coastguard Worker    // The key and properties.
44*d5c09012SAndroid Build Coastguard Worker    FULL = 1;
45*d5c09012SAndroid Build Coastguard Worker
46*d5c09012SAndroid Build Coastguard Worker    // A projected subset of properties. The entity may have no key.
47*d5c09012SAndroid Build Coastguard Worker    PROJECTION = 2;
48*d5c09012SAndroid Build Coastguard Worker
49*d5c09012SAndroid Build Coastguard Worker    // Only the key.
50*d5c09012SAndroid Build Coastguard Worker    KEY_ONLY = 3;
51*d5c09012SAndroid Build Coastguard Worker  }
52*d5c09012SAndroid Build Coastguard Worker
53*d5c09012SAndroid Build Coastguard Worker  // The resulting entity.
54*d5c09012SAndroid Build Coastguard Worker  Entity entity = 1;
55*d5c09012SAndroid Build Coastguard Worker
56*d5c09012SAndroid Build Coastguard Worker  // The version of the entity, a strictly positive number that monotonically
57*d5c09012SAndroid Build Coastguard Worker  // increases with changes to the entity.
58*d5c09012SAndroid Build Coastguard Worker  //
59*d5c09012SAndroid Build Coastguard Worker  // This field is set for
60*d5c09012SAndroid Build Coastguard Worker  // [`FULL`][google.datastore.v1beta3.EntityResult.ResultType.FULL] entity
61*d5c09012SAndroid Build Coastguard Worker  // results.
62*d5c09012SAndroid Build Coastguard Worker  //
63*d5c09012SAndroid Build Coastguard Worker  // For [missing][google.datastore.v1beta3.LookupResponse.missing] entities in
64*d5c09012SAndroid Build Coastguard Worker  // `LookupResponse`, this is the version of the snapshot that was used to look
65*d5c09012SAndroid Build Coastguard Worker  // up the entity, and it is always set except for eventually consistent reads.
66*d5c09012SAndroid Build Coastguard Worker  int64 version = 4;
67*d5c09012SAndroid Build Coastguard Worker
68*d5c09012SAndroid Build Coastguard Worker  // A cursor that points to the position after the result entity.
69*d5c09012SAndroid Build Coastguard Worker  // Set only when the `EntityResult` is part of a `QueryResultBatch` message.
70*d5c09012SAndroid Build Coastguard Worker  bytes cursor = 3;
71*d5c09012SAndroid Build Coastguard Worker}
72*d5c09012SAndroid Build Coastguard Worker
73*d5c09012SAndroid Build Coastguard Worker// A query for entities.
74*d5c09012SAndroid Build Coastguard Workermessage Query {
75*d5c09012SAndroid Build Coastguard Worker  // The projection to return. Defaults to returning all properties.
76*d5c09012SAndroid Build Coastguard Worker  repeated Projection projection = 2;
77*d5c09012SAndroid Build Coastguard Worker
78*d5c09012SAndroid Build Coastguard Worker  // The kinds to query (if empty, returns entities of all kinds).
79*d5c09012SAndroid Build Coastguard Worker  // Currently at most 1 kind may be specified.
80*d5c09012SAndroid Build Coastguard Worker  repeated KindExpression kind = 3;
81*d5c09012SAndroid Build Coastguard Worker
82*d5c09012SAndroid Build Coastguard Worker  // The filter to apply.
83*d5c09012SAndroid Build Coastguard Worker  Filter filter = 4;
84*d5c09012SAndroid Build Coastguard Worker
85*d5c09012SAndroid Build Coastguard Worker  // The order to apply to the query results (if empty, order is unspecified).
86*d5c09012SAndroid Build Coastguard Worker  repeated PropertyOrder order = 5;
87*d5c09012SAndroid Build Coastguard Worker
88*d5c09012SAndroid Build Coastguard Worker  // The properties to make distinct. The query results will contain the first
89*d5c09012SAndroid Build Coastguard Worker  // result for each distinct combination of values for the given properties
90*d5c09012SAndroid Build Coastguard Worker  // (if empty, all results are returned).
91*d5c09012SAndroid Build Coastguard Worker  repeated PropertyReference distinct_on = 6;
92*d5c09012SAndroid Build Coastguard Worker
93*d5c09012SAndroid Build Coastguard Worker  // A starting point for the query results. Query cursors are
94*d5c09012SAndroid Build Coastguard Worker  // returned in query result batches and
95*d5c09012SAndroid Build Coastguard Worker  // [can only be used to continue the same
96*d5c09012SAndroid Build Coastguard Worker  // query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
97*d5c09012SAndroid Build Coastguard Worker  bytes start_cursor = 7;
98*d5c09012SAndroid Build Coastguard Worker
99*d5c09012SAndroid Build Coastguard Worker  // An ending point for the query results. Query cursors are
100*d5c09012SAndroid Build Coastguard Worker  // returned in query result batches and
101*d5c09012SAndroid Build Coastguard Worker  // [can only be used to limit the same
102*d5c09012SAndroid Build Coastguard Worker  // query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
103*d5c09012SAndroid Build Coastguard Worker  bytes end_cursor = 8;
104*d5c09012SAndroid Build Coastguard Worker
105*d5c09012SAndroid Build Coastguard Worker  // The number of results to skip. Applies before limit, but after all other
106*d5c09012SAndroid Build Coastguard Worker  // constraints. Optional. Must be >= 0 if specified.
107*d5c09012SAndroid Build Coastguard Worker  int32 offset = 10;
108*d5c09012SAndroid Build Coastguard Worker
109*d5c09012SAndroid Build Coastguard Worker  // The maximum number of results to return. Applies after all other
110*d5c09012SAndroid Build Coastguard Worker  // constraints. Optional.
111*d5c09012SAndroid Build Coastguard Worker  // Unspecified is interpreted as no limit.
112*d5c09012SAndroid Build Coastguard Worker  // Must be >= 0 if specified.
113*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Int32Value limit = 12;
114*d5c09012SAndroid Build Coastguard Worker}
115*d5c09012SAndroid Build Coastguard Worker
116*d5c09012SAndroid Build Coastguard Worker// A representation of a kind.
117*d5c09012SAndroid Build Coastguard Workermessage KindExpression {
118*d5c09012SAndroid Build Coastguard Worker  // The name of the kind.
119*d5c09012SAndroid Build Coastguard Worker  string name = 1;
120*d5c09012SAndroid Build Coastguard Worker}
121*d5c09012SAndroid Build Coastguard Worker
122*d5c09012SAndroid Build Coastguard Worker// A reference to a property relative to the kind expressions.
123*d5c09012SAndroid Build Coastguard Workermessage PropertyReference {
124*d5c09012SAndroid Build Coastguard Worker  // The name of the property.
125*d5c09012SAndroid Build Coastguard Worker  // If name includes "."s, it may be interpreted as a property name path.
126*d5c09012SAndroid Build Coastguard Worker  string name = 2;
127*d5c09012SAndroid Build Coastguard Worker}
128*d5c09012SAndroid Build Coastguard Worker
129*d5c09012SAndroid Build Coastguard Worker// A representation of a property in a projection.
130*d5c09012SAndroid Build Coastguard Workermessage Projection {
131*d5c09012SAndroid Build Coastguard Worker  // The property to project.
132*d5c09012SAndroid Build Coastguard Worker  PropertyReference property = 1;
133*d5c09012SAndroid Build Coastguard Worker}
134*d5c09012SAndroid Build Coastguard Worker
135*d5c09012SAndroid Build Coastguard Worker// The desired order for a specific property.
136*d5c09012SAndroid Build Coastguard Workermessage PropertyOrder {
137*d5c09012SAndroid Build Coastguard Worker  // The sort direction.
138*d5c09012SAndroid Build Coastguard Worker  enum Direction {
139*d5c09012SAndroid Build Coastguard Worker    // Unspecified. This value must not be used.
140*d5c09012SAndroid Build Coastguard Worker    DIRECTION_UNSPECIFIED = 0;
141*d5c09012SAndroid Build Coastguard Worker
142*d5c09012SAndroid Build Coastguard Worker    // Ascending.
143*d5c09012SAndroid Build Coastguard Worker    ASCENDING = 1;
144*d5c09012SAndroid Build Coastguard Worker
145*d5c09012SAndroid Build Coastguard Worker    // Descending.
146*d5c09012SAndroid Build Coastguard Worker    DESCENDING = 2;
147*d5c09012SAndroid Build Coastguard Worker  }
148*d5c09012SAndroid Build Coastguard Worker
149*d5c09012SAndroid Build Coastguard Worker  // The property to order by.
150*d5c09012SAndroid Build Coastguard Worker  PropertyReference property = 1;
151*d5c09012SAndroid Build Coastguard Worker
152*d5c09012SAndroid Build Coastguard Worker  // The direction to order by. Defaults to `ASCENDING`.
153*d5c09012SAndroid Build Coastguard Worker  Direction direction = 2;
154*d5c09012SAndroid Build Coastguard Worker}
155*d5c09012SAndroid Build Coastguard Worker
156*d5c09012SAndroid Build Coastguard Worker// A holder for any type of filter.
157*d5c09012SAndroid Build Coastguard Workermessage Filter {
158*d5c09012SAndroid Build Coastguard Worker  // The type of filter.
159*d5c09012SAndroid Build Coastguard Worker  oneof filter_type {
160*d5c09012SAndroid Build Coastguard Worker    // A composite filter.
161*d5c09012SAndroid Build Coastguard Worker    CompositeFilter composite_filter = 1;
162*d5c09012SAndroid Build Coastguard Worker
163*d5c09012SAndroid Build Coastguard Worker    // A filter on a property.
164*d5c09012SAndroid Build Coastguard Worker    PropertyFilter property_filter = 2;
165*d5c09012SAndroid Build Coastguard Worker  }
166*d5c09012SAndroid Build Coastguard Worker}
167*d5c09012SAndroid Build Coastguard Worker
168*d5c09012SAndroid Build Coastguard Worker// A filter that merges multiple other filters using the given operator.
169*d5c09012SAndroid Build Coastguard Workermessage CompositeFilter {
170*d5c09012SAndroid Build Coastguard Worker  // A composite filter operator.
171*d5c09012SAndroid Build Coastguard Worker  enum Operator {
172*d5c09012SAndroid Build Coastguard Worker    // Unspecified. This value must not be used.
173*d5c09012SAndroid Build Coastguard Worker    OPERATOR_UNSPECIFIED = 0;
174*d5c09012SAndroid Build Coastguard Worker
175*d5c09012SAndroid Build Coastguard Worker    // The results are required to satisfy each of the combined filters.
176*d5c09012SAndroid Build Coastguard Worker    AND = 1;
177*d5c09012SAndroid Build Coastguard Worker  }
178*d5c09012SAndroid Build Coastguard Worker
179*d5c09012SAndroid Build Coastguard Worker  // The operator for combining multiple filters.
180*d5c09012SAndroid Build Coastguard Worker  Operator op = 1;
181*d5c09012SAndroid Build Coastguard Worker
182*d5c09012SAndroid Build Coastguard Worker  // The list of filters to combine.
183*d5c09012SAndroid Build Coastguard Worker  // Must contain at least one filter.
184*d5c09012SAndroid Build Coastguard Worker  repeated Filter filters = 2;
185*d5c09012SAndroid Build Coastguard Worker}
186*d5c09012SAndroid Build Coastguard Worker
187*d5c09012SAndroid Build Coastguard Worker// A filter on a specific property.
188*d5c09012SAndroid Build Coastguard Workermessage PropertyFilter {
189*d5c09012SAndroid Build Coastguard Worker  // A property filter operator.
190*d5c09012SAndroid Build Coastguard Worker  enum Operator {
191*d5c09012SAndroid Build Coastguard Worker    // Unspecified. This value must not be used.
192*d5c09012SAndroid Build Coastguard Worker    OPERATOR_UNSPECIFIED = 0;
193*d5c09012SAndroid Build Coastguard Worker
194*d5c09012SAndroid Build Coastguard Worker    // Less than.
195*d5c09012SAndroid Build Coastguard Worker    LESS_THAN = 1;
196*d5c09012SAndroid Build Coastguard Worker
197*d5c09012SAndroid Build Coastguard Worker    // Less than or equal.
198*d5c09012SAndroid Build Coastguard Worker    LESS_THAN_OR_EQUAL = 2;
199*d5c09012SAndroid Build Coastguard Worker
200*d5c09012SAndroid Build Coastguard Worker    // Greater than.
201*d5c09012SAndroid Build Coastguard Worker    GREATER_THAN = 3;
202*d5c09012SAndroid Build Coastguard Worker
203*d5c09012SAndroid Build Coastguard Worker    // Greater than or equal.
204*d5c09012SAndroid Build Coastguard Worker    GREATER_THAN_OR_EQUAL = 4;
205*d5c09012SAndroid Build Coastguard Worker
206*d5c09012SAndroid Build Coastguard Worker    // Equal.
207*d5c09012SAndroid Build Coastguard Worker    EQUAL = 5;
208*d5c09012SAndroid Build Coastguard Worker
209*d5c09012SAndroid Build Coastguard Worker    // Has ancestor.
210*d5c09012SAndroid Build Coastguard Worker    HAS_ANCESTOR = 11;
211*d5c09012SAndroid Build Coastguard Worker  }
212*d5c09012SAndroid Build Coastguard Worker
213*d5c09012SAndroid Build Coastguard Worker  // The property to filter by.
214*d5c09012SAndroid Build Coastguard Worker  PropertyReference property = 1;
215*d5c09012SAndroid Build Coastguard Worker
216*d5c09012SAndroid Build Coastguard Worker  // The operator to filter by.
217*d5c09012SAndroid Build Coastguard Worker  Operator op = 2;
218*d5c09012SAndroid Build Coastguard Worker
219*d5c09012SAndroid Build Coastguard Worker  // The value to compare the property to.
220*d5c09012SAndroid Build Coastguard Worker  Value value = 3;
221*d5c09012SAndroid Build Coastguard Worker}
222*d5c09012SAndroid Build Coastguard Worker
223*d5c09012SAndroid Build Coastguard Worker// A [GQL
224*d5c09012SAndroid Build Coastguard Worker// query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference).
225*d5c09012SAndroid Build Coastguard Workermessage GqlQuery {
226*d5c09012SAndroid Build Coastguard Worker  // A string of the format described
227*d5c09012SAndroid Build Coastguard Worker  // [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference).
228*d5c09012SAndroid Build Coastguard Worker  string query_string = 1;
229*d5c09012SAndroid Build Coastguard Worker
230*d5c09012SAndroid Build Coastguard Worker  // When false, the query string must not contain any literals and instead must
231*d5c09012SAndroid Build Coastguard Worker  // bind all values. For example,
232*d5c09012SAndroid Build Coastguard Worker  // `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while
233*d5c09012SAndroid Build Coastguard Worker  // `SELECT * FROM Kind WHERE a = @value` is.
234*d5c09012SAndroid Build Coastguard Worker  bool allow_literals = 2;
235*d5c09012SAndroid Build Coastguard Worker
236*d5c09012SAndroid Build Coastguard Worker  // For each non-reserved named binding site in the query string, there must be
237*d5c09012SAndroid Build Coastguard Worker  // a named parameter with that name, but not necessarily the inverse.
238*d5c09012SAndroid Build Coastguard Worker  //
239*d5c09012SAndroid Build Coastguard Worker  // Key must match regex `[A-Za-z_$][A-Za-z_$0-9]*`, must not match regex
240*d5c09012SAndroid Build Coastguard Worker  // `__.*__`, and must not be `""`.
241*d5c09012SAndroid Build Coastguard Worker  map<string, GqlQueryParameter> named_bindings = 5;
242*d5c09012SAndroid Build Coastguard Worker
243*d5c09012SAndroid Build Coastguard Worker  // Numbered binding site @1 references the first numbered parameter,
244*d5c09012SAndroid Build Coastguard Worker  // effectively using 1-based indexing, rather than the usual 0.
245*d5c09012SAndroid Build Coastguard Worker  //
246*d5c09012SAndroid Build Coastguard Worker  // For each binding site numbered i in `query_string`, there must be an i-th
247*d5c09012SAndroid Build Coastguard Worker  // numbered parameter. The inverse must also be true.
248*d5c09012SAndroid Build Coastguard Worker  repeated GqlQueryParameter positional_bindings = 4;
249*d5c09012SAndroid Build Coastguard Worker}
250*d5c09012SAndroid Build Coastguard Worker
251*d5c09012SAndroid Build Coastguard Worker// A binding parameter for a GQL query.
252*d5c09012SAndroid Build Coastguard Workermessage GqlQueryParameter {
253*d5c09012SAndroid Build Coastguard Worker  // The type of parameter.
254*d5c09012SAndroid Build Coastguard Worker  oneof parameter_type {
255*d5c09012SAndroid Build Coastguard Worker    // A value parameter.
256*d5c09012SAndroid Build Coastguard Worker    Value value = 2;
257*d5c09012SAndroid Build Coastguard Worker
258*d5c09012SAndroid Build Coastguard Worker    // A query cursor. Query cursors are returned in query
259*d5c09012SAndroid Build Coastguard Worker    // result batches.
260*d5c09012SAndroid Build Coastguard Worker    bytes cursor = 3;
261*d5c09012SAndroid Build Coastguard Worker  }
262*d5c09012SAndroid Build Coastguard Worker}
263*d5c09012SAndroid Build Coastguard Worker
264*d5c09012SAndroid Build Coastguard Worker// A batch of results produced by a query.
265*d5c09012SAndroid Build Coastguard Workermessage QueryResultBatch {
266*d5c09012SAndroid Build Coastguard Worker  // The possible values for the `more_results` field.
267*d5c09012SAndroid Build Coastguard Worker  enum MoreResultsType {
268*d5c09012SAndroid Build Coastguard Worker    // Unspecified. This value is never used.
269*d5c09012SAndroid Build Coastguard Worker    MORE_RESULTS_TYPE_UNSPECIFIED = 0;
270*d5c09012SAndroid Build Coastguard Worker
271*d5c09012SAndroid Build Coastguard Worker    // There may be additional batches to fetch from this query.
272*d5c09012SAndroid Build Coastguard Worker    NOT_FINISHED = 1;
273*d5c09012SAndroid Build Coastguard Worker
274*d5c09012SAndroid Build Coastguard Worker    // The query is finished, but there may be more results after the limit.
275*d5c09012SAndroid Build Coastguard Worker    MORE_RESULTS_AFTER_LIMIT = 2;
276*d5c09012SAndroid Build Coastguard Worker
277*d5c09012SAndroid Build Coastguard Worker    // The query is finished, but there may be more results after the end
278*d5c09012SAndroid Build Coastguard Worker    // cursor.
279*d5c09012SAndroid Build Coastguard Worker    MORE_RESULTS_AFTER_CURSOR = 4;
280*d5c09012SAndroid Build Coastguard Worker
281*d5c09012SAndroid Build Coastguard Worker    // The query is finished, and there are no more results.
282*d5c09012SAndroid Build Coastguard Worker    NO_MORE_RESULTS = 3;
283*d5c09012SAndroid Build Coastguard Worker  }
284*d5c09012SAndroid Build Coastguard Worker
285*d5c09012SAndroid Build Coastguard Worker  // The number of results skipped, typically because of an offset.
286*d5c09012SAndroid Build Coastguard Worker  int32 skipped_results = 6;
287*d5c09012SAndroid Build Coastguard Worker
288*d5c09012SAndroid Build Coastguard Worker  // A cursor that points to the position after the last skipped result.
289*d5c09012SAndroid Build Coastguard Worker  // Will be set when `skipped_results` != 0.
290*d5c09012SAndroid Build Coastguard Worker  bytes skipped_cursor = 3;
291*d5c09012SAndroid Build Coastguard Worker
292*d5c09012SAndroid Build Coastguard Worker  // The result type for every entity in `entity_results`.
293*d5c09012SAndroid Build Coastguard Worker  EntityResult.ResultType entity_result_type = 1;
294*d5c09012SAndroid Build Coastguard Worker
295*d5c09012SAndroid Build Coastguard Worker  // The results for this batch.
296*d5c09012SAndroid Build Coastguard Worker  repeated EntityResult entity_results = 2;
297*d5c09012SAndroid Build Coastguard Worker
298*d5c09012SAndroid Build Coastguard Worker  // A cursor that points to the position after the last result in the batch.
299*d5c09012SAndroid Build Coastguard Worker  bytes end_cursor = 4;
300*d5c09012SAndroid Build Coastguard Worker
301*d5c09012SAndroid Build Coastguard Worker  // The state of the query after the current batch.
302*d5c09012SAndroid Build Coastguard Worker  MoreResultsType more_results = 5;
303*d5c09012SAndroid Build Coastguard Worker
304*d5c09012SAndroid Build Coastguard Worker  // The version number of the snapshot this batch was returned from.
305*d5c09012SAndroid Build Coastguard Worker  // This applies to the range of results from the query's `start_cursor` (or
306*d5c09012SAndroid Build Coastguard Worker  // the beginning of the query if no cursor was given) to this batch's
307*d5c09012SAndroid Build Coastguard Worker  // `end_cursor` (not the query's `end_cursor`).
308*d5c09012SAndroid Build Coastguard Worker  //
309*d5c09012SAndroid Build Coastguard Worker  // In a single transaction, subsequent query result batches for the same query
310*d5c09012SAndroid Build Coastguard Worker  // can have a greater snapshot version number. Each batch's snapshot version
311*d5c09012SAndroid Build Coastguard Worker  // is valid for all preceding batches.
312*d5c09012SAndroid Build Coastguard Worker  // The value will be zero for eventually consistent queries.
313*d5c09012SAndroid Build Coastguard Worker  int64 snapshot_version = 7;
314*d5c09012SAndroid Build Coastguard Worker}
315