You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
301 lines
8.5 KiB
301 lines
8.5 KiB
// Copyright 2021 Google LLC |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
syntax = "proto3"; |
|
|
|
package google.firestore.v1; |
|
|
|
import "google/firestore/v1/document.proto"; |
|
import "google/protobuf/wrappers.proto"; |
|
import "google/api/annotations.proto"; |
|
|
|
option csharp_namespace = "Google.Cloud.Firestore.V1"; |
|
option go_package = "google.golang.org/genproto/googleapis/firestore/v1;firestore"; |
|
option java_multiple_files = true; |
|
option java_outer_classname = "QueryProto"; |
|
option java_package = "com.google.firestore.v1"; |
|
option objc_class_prefix = "GCFS"; |
|
option php_namespace = "Google\\Cloud\\Firestore\\V1"; |
|
option ruby_package = "Google::Cloud::Firestore::V1"; |
|
|
|
// A Firestore query. |
|
message StructuredQuery { |
|
// A selection of a collection, such as `messages as m1`. |
|
message CollectionSelector { |
|
// The collection ID. |
|
// When set, selects only collections with this ID. |
|
string collection_id = 2; |
|
|
|
// When false, selects only collections that are immediate children of |
|
// the `parent` specified in the containing `RunQueryRequest`. |
|
// When true, selects all descendant collections. |
|
bool all_descendants = 3; |
|
} |
|
|
|
// A filter. |
|
message Filter { |
|
// The type of filter. |
|
oneof filter_type { |
|
// A composite filter. |
|
CompositeFilter composite_filter = 1; |
|
|
|
// A filter on a document field. |
|
FieldFilter field_filter = 2; |
|
|
|
// A filter that takes exactly one argument. |
|
UnaryFilter unary_filter = 3; |
|
} |
|
} |
|
|
|
// A filter that merges multiple other filters using the given operator. |
|
message CompositeFilter { |
|
// A composite filter operator. |
|
enum Operator { |
|
// Unspecified. This value must not be used. |
|
OPERATOR_UNSPECIFIED = 0; |
|
|
|
// The results are required to satisfy each of the combined filters. |
|
AND = 1; |
|
} |
|
|
|
// The operator for combining multiple filters. |
|
Operator op = 1; |
|
|
|
// The list of filters to combine. |
|
// Must contain at least one filter. |
|
repeated Filter filters = 2; |
|
} |
|
|
|
// A filter on a specific field. |
|
message FieldFilter { |
|
// A field filter operator. |
|
enum Operator { |
|
// Unspecified. This value must not be used. |
|
OPERATOR_UNSPECIFIED = 0; |
|
|
|
// The given `field` is less than the given `value`. |
|
// |
|
// Requires: |
|
// |
|
// * That `field` come first in `order_by`. |
|
LESS_THAN = 1; |
|
|
|
// The given `field` is less than or equal to the given `value`. |
|
// |
|
// Requires: |
|
// |
|
// * That `field` come first in `order_by`. |
|
LESS_THAN_OR_EQUAL = 2; |
|
|
|
// The given `field` is greater than the given `value`. |
|
// |
|
// Requires: |
|
// |
|
// * That `field` come first in `order_by`. |
|
GREATER_THAN = 3; |
|
|
|
// The given `field` is greater than or equal to the given `value`. |
|
// |
|
// Requires: |
|
// |
|
// * That `field` come first in `order_by`. |
|
GREATER_THAN_OR_EQUAL = 4; |
|
|
|
// The given `field` is equal to the given `value`. |
|
EQUAL = 5; |
|
|
|
// The given `field` is not equal to the given `value`. |
|
// |
|
// Requires: |
|
// |
|
// * No other `NOT_EQUAL`, `NOT_IN`, `IS_NOT_NULL`, or `IS_NOT_NAN`. |
|
// * That `field` comes first in the `order_by`. |
|
NOT_EQUAL = 6; |
|
|
|
// The given `field` is an array that contains the given `value`. |
|
ARRAY_CONTAINS = 7; |
|
|
|
// The given `field` is equal to at least one value in the given array. |
|
// |
|
// Requires: |
|
// |
|
// * That `value` is a non-empty `ArrayValue` with at most 10 values. |
|
// * No other `IN` or `ARRAY_CONTAINS_ANY` or `NOT_IN`. |
|
IN = 8; |
|
|
|
// The given `field` is an array that contains any of the values in the |
|
// given array. |
|
// |
|
// Requires: |
|
// |
|
// * That `value` is a non-empty `ArrayValue` with at most 10 values. |
|
// * No other `IN` or `ARRAY_CONTAINS_ANY` or `NOT_IN`. |
|
ARRAY_CONTAINS_ANY = 9; |
|
|
|
// The value of the `field` is not in the given array. |
|
// |
|
// Requires: |
|
// |
|
// * That `value` is a non-empty `ArrayValue` with at most 10 values. |
|
// * No other `IN`, `ARRAY_CONTAINS_ANY`, `NOT_IN`, `NOT_EQUAL`, |
|
// `IS_NOT_NULL`, or `IS_NOT_NAN`. |
|
// * That `field` comes first in the `order_by`. |
|
NOT_IN = 10; |
|
} |
|
|
|
// The field to filter by. |
|
FieldReference field = 1; |
|
|
|
// The operator to filter by. |
|
Operator op = 2; |
|
|
|
// The value to compare to. |
|
Value value = 3; |
|
} |
|
|
|
// A filter with a single operand. |
|
message UnaryFilter { |
|
// A unary operator. |
|
enum Operator { |
|
// Unspecified. This value must not be used. |
|
OPERATOR_UNSPECIFIED = 0; |
|
|
|
// The given `field` is equal to `NaN`. |
|
IS_NAN = 2; |
|
|
|
// The given `field` is equal to `NULL`. |
|
IS_NULL = 3; |
|
|
|
// The given `field` is not equal to `NaN`. |
|
// |
|
// Requires: |
|
// |
|
// * No other `NOT_EQUAL`, `NOT_IN`, `IS_NOT_NULL`, or `IS_NOT_NAN`. |
|
// * That `field` comes first in the `order_by`. |
|
IS_NOT_NAN = 4; |
|
|
|
// The given `field` is not equal to `NULL`. |
|
// |
|
// Requires: |
|
// |
|
// * A single `NOT_EQUAL`, `NOT_IN`, `IS_NOT_NULL`, or `IS_NOT_NAN`. |
|
// * That `field` comes first in the `order_by`. |
|
IS_NOT_NULL = 5; |
|
} |
|
|
|
// The unary operator to apply. |
|
Operator op = 1; |
|
|
|
// The argument to the filter. |
|
oneof operand_type { |
|
// The field to which to apply the operator. |
|
FieldReference field = 2; |
|
} |
|
} |
|
|
|
// An order on a field. |
|
message Order { |
|
// The field to order by. |
|
FieldReference field = 1; |
|
|
|
// The direction to order by. Defaults to `ASCENDING`. |
|
Direction direction = 2; |
|
} |
|
|
|
// A reference to a field, such as `max(messages.time) as max_time`. |
|
message FieldReference { |
|
string field_path = 2; |
|
} |
|
|
|
// The projection of document's fields to return. |
|
message Projection { |
|
// The fields to return. |
|
// |
|
// If empty, all fields are returned. To only return the name |
|
// of the document, use `['__name__']`. |
|
repeated FieldReference fields = 2; |
|
} |
|
|
|
// A sort direction. |
|
enum Direction { |
|
// Unspecified. |
|
DIRECTION_UNSPECIFIED = 0; |
|
|
|
// Ascending. |
|
ASCENDING = 1; |
|
|
|
// Descending. |
|
DESCENDING = 2; |
|
} |
|
|
|
// The projection to return. |
|
Projection select = 1; |
|
|
|
// The collections to query. |
|
repeated CollectionSelector from = 2; |
|
|
|
// The filter to apply. |
|
Filter where = 3; |
|
|
|
// The order to apply to the query results. |
|
// |
|
// Firestore guarantees a stable ordering through the following rules: |
|
// |
|
// * Any field required to appear in `order_by`, that is not already |
|
// specified in `order_by`, is appended to the order in field name order |
|
// by default. |
|
// * If an order on `__name__` is not specified, it is appended by default. |
|
// |
|
// Fields are appended with the same sort direction as the last order |
|
// specified, or 'ASCENDING' if no order was specified. For example: |
|
// |
|
// * `SELECT * FROM Foo ORDER BY A` becomes |
|
// `SELECT * FROM Foo ORDER BY A, __name__` |
|
// * `SELECT * FROM Foo ORDER BY A DESC` becomes |
|
// `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC` |
|
// * `SELECT * FROM Foo WHERE A > 1` becomes |
|
// `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__` |
|
repeated Order order_by = 4; |
|
|
|
// A starting point for the query results. |
|
Cursor start_at = 7; |
|
|
|
// A end point for the query results. |
|
Cursor end_at = 8; |
|
|
|
// The number of results to skip. |
|
// |
|
// Applies before limit, but after all other constraints. Must be >= 0 if |
|
// specified. |
|
int32 offset = 6; |
|
|
|
// The maximum number of results to return. |
|
// |
|
// Applies after all other constraints. |
|
// Must be >= 0 if specified. |
|
google.protobuf.Int32Value limit = 5; |
|
} |
|
|
|
// A position in a query result set. |
|
message Cursor { |
|
// The values that represent a position, in the order they appear in |
|
// the order by clause of a query. |
|
// |
|
// Can contain fewer values than specified in the order by clause. |
|
repeated Value values = 1; |
|
|
|
// If the position is just before or just after the given values, relative |
|
// to the sort order defined by the query. |
|
bool before = 2; |
|
}
|
|
|