Skip to content

Commit 79e0ab6

Browse files
author
Brian Chen
committed
resolve comments rd.2
1 parent a767054 commit 79e0ab6

File tree

6 files changed

+21
-24
lines changed

6 files changed

+21
-24
lines changed

.changeset/rich-birds-wink.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
---
22
'@firebase/firestore': minor
33
---
4-
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.
4+
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.

packages/firestore/src/api/user_data_reader.ts

+1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export class ParsedSetData {
102102
export class ParsedUpdateData {
103103
constructor(
104104
readonly data: ObjectValue,
105+
// The fieldMask does not include document transforms.
105106
readonly fieldMask: FieldMask,
106107
readonly fieldTransforms: FieldTransform[]
107108
) {}

packages/firestore/src/model/mutation.ts

+9-11
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,20 @@ export function mutationEquals(left: Mutation, right: Mutation): boolean {
428428
return false;
429429
}
430430

431+
if (!fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)) {
432+
return false;
433+
}
434+
431435
if (left.type === MutationType.Set) {
432-
return (
433-
(left as SetMutation).value.isEqual((right as SetMutation).value) &&
434-
fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)
435-
);
436+
return (left as SetMutation).value.isEqual((right as SetMutation).value);
436437
}
437438

438439
if (left.type === MutationType.Patch) {
439440
return (
440441
(left as PatchMutation).data.isEqual((right as PatchMutation).data) &&
441442
(left as PatchMutation).fieldMask.isEqual(
442443
(right as PatchMutation).fieldMask
443-
) &&
444-
fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)
444+
)
445445
);
446446
}
447447

@@ -502,7 +502,7 @@ function applySetMutationToRemoteDocument(
502502
// remote document the server has accepted the mutation so the precondition
503503
// must have held.
504504
let newData = mutation.value;
505-
if (mutation.fieldTransforms && mutationResult.transformResults) {
505+
if (mutationResult.transformResults) {
506506
const transformResults = serverTransformResults(
507507
mutation.fieldTransforms,
508508
maybeDoc,
@@ -635,7 +635,7 @@ function applyPatchMutationToLocalView(
635635
function patchDocument(
636636
mutation: PatchMutation,
637637
maybeDoc: MaybeDocument | null,
638-
transformResults?: ProtoValue[]
638+
transformResults: ProtoValue[]
639639
): ObjectValue {
640640
let data: ObjectValue;
641641
if (maybeDoc instanceof Document) {
@@ -644,9 +644,7 @@ function patchDocument(
644644
data = ObjectValue.empty();
645645
}
646646
data = patchObject(mutation, data);
647-
if (transformResults) {
648-
data = transformObject(mutation.fieldTransforms, data, transformResults);
649-
}
647+
data = transformObject(mutation.fieldTransforms, data, transformResults);
650648
return data;
651649
}
652650

packages/firestore/src/remote/serializer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ export function toMutation(
634634
return fail('Unknown mutation type ' + mutation.type);
635635
}
636636

637-
if (mutation.fieldTransforms && mutation.fieldTransforms.length > 0) {
637+
if (mutation.fieldTransforms.length > 0) {
638638
result.updateTransforms = mutation.fieldTransforms.map(transform =>
639639
toFieldTransform(serializer, transform)
640640
);
@@ -659,7 +659,7 @@ export function fromMutation(
659659
? proto.updateTransforms.map(transform =>
660660
fromFieldTransform(serializer, transform)
661661
)
662-
: undefined;
662+
: [];
663663

664664
if (proto.update) {
665665
assertPresent(proto.update.name, 'name');

packages/firestore/test/unit/local/local_serializer.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ describe('Local Serializer', () => {
6969
currentDocument: { exists: true }
7070
};
7171
// Updated transform proto representation.
72-
const updateTransformWrite = {
72+
const updateTransforms = {
7373
updateTransforms: [
7474
{ fieldPath: 'integer', increment: { integerValue: '42' } },
7575
{ fieldPath: 'double', increment: { doubleValue: 13.37 } }
@@ -90,7 +90,7 @@ describe('Local Serializer', () => {
9090
const serialized = toMutation(s, mutationBatch.mutations[0]);
9191
expect(serialized).to.deep.equal({
9292
...setMutationWrite,
93-
...updateTransformWrite
93+
...updateTransforms
9494
});
9595
});
9696

@@ -108,7 +108,7 @@ describe('Local Serializer', () => {
108108
const serialized = toMutation(s, mutationBatch.mutations[0]);
109109
expect(serialized).to.deep.equal({
110110
...patchMutationWrite,
111-
...updateTransformWrite
111+
...updateTransforms
112112
});
113113
});
114114

@@ -180,9 +180,9 @@ describe('Local Serializer', () => {
180180
);
181181
const expected = [
182182
setMutationWrite,
183-
{ ...setMutationWrite, ...updateTransformWrite },
183+
{ ...setMutationWrite, ...updateTransforms },
184184
deleteMutationWrite,
185-
{ ...patchMutationWrite, ...updateTransformWrite },
185+
{ ...patchMutationWrite, ...updateTransforms },
186186
patchMutationWrite
187187
];
188188
const mutationBatch = fromDbMutationBatch(localSerializer, dbMutationBatch);

packages/firestore/test/unit/model/mutation.test.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -247,16 +247,15 @@ describe('Mutation', () => {
247247
foo: FieldValue.arrayUnion('tag'),
248248
'bar.baz': FieldValue.arrayUnion(true, { nested: { a: [1, 2] } })
249249
});
250-
expect(transform.fieldTransforms).to.not.be.undefined;
251250
expect(transform.fieldTransforms).to.have.lengthOf(2);
252251

253-
const first = transform.fieldTransforms![0];
252+
const first = transform.fieldTransforms[0];
254253
expect(first.field).to.deep.equal(field('foo'));
255254
expect(first.transform).to.deep.equal(
256255
new ArrayUnionTransformOperation([wrap('tag')])
257256
);
258257

259-
const second = transform.fieldTransforms![1];
258+
const second = transform.fieldTransforms[1];
260259
expect(second.field).to.deep.equal(field('bar.baz'));
261260
expect(second.transform).to.deep.equal(
262261
new ArrayUnionTransformOperation([
@@ -273,10 +272,9 @@ describe('Mutation', () => {
273272
const transform = patchMutation('collection/key', {
274273
foo: FieldValue.arrayRemove('tag')
275274
});
276-
expect(transform.fieldTransforms).to.not.be.undefined;
277275
expect(transform.fieldTransforms).to.have.lengthOf(1);
278276

279-
const first = transform.fieldTransforms![0];
277+
const first = transform.fieldTransforms[0];
280278
expect(first.field).to.deep.equal(field('foo'));
281279
expect(first.transform).to.deep.equal(
282280
new ArrayRemoveTransformOperation([wrap('tag')])

0 commit comments

Comments
 (0)