mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-25 22:29:58 +00:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
|
|
|
import { expect, test } from "@jest/globals";
|
|
import * as lancedb from "@lancedb/lancedb";
|
|
|
|
test("basic upsert", async () => {
|
|
const db = await lancedb.connect("memory://");
|
|
|
|
// --8<-- [start:upsert_basic]
|
|
const table = await db.createTable("users", [
|
|
{ id: 0, name: "Alice" },
|
|
{ id: 1, name: "Bob" },
|
|
]);
|
|
|
|
const newUsers = [
|
|
{ id: 1, name: "Bobby" },
|
|
{ id: 2, name: "Charlie" },
|
|
];
|
|
await table
|
|
.mergeInsert("id")
|
|
.whenMatchedUpdateAll()
|
|
.whenNotMatchedInsertAll()
|
|
.execute(newUsers);
|
|
|
|
await table.countRows(); // 3
|
|
// --8<-- [end:upsert_basic]
|
|
expect(await table.countRows()).toBe(3);
|
|
|
|
// --8<-- [start:insert_if_not_exists]
|
|
const table2 = await db.createTable("domains", [
|
|
{ domain: "google.com", name: "Google" },
|
|
{ domain: "github.com", name: "GitHub" },
|
|
]);
|
|
|
|
const newDomains = [
|
|
{ domain: "google.com", name: "Google" },
|
|
{ domain: "facebook.com", name: "Facebook" },
|
|
];
|
|
await table2
|
|
.mergeInsert("domain")
|
|
.whenNotMatchedInsertAll()
|
|
.execute(newDomains);
|
|
await table2.countRows(); // 3
|
|
// --8<-- [end:insert_if_not_exists]
|
|
expect(await table2.countRows()).toBe(3);
|
|
|
|
// --8<-- [start:replace_range]
|
|
const table3 = await db.createTable("chunks", [
|
|
{ doc_id: 0, chunk_id: 0, text: "Hello" },
|
|
{ doc_id: 0, chunk_id: 1, text: "World" },
|
|
{ doc_id: 1, chunk_id: 0, text: "Foo" },
|
|
{ doc_id: 1, chunk_id: 1, text: "Bar" },
|
|
]);
|
|
|
|
const newChunks = [{ doc_id: 1, chunk_id: 0, text: "Baz" }];
|
|
|
|
await table3
|
|
.mergeInsert(["doc_id", "chunk_id"])
|
|
.whenMatchedUpdateAll()
|
|
.whenNotMatchedInsertAll()
|
|
.whenNotMatchedBySourceDelete({ where: "doc_id = 1" })
|
|
.execute(newChunks);
|
|
|
|
await table3.countRows("doc_id = 1"); // 1
|
|
// --8<-- [end:replace_range]
|
|
expect(await table3.countRows("doc_id = 1")).toBe(1);
|
|
});
|