mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-25 14:29:56 +00:00
I've been noticing a lot of friction with the current toolchain for '/nodejs'. Particularly with the usage of eslint and prettier. [Biome](https://biomejs.dev/) is an all in one formatter & linter that replaces the need for two different ones that can potentially clash with one another. I've been using it in the [nodejs-polars](https://github.com/pola-rs/nodejs-polars) repo for quite some time & have found it much more pleasant to work with. --- One other small change included in this PR: use [ts-jest](https://www.npmjs.com/package/ts-jest) so we can run our tests without having to rebuild typescript code first
91 lines
3.0 KiB
TypeScript
91 lines
3.0 KiB
TypeScript
// Copyright 2024 Lance Developers.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import * as tmp from "tmp";
|
|
|
|
import { Connection, connect } from "../lancedb";
|
|
|
|
describe("when connecting", () => {
|
|
let tmpDir: tmp.DirResult;
|
|
beforeEach(() => {
|
|
tmpDir = tmp.dirSync({ unsafeCleanup: true });
|
|
});
|
|
afterEach(() => tmpDir.removeCallback());
|
|
|
|
it("should connect", async () => {
|
|
const db = await connect(tmpDir.name);
|
|
expect(db.display()).toBe(
|
|
`NativeDatabase(uri=${tmpDir.name}, read_consistency_interval=None)`,
|
|
);
|
|
});
|
|
|
|
it("should allow read consistency interval to be specified", async () => {
|
|
const db = await connect(tmpDir.name, { readConsistencyInterval: 5 });
|
|
expect(db.display()).toBe(
|
|
`NativeDatabase(uri=${tmpDir.name}, read_consistency_interval=5s)`,
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("given a connection", () => {
|
|
let tmpDir: tmp.DirResult;
|
|
let db: Connection;
|
|
beforeEach(async () => {
|
|
tmpDir = tmp.dirSync({ unsafeCleanup: true });
|
|
db = await connect(tmpDir.name);
|
|
});
|
|
afterEach(() => tmpDir.removeCallback());
|
|
|
|
it("should raise an error if opening a non-existent table", async () => {
|
|
await expect(db.openTable("non-existent")).rejects.toThrow("was not found");
|
|
});
|
|
|
|
it("should raise an error if any operation is tried after it is closed", async () => {
|
|
expect(db.isOpen()).toBe(true);
|
|
await db.close();
|
|
expect(db.isOpen()).toBe(false);
|
|
await expect(db.tableNames()).rejects.toThrow("Connection is closed");
|
|
});
|
|
|
|
it("should fail if creating table twice, unless overwrite is true", async () => {
|
|
let tbl = await db.createTable("test", [{ id: 1 }, { id: 2 }]);
|
|
await expect(tbl.countRows()).resolves.toBe(2);
|
|
await expect(
|
|
db.createTable("test", [{ id: 1 }, { id: 2 }]),
|
|
).rejects.toThrow();
|
|
tbl = await db.createTable("test", [{ id: 3 }], { mode: "overwrite" });
|
|
await expect(tbl.countRows()).resolves.toBe(1);
|
|
});
|
|
|
|
it("should respect limit and page token when listing tables", async () => {
|
|
const db = await connect(tmpDir.name);
|
|
|
|
await db.createTable("b", [{ id: 1 }]);
|
|
await db.createTable("a", [{ id: 1 }]);
|
|
await db.createTable("c", [{ id: 1 }]);
|
|
|
|
let tables = await db.tableNames();
|
|
expect(tables).toEqual(["a", "b", "c"]);
|
|
|
|
tables = await db.tableNames({ limit: 1 });
|
|
expect(tables).toEqual(["a"]);
|
|
|
|
tables = await db.tableNames({ limit: 1, startAfter: "a" });
|
|
expect(tables).toEqual(["b"]);
|
|
|
|
tables = await db.tableNames({ startAfter: "a" });
|
|
expect(tables).toEqual(["b", "c"]);
|
|
});
|
|
});
|