1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 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.v1; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/datastore/v1/entity.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/wrappers.proto"; 23*d5c09012SAndroid Build Coastguard Worker 24*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Datastore.V1"; 25*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/datastore/v1;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.v1"; 29*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Datastore\\V1"; 30*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Datastore::V1"; 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.v1.EntityResult.ResultType.FULL] entity results. 61*d5c09012SAndroid Build Coastguard Worker // 62*d5c09012SAndroid Build Coastguard Worker // For [missing][google.datastore.v1.LookupResponse.missing] entities in 63*d5c09012SAndroid Build Coastguard Worker // `LookupResponse`, this is the version of the snapshot that was used to look 64*d5c09012SAndroid Build Coastguard Worker // up the entity, and it is always set except for eventually consistent reads. 65*d5c09012SAndroid Build Coastguard Worker int64 version = 4; 66*d5c09012SAndroid Build Coastguard Worker 67*d5c09012SAndroid Build Coastguard Worker // The time at which the entity was created. 68*d5c09012SAndroid Build Coastguard Worker // This field is set for 69*d5c09012SAndroid Build Coastguard Worker // [`FULL`][google.datastore.v1.EntityResult.ResultType.FULL] entity results. 70*d5c09012SAndroid Build Coastguard Worker // If this entity is missing, this field will not be set. 71*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp create_time = 6; 72*d5c09012SAndroid Build Coastguard Worker 73*d5c09012SAndroid Build Coastguard Worker // The time at which the entity was last changed. 74*d5c09012SAndroid Build Coastguard Worker // This field is set for 75*d5c09012SAndroid Build Coastguard Worker // [`FULL`][google.datastore.v1.EntityResult.ResultType.FULL] entity results. 76*d5c09012SAndroid Build Coastguard Worker // If this entity is missing, this field will not be set. 77*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp update_time = 5; 78*d5c09012SAndroid Build Coastguard Worker 79*d5c09012SAndroid Build Coastguard Worker // A cursor that points to the position after the result entity. 80*d5c09012SAndroid Build Coastguard Worker // Set only when the `EntityResult` is part of a `QueryResultBatch` message. 81*d5c09012SAndroid Build Coastguard Worker bytes cursor = 3; 82*d5c09012SAndroid Build Coastguard Worker} 83*d5c09012SAndroid Build Coastguard Worker 84*d5c09012SAndroid Build Coastguard Worker// A query for entities. 85*d5c09012SAndroid Build Coastguard Workermessage Query { 86*d5c09012SAndroid Build Coastguard Worker // The projection to return. Defaults to returning all properties. 87*d5c09012SAndroid Build Coastguard Worker repeated Projection projection = 2; 88*d5c09012SAndroid Build Coastguard Worker 89*d5c09012SAndroid Build Coastguard Worker // The kinds to query (if empty, returns entities of all kinds). 90*d5c09012SAndroid Build Coastguard Worker // Currently at most 1 kind may be specified. 91*d5c09012SAndroid Build Coastguard Worker repeated KindExpression kind = 3; 92*d5c09012SAndroid Build Coastguard Worker 93*d5c09012SAndroid Build Coastguard Worker // The filter to apply. 94*d5c09012SAndroid Build Coastguard Worker Filter filter = 4; 95*d5c09012SAndroid Build Coastguard Worker 96*d5c09012SAndroid Build Coastguard Worker // The order to apply to the query results (if empty, order is unspecified). 97*d5c09012SAndroid Build Coastguard Worker repeated PropertyOrder order = 5; 98*d5c09012SAndroid Build Coastguard Worker 99*d5c09012SAndroid Build Coastguard Worker // The properties to make distinct. The query results will contain the first 100*d5c09012SAndroid Build Coastguard Worker // result for each distinct combination of values for the given properties 101*d5c09012SAndroid Build Coastguard Worker // (if empty, all results are returned). 102*d5c09012SAndroid Build Coastguard Worker // 103*d5c09012SAndroid Build Coastguard Worker // Requires: 104*d5c09012SAndroid Build Coastguard Worker // 105*d5c09012SAndroid Build Coastguard Worker // * If `order` is specified, the set of distinct on properties must appear 106*d5c09012SAndroid Build Coastguard Worker // before the non-distinct on properties in `order`. 107*d5c09012SAndroid Build Coastguard Worker repeated PropertyReference distinct_on = 6; 108*d5c09012SAndroid Build Coastguard Worker 109*d5c09012SAndroid Build Coastguard Worker // A starting point for the query results. Query cursors are 110*d5c09012SAndroid Build Coastguard Worker // returned in query result batches and 111*d5c09012SAndroid Build Coastguard Worker // [can only be used to continue the same 112*d5c09012SAndroid Build Coastguard Worker // query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). 113*d5c09012SAndroid Build Coastguard Worker bytes start_cursor = 7; 114*d5c09012SAndroid Build Coastguard Worker 115*d5c09012SAndroid Build Coastguard Worker // An ending point for the query results. Query cursors are 116*d5c09012SAndroid Build Coastguard Worker // returned in query result batches and 117*d5c09012SAndroid Build Coastguard Worker // [can only be used to limit the same 118*d5c09012SAndroid Build Coastguard Worker // query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets). 119*d5c09012SAndroid Build Coastguard Worker bytes end_cursor = 8; 120*d5c09012SAndroid Build Coastguard Worker 121*d5c09012SAndroid Build Coastguard Worker // The number of results to skip. Applies before limit, but after all other 122*d5c09012SAndroid Build Coastguard Worker // constraints. Optional. Must be >= 0 if specified. 123*d5c09012SAndroid Build Coastguard Worker int32 offset = 10; 124*d5c09012SAndroid Build Coastguard Worker 125*d5c09012SAndroid Build Coastguard Worker // The maximum number of results to return. Applies after all other 126*d5c09012SAndroid Build Coastguard Worker // constraints. Optional. 127*d5c09012SAndroid Build Coastguard Worker // Unspecified is interpreted as no limit. 128*d5c09012SAndroid Build Coastguard Worker // Must be >= 0 if specified. 129*d5c09012SAndroid Build Coastguard Worker google.protobuf.Int32Value limit = 12; 130*d5c09012SAndroid Build Coastguard Worker} 131*d5c09012SAndroid Build Coastguard Worker 132*d5c09012SAndroid Build Coastguard Worker// Datastore query for running an aggregation over a 133*d5c09012SAndroid Build Coastguard Worker// [Query][google.datastore.v1.Query]. 134*d5c09012SAndroid Build Coastguard Workermessage AggregationQuery { 135*d5c09012SAndroid Build Coastguard Worker // Defines an aggregation that produces a single result. 136*d5c09012SAndroid Build Coastguard Worker message Aggregation { 137*d5c09012SAndroid Build Coastguard Worker // Count of entities that match the query. 138*d5c09012SAndroid Build Coastguard Worker // 139*d5c09012SAndroid Build Coastguard Worker // The `COUNT(*)` aggregation function operates on the entire entity 140*d5c09012SAndroid Build Coastguard Worker // so it does not require a field reference. 141*d5c09012SAndroid Build Coastguard Worker message Count { 142*d5c09012SAndroid Build Coastguard Worker // Optional. Optional constraint on the maximum number of entities to 143*d5c09012SAndroid Build Coastguard Worker // count. 144*d5c09012SAndroid Build Coastguard Worker // 145*d5c09012SAndroid Build Coastguard Worker // This provides a way to set an upper bound on the number of entities 146*d5c09012SAndroid Build Coastguard Worker // to scan, limiting latency, and cost. 147*d5c09012SAndroid Build Coastguard Worker // 148*d5c09012SAndroid Build Coastguard Worker // Unspecified is interpreted as no bound. 149*d5c09012SAndroid Build Coastguard Worker // 150*d5c09012SAndroid Build Coastguard Worker // If a zero value is provided, a count result of zero should always be 151*d5c09012SAndroid Build Coastguard Worker // expected. 152*d5c09012SAndroid Build Coastguard Worker // 153*d5c09012SAndroid Build Coastguard Worker // High-Level Example: 154*d5c09012SAndroid Build Coastguard Worker // 155*d5c09012SAndroid Build Coastguard Worker // ``` 156*d5c09012SAndroid Build Coastguard Worker // AGGREGATE COUNT_UP_TO(1000) OVER ( SELECT * FROM k ); 157*d5c09012SAndroid Build Coastguard Worker // ``` 158*d5c09012SAndroid Build Coastguard Worker // 159*d5c09012SAndroid Build Coastguard Worker // Requires: 160*d5c09012SAndroid Build Coastguard Worker // 161*d5c09012SAndroid Build Coastguard Worker // * Must be non-negative when present. 162*d5c09012SAndroid Build Coastguard Worker google.protobuf.Int64Value up_to = 1 163*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 164*d5c09012SAndroid Build Coastguard Worker } 165*d5c09012SAndroid Build Coastguard Worker 166*d5c09012SAndroid Build Coastguard Worker // Sum of the values of the requested property. 167*d5c09012SAndroid Build Coastguard Worker // 168*d5c09012SAndroid Build Coastguard Worker // * Only numeric values will be aggregated. All non-numeric values 169*d5c09012SAndroid Build Coastguard Worker // including `NULL` are skipped. 170*d5c09012SAndroid Build Coastguard Worker // 171*d5c09012SAndroid Build Coastguard Worker // * If the aggregated values contain `NaN`, returns `NaN`. Infinity math 172*d5c09012SAndroid Build Coastguard Worker // follows IEEE-754 standards. 173*d5c09012SAndroid Build Coastguard Worker // 174*d5c09012SAndroid Build Coastguard Worker // * If the aggregated value set is empty, returns 0. 175*d5c09012SAndroid Build Coastguard Worker // 176*d5c09012SAndroid Build Coastguard Worker // * Returns a 64-bit integer if all aggregated numbers are integers and the 177*d5c09012SAndroid Build Coastguard Worker // sum result does not overflow. Otherwise, the result is returned as a 178*d5c09012SAndroid Build Coastguard Worker // double. Note that even if all the aggregated values are integers, the 179*d5c09012SAndroid Build Coastguard Worker // result is returned as a double if it cannot fit within a 64-bit signed 180*d5c09012SAndroid Build Coastguard Worker // integer. When this occurs, the returned value will lose precision. 181*d5c09012SAndroid Build Coastguard Worker // 182*d5c09012SAndroid Build Coastguard Worker // * When underflow occurs, floating-point aggregation is non-deterministic. 183*d5c09012SAndroid Build Coastguard Worker // This means that running the same query repeatedly without any changes to 184*d5c09012SAndroid Build Coastguard Worker // the underlying values could produce slightly different results each 185*d5c09012SAndroid Build Coastguard Worker // time. In those cases, values should be stored as integers over 186*d5c09012SAndroid Build Coastguard Worker // floating-point numbers. 187*d5c09012SAndroid Build Coastguard Worker message Sum { 188*d5c09012SAndroid Build Coastguard Worker // The property to aggregate on. 189*d5c09012SAndroid Build Coastguard Worker PropertyReference property = 1; 190*d5c09012SAndroid Build Coastguard Worker } 191*d5c09012SAndroid Build Coastguard Worker 192*d5c09012SAndroid Build Coastguard Worker // Average of the values of the requested property. 193*d5c09012SAndroid Build Coastguard Worker // 194*d5c09012SAndroid Build Coastguard Worker // * Only numeric values will be aggregated. All non-numeric values 195*d5c09012SAndroid Build Coastguard Worker // including `NULL` are skipped. 196*d5c09012SAndroid Build Coastguard Worker // 197*d5c09012SAndroid Build Coastguard Worker // * If the aggregated values contain `NaN`, returns `NaN`. Infinity math 198*d5c09012SAndroid Build Coastguard Worker // follows IEEE-754 standards. 199*d5c09012SAndroid Build Coastguard Worker // 200*d5c09012SAndroid Build Coastguard Worker // * If the aggregated value set is empty, returns `NULL`. 201*d5c09012SAndroid Build Coastguard Worker // 202*d5c09012SAndroid Build Coastguard Worker // * Always returns the result as a double. 203*d5c09012SAndroid Build Coastguard Worker message Avg { 204*d5c09012SAndroid Build Coastguard Worker // The property to aggregate on. 205*d5c09012SAndroid Build Coastguard Worker PropertyReference property = 1; 206*d5c09012SAndroid Build Coastguard Worker } 207*d5c09012SAndroid Build Coastguard Worker 208*d5c09012SAndroid Build Coastguard Worker // The type of aggregation to perform, required. 209*d5c09012SAndroid Build Coastguard Worker oneof operator { 210*d5c09012SAndroid Build Coastguard Worker // Count aggregator. 211*d5c09012SAndroid Build Coastguard Worker Count count = 1; 212*d5c09012SAndroid Build Coastguard Worker 213*d5c09012SAndroid Build Coastguard Worker // Sum aggregator. 214*d5c09012SAndroid Build Coastguard Worker Sum sum = 2; 215*d5c09012SAndroid Build Coastguard Worker 216*d5c09012SAndroid Build Coastguard Worker // Average aggregator. 217*d5c09012SAndroid Build Coastguard Worker Avg avg = 3; 218*d5c09012SAndroid Build Coastguard Worker } 219*d5c09012SAndroid Build Coastguard Worker 220*d5c09012SAndroid Build Coastguard Worker // Optional. Optional name of the property to store the result of the 221*d5c09012SAndroid Build Coastguard Worker // aggregation. 222*d5c09012SAndroid Build Coastguard Worker // 223*d5c09012SAndroid Build Coastguard Worker // If not provided, Datastore will pick a default name following the format 224*d5c09012SAndroid Build Coastguard Worker // `property_<incremental_id++>`. For example: 225*d5c09012SAndroid Build Coastguard Worker // 226*d5c09012SAndroid Build Coastguard Worker // ``` 227*d5c09012SAndroid Build Coastguard Worker // AGGREGATE 228*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(1) AS count_up_to_1, 229*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(2), 230*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(3) AS count_up_to_3, 231*d5c09012SAndroid Build Coastguard Worker // COUNT(*) 232*d5c09012SAndroid Build Coastguard Worker // OVER ( 233*d5c09012SAndroid Build Coastguard Worker // ... 234*d5c09012SAndroid Build Coastguard Worker // ); 235*d5c09012SAndroid Build Coastguard Worker // ``` 236*d5c09012SAndroid Build Coastguard Worker // 237*d5c09012SAndroid Build Coastguard Worker // becomes: 238*d5c09012SAndroid Build Coastguard Worker // 239*d5c09012SAndroid Build Coastguard Worker // ``` 240*d5c09012SAndroid Build Coastguard Worker // AGGREGATE 241*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(1) AS count_up_to_1, 242*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(2) AS property_1, 243*d5c09012SAndroid Build Coastguard Worker // COUNT_UP_TO(3) AS count_up_to_3, 244*d5c09012SAndroid Build Coastguard Worker // COUNT(*) AS property_2 245*d5c09012SAndroid Build Coastguard Worker // OVER ( 246*d5c09012SAndroid Build Coastguard Worker // ... 247*d5c09012SAndroid Build Coastguard Worker // ); 248*d5c09012SAndroid Build Coastguard Worker // ``` 249*d5c09012SAndroid Build Coastguard Worker // 250*d5c09012SAndroid Build Coastguard Worker // Requires: 251*d5c09012SAndroid Build Coastguard Worker // 252*d5c09012SAndroid Build Coastguard Worker // * Must be unique across all aggregation aliases. 253*d5c09012SAndroid Build Coastguard Worker // * Conform to [entity property 254*d5c09012SAndroid Build Coastguard Worker // name][google.datastore.v1.Entity.properties] limitations. 255*d5c09012SAndroid Build Coastguard Worker string alias = 7 [(google.api.field_behavior) = OPTIONAL]; 256*d5c09012SAndroid Build Coastguard Worker } 257*d5c09012SAndroid Build Coastguard Worker 258*d5c09012SAndroid Build Coastguard Worker // The base query to aggregate over. 259*d5c09012SAndroid Build Coastguard Worker oneof query_type { 260*d5c09012SAndroid Build Coastguard Worker // Nested query for aggregation 261*d5c09012SAndroid Build Coastguard Worker Query nested_query = 1; 262*d5c09012SAndroid Build Coastguard Worker } 263*d5c09012SAndroid Build Coastguard Worker 264*d5c09012SAndroid Build Coastguard Worker // Optional. Series of aggregations to apply over the results of the 265*d5c09012SAndroid Build Coastguard Worker // `nested_query`. 266*d5c09012SAndroid Build Coastguard Worker // 267*d5c09012SAndroid Build Coastguard Worker // Requires: 268*d5c09012SAndroid Build Coastguard Worker // 269*d5c09012SAndroid Build Coastguard Worker // * A minimum of one and maximum of five aggregations per query. 270*d5c09012SAndroid Build Coastguard Worker repeated Aggregation aggregations = 3 271*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 272*d5c09012SAndroid Build Coastguard Worker} 273*d5c09012SAndroid Build Coastguard Worker 274*d5c09012SAndroid Build Coastguard Worker// A representation of a kind. 275*d5c09012SAndroid Build Coastguard Workermessage KindExpression { 276*d5c09012SAndroid Build Coastguard Worker // The name of the kind. 277*d5c09012SAndroid Build Coastguard Worker string name = 1; 278*d5c09012SAndroid Build Coastguard Worker} 279*d5c09012SAndroid Build Coastguard Worker 280*d5c09012SAndroid Build Coastguard Worker// A reference to a property relative to the kind expressions. 281*d5c09012SAndroid Build Coastguard Workermessage PropertyReference { 282*d5c09012SAndroid Build Coastguard Worker // A reference to a property. 283*d5c09012SAndroid Build Coastguard Worker // 284*d5c09012SAndroid Build Coastguard Worker // Requires: 285*d5c09012SAndroid Build Coastguard Worker // 286*d5c09012SAndroid Build Coastguard Worker // * MUST be a dot-delimited (`.`) string of segments, where each segment 287*d5c09012SAndroid Build Coastguard Worker // conforms to [entity property name][google.datastore.v1.Entity.properties] 288*d5c09012SAndroid Build Coastguard Worker // limitations. 289*d5c09012SAndroid Build Coastguard Worker string name = 2; 290*d5c09012SAndroid Build Coastguard Worker} 291*d5c09012SAndroid Build Coastguard Worker 292*d5c09012SAndroid Build Coastguard Worker// A representation of a property in a projection. 293*d5c09012SAndroid Build Coastguard Workermessage Projection { 294*d5c09012SAndroid Build Coastguard Worker // The property to project. 295*d5c09012SAndroid Build Coastguard Worker PropertyReference property = 1; 296*d5c09012SAndroid Build Coastguard Worker} 297*d5c09012SAndroid Build Coastguard Worker 298*d5c09012SAndroid Build Coastguard Worker// The desired order for a specific property. 299*d5c09012SAndroid Build Coastguard Workermessage PropertyOrder { 300*d5c09012SAndroid Build Coastguard Worker // The sort direction. 301*d5c09012SAndroid Build Coastguard Worker enum Direction { 302*d5c09012SAndroid Build Coastguard Worker // Unspecified. This value must not be used. 303*d5c09012SAndroid Build Coastguard Worker DIRECTION_UNSPECIFIED = 0; 304*d5c09012SAndroid Build Coastguard Worker 305*d5c09012SAndroid Build Coastguard Worker // Ascending. 306*d5c09012SAndroid Build Coastguard Worker ASCENDING = 1; 307*d5c09012SAndroid Build Coastguard Worker 308*d5c09012SAndroid Build Coastguard Worker // Descending. 309*d5c09012SAndroid Build Coastguard Worker DESCENDING = 2; 310*d5c09012SAndroid Build Coastguard Worker } 311*d5c09012SAndroid Build Coastguard Worker 312*d5c09012SAndroid Build Coastguard Worker // The property to order by. 313*d5c09012SAndroid Build Coastguard Worker PropertyReference property = 1; 314*d5c09012SAndroid Build Coastguard Worker 315*d5c09012SAndroid Build Coastguard Worker // The direction to order by. Defaults to `ASCENDING`. 316*d5c09012SAndroid Build Coastguard Worker Direction direction = 2; 317*d5c09012SAndroid Build Coastguard Worker} 318*d5c09012SAndroid Build Coastguard Worker 319*d5c09012SAndroid Build Coastguard Worker// A holder for any type of filter. 320*d5c09012SAndroid Build Coastguard Workermessage Filter { 321*d5c09012SAndroid Build Coastguard Worker // The type of filter. 322*d5c09012SAndroid Build Coastguard Worker oneof filter_type { 323*d5c09012SAndroid Build Coastguard Worker // A composite filter. 324*d5c09012SAndroid Build Coastguard Worker CompositeFilter composite_filter = 1; 325*d5c09012SAndroid Build Coastguard Worker 326*d5c09012SAndroid Build Coastguard Worker // A filter on a property. 327*d5c09012SAndroid Build Coastguard Worker PropertyFilter property_filter = 2; 328*d5c09012SAndroid Build Coastguard Worker } 329*d5c09012SAndroid Build Coastguard Worker} 330*d5c09012SAndroid Build Coastguard Worker 331*d5c09012SAndroid Build Coastguard Worker// A filter that merges multiple other filters using the given operator. 332*d5c09012SAndroid Build Coastguard Workermessage CompositeFilter { 333*d5c09012SAndroid Build Coastguard Worker // A composite filter operator. 334*d5c09012SAndroid Build Coastguard Worker enum Operator { 335*d5c09012SAndroid Build Coastguard Worker // Unspecified. This value must not be used. 336*d5c09012SAndroid Build Coastguard Worker OPERATOR_UNSPECIFIED = 0; 337*d5c09012SAndroid Build Coastguard Worker 338*d5c09012SAndroid Build Coastguard Worker // The results are required to satisfy each of the combined filters. 339*d5c09012SAndroid Build Coastguard Worker AND = 1; 340*d5c09012SAndroid Build Coastguard Worker 341*d5c09012SAndroid Build Coastguard Worker // Documents are required to satisfy at least one of the combined filters. 342*d5c09012SAndroid Build Coastguard Worker OR = 2; 343*d5c09012SAndroid Build Coastguard Worker } 344*d5c09012SAndroid Build Coastguard Worker 345*d5c09012SAndroid Build Coastguard Worker // The operator for combining multiple filters. 346*d5c09012SAndroid Build Coastguard Worker Operator op = 1; 347*d5c09012SAndroid Build Coastguard Worker 348*d5c09012SAndroid Build Coastguard Worker // The list of filters to combine. 349*d5c09012SAndroid Build Coastguard Worker // 350*d5c09012SAndroid Build Coastguard Worker // Requires: 351*d5c09012SAndroid Build Coastguard Worker // 352*d5c09012SAndroid Build Coastguard Worker // * At least one filter is present. 353*d5c09012SAndroid Build Coastguard Worker repeated Filter filters = 2; 354*d5c09012SAndroid Build Coastguard Worker} 355*d5c09012SAndroid Build Coastguard Worker 356*d5c09012SAndroid Build Coastguard Worker// A filter on a specific property. 357*d5c09012SAndroid Build Coastguard Workermessage PropertyFilter { 358*d5c09012SAndroid Build Coastguard Worker // A property filter operator. 359*d5c09012SAndroid Build Coastguard Worker enum Operator { 360*d5c09012SAndroid Build Coastguard Worker // Unspecified. This value must not be used. 361*d5c09012SAndroid Build Coastguard Worker OPERATOR_UNSPECIFIED = 0; 362*d5c09012SAndroid Build Coastguard Worker 363*d5c09012SAndroid Build Coastguard Worker // The given `property` is less than the given `value`. 364*d5c09012SAndroid Build Coastguard Worker // 365*d5c09012SAndroid Build Coastguard Worker // Requires: 366*d5c09012SAndroid Build Coastguard Worker // 367*d5c09012SAndroid Build Coastguard Worker // * That `property` comes first in `order_by`. 368*d5c09012SAndroid Build Coastguard Worker LESS_THAN = 1; 369*d5c09012SAndroid Build Coastguard Worker 370*d5c09012SAndroid Build Coastguard Worker // The given `property` is less than or equal to the given `value`. 371*d5c09012SAndroid Build Coastguard Worker // 372*d5c09012SAndroid Build Coastguard Worker // Requires: 373*d5c09012SAndroid Build Coastguard Worker // 374*d5c09012SAndroid Build Coastguard Worker // * That `property` comes first in `order_by`. 375*d5c09012SAndroid Build Coastguard Worker LESS_THAN_OR_EQUAL = 2; 376*d5c09012SAndroid Build Coastguard Worker 377*d5c09012SAndroid Build Coastguard Worker // The given `property` is greater than the given `value`. 378*d5c09012SAndroid Build Coastguard Worker // 379*d5c09012SAndroid Build Coastguard Worker // Requires: 380*d5c09012SAndroid Build Coastguard Worker // 381*d5c09012SAndroid Build Coastguard Worker // * That `property` comes first in `order_by`. 382*d5c09012SAndroid Build Coastguard Worker GREATER_THAN = 3; 383*d5c09012SAndroid Build Coastguard Worker 384*d5c09012SAndroid Build Coastguard Worker // The given `property` is greater than or equal to the given `value`. 385*d5c09012SAndroid Build Coastguard Worker // 386*d5c09012SAndroid Build Coastguard Worker // Requires: 387*d5c09012SAndroid Build Coastguard Worker // 388*d5c09012SAndroid Build Coastguard Worker // * That `property` comes first in `order_by`. 389*d5c09012SAndroid Build Coastguard Worker GREATER_THAN_OR_EQUAL = 4; 390*d5c09012SAndroid Build Coastguard Worker 391*d5c09012SAndroid Build Coastguard Worker // The given `property` is equal to the given `value`. 392*d5c09012SAndroid Build Coastguard Worker EQUAL = 5; 393*d5c09012SAndroid Build Coastguard Worker 394*d5c09012SAndroid Build Coastguard Worker // The given `property` is equal to at least one value in the given array. 395*d5c09012SAndroid Build Coastguard Worker // 396*d5c09012SAndroid Build Coastguard Worker // Requires: 397*d5c09012SAndroid Build Coastguard Worker // 398*d5c09012SAndroid Build Coastguard Worker // * That `value` is a non-empty `ArrayValue`, subject to disjunction 399*d5c09012SAndroid Build Coastguard Worker // limits. 400*d5c09012SAndroid Build Coastguard Worker // * No `NOT_IN` is in the same query. 401*d5c09012SAndroid Build Coastguard Worker IN = 6; 402*d5c09012SAndroid Build Coastguard Worker 403*d5c09012SAndroid Build Coastguard Worker // The given `property` is not equal to the given `value`. 404*d5c09012SAndroid Build Coastguard Worker // 405*d5c09012SAndroid Build Coastguard Worker // Requires: 406*d5c09012SAndroid Build Coastguard Worker // 407*d5c09012SAndroid Build Coastguard Worker // * No other `NOT_EQUAL` or `NOT_IN` is in the same query. 408*d5c09012SAndroid Build Coastguard Worker // * That `property` comes first in the `order_by`. 409*d5c09012SAndroid Build Coastguard Worker NOT_EQUAL = 9; 410*d5c09012SAndroid Build Coastguard Worker 411*d5c09012SAndroid Build Coastguard Worker // Limit the result set to the given entity and its descendants. 412*d5c09012SAndroid Build Coastguard Worker // 413*d5c09012SAndroid Build Coastguard Worker // Requires: 414*d5c09012SAndroid Build Coastguard Worker // 415*d5c09012SAndroid Build Coastguard Worker // * That `value` is an entity key. 416*d5c09012SAndroid Build Coastguard Worker // * All evaluated disjunctions must have the same `HAS_ANCESTOR` filter. 417*d5c09012SAndroid Build Coastguard Worker HAS_ANCESTOR = 11; 418*d5c09012SAndroid Build Coastguard Worker 419*d5c09012SAndroid Build Coastguard Worker // The value of the `property` is not in the given array. 420*d5c09012SAndroid Build Coastguard Worker // 421*d5c09012SAndroid Build Coastguard Worker // Requires: 422*d5c09012SAndroid Build Coastguard Worker // 423*d5c09012SAndroid Build Coastguard Worker // * That `value` is a non-empty `ArrayValue` with at most 10 values. 424*d5c09012SAndroid Build Coastguard Worker // * No other `OR`, `IN`, `NOT_IN`, `NOT_EQUAL` is in the same query. 425*d5c09012SAndroid Build Coastguard Worker // * That `field` comes first in the `order_by`. 426*d5c09012SAndroid Build Coastguard Worker NOT_IN = 13; 427*d5c09012SAndroid Build Coastguard Worker } 428*d5c09012SAndroid Build Coastguard Worker 429*d5c09012SAndroid Build Coastguard Worker // The property to filter by. 430*d5c09012SAndroid Build Coastguard Worker PropertyReference property = 1; 431*d5c09012SAndroid Build Coastguard Worker 432*d5c09012SAndroid Build Coastguard Worker // The operator to filter by. 433*d5c09012SAndroid Build Coastguard Worker Operator op = 2; 434*d5c09012SAndroid Build Coastguard Worker 435*d5c09012SAndroid Build Coastguard Worker // The value to compare the property to. 436*d5c09012SAndroid Build Coastguard Worker Value value = 3; 437*d5c09012SAndroid Build Coastguard Worker} 438*d5c09012SAndroid Build Coastguard Worker 439*d5c09012SAndroid Build Coastguard Worker// A [GQL 440*d5c09012SAndroid Build Coastguard Worker// query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). 441*d5c09012SAndroid Build Coastguard Workermessage GqlQuery { 442*d5c09012SAndroid Build Coastguard Worker // A string of the format described 443*d5c09012SAndroid Build Coastguard Worker // [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). 444*d5c09012SAndroid Build Coastguard Worker string query_string = 1; 445*d5c09012SAndroid Build Coastguard Worker 446*d5c09012SAndroid Build Coastguard Worker // When false, the query string must not contain any literals and instead must 447*d5c09012SAndroid Build Coastguard Worker // bind all values. For example, 448*d5c09012SAndroid Build Coastguard Worker // `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while 449*d5c09012SAndroid Build Coastguard Worker // `SELECT * FROM Kind WHERE a = @value` is. 450*d5c09012SAndroid Build Coastguard Worker bool allow_literals = 2; 451*d5c09012SAndroid Build Coastguard Worker 452*d5c09012SAndroid Build Coastguard Worker // For each non-reserved named binding site in the query string, there must be 453*d5c09012SAndroid Build Coastguard Worker // a named parameter with that name, but not necessarily the inverse. 454*d5c09012SAndroid Build Coastguard Worker // 455*d5c09012SAndroid Build Coastguard Worker // Key must match regex `[A-Za-z_$][A-Za-z_$0-9]*`, must not match regex 456*d5c09012SAndroid Build Coastguard Worker // `__.*__`, and must not be `""`. 457*d5c09012SAndroid Build Coastguard Worker map<string, GqlQueryParameter> named_bindings = 5; 458*d5c09012SAndroid Build Coastguard Worker 459*d5c09012SAndroid Build Coastguard Worker // Numbered binding site @1 references the first numbered parameter, 460*d5c09012SAndroid Build Coastguard Worker // effectively using 1-based indexing, rather than the usual 0. 461*d5c09012SAndroid Build Coastguard Worker // 462*d5c09012SAndroid Build Coastguard Worker // For each binding site numbered i in `query_string`, there must be an i-th 463*d5c09012SAndroid Build Coastguard Worker // numbered parameter. The inverse must also be true. 464*d5c09012SAndroid Build Coastguard Worker repeated GqlQueryParameter positional_bindings = 4; 465*d5c09012SAndroid Build Coastguard Worker} 466*d5c09012SAndroid Build Coastguard Worker 467*d5c09012SAndroid Build Coastguard Worker// A binding parameter for a GQL query. 468*d5c09012SAndroid Build Coastguard Workermessage GqlQueryParameter { 469*d5c09012SAndroid Build Coastguard Worker // The type of parameter. 470*d5c09012SAndroid Build Coastguard Worker oneof parameter_type { 471*d5c09012SAndroid Build Coastguard Worker // A value parameter. 472*d5c09012SAndroid Build Coastguard Worker Value value = 2; 473*d5c09012SAndroid Build Coastguard Worker 474*d5c09012SAndroid Build Coastguard Worker // A query cursor. Query cursors are returned in query 475*d5c09012SAndroid Build Coastguard Worker // result batches. 476*d5c09012SAndroid Build Coastguard Worker bytes cursor = 3; 477*d5c09012SAndroid Build Coastguard Worker } 478*d5c09012SAndroid Build Coastguard Worker} 479*d5c09012SAndroid Build Coastguard Worker 480*d5c09012SAndroid Build Coastguard Worker// A batch of results produced by a query. 481*d5c09012SAndroid Build Coastguard Workermessage QueryResultBatch { 482*d5c09012SAndroid Build Coastguard Worker // The possible values for the `more_results` field. 483*d5c09012SAndroid Build Coastguard Worker enum MoreResultsType { 484*d5c09012SAndroid Build Coastguard Worker // Unspecified. This value is never used. 485*d5c09012SAndroid Build Coastguard Worker MORE_RESULTS_TYPE_UNSPECIFIED = 0; 486*d5c09012SAndroid Build Coastguard Worker 487*d5c09012SAndroid Build Coastguard Worker // There may be additional batches to fetch from this query. 488*d5c09012SAndroid Build Coastguard Worker NOT_FINISHED = 1; 489*d5c09012SAndroid Build Coastguard Worker 490*d5c09012SAndroid Build Coastguard Worker // The query is finished, but there may be more results after the limit. 491*d5c09012SAndroid Build Coastguard Worker MORE_RESULTS_AFTER_LIMIT = 2; 492*d5c09012SAndroid Build Coastguard Worker 493*d5c09012SAndroid Build Coastguard Worker // The query is finished, but there may be more results after the end 494*d5c09012SAndroid Build Coastguard Worker // cursor. 495*d5c09012SAndroid Build Coastguard Worker MORE_RESULTS_AFTER_CURSOR = 4; 496*d5c09012SAndroid Build Coastguard Worker 497*d5c09012SAndroid Build Coastguard Worker // The query is finished, and there are no more results. 498*d5c09012SAndroid Build Coastguard Worker NO_MORE_RESULTS = 3; 499*d5c09012SAndroid Build Coastguard Worker } 500*d5c09012SAndroid Build Coastguard Worker 501*d5c09012SAndroid Build Coastguard Worker // The number of results skipped, typically because of an offset. 502*d5c09012SAndroid Build Coastguard Worker int32 skipped_results = 6; 503*d5c09012SAndroid Build Coastguard Worker 504*d5c09012SAndroid Build Coastguard Worker // A cursor that points to the position after the last skipped result. 505*d5c09012SAndroid Build Coastguard Worker // Will be set when `skipped_results` != 0. 506*d5c09012SAndroid Build Coastguard Worker bytes skipped_cursor = 3; 507*d5c09012SAndroid Build Coastguard Worker 508*d5c09012SAndroid Build Coastguard Worker // The result type for every entity in `entity_results`. 509*d5c09012SAndroid Build Coastguard Worker EntityResult.ResultType entity_result_type = 1; 510*d5c09012SAndroid Build Coastguard Worker 511*d5c09012SAndroid Build Coastguard Worker // The results for this batch. 512*d5c09012SAndroid Build Coastguard Worker repeated EntityResult entity_results = 2; 513*d5c09012SAndroid Build Coastguard Worker 514*d5c09012SAndroid Build Coastguard Worker // A cursor that points to the position after the last result in the batch. 515*d5c09012SAndroid Build Coastguard Worker bytes end_cursor = 4; 516*d5c09012SAndroid Build Coastguard Worker 517*d5c09012SAndroid Build Coastguard Worker // The state of the query after the current batch. 518*d5c09012SAndroid Build Coastguard Worker MoreResultsType more_results = 5; 519*d5c09012SAndroid Build Coastguard Worker 520*d5c09012SAndroid Build Coastguard Worker // The version number of the snapshot this batch was returned from. 521*d5c09012SAndroid Build Coastguard Worker // This applies to the range of results from the query's `start_cursor` (or 522*d5c09012SAndroid Build Coastguard Worker // the beginning of the query if no cursor was given) to this batch's 523*d5c09012SAndroid Build Coastguard Worker // `end_cursor` (not the query's `end_cursor`). 524*d5c09012SAndroid Build Coastguard Worker // 525*d5c09012SAndroid Build Coastguard Worker // In a single transaction, subsequent query result batches for the same query 526*d5c09012SAndroid Build Coastguard Worker // can have a greater snapshot version number. Each batch's snapshot version 527*d5c09012SAndroid Build Coastguard Worker // is valid for all preceding batches. 528*d5c09012SAndroid Build Coastguard Worker // The value will be zero for eventually consistent queries. 529*d5c09012SAndroid Build Coastguard Worker int64 snapshot_version = 7; 530*d5c09012SAndroid Build Coastguard Worker 531*d5c09012SAndroid Build Coastguard Worker // Read timestamp this batch was returned from. 532*d5c09012SAndroid Build Coastguard Worker // This applies to the range of results from the query's `start_cursor` (or 533*d5c09012SAndroid Build Coastguard Worker // the beginning of the query if no cursor was given) to this batch's 534*d5c09012SAndroid Build Coastguard Worker // `end_cursor` (not the query's `end_cursor`). 535*d5c09012SAndroid Build Coastguard Worker // 536*d5c09012SAndroid Build Coastguard Worker // In a single transaction, subsequent query result batches for the same query 537*d5c09012SAndroid Build Coastguard Worker // can have a greater timestamp. Each batch's read timestamp 538*d5c09012SAndroid Build Coastguard Worker // is valid for all preceding batches. 539*d5c09012SAndroid Build Coastguard Worker // This value will not be set for eventually consistent queries in Cloud 540*d5c09012SAndroid Build Coastguard Worker // Datastore. 541*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp read_time = 8; 542*d5c09012SAndroid Build Coastguard Worker} 543