Complete redo of content indexing and querying (#517)
Complete redo of data store Introduces live queries and live templates
This commit is contained in:
@@ -6,15 +6,17 @@ import { KvPrimitives } from "./kv_primitives.ts";
|
||||
import { assertEquals } from "https://deno.land/std@0.165.0/testing/asserts.ts";
|
||||
|
||||
async function test(db: KvPrimitives) {
|
||||
const dataStore = new DataStore(db);
|
||||
await dataStore.set(["user", "peter"], { name: "Peter" });
|
||||
await dataStore.set(["user", "hank"], { name: "Hank" });
|
||||
let results = await dataStore.query({
|
||||
const datastore = new DataStore(db, ["ds"], {
|
||||
count: (arr: any[]) => arr.length,
|
||||
});
|
||||
await datastore.set(["user", "peter"], { name: "Peter" });
|
||||
await datastore.set(["user", "hank"], { name: "Hank" });
|
||||
let results = await datastore.query({
|
||||
prefix: ["user"],
|
||||
filter: ["=", "name", "Peter"],
|
||||
filter: ["=", ["attr", "name"], ["string", "Peter"]],
|
||||
});
|
||||
assertEquals(results, [{ key: ["user", "peter"], value: { name: "Peter" } }]);
|
||||
await dataStore.batchSet([
|
||||
await datastore.batchSet<any>([
|
||||
{ key: ["kv", "name"], value: "Zef" },
|
||||
{ key: ["kv", "data"], value: new Uint8Array([1, 2, 3]) },
|
||||
{
|
||||
@@ -29,32 +31,42 @@ async function test(db: KvPrimitives) {
|
||||
},
|
||||
},
|
||||
]);
|
||||
assertEquals(await dataStore.get(["kv", "name"]), "Zef");
|
||||
assertEquals(await dataStore.get(["kv", "data"]), new Uint8Array([1, 2, 3]));
|
||||
results = await dataStore.query({
|
||||
assertEquals(await datastore.get(["kv", "name"]), "Zef");
|
||||
assertEquals(await datastore.get(["kv", "data"]), new Uint8Array([1, 2, 3]));
|
||||
results = await datastore.query({
|
||||
prefix: ["kv"],
|
||||
filter: ["=", "", "Zef"],
|
||||
filter: ["=~", ["attr", ""], ["regexp", "Z.f", "i"]],
|
||||
});
|
||||
assertEquals(results, [{ key: ["kv", "name"], value: "Zef" }]);
|
||||
results = await dataStore.query({
|
||||
results = await datastore.query({
|
||||
prefix: ["kv"],
|
||||
filter: ["and", ["=", "parents", "John"], [
|
||||
filter: ["and", ["=", ["attr", "parents"], ["string", "John"]], [
|
||||
"=",
|
||||
"address.city",
|
||||
"San Francisco",
|
||||
["attr", ["attr", "address"], "city"],
|
||||
["string", "San Francisco"],
|
||||
]],
|
||||
select: ["name"],
|
||||
select: [
|
||||
{ name: "parents" },
|
||||
{
|
||||
name: "name",
|
||||
expr: ["+", ["attr", "name"], ["string", "!"]],
|
||||
},
|
||||
{
|
||||
name: "parentCount",
|
||||
expr: ["call", "count", [["attr", "parents"]]],
|
||||
},
|
||||
],
|
||||
});
|
||||
assertEquals(results.length, 1);
|
||||
assertEquals(results[0], {
|
||||
key: ["kv", "complicated"],
|
||||
value: { name: "Frank" },
|
||||
value: { name: "Frank!", parentCount: 2, parents: ["John", "Jane"] },
|
||||
});
|
||||
}
|
||||
|
||||
Deno.test("Test Deno KV DataStore", async () => {
|
||||
const tmpFile = await Deno.makeTempFile();
|
||||
const db = new DenoKvPrimitives(tmpFile);
|
||||
await db.init();
|
||||
const db = new DenoKvPrimitives(await Deno.openKv(tmpFile));
|
||||
await test(db);
|
||||
db.close();
|
||||
await Deno.remove(tmpFile);
|
||||
|
||||
Reference in New Issue
Block a user