Compare commits

...

1 Commits

Author SHA1 Message Date
lancedb automation
3e4be3c4b5 chore: update lance dependency to v4.0.0-beta.7 2026-03-04 02:16:34 +00:00
5 changed files with 118 additions and 145 deletions

112
Cargo.lock generated
View File

@@ -3088,8 +3088,8 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]] [[package]]
name = "fsst" name = "fsst"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-array", "arrow-array",
"rand 0.9.2", "rand 0.9.2",
@@ -4260,8 +4260,8 @@ dependencies = [
[[package]] [[package]]
name = "lance" name = "lance"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-arith", "arrow-arith",
@@ -4315,7 +4315,7 @@ dependencies = [
"semver", "semver",
"serde", "serde",
"serde_json", "serde_json",
"snafu", "snafu 0.9.0",
"tantivy", "tantivy",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
@@ -4327,8 +4327,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-arrow" name = "lance-arrow"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-array", "arrow-array",
"arrow-buffer", "arrow-buffer",
@@ -4338,6 +4338,7 @@ dependencies = [
"arrow-schema", "arrow-schema",
"arrow-select", "arrow-select",
"bytes", "bytes",
"futures",
"getrandom 0.2.16", "getrandom 0.2.16",
"half", "half",
"jsonb", "jsonb",
@@ -4347,8 +4348,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-bitpacking" name = "lance-bitpacking"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrayref", "arrayref",
"paste", "paste",
@@ -4357,8 +4358,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-core" name = "lance-core"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-array", "arrow-array",
"arrow-buffer", "arrow-buffer",
@@ -4384,7 +4385,7 @@ dependencies = [
"rand 0.9.2", "rand 0.9.2",
"roaring", "roaring",
"serde_json", "serde_json",
"snafu", "snafu 0.9.0",
"tempfile", "tempfile",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
@@ -4395,8 +4396,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-datafusion" name = "lance-datafusion"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-array", "arrow-array",
@@ -4419,15 +4420,15 @@ dependencies = [
"pin-project", "pin-project",
"prost", "prost",
"prost-build", "prost-build",
"snafu", "snafu 0.9.0",
"tokio", "tokio",
"tracing", "tracing",
] ]
[[package]] [[package]]
name = "lance-datagen" name = "lance-datagen"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-array", "arrow-array",
@@ -4445,8 +4446,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-encoding" name = "lance-encoding"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-arith", "arrow-arith",
"arrow-array", "arrow-array",
@@ -4473,7 +4474,7 @@ dependencies = [
"prost-build", "prost-build",
"prost-types", "prost-types",
"rand 0.9.2", "rand 0.9.2",
"snafu", "snafu 0.9.0",
"strum", "strum",
"tokio", "tokio",
"tracing", "tracing",
@@ -4483,8 +4484,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-file" name = "lance-file"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-arith", "arrow-arith",
"arrow-array", "arrow-array",
@@ -4509,15 +4510,15 @@ dependencies = [
"prost", "prost",
"prost-build", "prost-build",
"prost-types", "prost-types",
"snafu", "snafu 0.9.0",
"tokio", "tokio",
"tracing", "tracing",
] ]
[[package]] [[package]]
name = "lance-index" name = "lance-index"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-arith", "arrow-arith",
@@ -4569,7 +4570,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"smallvec", "smallvec",
"snafu", "snafu 0.9.0",
"tantivy", "tantivy",
"tempfile", "tempfile",
"tokio", "tokio",
@@ -4580,8 +4581,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-io" name = "lance-io"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-arith", "arrow-arith",
@@ -4613,7 +4614,7 @@ dependencies = [
"prost", "prost",
"rand 0.9.2", "rand 0.9.2",
"serde", "serde",
"snafu", "snafu 0.9.0",
"tempfile", "tempfile",
"tokio", "tokio",
"tracing", "tracing",
@@ -4622,8 +4623,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-linalg" name = "lance-linalg"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-array", "arrow-array",
"arrow-buffer", "arrow-buffer",
@@ -4639,21 +4640,21 @@ dependencies = [
[[package]] [[package]]
name = "lance-namespace" name = "lance-namespace"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"async-trait", "async-trait",
"bytes", "bytes",
"lance-core", "lance-core",
"lance-namespace-reqwest-client", "lance-namespace-reqwest-client",
"snafu", "snafu 0.9.0",
] ]
[[package]] [[package]]
name = "lance-namespace-impls" name = "lance-namespace-impls"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-ipc", "arrow-ipc",
@@ -4675,7 +4676,7 @@ dependencies = [
"reqwest", "reqwest",
"serde", "serde",
"serde_json", "serde_json",
"snafu", "snafu 0.9.0",
"tokio", "tokio",
"tower", "tower",
"tower-http 0.5.2", "tower-http 0.5.2",
@@ -4697,8 +4698,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-table" name = "lance-table"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow", "arrow",
"arrow-array", "arrow-array",
@@ -4728,7 +4729,7 @@ dependencies = [
"semver", "semver",
"serde", "serde",
"serde_json", "serde_json",
"snafu", "snafu 0.9.0",
"tokio", "tokio",
"tracing", "tracing",
"url", "url",
@@ -4737,8 +4738,8 @@ dependencies = [
[[package]] [[package]]
name = "lance-testing" name = "lance-testing"
version = "3.0.0-rc.2" version = "4.0.0-beta.7"
source = "git+https://github.com/lance-format/lance.git?tag=v3.0.0-rc.2#3fb3e705b8a25ab1bb0fc9e1e0158e8a13356181" source = "git+https://github.com/lance-format/lance.git?tag=v4.0.0-beta.7#e1e5689e9c1e58df75cfdc64e8f029004e98ec71"
dependencies = [ dependencies = [
"arrow-array", "arrow-array",
"arrow-schema", "arrow-schema",
@@ -4819,7 +4820,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"serde_with", "serde_with",
"snafu", "snafu 0.8.9",
"tempfile", "tempfile",
"test-log", "test-log",
"tokenizers", "tokenizers",
@@ -4865,7 +4866,7 @@ dependencies = [
"pyo3", "pyo3",
"pyo3-async-runtimes", "pyo3-async-runtimes",
"pyo3-build-config", "pyo3-build-config",
"snafu", "snafu 0.8.9",
"tokio", "tokio",
] ]
@@ -7777,7 +7778,16 @@ version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2"
dependencies = [ dependencies = [
"snafu-derive", "snafu-derive 0.8.9",
]
[[package]]
name = "snafu"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1d4bced6a69f90b2056c03dcff2c4737f98d6fb9e0853493996e1d253ca29c6"
dependencies = [
"snafu-derive 0.9.0",
] ]
[[package]] [[package]]
@@ -7792,6 +7802,18 @@ dependencies = [
"syn 2.0.114", "syn 2.0.114",
] ]
[[package]]
name = "snafu-derive"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54254b8531cafa275c5e096f62d48c81435d1015405a91198ddb11e967301d40"
dependencies = [
"heck 0.4.1",
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]] [[package]]
name = "socket2" name = "socket2"
version = "0.5.10" version = "0.5.10"

View File

@@ -15,20 +15,20 @@ categories = ["database-implementations"]
rust-version = "1.91.0" rust-version = "1.91.0"
[workspace.dependencies] [workspace.dependencies]
lance = { "version" = "=3.0.0-rc.2", default-features = false, "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance = { "version" = "=4.0.0-beta.7", default-features = false, "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-core = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-core = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-datagen = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-datagen = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-file = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-file = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-io = { "version" = "=3.0.0-rc.2", default-features = false, "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-io = { "version" = "=4.0.0-beta.7", default-features = false, "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-index = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-index = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-linalg = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-linalg = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-namespace = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-namespace = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-namespace-impls = { "version" = "=3.0.0-rc.2", default-features = false, "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-namespace-impls = { "version" = "=4.0.0-beta.7", default-features = false, "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-table = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-table = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-testing = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-testing = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-datafusion = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-datafusion = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-encoding = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-encoding = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
lance-arrow = { "version" = "=3.0.0-rc.2", "tag" = "v3.0.0-rc.2", "git" = "https://github.com/lance-format/lance.git" } lance-arrow = { "version" = "=4.0.0-beta.7", "tag" = "v4.0.0-beta.7", "git" = "https://github.com/lance-format/lance.git" }
ahash = "0.8" ahash = "0.8"
# Note that this one does not include pyarrow # Note that this one does not include pyarrow
arrow = { version = "57.2", optional = false } arrow = { version = "57.2", optional = false }

View File

@@ -28,7 +28,7 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<arrow.version>15.0.0</arrow.version> <arrow.version>15.0.0</arrow.version>
<lance-core.version>3.1.0-beta.2</lance-core.version> <lance-core.version>4.0.0-beta.7</lance-core.version>
<spotless.skip>false</spotless.skip> <spotless.skip>false</spotless.skip>
<spotless.version>2.30.0</spotless.version> <spotless.version>2.30.0</spotless.version>
<spotless.java.googlejavaformat.version>1.7</spotless.java.googlejavaformat.version> <spotless.java.googlejavaformat.version>1.7</spotless.java.googlejavaformat.version>

View File

@@ -66,12 +66,11 @@ impl StorageOptionsProvider for PyStorageOptionsProviderWrapper {
.inner .inner
.bind(py) .bind(py)
.call_method0("fetch_storage_options") .call_method0("fetch_storage_options")
.map_err(|e| lance_core::Error::IO { .map_err(|e| {
source: Box::new(std::io::Error::other(format!( lance_core::Error::io_source(Box::new(std::io::Error::other(format!(
"Failed to call fetch_storage_options: {}", "Failed to call fetch_storage_options: {}",
e e
))), ))))
location: snafu::location!(),
})?; })?;
// If result is None, return None // If result is None, return None
@@ -81,26 +80,25 @@ impl StorageOptionsProvider for PyStorageOptionsProviderWrapper {
// Extract the result dict - should be a flat Map<String, String> // Extract the result dict - should be a flat Map<String, String>
let result_dict = result.downcast::<PyDict>().map_err(|_| { let result_dict = result.downcast::<PyDict>().map_err(|_| {
lance_core::Error::InvalidInput { lance_core::Error::invalid_input(
source: "fetch_storage_options() must return None or a dict of string key-value pairs".into(), "fetch_storage_options() must return None or a dict of string key-value pairs",
location: snafu::location!(), )
}
})?; })?;
// Convert all entries to HashMap<String, String> // Convert all entries to HashMap<String, String>
let mut storage_options = HashMap::new(); let mut storage_options = HashMap::new();
for (key, value) in result_dict.iter() { for (key, value) in result_dict.iter() {
let key_str: String = key.extract().map_err(|e| { let key_str: String = key.extract().map_err(|e| {
lance_core::Error::InvalidInput { lance_core::Error::invalid_input(format!(
source: format!("Storage option key must be a string: {}", e).into(), "Storage option key must be a string: {}",
location: snafu::location!(), e
} ))
})?; })?;
let value_str: String = value.extract().map_err(|e| { let value_str: String = value.extract().map_err(|e| {
lance_core::Error::InvalidInput { lance_core::Error::invalid_input(format!(
source: format!("Storage option value must be a string: {}", e).into(), "Storage option value must be a string: {}",
location: snafu::location!(), e
} ))
})?; })?;
storage_options.insert(key_str, value_str); storage_options.insert(key_str, value_str);
} }
@@ -109,13 +107,10 @@ impl StorageOptionsProvider for PyStorageOptionsProviderWrapper {
}) })
}) })
.await .await
.map_err(|e| lance_core::Error::IO { .map_err(|e| lance_core::Error::io_source(Box::new(std::io::Error::other(format!(
source: Box::new(std::io::Error::other(format!(
"Task join error: {}", "Task join error: {}",
e e
))), )))))?
location: snafu::location!(),
})?
} }
fn provider_id(&self) -> String { fn provider_id(&self) -> String {

View File

@@ -11,14 +11,13 @@ use lance_io::object_store::{ObjectStoreParams, StorageOptionsAccessor};
use lance_namespace::{ use lance_namespace::{
LanceNamespace, LanceNamespace,
models::{ models::{
CreateEmptyTableRequest, CreateNamespaceRequest, CreateNamespaceResponse, CreateNamespaceRequest, CreateNamespaceResponse, DeclareTableRequest,
DeclareTableRequest, DescribeNamespaceRequest, DescribeNamespaceResponse, DescribeNamespaceRequest, DescribeNamespaceResponse, DescribeTableRequest,
DescribeTableRequest, DropNamespaceRequest, DropNamespaceResponse, DropTableRequest, DropNamespaceRequest, DropNamespaceResponse, DropTableRequest, ListNamespacesRequest,
ListNamespacesRequest, ListNamespacesResponse, ListTablesRequest, ListTablesResponse, ListNamespacesResponse, ListTablesRequest, ListTablesResponse,
}, },
}; };
use lance_namespace_impls::ConnectBuilder; use lance_namespace_impls::ConnectBuilder;
use log::warn;
use crate::database::ReadConsistency; use crate::database::ReadConsistency;
use crate::error::{Error, Result}; use crate::error::{Error, Result};
@@ -206,70 +205,27 @@ impl Database for LanceNamespaceDatabase {
let mut table_id = request.namespace.clone(); let mut table_id = request.namespace.clone();
table_id.push(request.name.clone()); table_id.push(request.name.clone());
// Try declare_table first, falling back to create_empty_table for backwards // Declare table metadata through lance-namespace before creating data files.
// compatibility with older namespace clients that don't support declare_table
let declare_request = DeclareTableRequest { let declare_request = DeclareTableRequest {
id: Some(table_id.clone()), id: Some(table_id.clone()),
..Default::default() ..Default::default()
}; };
let (location, initial_storage_options) = let declare_response = self
match self.namespace.declare_table(declare_request).await { .namespace
Ok(response) => { .declare_table(declare_request)
let loc = response.location.ok_or_else(|| Error::Runtime { .await
message: "Table location is missing from declare_table response" .map_err(|e| Error::Runtime {
.to_string(), message: format!("Failed to declare table: {}", e),
})?; })?;
// Use storage options from response, fall back to self.storage_options let location = declare_response.location.ok_or_else(|| Error::Runtime {
let opts = response message: "Table location is missing from declare_table response".to_string(),
.storage_options })?;
.or_else(|| Some(self.storage_options.clone())) // Use storage options from response, fall back to self.storage_options
.filter(|o| !o.is_empty()); let initial_storage_options = declare_response
(loc, opts) .storage_options
} .or_else(|| Some(self.storage_options.clone()))
Err(e) => { .filter(|o| !o.is_empty());
// Check if the error is "not supported" and try create_empty_table as fallback
let err_str = e.to_string().to_lowercase();
if err_str.contains("not supported") || err_str.contains("not implemented") {
warn!(
"declare_table is not supported by the namespace client, \
falling back to deprecated create_empty_table. \
create_empty_table is deprecated and will be removed in Lance 3.0.0. \
Please upgrade your namespace client to support declare_table."
);
#[allow(deprecated)]
let create_empty_request = CreateEmptyTableRequest {
id: Some(table_id.clone()),
..Default::default()
};
#[allow(deprecated)]
let create_response = self
.namespace
.create_empty_table(create_empty_request)
.await
.map_err(|e| Error::Runtime {
message: format!("Failed to create empty table: {}", e),
})?;
let loc = create_response.location.ok_or_else(|| Error::Runtime {
message: "Table location is missing from create_empty_table response"
.to_string(),
})?;
// For deprecated path, use self.storage_options
let opts = if self.storage_options.is_empty() {
None
} else {
Some(self.storage_options.clone())
};
(loc, opts)
} else {
return Err(Error::Runtime {
message: format!("Failed to declare table: {}", e),
});
}
}
};
let write_params = if let Some(storage_opts) = initial_storage_options { let write_params = if let Some(storage_opts) = initial_storage_options {
let mut params = request.write_options.lance_write_params.unwrap_or_default(); let mut params = request.write_options.lance_write_params.unwrap_or_default();