Skip to content

Commit 56aa7b1

Browse files
Review
1 parent 6f58952 commit 56aa7b1

File tree

3 files changed

+37
-13
lines changed

3 files changed

+37
-13
lines changed

packages/firestore/src/index/index_entry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function indexEntryComparator(
5252
function compareByteArrays(left: Uint8Array, right: Uint8Array): number {
5353
for (let i = 0; i < left.length && i < right.length; ++i) {
5454
const compare = left[i] - right[i];
55-
if (compare) {
55+
if (compare !== 0) {
5656
return compare;
5757
}
5858
}

packages/firestore/src/local/indexeddb_index_manager.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@ export class IndexedDbIndexManager implements IndexManager {
320320
transaction: PersistenceTransaction,
321321
documents: DocumentMap
322322
): PersistencePromise<void> {
323+
// Porting Note: `getFieldIndexes()` on Web does not cache index lookups as
324+
// it could be used across different IndexedDB transactions. As any cached
325+
// data might invalidated by other multi-tab clients, we can only trust data
326+
// within a single IndexedDB transaction. We therefore add a cache here.
323327
const memoizedIndexes = new Map<string, FieldIndex[]>();
324328
return PersistencePromise.forEach(documents, (key, doc) => {
325329
const memoizedCollectionIndexes = memoizedIndexes.get(
@@ -481,10 +485,10 @@ export class IndexedDbIndexManager implements IndexManager {
481485
existingEntries,
482486
newEntries,
483487
indexEntryComparator,
484-
entry => {
488+
/* onAdd= */ entry => {
485489
promises.push(this.addIndexEntry(transaction, document, entry));
486490
},
487-
entry => {
491+
/* onRemove= */ entry => {
488492
promises.push(this.deleteIndexEntry(transaction, document, entry));
489493
}
490494
);

packages/firestore/test/unit/util/sorted_set.test.ts

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,20 +158,39 @@ describe('SortedSet', () => {
158158
});
159159

160160
it('diff sorted sets with missing element', () => {
161-
validateDiffSortedSets(['a', 'b', 'c'], ['a', 'b']);
161+
const { added, removed } = computeDiffs(['a', 'b', 'c'], ['a', 'b']);
162+
expect(added).to.have.members([]);
163+
expect(removed).to.have.members(['c']);
162164
});
163165

164166
it('diff sorted sets with added element', () => {
165-
validateDiffSortedSets(['a', 'b'], ['a', 'b', 'c']);
167+
const { added, removed } = computeDiffs(['a', 'b'], ['a', 'b', 'c']);
168+
expect(added).to.have.members(['c']);
169+
expect(removed).to.have.members([]);
166170
});
167171

168172
it('diff sorted sets with empty sets', () => {
169-
validateDiffSortedSets(['a'], []);
170-
validateDiffSortedSets([], ['a']);
171-
validateDiffSortedSets([], []);
173+
{
174+
let { added, removed } = computeDiffs(['a'], []);
175+
expect(added).to.have.members([]);
176+
expect(removed).to.have.members(['a']);
177+
}
178+
{
179+
let { added, removed } = computeDiffs([], ['a']);
180+
expect(added).to.have.members(['a']);
181+
expect(removed).to.have.members([]);
182+
}
183+
{
184+
const { added, removed } = computeDiffs([], []);
185+
expect(added).to.have.members([]);
186+
expect(removed).to.have.members([]);
187+
}
172188
});
173189

174-
function validateDiffSortedSets(before: string[], after: string[]): void {
190+
function computeDiffs(
191+
before: string[],
192+
after: string[]
193+
): { added: string[]; removed: string[] } {
175194
let beforeSorted = new SortedSet<string>(primitiveComparator);
176195
let afterSorted = new SortedSet<string>(primitiveComparator);
177196
before.forEach(v => {
@@ -181,18 +200,19 @@ describe('SortedSet', () => {
181200
afterSorted = afterSorted.add(v);
182201
});
183202

184-
let result = beforeSorted;
203+
const added: string[] = [];
204+
const removed: string[] = [];
185205
diffSortedSets(
186206
beforeSorted,
187207
afterSorted,
188208
primitiveComparator,
189209
v => {
190-
result = result.add(v);
210+
added.push(v);
191211
},
192212
v => {
193-
result = result.delete(v);
213+
removed.push(v);
194214
}
195215
);
196-
expect(result.isEqual(afterSorted)).to.be.true;
216+
return { added, removed };
197217
}
198218
});

0 commit comments

Comments
 (0)