Skip to content

Migrate Firestore to the v1 protocol #194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,12 @@ MaybeDocument decodeMaybeDocument(com.google.firebase.firestore.proto.MaybeDocum
}

/**
* Encodes a Document for local storage. This differs from the v1beta1 RPC serializer for
* Documents in that it preserves the updateTime, which is considered an output only value by the
* server.
* Encodes a Document for local storage. This differs from the v1 RPC serializer for Documents in
* that it preserves the updateTime, which is considered an output only value by the server.
*/
private com.google.firestore.v1beta1.Document encodeDocument(Document document) {
com.google.firestore.v1beta1.Document.Builder builder =
com.google.firestore.v1beta1.Document.newBuilder();
private com.google.firestore.v1.Document encodeDocument(Document document) {
com.google.firestore.v1.Document.Builder builder =
com.google.firestore.v1.Document.newBuilder();
builder.setName(rpcSerializer.encodeKey(document.getKey()));

ObjectValue value = document.getData();
Expand All @@ -111,7 +110,7 @@ private com.google.firestore.v1beta1.Document encodeDocument(Document document)

/** Decodes a Document proto to the equivalent model. */
private Document decodeDocument(
com.google.firestore.v1beta1.Document document, boolean hasCommittedMutations) {
com.google.firestore.v1.Document document, boolean hasCommittedMutations) {
DocumentKey key = rpcSerializer.decodeKey(document.getName());
ObjectValue value = rpcSerializer.decodeFields(document.getFieldsMap());
SnapshotVersion version = rpcSerializer.decodeVersion(document.getUpdateTime());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ public static Comparator<Document> keyComparator() {
* Memoized serialized form of the document for optimization purposes (avoids repeated
* serialization). Might be null.
*/
private final com.google.firestore.v1beta1.Document proto;
private final com.google.firestore.v1.Document proto;

public @Nullable com.google.firestore.v1beta1.Document getProto() {
public @Nullable com.google.firestore.v1.Document getProto() {
return proto;
}

Expand All @@ -75,7 +75,7 @@ public Document(
SnapshotVersion version,
ObjectValue data,
DocumentState documentState,
com.google.firestore.v1beta1.Document proto) {
com.google.firestore.v1.Document proto) {
super(key, version);
this.data = data;
this.documentState = documentState;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@
import com.google.firebase.firestore.util.AsyncQueue;
import com.google.firebase.firestore.util.FirestoreChannel;
import com.google.firebase.firestore.util.Supplier;
import com.google.firestore.v1beta1.BatchGetDocumentsRequest;
import com.google.firestore.v1beta1.BatchGetDocumentsResponse;
import com.google.firestore.v1beta1.CommitRequest;
import com.google.firestore.v1beta1.CommitResponse;
import com.google.firestore.v1beta1.FirestoreGrpc;
import com.google.firestore.v1.BatchGetDocumentsRequest;
import com.google.firestore.v1.BatchGetDocumentsResponse;
import com.google.firestore.v1.CommitRequest;
import com.google.firestore.v1.CommitResponse;
import com.google.firestore.v1.FirestoreGrpc;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Status;
import io.grpc.android.AndroidChannelBuilder;
Expand Down Expand Up @@ -179,7 +179,7 @@ public Task<List<MutationResult>> commit(List<Mutation> mutations) {
int count = response.getWriteResultsCount();
ArrayList<MutationResult> results = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
com.google.firestore.v1beta1.WriteResult result = response.getWriteResults(i);
com.google.firestore.v1.WriteResult result = response.getWriteResults(i);
results.add(serializer.decodeMutationResult(result, commitVersion));
}
return results;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,29 +67,29 @@
import com.google.firebase.firestore.remote.WatchChange.WatchTargetChange;
import com.google.firebase.firestore.remote.WatchChange.WatchTargetChangeType;
import com.google.firebase.firestore.util.Assert;
import com.google.firestore.v1beta1.BatchGetDocumentsResponse;
import com.google.firestore.v1beta1.BatchGetDocumentsResponse.ResultCase;
import com.google.firestore.v1beta1.Cursor;
import com.google.firestore.v1beta1.DocumentChange;
import com.google.firestore.v1beta1.DocumentDelete;
import com.google.firestore.v1beta1.DocumentMask;
import com.google.firestore.v1beta1.DocumentRemove;
import com.google.firestore.v1beta1.DocumentTransform;
import com.google.firestore.v1beta1.ListenResponse;
import com.google.firestore.v1beta1.ListenResponse.ResponseTypeCase;
import com.google.firestore.v1beta1.MapValue;
import com.google.firestore.v1beta1.StructuredQuery;
import com.google.firestore.v1beta1.StructuredQuery.CollectionSelector;
import com.google.firestore.v1beta1.StructuredQuery.CompositeFilter;
import com.google.firestore.v1beta1.StructuredQuery.FieldFilter;
import com.google.firestore.v1beta1.StructuredQuery.FieldReference;
import com.google.firestore.v1beta1.StructuredQuery.Filter.FilterTypeCase;
import com.google.firestore.v1beta1.StructuredQuery.Order;
import com.google.firestore.v1beta1.StructuredQuery.UnaryFilter;
import com.google.firestore.v1beta1.Target;
import com.google.firestore.v1beta1.Target.DocumentsTarget;
import com.google.firestore.v1beta1.Target.QueryTarget;
import com.google.firestore.v1beta1.Value;
import com.google.firestore.v1.BatchGetDocumentsResponse;
import com.google.firestore.v1.BatchGetDocumentsResponse.ResultCase;
import com.google.firestore.v1.Cursor;
import com.google.firestore.v1.DocumentChange;
import com.google.firestore.v1.DocumentDelete;
import com.google.firestore.v1.DocumentMask;
import com.google.firestore.v1.DocumentRemove;
import com.google.firestore.v1.DocumentTransform;
import com.google.firestore.v1.ListenResponse;
import com.google.firestore.v1.ListenResponse.ResponseTypeCase;
import com.google.firestore.v1.MapValue;
import com.google.firestore.v1.StructuredQuery;
import com.google.firestore.v1.StructuredQuery.CollectionSelector;
import com.google.firestore.v1.StructuredQuery.CompositeFilter;
import com.google.firestore.v1.StructuredQuery.FieldFilter;
import com.google.firestore.v1.StructuredQuery.FieldReference;
import com.google.firestore.v1.StructuredQuery.Filter.FilterTypeCase;
import com.google.firestore.v1.StructuredQuery.Order;
import com.google.firestore.v1.StructuredQuery.UnaryFilter;
import com.google.firestore.v1.Target;
import com.google.firestore.v1.Target.DocumentsTarget;
import com.google.firestore.v1.Target.QueryTarget;
import com.google.firestore.v1.Value;
import com.google.protobuf.ByteString;
import com.google.protobuf.Int32Value;
import com.google.type.LatLng;
Expand Down Expand Up @@ -181,7 +181,7 @@ private ResourcePath decodeQueryPath(String name) {
ResourcePath resource = decodeResourceName(name);
if (resource.length() == 4) {
// In v1beta1 queries for collections at the root did not have a trailing "/documents". In v1
// all resource paths contain "/documents". Preserve the ability to read the v1beta1 form for
// all resource paths contain "/documents". Preserve the ability to read the v1 form for
// compatibility with queries persisted in the local query cache.
return ResourcePath.EMPTY;
} else {
Expand Down Expand Up @@ -249,9 +249,8 @@ public String databaseName() {
* @param value the model to convert
* @return The proto representation of the model
*/
public com.google.firestore.v1beta1.Value encodeValue(FieldValue value) {
com.google.firestore.v1beta1.Value.Builder builder =
com.google.firestore.v1beta1.Value.newBuilder();
public com.google.firestore.v1.Value encodeValue(FieldValue value) {
com.google.firestore.v1.Value.Builder builder = com.google.firestore.v1.Value.newBuilder();

if (value instanceof NullValue) {
builder.setNullValueValue(0);
Expand Down Expand Up @@ -298,7 +297,7 @@ public com.google.firestore.v1beta1.Value encodeValue(FieldValue value) {
*
* @return The model equivalent of the proto data.
*/
public FieldValue decodeValue(com.google.firestore.v1beta1.Value proto) {
public FieldValue decodeValue(com.google.firestore.v1.Value proto) {
switch (proto.getValueTypeCase()) {
case NULL_VALUE:
return NullValue.nullValue();
Expand Down Expand Up @@ -334,17 +333,17 @@ public FieldValue decodeValue(com.google.firestore.v1beta1.Value proto) {
}
}

private com.google.firestore.v1beta1.ArrayValue encodeArrayValue(ArrayValue value) {
private com.google.firestore.v1.ArrayValue encodeArrayValue(ArrayValue value) {
List<FieldValue> internalValue = value.getInternalValue();
com.google.firestore.v1beta1.ArrayValue.Builder arrayBuilder =
com.google.firestore.v1beta1.ArrayValue.newBuilder();
com.google.firestore.v1.ArrayValue.Builder arrayBuilder =
com.google.firestore.v1.ArrayValue.newBuilder();
for (FieldValue subValue : internalValue) {
arrayBuilder.addValues(encodeValue(subValue));
}
return arrayBuilder.build();
}

private ArrayValue decodeArrayValue(com.google.firestore.v1beta1.ArrayValue protoArray) {
private ArrayValue decodeArrayValue(com.google.firestore.v1.ArrayValue protoArray) {
int count = protoArray.getValuesCount();
List<FieldValue> wrappedList = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
Expand All @@ -368,9 +367,9 @@ private ObjectValue decodeMapValue(MapValue value) {
// PORTING NOTE: There's no encodeFields here because there's no way to write it that doesn't
// involve creating a temporary map.

public ObjectValue decodeFields(Map<String, com.google.firestore.v1beta1.Value> fields) {
public ObjectValue decodeFields(Map<String, com.google.firestore.v1.Value> fields) {
ObjectValue result = ObjectValue.emptyObject();
for (Map.Entry<String, com.google.firestore.v1beta1.Value> entry : fields.entrySet()) {
for (Map.Entry<String, com.google.firestore.v1.Value> entry : fields.entrySet()) {
FieldPath path = FieldPath.fromSingleSegment(entry.getKey());
FieldValue value = decodeValue(entry.getValue());
result = result.set(path, value);
Expand All @@ -380,9 +379,9 @@ public ObjectValue decodeFields(Map<String, com.google.firestore.v1beta1.Value>

// Documents

public com.google.firestore.v1beta1.Document encodeDocument(DocumentKey key, ObjectValue value) {
com.google.firestore.v1beta1.Document.Builder builder =
com.google.firestore.v1beta1.Document.newBuilder();
public com.google.firestore.v1.Document encodeDocument(DocumentKey key, ObjectValue value) {
com.google.firestore.v1.Document.Builder builder =
com.google.firestore.v1.Document.newBuilder();
builder.setName(encodeKey(key));
for (Map.Entry<String, FieldValue> entry : value.getInternalValue()) {
builder.putFields(entry.getKey(), encodeValue(entry.getValue()));
Expand Down Expand Up @@ -427,9 +426,8 @@ private NoDocument decodeMissingDocument(BatchGetDocumentsResponse response) {
// Mutations

/** Converts a Mutation model to a Write proto */
public com.google.firestore.v1beta1.Write encodeMutation(Mutation mutation) {
com.google.firestore.v1beta1.Write.Builder builder =
com.google.firestore.v1beta1.Write.newBuilder();
public com.google.firestore.v1.Write encodeMutation(Mutation mutation) {
com.google.firestore.v1.Write.Builder builder = com.google.firestore.v1.Write.newBuilder();
if (mutation instanceof SetMutation) {
builder.setUpdate(encodeDocument(mutation.getKey(), ((SetMutation) mutation).getValue()));
} else if (mutation instanceof PatchMutation) {
Expand All @@ -455,7 +453,7 @@ public com.google.firestore.v1beta1.Write encodeMutation(Mutation mutation) {
return builder.build();
}

public Mutation decodeMutation(com.google.firestore.v1beta1.Write mutation) {
public Mutation decodeMutation(com.google.firestore.v1.Write mutation) {
Precondition precondition =
mutation.hasCurrentDocument()
? decodePrecondition(mutation.getCurrentDocument())
Expand Down Expand Up @@ -496,10 +494,10 @@ public Mutation decodeMutation(com.google.firestore.v1beta1.Write mutation) {
}
}

private com.google.firestore.v1beta1.Precondition encodePrecondition(Precondition precondition) {
private com.google.firestore.v1.Precondition encodePrecondition(Precondition precondition) {
hardAssert(!precondition.isNone(), "Can't serialize an empty precondition");
com.google.firestore.v1beta1.Precondition.Builder builder =
com.google.firestore.v1beta1.Precondition.newBuilder();
com.google.firestore.v1.Precondition.Builder builder =
com.google.firestore.v1.Precondition.newBuilder();
if (precondition.getUpdateTime() != null) {
return builder.setUpdateTime(encodeVersion(precondition.getUpdateTime())).build();
} else if (precondition.getExists() != null) {
Expand All @@ -509,7 +507,7 @@ private com.google.firestore.v1beta1.Precondition encodePrecondition(Preconditio
}
}

private Precondition decodePrecondition(com.google.firestore.v1beta1.Precondition precondition) {
private Precondition decodePrecondition(com.google.firestore.v1.Precondition precondition) {
switch (precondition.getConditionTypeCase()) {
case UPDATE_TIME:
return Precondition.updateTime(decodeVersion(precondition.getUpdateTime()));
Expand Down Expand Up @@ -563,10 +561,10 @@ private DocumentTransform.FieldTransform encodeFieldTransform(FieldTransform fie
}
}

private com.google.firestore.v1beta1.ArrayValue encodeArrayTransformElements(
private com.google.firestore.v1.ArrayValue encodeArrayTransformElements(
List<FieldValue> elements) {
com.google.firestore.v1beta1.ArrayValue.Builder arrayBuilder =
com.google.firestore.v1beta1.ArrayValue.newBuilder();
com.google.firestore.v1.ArrayValue.Builder arrayBuilder =
com.google.firestore.v1.ArrayValue.newBuilder();
for (FieldValue subValue : elements) {
arrayBuilder.addValues(encodeValue(subValue));
}
Expand Down Expand Up @@ -600,7 +598,7 @@ private FieldTransform decodeFieldTransform(DocumentTransform.FieldTransform fie
}

private List<FieldValue> decodeArrayTransformElements(
com.google.firestore.v1beta1.ArrayValue elementsProto) {
com.google.firestore.v1.ArrayValue elementsProto) {
int count = elementsProto.getValuesCount();
List<FieldValue> result = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
Expand All @@ -610,7 +608,7 @@ private List<FieldValue> decodeArrayTransformElements(
}

public MutationResult decodeMutationResult(
com.google.firestore.v1beta1.WriteResult proto, SnapshotVersion commitVersion) {
com.google.firestore.v1.WriteResult proto, SnapshotVersion commitVersion) {
// NOTE: Deletes don't have an updateTime but the commit timestamp from the containing
// CommitResponse or WriteResponse indicates essentially that the delete happened no later than
// that. For our purposes we don't care exactly when the delete happened so long as we can tell
Expand Down Expand Up @@ -977,7 +975,7 @@ public WatchChange decodeWatchChange(ListenResponse protoChange) {

switch (protoChange.getResponseTypeCase()) {
case TARGET_CHANGE:
com.google.firestore.v1beta1.TargetChange targetChange = protoChange.getTargetChange();
com.google.firestore.v1.TargetChange targetChange = protoChange.getTargetChange();
WatchTargetChangeType changeType;
Status cause = null;
switch (targetChange.getTargetChangeType()) {
Expand Down Expand Up @@ -1038,7 +1036,7 @@ public WatchChange decodeWatchChange(ListenResponse protoChange) {
watchChange = new WatchChange.DocumentChange(Collections.emptyList(), removed, key, null);
break;
case FILTER:
com.google.firestore.v1beta1.ExistenceFilter protoFilter = protoChange.getFilter();
com.google.firestore.v1.ExistenceFilter protoFilter = protoChange.getFilter();
// TODO: implement existence filter parsing (see b/33076578)
ExistenceFilter filter = new ExistenceFilter(protoFilter.getCount());
int targetId = protoFilter.getTargetId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import com.google.firebase.firestore.util.AsyncQueue;
import com.google.firebase.firestore.util.AsyncQueue.TimerId;
import com.google.firebase.firestore.util.FirestoreChannel;
import com.google.firestore.v1beta1.FirestoreGrpc;
import com.google.firestore.v1beta1.ListenRequest;
import com.google.firestore.v1beta1.ListenResponse;
import com.google.firestore.v1.FirestoreGrpc;
import com.google.firestore.v1.ListenRequest;
import com.google.firestore.v1.ListenResponse;
import com.google.protobuf.ByteString;
import java.util.Map;

Expand All @@ -34,7 +34,7 @@
* sent to control what changes will be sent from the server for WatchChanges.
*
* @see <a
* href="https://github.com/googleapis/googleapis/blob/master/google/firestore/v1beta1/firestore.proto#L147">firestore.proto</a>
* href="https://github.com/googleapis/googleapis/blob/master/google/firestore/v1/firestore.proto#L147">firestore.proto</a>
*/
public class WatchStream
extends AbstractStream<ListenRequest, ListenResponse, WatchStream.Callback> {
Expand Down Expand Up @@ -100,7 +100,7 @@ public void unwatchTarget(int targetId) {
}

@Override
public void onNext(com.google.firestore.v1beta1.ListenResponse listenResponse) {
public void onNext(com.google.firestore.v1.ListenResponse listenResponse) {
// A successful response means the stream is healthy
backoff.reset();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
import com.google.firebase.firestore.util.AsyncQueue;
import com.google.firebase.firestore.util.AsyncQueue.TimerId;
import com.google.firebase.firestore.util.FirestoreChannel;
import com.google.firestore.v1beta1.FirestoreGrpc;
import com.google.firestore.v1beta1.WriteRequest;
import com.google.firestore.v1beta1.WriteResponse;
import com.google.firestore.v1.FirestoreGrpc;
import com.google.firestore.v1.WriteRequest;
import com.google.firestore.v1.WriteResponse;
import com.google.protobuf.ByteString;
import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -45,7 +45,7 @@
* okay to use the same streamToken for the calls to {@code writeMutations}.
*
* @see <a
* href="https://github.com/googleapis/googleapis/blob/master/google/firestore/v1beta1/firestore.proto#L139">firestore.proto</a>
* href="https://github.com/googleapis/googleapis/blob/master/google/firestore/v1/firestore.proto#L139">firestore.proto</a>
*/
public class WriteStream extends AbstractStream<WriteRequest, WriteResponse, WriteStream.Callback> {

Expand Down Expand Up @@ -179,7 +179,7 @@ public void onNext(WriteResponse response) {
int count = response.getWriteResultsCount();
List<MutationResult> results = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
com.google.firestore.v1beta1.WriteResult result = response.getWriteResults(i);
com.google.firestore.v1.WriteResult result = response.getWriteResults(i);
results.add(serializer.decodeMutationResult(result, commitVersion));
}
listener.onWriteResponse(commitVersion, results);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
import com.google.firebase.firestore.core.Version;
import com.google.firebase.firestore.model.DatabaseId;
import com.google.firebase.firestore.remote.FirestoreCallCredentials;
import com.google.firestore.v1beta1.FirestoreGrpc;
import com.google.firestore.v1beta1.FirestoreGrpc.FirestoreStub;
import com.google.firestore.v1.FirestoreGrpc;
import com.google.firestore.v1.FirestoreGrpc.FirestoreStub;
import io.grpc.CallOptions;
import io.grpc.ClientCall;
import io.grpc.ManagedChannel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ option java_package = "com.google.firebase.firestore.proto";

option objc_class_prefix = "FSTPB";

import "google/firestore/v1beta1/document.proto";
import "google/firestore/v1/document.proto";
import "google/protobuf/timestamp.proto";

// A message indicating that the document is known to not exist.
Expand Down Expand Up @@ -54,7 +54,7 @@ message MaybeDocument {
NoDocument no_document = 1;

// The document (if it exists).
google.firestore.v1beta1.Document document = 2;
google.firestore.v1.Document document = 2;

// Used if the document is known to exist but its data is unknown.
UnknownDocument unknown_document = 3;
Expand Down
Loading