|
|
|
// 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/api/annotations.proto";
|
|
|
|
import "google/api/client.proto";
|
|
|
|
import "google/api/field_behavior.proto";
|
|
|
|
import "google/firestore/v1/common.proto";
|
|
|
|
import "google/firestore/v1/document.proto";
|
|
|
|
import "google/firestore/v1/query.proto";
|
|
|
|
import "google/firestore/v1/write.proto";
|
|
|
|
import "google/protobuf/empty.proto";
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
import "google/rpc/status.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 = "FirestoreProto";
|
|
|
|
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";
|
|
|
|
|
|
|
|
// Specification of the Firestore API.
|
|
|
|
|
|
|
|
// The Cloud Firestore service.
|
|
|
|
//
|
|
|
|
// Cloud Firestore is a fast, fully managed, serverless, cloud-native NoSQL
|
|
|
|
// document database that simplifies storing, syncing, and querying data for
|
|
|
|
// your mobile, web, and IoT apps at global scale. Its client libraries provide
|
|
|
|
// live synchronization and offline support, while its security features and
|
|
|
|
// integrations with Firebase and Google Cloud Platform (GCP) accelerate
|
|
|
|
// building truly serverless apps.
|
|
|
|
service Firestore {
|
|
|
|
option (google.api.default_host) = "firestore.googleapis.com";
|
|
|
|
option (google.api.oauth_scopes) =
|
|
|
|
"https://www.googleapis.com/auth/cloud-platform,"
|
|
|
|
"https://www.googleapis.com/auth/datastore";
|
|
|
|
|
|
|
|
// Gets a single document.
|
|
|
|
rpc GetDocument(GetDocumentRequest) returns (Document) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
get: "/v1/{name=projects/*/databases/*/documents/*/**}"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lists documents.
|
|
|
|
rpc ListDocuments(ListDocumentsRequest) returns (ListDocumentsResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
get: "/v1/{parent=projects/*/databases/*/documents/*/**}/{collection_id}"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Updates or inserts a document.
|
|
|
|
rpc UpdateDocument(UpdateDocumentRequest) returns (Document) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
patch: "/v1/{document.name=projects/*/databases/*/documents/*/**}"
|
|
|
|
body: "document"
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "document,update_mask";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Deletes a document.
|
|
|
|
rpc DeleteDocument(DeleteDocumentRequest) returns (google.protobuf.Empty) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
delete: "/v1/{name=projects/*/databases/*/documents/*/**}"
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "name";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Gets multiple documents.
|
|
|
|
//
|
|
|
|
// Documents returned by this method are not guaranteed to be returned in the
|
|
|
|
// same order that they were requested.
|
|
|
|
rpc BatchGetDocuments(BatchGetDocumentsRequest) returns (stream BatchGetDocumentsResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:batchGet"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Starts a new transaction.
|
|
|
|
rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:beginTransaction"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "database";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Commits a transaction, while optionally updating documents.
|
|
|
|
rpc Commit(CommitRequest) returns (CommitResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:commit"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "database,writes";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Rolls back a transaction.
|
|
|
|
rpc Rollback(RollbackRequest) returns (google.protobuf.Empty) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:rollback"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "database,transaction";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Runs a query.
|
|
|
|
rpc RunQuery(RunQueryRequest) returns (stream RunQueryResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents}:runQuery"
|
|
|
|
body: "*"
|
|
|
|
additional_bindings {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents/*/**}:runQuery"
|
|
|
|
body: "*"
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Partitions a query by returning partition cursors that can be used to run
|
|
|
|
// the query in parallel. The returned partition cursors are split points that
|
|
|
|
// can be used by RunQuery as starting/end points for the query results.
|
|
|
|
rpc PartitionQuery(PartitionQueryRequest) returns (PartitionQueryResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents}:partitionQuery"
|
|
|
|
body: "*"
|
|
|
|
additional_bindings {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents/*/**}:partitionQuery"
|
|
|
|
body: "*"
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Streams batches of document updates and deletes, in order.
|
|
|
|
rpc Write(stream WriteRequest) returns (stream WriteResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:write"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Listens to changes.
|
|
|
|
rpc Listen(stream ListenRequest) returns (stream ListenResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:listen"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lists all the collection IDs underneath a document.
|
|
|
|
rpc ListCollectionIds(ListCollectionIdsRequest) returns (ListCollectionIdsResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents}:listCollectionIds"
|
|
|
|
body: "*"
|
|
|
|
additional_bindings {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents/*/**}:listCollectionIds"
|
|
|
|
body: "*"
|
|
|
|
}
|
|
|
|
};
|
|
|
|
option (google.api.method_signature) = "parent";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Applies a batch of write operations.
|
|
|
|
//
|
|
|
|
// The BatchWrite method does not apply the write operations atomically
|
|
|
|
// and can apply them out of order. Method does not allow more than one write
|
|
|
|
// per document. Each write succeeds or fails independently. See the
|
|
|
|
// [BatchWriteResponse][google.firestore.v1.BatchWriteResponse] for the success status of each write.
|
|
|
|
//
|
|
|
|
// If you require an atomically applied set of writes, use
|
|
|
|
// [Commit][google.firestore.v1.Firestore.Commit] instead.
|
|
|
|
rpc BatchWrite(BatchWriteRequest) returns (BatchWriteResponse) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{database=projects/*/databases/*}/documents:batchWrite"
|
|
|
|
body: "*"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Creates a new document.
|
|
|
|
rpc CreateDocument(CreateDocumentRequest) returns (Document) {
|
|
|
|
option (google.api.http) = {
|
|
|
|
post: "/v1/{parent=projects/*/databases/*/documents/**}/{collection_id}"
|
|
|
|
body: "document"
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.GetDocument][google.firestore.v1.Firestore.GetDocument].
|
|
|
|
message GetDocumentRequest {
|
|
|
|
// Required. The resource name of the Document to get. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
string name = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The fields to return. If not set, returns all fields.
|
|
|
|
//
|
|
|
|
// If the document has a field that is not present in this mask, that field
|
|
|
|
// will not be returned in the response.
|
|
|
|
DocumentMask mask = 2;
|
|
|
|
|
|
|
|
// The consistency mode for this transaction.
|
|
|
|
// If not set, defaults to strong consistency.
|
|
|
|
oneof consistency_selector {
|
|
|
|
// Reads the document in a transaction.
|
|
|
|
bytes transaction = 3;
|
|
|
|
|
|
|
|
// Reads the version of the document at the given time.
|
|
|
|
// This may not be older than 270 seconds.
|
|
|
|
google.protobuf.Timestamp read_time = 5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments].
|
|
|
|
message ListDocumentsRequest {
|
|
|
|
// Required. The parent resource name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents` or
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// For example:
|
|
|
|
// `projects/my-project/databases/my-database/documents` or
|
|
|
|
// `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
|
|
|
|
string parent = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// Required. The collection ID, relative to `parent`, to list. For example: `chatrooms`
|
|
|
|
// or `messages`.
|
|
|
|
string collection_id = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The maximum number of documents to return.
|
|
|
|
int32 page_size = 3;
|
|
|
|
|
|
|
|
// The `next_page_token` value returned from a previous List request, if any.
|
|
|
|
string page_token = 4;
|
|
|
|
|
|
|
|
// The order to sort results by. For example: `priority desc, name`.
|
|
|
|
string order_by = 6;
|
|
|
|
|
|
|
|
// The fields to return. If not set, returns all fields.
|
|
|
|
//
|
|
|
|
// If a document has a field that is not present in this mask, that field
|
|
|
|
// will not be returned in the response.
|
|
|
|
DocumentMask mask = 7;
|
|
|
|
|
|
|
|
// The consistency mode for this transaction.
|
|
|
|
// If not set, defaults to strong consistency.
|
|
|
|
oneof consistency_selector {
|
|
|
|
// Reads documents in a transaction.
|
|
|
|
bytes transaction = 8;
|
|
|
|
|
|
|
|
// Reads documents as they were at the given time.
|
|
|
|
// This may not be older than 270 seconds.
|
|
|
|
google.protobuf.Timestamp read_time = 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
// If the list should show missing documents. A missing document is a
|
|
|
|
// document that does not exist but has sub-documents. These documents will
|
|
|
|
// be returned with a key but will not have fields, [Document.create_time][google.firestore.v1.Document.create_time],
|
|
|
|
// or [Document.update_time][google.firestore.v1.Document.update_time] set.
|
|
|
|
//
|
|
|
|
// Requests with `show_missing` may not specify `where` or
|
|
|
|
// `order_by`.
|
|
|
|
bool show_missing = 12;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.ListDocuments][google.firestore.v1.Firestore.ListDocuments].
|
|
|
|
message ListDocumentsResponse {
|
|
|
|
// The Documents found.
|
|
|
|
repeated Document documents = 1;
|
|
|
|
|
|
|
|
// The next page token.
|
|
|
|
string next_page_token = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.CreateDocument][google.firestore.v1.Firestore.CreateDocument].
|
|
|
|
message CreateDocumentRequest {
|
|
|
|
// Required. The parent resource. For example:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents` or
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}`
|
|
|
|
string parent = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// Required. The collection ID, relative to `parent`, to list. For example: `chatrooms`.
|
|
|
|
string collection_id = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The client-assigned document ID to use for this document.
|
|
|
|
//
|
|
|
|
// Optional. If not specified, an ID will be assigned by the service.
|
|
|
|
string document_id = 3;
|
|
|
|
|
|
|
|
// Required. The document to create. `name` must not be set.
|
|
|
|
Document document = 4 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The fields to return. If not set, returns all fields.
|
|
|
|
//
|
|
|
|
// If the document has a field that is not present in this mask, that field
|
|
|
|
// will not be returned in the response.
|
|
|
|
DocumentMask mask = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.UpdateDocument][google.firestore.v1.Firestore.UpdateDocument].
|
|
|
|
message UpdateDocumentRequest {
|
|
|
|
// Required. The updated document.
|
|
|
|
// Creates the document if it does not already exist.
|
|
|
|
Document document = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The fields to update.
|
|
|
|
// None of the field paths in the mask may contain a reserved name.
|
|
|
|
//
|
|
|
|
// If the document exists on the server and has fields not referenced in the
|
|
|
|
// mask, they are left unchanged.
|
|
|
|
// Fields referenced in the mask, but not present in the input document, are
|
|
|
|
// deleted from the document on the server.
|
|
|
|
DocumentMask update_mask = 2;
|
|
|
|
|
|
|
|
// The fields to return. If not set, returns all fields.
|
|
|
|
//
|
|
|
|
// If the document has a field that is not present in this mask, that field
|
|
|
|
// will not be returned in the response.
|
|
|
|
DocumentMask mask = 3;
|
|
|
|
|
|
|
|
// An optional precondition on the document.
|
|
|
|
// The request will fail if this is set and not met by the target document.
|
|
|
|
Precondition current_document = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.DeleteDocument][google.firestore.v1.Firestore.DeleteDocument].
|
|
|
|
message DeleteDocumentRequest {
|
|
|
|
// Required. The resource name of the Document to delete. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
string name = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// An optional precondition on the document.
|
|
|
|
// The request will fail if this is set and not met by the target document.
|
|
|
|
Precondition current_document = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments].
|
|
|
|
message BatchGetDocumentsRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The names of the documents to retrieve. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// The request will fail if any of the document is not a child resource of the
|
|
|
|
// given `database`. Duplicate names will be elided.
|
|
|
|
repeated string documents = 2;
|
|
|
|
|
|
|
|
// The fields to return. If not set, returns all fields.
|
|
|
|
//
|
|
|
|
// If a document has a field that is not present in this mask, that field will
|
|
|
|
// not be returned in the response.
|
|
|
|
DocumentMask mask = 3;
|
|
|
|
|
|
|
|
// The consistency mode for this transaction.
|
|
|
|
// If not set, defaults to strong consistency.
|
|
|
|
oneof consistency_selector {
|
|
|
|
// Reads documents in a transaction.
|
|
|
|
bytes transaction = 4;
|
|
|
|
|
|
|
|
// Starts a new transaction and reads the documents.
|
|
|
|
// Defaults to a read-only transaction.
|
|
|
|
// The new transaction ID will be returned as the first response in the
|
|
|
|
// stream.
|
|
|
|
TransactionOptions new_transaction = 5;
|
|
|
|
|
|
|
|
// Reads documents as they were at the given time.
|
|
|
|
// This may not be older than 270 seconds.
|
|
|
|
google.protobuf.Timestamp read_time = 7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The streamed response for [Firestore.BatchGetDocuments][google.firestore.v1.Firestore.BatchGetDocuments].
|
|
|
|
message BatchGetDocumentsResponse {
|
|
|
|
// A single result.
|
|
|
|
// This can be empty if the server is just returning a transaction.
|
|
|
|
oneof result {
|
|
|
|
// A document that was requested.
|
|
|
|
Document found = 1;
|
|
|
|
|
|
|
|
// A document name that was requested but does not exist. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
string missing = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The transaction that was started as part of this request.
|
|
|
|
// Will only be set in the first response, and only if
|
|
|
|
// [BatchGetDocumentsRequest.new_transaction][google.firestore.v1.BatchGetDocumentsRequest.new_transaction] was set in the request.
|
|
|
|
bytes transaction = 3;
|
|
|
|
|
|
|
|
// The time at which the document was read.
|
|
|
|
// This may be monotically increasing, in this case the previous documents in
|
|
|
|
// the result stream are guaranteed not to have changed between their
|
|
|
|
// read_time and this one.
|
|
|
|
google.protobuf.Timestamp read_time = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction].
|
|
|
|
message BeginTransactionRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The options for the transaction.
|
|
|
|
// Defaults to a read-write transaction.
|
|
|
|
TransactionOptions options = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.BeginTransaction][google.firestore.v1.Firestore.BeginTransaction].
|
|
|
|
message BeginTransactionResponse {
|
|
|
|
// The transaction that was started.
|
|
|
|
bytes transaction = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.Commit][google.firestore.v1.Firestore.Commit].
|
|
|
|
message CommitRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The writes to apply.
|
|
|
|
//
|
|
|
|
// Always executed atomically and in order.
|
|
|
|
repeated Write writes = 2;
|
|
|
|
|
|
|
|
// If set, applies all writes in this transaction, and commits it.
|
|
|
|
bytes transaction = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.Commit][google.firestore.v1.Firestore.Commit].
|
|
|
|
message CommitResponse {
|
|
|
|
// The result of applying the writes.
|
|
|
|
//
|
|
|
|
// This i-th write result corresponds to the i-th write in the
|
|
|
|
// request.
|
|
|
|
repeated WriteResult write_results = 1;
|
|
|
|
|
|
|
|
// The time at which the commit occurred. Any read with an equal or greater
|
|
|
|
// `read_time` is guaranteed to see the effects of the commit.
|
|
|
|
google.protobuf.Timestamp commit_time = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.Rollback][google.firestore.v1.Firestore.Rollback].
|
|
|
|
message RollbackRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// Required. The transaction to roll back.
|
|
|
|
bytes transaction = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery].
|
|
|
|
message RunQueryRequest {
|
|
|
|
// Required. The parent resource name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents` or
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// For example:
|
|
|
|
// `projects/my-project/databases/my-database/documents` or
|
|
|
|
// `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
|
|
|
|
string parent = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The query to run.
|
|
|
|
oneof query_type {
|
|
|
|
// A structured query.
|
|
|
|
StructuredQuery structured_query = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The consistency mode for this transaction.
|
|
|
|
// If not set, defaults to strong consistency.
|
|
|
|
oneof consistency_selector {
|
|
|
|
// Reads documents in a transaction.
|
|
|
|
bytes transaction = 5;
|
|
|
|
|
|
|
|
// Starts a new transaction and reads the documents.
|
|
|
|
// Defaults to a read-only transaction.
|
|
|
|
// The new transaction ID will be returned as the first response in the
|
|
|
|
// stream.
|
|
|
|
TransactionOptions new_transaction = 6;
|
|
|
|
|
|
|
|
// Reads documents as they were at the given time.
|
|
|
|
// This may not be older than 270 seconds.
|
|
|
|
google.protobuf.Timestamp read_time = 7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.RunQuery][google.firestore.v1.Firestore.RunQuery].
|
|
|
|
message RunQueryResponse {
|
|
|
|
// The transaction that was started as part of this request.
|
|
|
|
// Can only be set in the first response, and only if
|
|
|
|
// [RunQueryRequest.new_transaction][google.firestore.v1.RunQueryRequest.new_transaction] was set in the request.
|
|
|
|
// If set, no other fields will be set in this response.
|
|
|
|
bytes transaction = 2;
|
|
|
|
|
|
|
|
// A query result.
|
|
|
|
// Not set when reporting partial progress.
|
|
|
|
Document document = 1;
|
|
|
|
|
|
|
|
// The time at which the document was read. This may be monotonically
|
|
|
|
// increasing; in this case, the previous documents in the result stream are
|
|
|
|
// guaranteed not to have changed between their `read_time` and this one.
|
|
|
|
//
|
|
|
|
// If the query returns no results, a response with `read_time` and no
|
|
|
|
// `document` will be sent, and this represents the time at which the query
|
|
|
|
// was run.
|
|
|
|
google.protobuf.Timestamp read_time = 3;
|
|
|
|
|
|
|
|
// The number of results that have been skipped due to an offset between
|
|
|
|
// the last response and the current response.
|
|
|
|
int32 skipped_results = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery].
|
|
|
|
message PartitionQueryRequest {
|
|
|
|
// Required. The parent resource name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents`.
|
|
|
|
// Document resource names are not supported; only database resource names
|
|
|
|
// can be specified.
|
|
|
|
string parent = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The query to partition.
|
|
|
|
oneof query_type {
|
|
|
|
// A structured query.
|
|
|
|
// Query must specify collection with all descendants and be ordered by name
|
|
|
|
// ascending. Other filters, order bys, limits, offsets, and start/end
|
|
|
|
// cursors are not supported.
|
|
|
|
StructuredQuery structured_query = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The desired maximum number of partition points.
|
|
|
|
// The partitions may be returned across multiple pages of results.
|
|
|
|
// The number must be positive. The actual number of partitions
|
|
|
|
// returned may be fewer.
|
|
|
|
//
|
|
|
|
// For example, this may be set to one fewer than the number of parallel
|
|
|
|
// queries to be run, or in running a data pipeline job, one fewer than the
|
|
|
|
// number of workers or compute instances available.
|
|
|
|
int64 partition_count = 3;
|
|
|
|
|
|
|
|
// The `next_page_token` value returned from a previous call to
|
|
|
|
// PartitionQuery that may be used to get an additional set of results.
|
|
|
|
// There are no ordering guarantees between sets of results. Thus, using
|
|
|
|
// multiple sets of results will require merging the different result sets.
|
|
|
|
//
|
|
|
|
// For example, two subsequent calls using a page_token may return:
|
|
|
|
//
|
|
|
|
// * cursor B, cursor M, cursor Q
|
|
|
|
// * cursor A, cursor U, cursor W
|
|
|
|
//
|
|
|
|
// To obtain a complete result set ordered with respect to the results of the
|
|
|
|
// query supplied to PartitionQuery, the results sets should be merged:
|
|
|
|
// cursor A, cursor B, cursor M, cursor Q, cursor U, cursor W
|
|
|
|
string page_token = 4;
|
|
|
|
|
|
|
|
// The maximum number of partitions to return in this call, subject to
|
|
|
|
// `partition_count`.
|
|
|
|
//
|
|
|
|
// For example, if `partition_count` = 10 and `page_size` = 8, the first call
|
|
|
|
// to PartitionQuery will return up to 8 partitions and a `next_page_token`
|
|
|
|
// if more results exist. A second call to PartitionQuery will return up to
|
|
|
|
// 2 partitions, to complete the total of 10 specified in `partition_count`.
|
|
|
|
int32 page_size = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.PartitionQuery][google.firestore.v1.Firestore.PartitionQuery].
|
|
|
|
message PartitionQueryResponse {
|
|
|
|
// Partition results.
|
|
|
|
// Each partition is a split point that can be used by RunQuery as a starting
|
|
|
|
// or end point for the query results. The RunQuery requests must be made with
|
|
|
|
// the same query supplied to this PartitionQuery request. The partition
|
|
|
|
// cursors will be ordered according to same ordering as the results of the
|
|
|
|
// query supplied to PartitionQuery.
|
|
|
|
//
|
|
|
|
// For example, if a PartitionQuery request returns partition cursors A and B,
|
|
|
|
// running the following three queries will return the entire result set of
|
|
|
|
// the original query:
|
|
|
|
//
|
|
|
|
// * query, end_at A
|
|
|
|
// * query, start_at A, end_at B
|
|
|
|
// * query, start_at B
|
|
|
|
//
|
|
|
|
// An empty result may indicate that the query has too few results to be
|
|
|
|
// partitioned.
|
|
|
|
repeated Cursor partitions = 1;
|
|
|
|
|
|
|
|
// A page token that may be used to request an additional set of results, up
|
|
|
|
// to the number specified by `partition_count` in the PartitionQuery request.
|
|
|
|
// If blank, there are no more results.
|
|
|
|
string next_page_token = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.Write][google.firestore.v1.Firestore.Write].
|
|
|
|
//
|
|
|
|
// The first request creates a stream, or resumes an existing one from a token.
|
|
|
|
//
|
|
|
|
// When creating a new stream, the server replies with a response containing
|
|
|
|
// only an ID and a token, to use in the next request.
|
|
|
|
//
|
|
|
|
// When resuming a stream, the server first streams any responses later than the
|
|
|
|
// given token, then a response containing only an up-to-date token, to use in
|
|
|
|
// the next request.
|
|
|
|
message WriteRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
// This is only required in the first message.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The ID of the write stream to resume.
|
|
|
|
// This may only be set in the first message. When left empty, a new write
|
|
|
|
// stream will be created.
|
|
|
|
string stream_id = 2;
|
|
|
|
|
|
|
|
// The writes to apply.
|
|
|
|
//
|
|
|
|
// Always executed atomically and in order.
|
|
|
|
// This must be empty on the first request.
|
|
|
|
// This may be empty on the last request.
|
|
|
|
// This must not be empty on all other requests.
|
|
|
|
repeated Write writes = 3;
|
|
|
|
|
|
|
|
// A stream token that was previously sent by the server.
|
|
|
|
//
|
|
|
|
// The client should set this field to the token from the most recent
|
|
|
|
// [WriteResponse][google.firestore.v1.WriteResponse] it has received. This acknowledges that the client has
|
|
|
|
// received responses up to this token. After sending this token, earlier
|
|
|
|
// tokens may not be used anymore.
|
|
|
|
//
|
|
|
|
// The server may close the stream if there are too many unacknowledged
|
|
|
|
// responses.
|
|
|
|
//
|
|
|
|
// Leave this field unset when creating a new stream. To resume a stream at
|
|
|
|
// a specific point, set this field and the `stream_id` field.
|
|
|
|
//
|
|
|
|
// Leave this field unset when creating a new stream.
|
|
|
|
bytes stream_token = 4;
|
|
|
|
|
|
|
|
// Labels associated with this write request.
|
|
|
|
map<string, string> labels = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.Write][google.firestore.v1.Firestore.Write].
|
|
|
|
message WriteResponse {
|
|
|
|
// The ID of the stream.
|
|
|
|
// Only set on the first message, when a new stream was created.
|
|
|
|
string stream_id = 1;
|
|
|
|
|
|
|
|
// A token that represents the position of this response in the stream.
|
|
|
|
// This can be used by a client to resume the stream at this point.
|
|
|
|
//
|
|
|
|
// This field is always set.
|
|
|
|
bytes stream_token = 2;
|
|
|
|
|
|
|
|
// The result of applying the writes.
|
|
|
|
//
|
|
|
|
// This i-th write result corresponds to the i-th write in the
|
|
|
|
// request.
|
|
|
|
repeated WriteResult write_results = 3;
|
|
|
|
|
|
|
|
// The time at which the commit occurred. Any read with an equal or greater
|
|
|
|
// `read_time` is guaranteed to see the effects of the write.
|
|
|
|
google.protobuf.Timestamp commit_time = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// A request for [Firestore.Listen][google.firestore.v1.Firestore.Listen]
|
|
|
|
message ListenRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The supported target changes.
|
|
|
|
oneof target_change {
|
|
|
|
// A target to add to this stream.
|
|
|
|
Target add_target = 2;
|
|
|
|
|
|
|
|
// The ID of a target to remove from this stream.
|
|
|
|
int32 remove_target = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Labels associated with this target change.
|
|
|
|
map<string, string> labels = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response for [Firestore.Listen][google.firestore.v1.Firestore.Listen].
|
|
|
|
message ListenResponse {
|
|
|
|
// The supported responses.
|
|
|
|
oneof response_type {
|
|
|
|
// Targets have changed.
|
|
|
|
TargetChange target_change = 2;
|
|
|
|
|
|
|
|
// A [Document][google.firestore.v1.Document] has changed.
|
|
|
|
DocumentChange document_change = 3;
|
|
|
|
|
|
|
|
// A [Document][google.firestore.v1.Document] has been deleted.
|
|
|
|
DocumentDelete document_delete = 4;
|
|
|
|
|
|
|
|
// A [Document][google.firestore.v1.Document] has been removed from a target (because it is no longer
|
|
|
|
// relevant to that target).
|
|
|
|
DocumentRemove document_remove = 6;
|
|
|
|
|
|
|
|
// A filter to apply to the set of documents previously returned for the
|
|
|
|
// given target.
|
|
|
|
//
|
|
|
|
// Returned when documents may have been removed from the given target, but
|
|
|
|
// the exact documents are unknown.
|
|
|
|
ExistenceFilter filter = 5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// A specification of a set of documents to listen to.
|
|
|
|
message Target {
|
|
|
|
// A target specified by a set of documents names.
|
|
|
|
message DocumentsTarget {
|
|
|
|
// The names of the documents to retrieve. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// The request will fail if any of the document is not a child resource of
|
|
|
|
// the given `database`. Duplicate names will be elided.
|
|
|
|
repeated string documents = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// A target specified by a query.
|
|
|
|
message QueryTarget {
|
|
|
|
// The parent resource name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents` or
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// For example:
|
|
|
|
// `projects/my-project/databases/my-database/documents` or
|
|
|
|
// `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
|
|
|
|
string parent = 1;
|
|
|
|
|
|
|
|
// The query to run.
|
|
|
|
oneof query_type {
|
|
|
|
// A structured query.
|
|
|
|
StructuredQuery structured_query = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The type of target to listen to.
|
|
|
|
oneof target_type {
|
|
|
|
// A target specified by a query.
|
|
|
|
QueryTarget query = 2;
|
|
|
|
|
|
|
|
// A target specified by a set of document names.
|
|
|
|
DocumentsTarget documents = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// When to start listening.
|
|
|
|
//
|
|
|
|
// If not specified, all matching Documents are returned before any
|
|
|
|
// subsequent changes.
|
|
|
|
oneof resume_type {
|
|
|
|
// A resume token from a prior [TargetChange][google.firestore.v1.TargetChange] for an identical target.
|
|
|
|
//
|
|
|
|
// Using a resume token with a different target is unsupported and may fail.
|
|
|
|
bytes resume_token = 4;
|
|
|
|
|
|
|
|
// Start listening after a specific `read_time`.
|
|
|
|
//
|
|
|
|
// The client must know the state of matching documents at this time.
|
|
|
|
google.protobuf.Timestamp read_time = 11;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The target ID that identifies the target on the stream. Must be a positive
|
|
|
|
// number and non-zero.
|
|
|
|
int32 target_id = 5;
|
|
|
|
|
|
|
|
// If the target should be removed once it is current and consistent.
|
|
|
|
bool once = 6;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Targets being watched have changed.
|
|
|
|
message TargetChange {
|
|
|
|
// The type of change.
|
|
|
|
enum TargetChangeType {
|
|
|
|
// No change has occurred. Used only to send an updated `resume_token`.
|
|
|
|
NO_CHANGE = 0;
|
|
|
|
|
|
|
|
// The targets have been added.
|
|
|
|
ADD = 1;
|
|
|
|
|
|
|
|
// The targets have been removed.
|
|
|
|
REMOVE = 2;
|
|
|
|
|
|
|
|
// The targets reflect all changes committed before the targets were added
|
|
|
|
// to the stream.
|
|
|
|
//
|
|
|
|
// This will be sent after or with a `read_time` that is greater than or
|
|
|
|
// equal to the time at which the targets were added.
|
|
|
|
//
|
|
|
|
// Listeners can wait for this change if read-after-write semantics
|
|
|
|
// are desired.
|
|
|
|
CURRENT = 3;
|
|
|
|
|
|
|
|
// The targets have been reset, and a new initial state for the targets
|
|
|
|
// will be returned in subsequent changes.
|
|
|
|
//
|
|
|
|
// After the initial state is complete, `CURRENT` will be returned even
|
|
|
|
// if the target was previously indicated to be `CURRENT`.
|
|
|
|
RESET = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The type of change that occurred.
|
|
|
|
TargetChangeType target_change_type = 1;
|
|
|
|
|
|
|
|
// The target IDs of targets that have changed.
|
|
|
|
//
|
|
|
|
// If empty, the change applies to all targets.
|
|
|
|
//
|
|
|
|
// The order of the target IDs is not defined.
|
|
|
|
repeated int32 target_ids = 2;
|
|
|
|
|
|
|
|
// The error that resulted in this change, if applicable.
|
|
|
|
google.rpc.Status cause = 3;
|
|
|
|
|
|
|
|
// A token that can be used to resume the stream for the given `target_ids`,
|
|
|
|
// or all targets if `target_ids` is empty.
|
|
|
|
//
|
|
|
|
// Not set on every target change.
|
|
|
|
bytes resume_token = 4;
|
|
|
|
|
|
|
|
// The consistent `read_time` for the given `target_ids` (omitted when the
|
|
|
|
// target_ids are not at a consistent snapshot).
|
|
|
|
//
|
|
|
|
// The stream is guaranteed to send a `read_time` with `target_ids` empty
|
|
|
|
// whenever the entire stream reaches a new consistent snapshot. ADD,
|
|
|
|
// CURRENT, and RESET messages are guaranteed to (eventually) result in a
|
|
|
|
// new consistent snapshot (while NO_CHANGE and REMOVE messages are not).
|
|
|
|
//
|
|
|
|
// For a given stream, `read_time` is guaranteed to be monotonically
|
|
|
|
// increasing.
|
|
|
|
google.protobuf.Timestamp read_time = 6;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds].
|
|
|
|
message ListCollectionIdsRequest {
|
|
|
|
// Required. The parent document. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
|
|
|
|
// For example:
|
|
|
|
// `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
|
|
|
|
string parent = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The maximum number of results to return.
|
|
|
|
int32 page_size = 2;
|
|
|
|
|
|
|
|
// A page token. Must be a value from
|
|
|
|
// [ListCollectionIdsResponse][google.firestore.v1.ListCollectionIdsResponse].
|
|
|
|
string page_token = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response from [Firestore.ListCollectionIds][google.firestore.v1.Firestore.ListCollectionIds].
|
|
|
|
message ListCollectionIdsResponse {
|
|
|
|
// The collection ids.
|
|
|
|
repeated string collection_ids = 1;
|
|
|
|
|
|
|
|
// A page token that may be used to continue the list.
|
|
|
|
string next_page_token = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The request for [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite].
|
|
|
|
message BatchWriteRequest {
|
|
|
|
// Required. The database name. In the format:
|
|
|
|
// `projects/{project_id}/databases/{database_id}`.
|
|
|
|
string database = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
|
|
|
|
// The writes to apply.
|
|
|
|
//
|
|
|
|
// Method does not apply writes atomically and does not guarantee ordering.
|
|
|
|
// Each write succeeds or fails independently. You cannot write to the same
|
|
|
|
// document more than once per request.
|
|
|
|
repeated Write writes = 2;
|
|
|
|
|
|
|
|
// Labels associated with this batch write.
|
|
|
|
map<string, string> labels = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// The response from [Firestore.BatchWrite][google.firestore.v1.Firestore.BatchWrite].
|
|
|
|
message BatchWriteResponse {
|
|
|
|
// The result of applying the writes.
|
|
|
|
//
|
|
|
|
// This i-th write result corresponds to the i-th write in the
|
|
|
|
// request.
|
|
|
|
repeated WriteResult write_results = 1;
|
|
|
|
|
|
|
|
// The status of applying the writes.
|
|
|
|
//
|
|
|
|
// This i-th write status corresponds to the i-th write in the
|
|
|
|
// request.
|
|
|
|
repeated google.rpc.Status status = 2;
|
|
|
|
}
|