Brendan Clement
|
02de07576e
|
feat(nodejs): add namespace management methods on Connection (#3371)
### Summary
Closes #3363
Adds the four namespace management methods to the NodeJS `Connection`,
bringing parity with the Rust core and Python bindings:
- `listNamespaces(parent?, options?)`
- `createNamespace(namespacePath, options?)`
- `dropNamespace(namespacePath, options?)`
- `describeNamespace(namespacePath)`
### Test plan
- npm test
- Ran a smoke test script
```typescript
import { connect } from '<lancePath>'
import { tmpdir } from "os";
import { mkdtempSync } from "fs";
import { join } from "path";
const dir = mkdtempSync(join(tmpdir(), "lancedb-smoke-"));
console.log(`Using temp dir: ${dir}\n`);
const db = await connect(dir, {
namespaceClientProperties: { manifest_enabled: "true" },
});
console.log("Creating namespaces...");
await db.createNamespace(["analytics"]);
await db.createNamespace(["analytics", "sales"], {
properties: { owner: "brendan", purpose: "smoke-test" },
});
await db.createNamespace(["marketing"]);
const root = await db.listNamespaces();
console.log("Root namespaces:", root.namespaces);
const children = await db.listNamespaces(["analytics"]);
console.log("Children of 'analytics':", children.namespaces);
const descWithProps = await db.describeNamespace(["analytics", "sales"]);
console.log("Describe analytics/sales (with properties):", descWithProps);
const descNoProps = await db.describeNamespace(["analytics"]);
console.log("Describe analytics (no properties):", descNoProps);
console.log("Describing a non-existent namespace (expect error)...");
try {
await db.describeNamespace(["does-not-exist"]);
console.error(" UNEXPECTED: describe succeeded for non-existent namespace");
} catch (err) {
console.log(` ✓ Got expected error: ${err.message.split("\n")[0]}`);
}
await db.dropNamespace(["marketing"]);
const afterDrop = await db.listNamespaces();
console.log("Root after dropping marketing:", afterDrop.namespaces);
await db.close();
console.log("\nAll operations completed successfully.");
```
```
Using temp dir: /var/folders/bj/hn6jv9c50y301d1nx0y8xmn00000gn/T/lancedb-smoke-MUC5NI
Creating namespaces...
Root namespaces: [ 'analytics', 'marketing' ]
Children of 'analytics': [ 'sales' ]
Describe analytics/sales (with properties): { properties: { purpose: 'smoke-test', owner: 'brendan' } }
Describe analytics (no properties): {}
Describing a non-existent namespace (expect error)...
✓ Got expected error: lance error: Namespace error: Namespace not found: does-not-exist, rust/lance-namespace-impls/src/dir/manifest.rs:2495:14 Caused by: Namespace error: Namespace not found: does-not-exist, rust/lance-namespace-impls/src/dir/manifest.rs:2495:14 Caused by: Namespace not found: does-not-exist
Root after dropping marketing: [ 'analytics' ]
All operations completed successfully.
```
### Documentation
- regenerated docs
|
2026-05-13 11:49:27 -07:00 |
|