Skip to content

Commit

Permalink
fix(ext/kv): add missing getMany method (#18410)
Browse files Browse the repository at this point in the history
The `getMany` method was missing from the implementation of the
`Deno.Kv` class. This patch fixes it.
  • Loading branch information
losfair committed Mar 24, 2023
1 parent 275dee6 commit 94ef428
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
10 changes: 10 additions & 0 deletions cli/tests/unit/kv_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 548,16 @@ async function setupData(db: Deno.Kv) {
.commit();
}

dbTest("get many", async (db) => {
await setupData(db);
const entries = await db.getMany([["b", "a"], ["a"], ["c"]]);
assertEquals(entries, [
{ key: ["b", "a"], value: 100, versionstamp: "00000000000000010000" },
{ key: ["a"], value: -1, versionstamp: "00000000000000010000" },
{ key: ["c"], value: null, versionstamp: null },
]);
});

dbTest("list prefix", async (db) => {
await setupData(db);
const entries = await collect(db.list({ prefix: ["a"] }));
Expand Down
30 changes: 30 additions & 0 deletions ext/kv/01_db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 72,36 @@ class Kv {
return deserializeValue(entries[0]);
}

async getMany(
keys: Deno.KvKey[],
opts?: { consistency?: Deno.KvConsistencyLevel },
): Promise<Deno.KvEntry[]> {
keys = keys.map(convertKey);
const ranges: RawKvEntry[][] = await core.opAsync(
"op_kv_snapshot_read",
this.#rid,
keys.map((key) => [
null,
key,
null,
1,
false,
null,
]),
opts?.consistency ?? "strong",
);
return ranges.map((entries, i) => {
if (!entries.length) {
return {
key: keys[i],
value: null,
versionstamp: null,
};
}
return deserializeValue(entries[0]);
});
}

async set(key: Deno.KvKey, value: unknown) {
key = convertKey(key);
value = serializeValue(value);
Expand Down

0 comments on commit 94ef428

Please sign in to comment.