Skip to content

Commit da561c2

Browse files
Use getAll() when available
1 parent bf93a38 commit da561c2

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

packages/firestore/src/local/simple_db.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -646,12 +646,29 @@ export class SimpleDbStore<
646646
range?: IDBKeyRange
647647
): PersistencePromise<ValueType[]> {
648648
const cursor = this.cursor(this.options(indexOrRange, range));
649-
const results: ValueType[] = [];
650-
return this.iterateCursor(cursor, (key, value) => {
651-
results.push(value);
652-
}).next(() => {
653-
return results;
654-
});
649+
// Use `getAll()` if the browser supports IndexedDB v3, as it is roughly
650+
// 20% faster. Unfortunately, getAll() does not support custom indices.
651+
if (
652+
typeof indexOrRange !== 'string' &&
653+
typeof this.store.getAll === 'function'
654+
) {
655+
const request = this.store.getAll(range || null);
656+
return new PersistencePromise((resolve, reject) => {
657+
request.onerror = (event: Event) => {
658+
reject((event.target as IDBRequest).error!);
659+
};
660+
request.onsuccess = (event: Event) => {
661+
resolve((event.target as IDBRequest).result);
662+
};
663+
});
664+
} else {
665+
const results: ValueType[] = [];
666+
return this.iterateCursor(cursor, (key, value) => {
667+
results.push(value);
668+
}).next(() => {
669+
return results;
670+
});
671+
}
655672
}
656673

657674
deleteAll(): PersistencePromise<void>;

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@ describe('SimpleDb', () => {
149149
});
150150
});
151151

152+
it('can getAll', async () => {
153+
await runTransaction(store => {
154+
return store
155+
.getAll(42)
156+
.next(user => {
157+
expect(user).to.equal(null);
158+
return store.get(1);
159+
})
160+
.next(user => {
161+
expect(user).to.deep.equal(testData[1]);
162+
});
163+
});
164+
});
165+
152166
it('can put', async () => {
153167
await runTransaction(store => {
154168
return store.put(dummyUser);

0 commit comments

Comments
 (0)