gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-wallet-webex] 05/07: idb: make unique cursor work


From: gnunet
Subject: [GNUnet-SVN] [taler-wallet-webex] 05/07: idb: make unique cursor work
Date: Tue, 25 Jun 2019 14:32:00 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-webex.

commit b3fc710d9a3b481196074ddd9a84a59be1f07fb3
Author: Florian Dold <address@hidden>
AuthorDate: Tue Jun 25 13:18:09 2019 +0200

    idb: make unique cursor work
---
 packages/idb-bridge/src/MemoryBackend.test.ts | 26 +++++++++++++++++++
 packages/idb-bridge/src/MemoryBackend.ts      | 37 ++++++++++++++++++---------
 2 files changed, 51 insertions(+), 12 deletions(-)

diff --git a/packages/idb-bridge/src/MemoryBackend.test.ts 
b/packages/idb-bridge/src/MemoryBackend.test.ts
index b5bc5dad..2e322dfa 100644
--- a/packages/idb-bridge/src/MemoryBackend.test.ts
+++ b/packages/idb-bridge/src/MemoryBackend.test.ts
@@ -188,6 +188,32 @@ test("Spec: Example 1 Part 3", async t => {
   t.is(cursor.value.author, "Fred");
   cursor.continue();
 
+  await promiseFromRequest(request5);
+  cursor = request5.result;
+  t.is(cursor.value.author, "Fred");
+  cursor.continue();
+
+  await promiseFromRequest(request5);
+  cursor = request5.result;
+  t.is(cursor, null);
+
+  const request6 = index5.openCursor(null, "nextunique");
+
+  await promiseFromRequest(request6);
+  cursor = request6.result;
+  t.is(cursor.value.author, "Barney");
+  cursor.continue();
+
+  await promiseFromRequest(request6);
+  cursor = request6.result;
+  t.is(cursor.value.author, "Fred");
+  t.is(cursor.value.isbn, 123456);
+  cursor.continue();
+
+  await promiseFromRequest(request6);
+  cursor = request6.result;
+  t.is(cursor, null);
+
   db.close();
 
   t.pass();
diff --git a/packages/idb-bridge/src/MemoryBackend.ts 
b/packages/idb-bridge/src/MemoryBackend.ts
index c72431f2..786fa4cf 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,

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]