Skip to content

Commit

Permalink
resolve comments rd.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Chen committed Dec 4, 2020
1 parent a767054 commit 79e0ab6
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 24 deletions.
2 changes: 1 addition & 1 deletion .changeset/rich-birds-wink.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
---
'@firebase/firestore': minor
---
A write to a document that contains field transforms is no longer split into separate operations. This reduces the number of writes that the backend performs.
A write to a document that contains FieldValue transforms is no longer split up into two separate operations. This reduces the number of writes the backend performs and allows each WriteBatch to hold 500 writes regardless of how many FieldValue transformations are attached.
1 change: 1 addition & 0 deletions packages/firestore/src/api/user_data_reader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ export class ParsedSetData {
export class ParsedUpdateData {
constructor(
readonly data: ObjectValue,
// The fieldMask does not include document transforms.
readonly fieldMask: FieldMask,
readonly fieldTransforms: FieldTransform[]
) {}
Expand Down
20 changes: 9 additions & 11 deletions packages/firestore/src/model/mutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -428,20 +428,20 @@ export function mutationEquals(left: Mutation, right: Mutation): boolean {
return false;
}

if (!fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)) {
return false;
}

if (left.type === MutationType.Set) {
return (
(left as SetMutation).value.isEqual((right as SetMutation).value) &&
fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)
);
return (left as SetMutation).value.isEqual((right as SetMutation).value);
}

if (left.type === MutationType.Patch) {
return (
(left as PatchMutation).data.isEqual((right as PatchMutation).data) &&
(left as PatchMutation).fieldMask.isEqual(
(right as PatchMutation).fieldMask
) &&
fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)
)
);
}

Expand Down Expand Up @@ -502,7 +502,7 @@ function applySetMutationToRemoteDocument(
// remote document the server has accepted the mutation so the precondition
// must have held.
let newData = mutation.value;
if (mutation.fieldTransforms && mutationResult.transformResults) {
if (mutationResult.transformResults) {
const transformResults = serverTransformResults(
mutation.fieldTransforms,
maybeDoc,
Expand Down Expand Up @@ -635,7 +635,7 @@ function applyPatchMutationToLocalView(
function patchDocument(
mutation: PatchMutation,
maybeDoc: MaybeDocument | null,
transformResults?: ProtoValue[]
transformResults: ProtoValue[]
): ObjectValue {
let data: ObjectValue;
if (maybeDoc instanceof Document) {
Expand All @@ -644,9 +644,7 @@ function patchDocument(
data = ObjectValue.empty();
}
data = patchObject(mutation, data);
if (transformResults) {
data = transformObject(mutation.fieldTransforms, data, transformResults);
}
data = transformObject(mutation.fieldTransforms, data, transformResults);
return data;
}

Expand Down
4 changes: 2 additions & 2 deletions packages/firestore/src/remote/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 +634,7 @@ export function toMutation(
return fail('Unknown mutation type ' + mutation.type);
}

if (mutation.fieldTransforms && mutation.fieldTransforms.length > 0) {
if (mutation.fieldTransforms.length > 0) {
result.updateTransforms = mutation.fieldTransforms.map(transform =>
toFieldTransform(serializer, transform)
);
Expand All @@ -659,7 +659,7 @@ export function fromMutation(
? proto.updateTransforms.map(transform =>
fromFieldTransform(serializer, transform)
)
: undefined;
: [];

if (proto.update) {
assertPresent(proto.update.name, 'name');
Expand Down
10 changes: 5 additions & 5 deletions packages/firestore/test/unit/local/local_serializer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ describe('Local Serializer', () => {
currentDocument: { exists: true }
};
// Updated transform proto representation.
const updateTransformWrite = {
const updateTransforms = {
updateTransforms: [
{ fieldPath: 'integer', increment: { integerValue: '42' } },
{ fieldPath: 'double', increment: { doubleValue: 13.37 } }
Expand All @@ -90,7 +90,7 @@ describe('Local Serializer', () => {
const serialized = toMutation(s, mutationBatch.mutations[0]);
expect(serialized).to.deep.equal({
...setMutationWrite,
...updateTransformWrite
...updateTransforms
});
});

Expand All @@ -108,7 +108,7 @@ describe('Local Serializer', () => {
const serialized = toMutation(s, mutationBatch.mutations[0]);
expect(serialized).to.deep.equal({
...patchMutationWrite,
...updateTransformWrite
...updateTransforms
});
});

Expand Down Expand Up @@ -180,9 +180,9 @@ describe('Local Serializer', () => {
);
const expected = [
setMutationWrite,
{ ...setMutationWrite, ...updateTransformWrite },
{ ...setMutationWrite, ...updateTransforms },
deleteMutationWrite,
{ ...patchMutationWrite, ...updateTransformWrite },
{ ...patchMutationWrite, ...updateTransforms },
patchMutationWrite
];
const mutationBatch = fromDbMutationBatch(localSerializer, dbMutationBatch);
Expand Down
8 changes: 3 additions & 5 deletions packages/firestore/test/unit/model/mutation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,16 +247,15 @@ describe('Mutation', () => {
foo: FieldValue.arrayUnion('tag'),
'bar.baz': FieldValue.arrayUnion(true, { nested: { a: [1, 2] } })
});
expect(transform.fieldTransforms).to.not.be.undefined;
expect(transform.fieldTransforms).to.have.lengthOf(2);

const first = transform.fieldTransforms![0];
const first = transform.fieldTransforms[0];
expect(first.field).to.deep.equal(field('foo'));
expect(first.transform).to.deep.equal(
new ArrayUnionTransformOperation([wrap('tag')])
);

const second = transform.fieldTransforms![1];
const second = transform.fieldTransforms[1];
expect(second.field).to.deep.equal(field('bar.baz'));
expect(second.transform).to.deep.equal(
new ArrayUnionTransformOperation([
Expand All @@ -273,10 +272,9 @@ describe('Mutation', () => {
const transform = patchMutation('collection/key', {
foo: FieldValue.arrayRemove('tag')
});
expect(transform.fieldTransforms).to.not.be.undefined;
expect(transform.fieldTransforms).to.have.lengthOf(1);

const first = transform.fieldTransforms![0];
const first = transform.fieldTransforms[0];
expect(first.field).to.deep.equal(field('foo'));
expect(first.transform).to.deep.equal(
new ArrayRemoveTransformOperation([wrap('tag')])
Expand Down

0 comments on commit 79e0ab6

Please sign in to comment.