From 6e2436b89d10fa2e6441dec7ac472363bb5505b7 Mon Sep 17 00:00:00 2001 From: Brendan Clement Date: Tue, 13 Oct 2026 21:51:47 -0700 Subject: [PATCH] docs: make the object-storage connection examples bind db The quickstart says the TypeScript and Rust code of steps 2 to 5 makes one program, whichever connection the reader picks. The object-storage examples broke that: the TypeScript one defined an uncalled function whose db was local to it and had no import, and the Rust one declared uri but never connected. Both now bind db in the program's scope, as the local and Enterprise examples do, and the quickstart shows their import lines. The test functions that hold them stay uncalled, so no test reaches object storage. The connection guide shows the TypeScript example with its import line too. --- docs/web-tests/rs/connection.rs | 9 +++++---- docs/web-tests/ts/connection.test.ts | 4 ++-- docs/web/basics/connect.mdx | 1 + docs/web/quickstart.mdx | 3 +++ docs/web/snippets/connection.mdx | 4 ++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/web-tests/rs/connection.rs b/docs/web-tests/rs/connection.rs index df2cdf30f..b169f5676 100644 --- a/docs/web-tests/rs/connection.rs +++ b/docs/web-tests/rs/connection.rs @@ -37,7 +37,6 @@ async fn main() -> Result<(), Box> { let db = connect_enterprise_quickstart().await?; println!("{:?}", db.table_names().execute().await?); } - let _ = connect_object_storage_config(); Ok(()) } @@ -58,13 +57,15 @@ async fn connect_enterprise_quickstart() -> Result &'static str { +// Compiled as documentation, never called by the example runner. +#[allow(dead_code)] +async fn connect_object_storage() -> lancedb::Result { // --8<-- [start:connect_object_storage] let uri = "s3://your-bucket/path"; // You can also use "gs://your-bucket/path" or "az://your-container/path". + let db = connect(uri).execute().await?; // --8<-- [end:connect_object_storage] - - uri + Ok(db) } async fn namespace_table_ops_example(uri: &str) -> lancedb::Result<()> { diff --git a/docs/web-tests/ts/connection.test.ts b/docs/web-tests/ts/connection.test.ts index ac1ff68a1..9dd575003 100644 --- a/docs/web-tests/ts/connection.test.ts +++ b/docs/web-tests/ts/connection.test.ts @@ -76,14 +76,14 @@ describe("enterprise quickstart connect", () => { }); }); -// --8<-- [start:connect_object_storage] async function connectObjectStorageExample() { + // --8<-- [start:connect_object_storage] const uri = "s3://your-bucket/path"; // You can also use "gs://your-bucket/path" or "az://your-container/path". const db = await lancedb.connect(uri); + // --8<-- [end:connect_object_storage] return db; } -// --8<-- [end:connect_object_storage] async function namespaceTableOpsExample() { // --8<-- [start:namespace_table_ops] diff --git a/docs/web/basics/connect.mdx b/docs/web/basics/connect.mdx index 3ecbd5335..2bb93c405 100644 --- a/docs/web/basics/connect.mdx +++ b/docs/web/basics/connect.mdx @@ -71,6 +71,7 @@ covers credentials, endpoints and provider options. + { "import * as lancedb from \"@lancedb/lancedb\";\n\n" } {TsConnectObjectStorage} diff --git a/docs/web/quickstart.mdx b/docs/web/quickstart.mdx index de4b8e1f3..81ba59a3c 100644 --- a/docs/web/quickstart.mdx +++ b/docs/web/quickstart.mdx @@ -192,10 +192,13 @@ You can also connect directly to object storage from the client SDK: + { "import * as lancedb from \"@lancedb/lancedb\";\n\n" } {TsConnectObjectStorage} + { "use lancedb::connect;\n" } + { "\n" } {RsConnectObjectStorage} diff --git a/docs/web/snippets/connection.mdx b/docs/web/snippets/connection.mdx index eb1a94a9e..25fc522ac 100644 --- a/docs/web/snippets/connection.mdx +++ b/docs/web/snippets/connection.mdx @@ -18,7 +18,7 @@ export const TsConnect = "const db = await lancedb.connect(\"ex_lancedb\");\n"; export const TsConnectEnterpriseQuickstart = "const setting = (name: string) => {\n const value = process.env[name];\n if (!value) throw new Error(`Set ${name}`);\n return value;\n};\n\nconst db = await lancedb.connect(setting(\"LANCEDB_URI\"), {\n apiKey: setting(\"LANCEDB_API_KEY\"),\n region: process.env.LANCEDB_REGION ?? \"us-east-1\",\n hostOverride: setting(\"LANCEDB_HOST_OVERRIDE\"),\n});\n"; -export const TsConnectObjectStorage = "async function connectObjectStorageExample() {\n const uri = \"s3://your-bucket/path\";\n // You can also use \"gs://your-bucket/path\" or \"az://your-container/path\".\n const db = await lancedb.connect(uri);\n return db;\n}\n"; +export const TsConnectObjectStorage = "const uri = \"s3://your-bucket/path\";\n// You can also use \"gs://your-bucket/path\" or \"az://your-container/path\".\nconst db = await lancedb.connect(uri);\n"; export const TsNamespaceAdminOps = "const db = await lancedb.connectNamespace(\"dir\", { root: \"./local_lancedb\" });\nconst namespace = [\"prod\", \"search\"];\n\nawait db.createNamespace([\"prod\"]);\nawait db.createNamespace([\"prod\", \"search\"]);\n\nconst childNamespaces = (await db.listNamespaces([\"prod\"])).namespaces;\nconsole.log(`Child namespaces under ${JSON.stringify(namespace)}:`, childNamespaces);\n// Child namespaces under [\"prod\",\"search\"]: [ 'search' ]\n\nconst metadata = await db.describeNamespace([\"prod\", \"search\"]);\nconsole.log(`Metadata for namespace ${JSON.stringify(namespace)}:`, metadata);\n\nawait db.dropNamespace([\"prod\", \"search\"], { mode: \"skip\" });\nawait db.dropNamespace([\"prod\"], { mode: \"skip\" });\n"; @@ -28,7 +28,7 @@ export const RsConnect = "let db = connect(\"ex_lancedb\").execute().await?;\n"; export const RsConnectEnterpriseQuickstart = "let uri = std::env::var(\"LANCEDB_URI\")?; // db://your-database\nlet api_key = std::env::var(\"LANCEDB_API_KEY\")?;\nlet region = std::env::var(\"LANCEDB_REGION\").unwrap_or_else(|_| \"us-east-1\".to_string());\nlet host_override = std::env::var(\"LANCEDB_HOST_OVERRIDE\")?; // https://your-endpoint\n\nlet db = connect(&uri)\n .api_key(&api_key)\n .region(®ion)\n .host_override(&host_override)\n .execute()\n .await?;\n"; -export const RsConnectObjectStorage = "let uri = \"s3://your-bucket/path\";\n// You can also use \"gs://your-bucket/path\" or \"az://your-container/path\".\n"; +export const RsConnectObjectStorage = "let uri = \"s3://your-bucket/path\";\n// You can also use \"gs://your-bucket/path\" or \"az://your-container/path\".\nlet db = connect(uri).execute().await?;\n"; export const RsNamespaceAdminOps = "let mut properties = std::collections::HashMap::new();\nproperties.insert(\"root\".to_string(), \"./local_lancedb\".to_string());\nlet db = lancedb::connect_namespace(\"dir\", properties).execute().await?;\nlet namespace = vec![\"prod\".to_string(), \"search\".to_string()];\n\ndb.create_namespace(lance_namespace::models::CreateNamespaceRequest {\n id: Some(vec![\"prod\".to_string()]),\n ..Default::default()\n})\n.await?;\ndb.create_namespace(lance_namespace::models::CreateNamespaceRequest {\n id: Some(namespace.clone()),\n ..Default::default()\n})\n.await?;\n\nlet child_namespaces = db\n .list_namespaces(lance_namespace::models::ListNamespacesRequest {\n id: Some(vec![\"prod\".to_string()]),\n ..Default::default()\n })\n .await?;\nprintln!(\n \"Child namespaces under {:?}: {:?}\",\n namespace, child_namespaces\n);\n// Child namespaces under [\"prod\", \"search\"]: [\"search\"]\n\ndb.drop_namespace(lance_namespace::models::DropNamespaceRequest {\n id: Some(namespace.clone()),\n ..Default::default()\n})\n.await?;\ndb.drop_namespace(lance_namespace::models::DropNamespaceRequest {\n id: Some(vec![\"prod\".to_string()]),\n ..Default::default()\n})\n.await?;\n";