1*d5c09012SAndroid Build Coastguard Worker// Copyright 2020 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 Worker 16*d5c09012SAndroid Build Coastguard Worker// This file defines the format of Firestore bundle file/stream. It is not a part of the 17*d5c09012SAndroid Build Coastguard Worker// Firestore API, only a specification used by Server and Client SDK to write and read 18*d5c09012SAndroid Build Coastguard Worker// bundles. 19*d5c09012SAndroid Build Coastguard Worker 20*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 21*d5c09012SAndroid Build Coastguard Worker 22*d5c09012SAndroid Build Coastguard Workerpackage google.firestore.bundle; 23*d5c09012SAndroid Build Coastguard Worker 24*d5c09012SAndroid Build Coastguard Workerimport "google/firestore/v1/document.proto"; 25*d5c09012SAndroid Build Coastguard Workerimport "google/firestore/v1/query.proto"; 26*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 27*d5c09012SAndroid Build Coastguard Worker 28*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Firestore.Bundle"; 29*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/firestore/bundle/bundlepb;bundlepb"; 30*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 31*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "BundleProto"; 32*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.firestore.bundle"; 33*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "FSTPB"; 34*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Firestore\\Bundle"; 35*d5c09012SAndroid Build Coastguard Worker 36*d5c09012SAndroid Build Coastguard Worker// Encodes a query saved in the bundle. 37*d5c09012SAndroid Build Coastguard Workermessage BundledQuery { 38*d5c09012SAndroid Build Coastguard Worker // The parent resource name. 39*d5c09012SAndroid Build Coastguard Worker string parent = 1; 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker // The query to run. 42*d5c09012SAndroid Build Coastguard Worker oneof query_type { 43*d5c09012SAndroid Build Coastguard Worker // A structured query. 44*d5c09012SAndroid Build Coastguard Worker google.firestore.v1.StructuredQuery structured_query = 2; 45*d5c09012SAndroid Build Coastguard Worker } 46*d5c09012SAndroid Build Coastguard Worker 47*d5c09012SAndroid Build Coastguard Worker // If the query is a limit query, should the limit be applied to the beginning or 48*d5c09012SAndroid Build Coastguard Worker // the end of results. 49*d5c09012SAndroid Build Coastguard Worker enum LimitType { 50*d5c09012SAndroid Build Coastguard Worker FIRST = 0; 51*d5c09012SAndroid Build Coastguard Worker LAST = 1; 52*d5c09012SAndroid Build Coastguard Worker } 53*d5c09012SAndroid Build Coastguard Worker LimitType limit_type = 3; 54*d5c09012SAndroid Build Coastguard Worker} 55*d5c09012SAndroid Build Coastguard Worker 56*d5c09012SAndroid Build Coastguard Worker// A Query associated with a name, created as part of the bundle file, and can be read 57*d5c09012SAndroid Build Coastguard Worker// by client SDKs once the bundle containing them is loaded. 58*d5c09012SAndroid Build Coastguard Workermessage NamedQuery { 59*d5c09012SAndroid Build Coastguard Worker // Name of the query, such that client can use the name to load this query 60*d5c09012SAndroid Build Coastguard Worker // from bundle, and resume from when the query results are materialized 61*d5c09012SAndroid Build Coastguard Worker // into this bundle. 62*d5c09012SAndroid Build Coastguard Worker string name = 1; 63*d5c09012SAndroid Build Coastguard Worker 64*d5c09012SAndroid Build Coastguard Worker // The query saved in the bundle. 65*d5c09012SAndroid Build Coastguard Worker BundledQuery bundled_query = 2; 66*d5c09012SAndroid Build Coastguard Worker 67*d5c09012SAndroid Build Coastguard Worker // The read time of the query, when it is used to build the bundle. This is useful to 68*d5c09012SAndroid Build Coastguard Worker // resume the query from the bundle, once it is loaded by client SDKs. 69*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp read_time = 3; 70*d5c09012SAndroid Build Coastguard Worker} 71*d5c09012SAndroid Build Coastguard Worker 72*d5c09012SAndroid Build Coastguard Worker// Metadata describing a Firestore document saved in the bundle. 73*d5c09012SAndroid Build Coastguard Workermessage BundledDocumentMetadata { 74*d5c09012SAndroid Build Coastguard Worker // The document key of a bundled document. 75*d5c09012SAndroid Build Coastguard Worker string name = 1; 76*d5c09012SAndroid Build Coastguard Worker 77*d5c09012SAndroid Build Coastguard Worker // The snapshot version of the document data bundled. 78*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp read_time = 2; 79*d5c09012SAndroid Build Coastguard Worker 80*d5c09012SAndroid Build Coastguard Worker // Whether the document exists. 81*d5c09012SAndroid Build Coastguard Worker bool exists = 3; 82*d5c09012SAndroid Build Coastguard Worker 83*d5c09012SAndroid Build Coastguard Worker // The names of the queries in this bundle that this document matches to. 84*d5c09012SAndroid Build Coastguard Worker repeated string queries = 4; 85*d5c09012SAndroid Build Coastguard Worker} 86*d5c09012SAndroid Build Coastguard Worker 87*d5c09012SAndroid Build Coastguard Worker// Metadata describing the bundle file/stream. 88*d5c09012SAndroid Build Coastguard Workermessage BundleMetadata { 89*d5c09012SAndroid Build Coastguard Worker // The ID of the bundle. 90*d5c09012SAndroid Build Coastguard Worker string id = 1; 91*d5c09012SAndroid Build Coastguard Worker 92*d5c09012SAndroid Build Coastguard Worker // Time at which the documents snapshot is taken for this bundle. 93*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp create_time = 2; 94*d5c09012SAndroid Build Coastguard Worker 95*d5c09012SAndroid Build Coastguard Worker // The schema version of the bundle. 96*d5c09012SAndroid Build Coastguard Worker uint32 version = 3; 97*d5c09012SAndroid Build Coastguard Worker 98*d5c09012SAndroid Build Coastguard Worker // The number of documents in the bundle. 99*d5c09012SAndroid Build Coastguard Worker uint32 total_documents = 4; 100*d5c09012SAndroid Build Coastguard Worker 101*d5c09012SAndroid Build Coastguard Worker // The size of the bundle in bytes, excluding this `BundleMetadata`. 102*d5c09012SAndroid Build Coastguard Worker uint64 total_bytes = 5; 103*d5c09012SAndroid Build Coastguard Worker} 104*d5c09012SAndroid Build Coastguard Worker 105*d5c09012SAndroid Build Coastguard Worker// A Firestore bundle is a length-prefixed stream of JSON representations of 106*d5c09012SAndroid Build Coastguard Worker// `BundleElement`. 107*d5c09012SAndroid Build Coastguard Worker// Only one `BundleMetadata` is expected, and it should be the first element. 108*d5c09012SAndroid Build Coastguard Worker// The named queries follow after `metadata`. Every `document_metadata` is 109*d5c09012SAndroid Build Coastguard Worker// immediately followed by a `document`. 110*d5c09012SAndroid Build Coastguard Workermessage BundleElement { 111*d5c09012SAndroid Build Coastguard Worker oneof element_type { 112*d5c09012SAndroid Build Coastguard Worker BundleMetadata metadata = 1; 113*d5c09012SAndroid Build Coastguard Worker 114*d5c09012SAndroid Build Coastguard Worker NamedQuery named_query = 2; 115*d5c09012SAndroid Build Coastguard Worker 116*d5c09012SAndroid Build Coastguard Worker BundledDocumentMetadata document_metadata = 3; 117*d5c09012SAndroid Build Coastguard Worker 118*d5c09012SAndroid Build Coastguard Worker google.firestore.v1.Document document = 4; 119*d5c09012SAndroid Build Coastguard Worker } 120*d5c09012SAndroid Build Coastguard Worker} 121