From b3fc710d9a3b481196074ddd9a84a59be1f07fb3 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 25 Jun 2019 13:18:09 +0200 Subject: idb: make unique cursor work --- packages/idb-bridge/src/MemoryBackend.ts | 37 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'packages/idb-bridge/src/MemoryBackend.ts') diff --git a/packages/idb-bridge/src/MemoryBackend.ts b/packages/idb-bridge/src/MemoryBackend.ts index c72431f28..786fa4cf6 100644 --- a/packages/idb-bridge/src/MemoryBackend.ts +++ b/packages/idb-bridge/src/MemoryBackend.ts @@ -832,19 +832,32 @@ export class MemoryBackend implements Backend { break; } } - if ( - unique && - indexKeys.length > 0 && - compareKeys(indexEntry.indexKey, indexKeys[indexKeys.length - 1]) === - 0 - ) { - // We only return the first result if subsequent index keys are the same. - continue; + + // Skip repeated index keys if unique results are requested. + let skip = false; + if (unique) { + if ( + indexKeys.length > 0 && + compareKeys( + indexEntry.indexKey, + indexKeys[indexKeys.length - 1], + ) === 0 + ) { + skip = true; + } + if ( + req.lastIndexPosition !== undefined && + compareKeys(indexPos, req.lastIndexPosition) === 0 + ) { + skip = true; + } } - indexKeys.push(indexEntry.indexKey); - primaryKeys.push(indexEntry.primaryKeys[primkeySubPos]); - numResults++; - primkeySubPos = forward ? 0 : indexEntry.primaryKeys.length - 1; + if (!skip) { + indexKeys.push(indexEntry.indexKey); + primaryKeys.push(indexEntry.primaryKeys[primkeySubPos]); + numResults++; + } + primkeySubPos += forward ? 1 : -1; } // Now we can collect the values based on the primary keys, -- cgit v1.2.3