[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.
- [GNUnet-SVN] [taler-wallet-webex] branch master updated (65eb8b96 -> bf52d4b8), gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 04/07: idb: memory backend fixes, gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 06/07: idb: extend test case, gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 07/07: idb: make test pass, gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 05/07: idb: make unique cursor work,
gnunet <=
- [GNUnet-SVN] [taler-wallet-webex] 03/07: idb: more tests working, gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 02/07: idb: tests working, gnunet, 2019/06/25
- [GNUnet-SVN] [taler-wallet-webex] 01/07: idb wip, gnunet, 2019/06/25