mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-27 15:12:53 +00:00
Compare commits
7 Commits
python-v0.
...
fix-ref-ve
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
929c683a6e | ||
|
|
e2794d1a29 | ||
|
|
8ae4f42fbe | ||
|
|
0667fa38d4 | ||
|
|
30108c0b1f | ||
|
|
1628f7e3f3 | ||
|
|
2fd712312f |
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "0.23.0"
|
current_version = "0.23.1-beta.1"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<major>0|[1-9]\\d*)\\.
|
(?P<major>0|[1-9]\\d*)\\.
|
||||||
(?P<minor>0|[1-9]\\d*)\\.
|
(?P<minor>0|[1-9]\\d*)\\.
|
||||||
|
|||||||
81
Cargo.lock
generated
81
Cargo.lock
generated
@@ -3141,8 +3141,8 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fsst"
|
name = "fsst"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
@@ -4478,8 +4478,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance"
|
name = "lance"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4544,13 +4544,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-arrow"
|
name = "lance-arrow"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
"arrow-cast",
|
"arrow-cast",
|
||||||
"arrow-data",
|
"arrow-data",
|
||||||
|
"arrow-ord",
|
||||||
"arrow-schema",
|
"arrow-schema",
|
||||||
"arrow-select",
|
"arrow-select",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -4563,8 +4564,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-bitpacking"
|
name = "lance-bitpacking"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayref",
|
"arrayref",
|
||||||
"paste",
|
"paste",
|
||||||
@@ -4573,8 +4574,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-core"
|
name = "lance-core"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
@@ -4587,6 +4588,7 @@ dependencies = [
|
|||||||
"datafusion-sql",
|
"datafusion-sql",
|
||||||
"deepsize",
|
"deepsize",
|
||||||
"futures",
|
"futures",
|
||||||
|
"itertools 0.13.0",
|
||||||
"lance-arrow",
|
"lance-arrow",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
@@ -4610,8 +4612,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-datafusion"
|
name = "lance-datafusion"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4641,8 +4643,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-datagen"
|
name = "lance-datagen"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4659,8 +4661,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-encoding"
|
name = "lance-encoding"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4697,8 +4699,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-file"
|
name = "lance-file"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4730,8 +4732,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-geo"
|
name = "lance-geo"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"datafusion",
|
"datafusion",
|
||||||
"geo-types",
|
"geo-types",
|
||||||
@@ -4742,8 +4744,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-index"
|
name = "lance-index"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4789,6 +4791,7 @@ dependencies = [
|
|||||||
"prost-types",
|
"prost-types",
|
||||||
"rand 0.9.2",
|
"rand 0.9.2",
|
||||||
"rand_distr 0.5.1",
|
"rand_distr 0.5.1",
|
||||||
|
"rangemap",
|
||||||
"rayon",
|
"rayon",
|
||||||
"roaring",
|
"roaring",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -4804,8 +4807,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-io"
|
name = "lance-io"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-arith",
|
"arrow-arith",
|
||||||
@@ -4845,8 +4848,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-linalg"
|
name = "lance-linalg"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-buffer",
|
"arrow-buffer",
|
||||||
@@ -4862,8 +4865,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-namespace"
|
name = "lance-namespace"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -4875,8 +4878,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-namespace-impls"
|
name = "lance-namespace-impls"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-ipc",
|
"arrow-ipc",
|
||||||
@@ -4905,9 +4908,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-namespace-reqwest-client"
|
name = "lance-namespace-reqwest-client"
|
||||||
version = "0.0.18"
|
version = "0.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3ea349999bcda4eea53fc05d334b3775ec314761e6a706555c777d7a29b18d19"
|
checksum = "00a21b43fe2a373896727b97927adedd2683d2907683f294f62cf8815fbf6a01"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -4918,8 +4921,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-table"
|
name = "lance-table"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
@@ -4958,8 +4961,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lance-testing"
|
name = "lance-testing"
|
||||||
version = "1.0.1-beta.1"
|
version = "2.0.0-beta.3"
|
||||||
source = "git+https://github.com/lance-format/lance.git?tag=v1.0.1-beta.1#9e65b2a9ca17b1c81a33183e5660f88d1b3b9ce0"
|
source = "git+https://github.com/lance-format/lance.git?tag=v2.0.0-beta.3#e6233665e377926ed2a8ceca667bc7a2f23341ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-schema",
|
"arrow-schema",
|
||||||
@@ -4970,7 +4973,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb"
|
name = "lancedb"
|
||||||
version = "0.23.0"
|
version = "0.23.1-beta.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -5049,7 +5052,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb-nodejs"
|
name = "lancedb-nodejs"
|
||||||
version = "0.23.0"
|
version = "0.23.1-beta.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
"arrow-ipc",
|
"arrow-ipc",
|
||||||
@@ -5069,7 +5072,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lancedb-python"
|
name = "lancedb-python"
|
||||||
version = "0.26.0"
|
version = "0.26.1-beta.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow",
|
"arrow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|||||||
28
Cargo.toml
28
Cargo.toml
@@ -15,20 +15,20 @@ categories = ["database-implementations"]
|
|||||||
rust-version = "1.78.0"
|
rust-version = "1.78.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
lance = { "version" = "=1.0.1-beta.1", default-features = false, "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance = { "version" = "=2.0.0-beta.3", default-features = false, "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-core = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-core = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-datagen = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-datagen = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-file = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-file = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-io = { "version" = "=1.0.1-beta.1", default-features = false, "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-io = { "version" = "=2.0.0-beta.3", default-features = false, "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-index = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-index = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-linalg = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-linalg = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-namespace = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-namespace = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-namespace-impls = { "version" = "=1.0.1-beta.1", default-features = false, "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-namespace-impls = { "version" = "=2.0.0-beta.3", default-features = false, "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-table = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-table = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-testing = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-testing = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-datafusion = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-datafusion = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-encoding = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-encoding = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "git" = "https://github.com/lance-format/lance.git" }
|
||||||
lance-arrow = { "version" = "=1.0.1-beta.1", "tag" = "v1.0.1-beta.1", "git" = "https://github.com/lance-format/lance.git" }
|
lance-arrow = { "version" = "=2.0.0-beta.3", "tag" = "v2.0.0-beta.3", "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 = "56.2", optional = false }
|
arrow = { version = "56.2", optional = false }
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Add the following dependency to your `pom.xml`:
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-core</artifactId>
|
<artifactId>lancedb-core</artifactId>
|
||||||
<version>0.23.0</version>
|
<version>0.23.1-beta.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.23.0-final.0</version>
|
<version>0.23.1-beta.1</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.lancedb</groupId>
|
<groupId>com.lancedb</groupId>
|
||||||
<artifactId>lancedb-parent</artifactId>
|
<artifactId>lancedb-parent</artifactId>
|
||||||
<version>0.23.0-final.0</version>
|
<version>0.23.1-beta.1</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>${project.artifactId}</name>
|
<name>${project.artifactId}</name>
|
||||||
<description>LanceDB Java SDK Parent POM</description>
|
<description>LanceDB Java SDK Parent POM</description>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb-nodejs"
|
name = "lancedb-nodejs"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
version = "0.23.0"
|
version = "0.23.1-beta.1"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
description.workspace = true
|
description.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-darwin-arm64",
|
"name": "@lancedb/lancedb-darwin-arm64",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["darwin"],
|
"os": ["darwin"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.darwin-arm64.node",
|
"main": "lancedb.darwin-arm64.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-darwin-x64",
|
"name": "@lancedb/lancedb-darwin-x64",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["darwin"],
|
"os": ["darwin"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.darwin-x64.node",
|
"main": "lancedb.darwin-x64.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-arm64-gnu",
|
"name": "@lancedb/lancedb-linux-arm64-gnu",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.linux-arm64-gnu.node",
|
"main": "lancedb.linux-arm64-gnu.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-arm64-musl",
|
"name": "@lancedb/lancedb-linux-arm64-musl",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["arm64"],
|
"cpu": ["arm64"],
|
||||||
"main": "lancedb.linux-arm64-musl.node",
|
"main": "lancedb.linux-arm64-musl.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-x64-gnu",
|
"name": "@lancedb/lancedb-linux-x64-gnu",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.linux-x64-gnu.node",
|
"main": "lancedb.linux-x64-gnu.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-linux-x64-musl",
|
"name": "@lancedb/lancedb-linux-x64-musl",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["linux"],
|
"os": ["linux"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.linux-x64-musl.node",
|
"main": "lancedb.linux-x64-musl.node",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-win32-arm64-msvc",
|
"name": "@lancedb/lancedb-win32-arm64-msvc",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": [
|
"os": [
|
||||||
"win32"
|
"win32"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb-win32-x64-msvc",
|
"name": "@lancedb/lancedb-win32-x64-msvc",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"os": ["win32"],
|
"os": ["win32"],
|
||||||
"cpu": ["x64"],
|
"cpu": ["x64"],
|
||||||
"main": "lancedb.win32-x64-msvc.node",
|
"main": "lancedb.win32-x64-msvc.node",
|
||||||
|
|||||||
4
nodejs/package-lock.json
generated
4
nodejs/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@lancedb/lancedb",
|
"name": "@lancedb/lancedb",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@lancedb/lancedb",
|
"name": "@lancedb/lancedb",
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64",
|
"x64",
|
||||||
"arm64"
|
"arm64"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"ann"
|
"ann"
|
||||||
],
|
],
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "0.23.0",
|
"version": "0.23.1-beta.1",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/index.js",
|
".": "./dist/index.js",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[tool.bumpversion]
|
[tool.bumpversion]
|
||||||
current_version = "0.26.1-beta.0"
|
current_version = "0.26.1-beta.1"
|
||||||
parse = """(?x)
|
parse = """(?x)
|
||||||
(?P<major>0|[1-9]\\d*)\\.
|
(?P<major>0|[1-9]\\d*)\\.
|
||||||
(?P<minor>0|[1-9]\\d*)\\.
|
(?P<minor>0|[1-9]\\d*)\\.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb-python"
|
name = "lancedb-python"
|
||||||
version = "0.26.1-beta.0"
|
version = "0.26.1-beta.1"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
description = "Python bindings for LanceDB"
|
description = "Python bindings for LanceDB"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -684,6 +684,24 @@ class Table(ABC):
|
|||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def to_lance(self, **kwargs) -> lance.LanceDataset:
|
||||||
|
"""Return the table as a lance.LanceDataset.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
lance.LanceDataset
|
||||||
|
"""
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def to_polars(self, **kwargs) -> "pl.DataFrame":
|
||||||
|
"""Return the table as a polars.DataFrame.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
polars.DataFrame
|
||||||
|
"""
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
def create_index(
|
def create_index(
|
||||||
self,
|
self,
|
||||||
metric="l2",
|
metric="l2",
|
||||||
|
|||||||
@@ -325,12 +325,12 @@ impl Connection {
|
|||||||
let inner = self_.get_inner()?.clone();
|
let inner = self_.get_inner()?.clone();
|
||||||
let py = self_.py();
|
let py = self_.py();
|
||||||
future_into_py(py, async move {
|
future_into_py(py, async move {
|
||||||
use lance_namespace::models::{create_namespace_request, CreateNamespaceRequest};
|
use lance_namespace::models::CreateNamespaceRequest;
|
||||||
let mode_enum = mode.and_then(|m| match m.to_lowercase().as_str() {
|
let mode_value = mode.map(|m| match m.to_lowercase().as_str() {
|
||||||
"create" => Some(create_namespace_request::Mode::Create),
|
"create" => "Create".to_string(),
|
||||||
"exist_ok" => Some(create_namespace_request::Mode::ExistOk),
|
"exist_ok" => "ExistOk".to_string(),
|
||||||
"overwrite" => Some(create_namespace_request::Mode::Overwrite),
|
"overwrite" => "Overwrite".to_string(),
|
||||||
_ => None,
|
_ => m,
|
||||||
});
|
});
|
||||||
let request = CreateNamespaceRequest {
|
let request = CreateNamespaceRequest {
|
||||||
id: if namespace.is_empty() {
|
id: if namespace.is_empty() {
|
||||||
@@ -338,7 +338,7 @@ impl Connection {
|
|||||||
} else {
|
} else {
|
||||||
Some(namespace)
|
Some(namespace)
|
||||||
},
|
},
|
||||||
mode: mode_enum,
|
mode: mode_value,
|
||||||
properties,
|
properties,
|
||||||
};
|
};
|
||||||
let response = inner.create_namespace(request).await.infer_error()?;
|
let response = inner.create_namespace(request).await.infer_error()?;
|
||||||
@@ -360,16 +360,16 @@ impl Connection {
|
|||||||
let inner = self_.get_inner()?.clone();
|
let inner = self_.get_inner()?.clone();
|
||||||
let py = self_.py();
|
let py = self_.py();
|
||||||
future_into_py(py, async move {
|
future_into_py(py, async move {
|
||||||
use lance_namespace::models::{drop_namespace_request, DropNamespaceRequest};
|
use lance_namespace::models::DropNamespaceRequest;
|
||||||
let mode_enum = mode.and_then(|m| match m.to_uppercase().as_str() {
|
let mode_value = mode.map(|m| match m.to_uppercase().as_str() {
|
||||||
"SKIP" => Some(drop_namespace_request::Mode::Skip),
|
"SKIP" => "Skip".to_string(),
|
||||||
"FAIL" => Some(drop_namespace_request::Mode::Fail),
|
"FAIL" => "Fail".to_string(),
|
||||||
_ => None,
|
_ => m,
|
||||||
});
|
});
|
||||||
let behavior_enum = behavior.and_then(|b| match b.to_uppercase().as_str() {
|
let behavior_value = behavior.map(|b| match b.to_uppercase().as_str() {
|
||||||
"RESTRICT" => Some(drop_namespace_request::Behavior::Restrict),
|
"RESTRICT" => "Restrict".to_string(),
|
||||||
"CASCADE" => Some(drop_namespace_request::Behavior::Cascade),
|
"CASCADE" => "Cascade".to_string(),
|
||||||
_ => None,
|
_ => b,
|
||||||
});
|
});
|
||||||
let request = DropNamespaceRequest {
|
let request = DropNamespaceRequest {
|
||||||
id: if namespace.is_empty() {
|
id: if namespace.is_empty() {
|
||||||
@@ -377,8 +377,8 @@ impl Connection {
|
|||||||
} else {
|
} else {
|
||||||
Some(namespace)
|
Some(namespace)
|
||||||
},
|
},
|
||||||
mode: mode_enum,
|
mode: mode_value,
|
||||||
behavior: behavior_enum,
|
behavior: behavior_value,
|
||||||
};
|
};
|
||||||
let response = inner.drop_namespace(request).await.infer_error()?;
|
let response = inner.drop_namespace(request).await.infer_error()?;
|
||||||
Python::with_gil(|py| -> PyResult<Py<PyDict>> {
|
Python::with_gil(|py| -> PyResult<Py<PyDict>> {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lancedb"
|
name = "lancedb"
|
||||||
version = "0.23.0"
|
version = "0.23.1-beta.1"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
description = "LanceDB: A serverless, low-latency vector database for AI applications"
|
description = "LanceDB: A serverless, low-latency vector database for AI applications"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ use std::collections::HashMap;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use lance_io::object_store::{LanceNamespaceStorageOptionsProvider, StorageOptionsProvider};
|
|
||||||
use lance_namespace::{
|
use lance_namespace::{
|
||||||
models::{
|
models::{
|
||||||
CreateEmptyTableRequest, CreateNamespaceRequest, CreateNamespaceResponse,
|
CreateEmptyTableRequest, CreateNamespaceRequest, CreateNamespaceResponse,
|
||||||
@@ -19,13 +18,13 @@ use lance_namespace::{
|
|||||||
};
|
};
|
||||||
use lance_namespace_impls::ConnectBuilder;
|
use lance_namespace_impls::ConnectBuilder;
|
||||||
|
|
||||||
use crate::connection::ConnectRequest;
|
|
||||||
use crate::database::ReadConsistency;
|
use crate::database::ReadConsistency;
|
||||||
use crate::error::{Error, Result};
|
use crate::error::{Error, Result};
|
||||||
|
use crate::table::NativeTable;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
listing::ListingDatabase, BaseTable, CloneTableRequest, CreateTableMode,
|
BaseTable, CloneTableRequest, CreateTableMode, CreateTableRequest as DbCreateTableRequest,
|
||||||
CreateTableRequest as DbCreateTableRequest, Database, OpenTableRequest, TableNamesRequest,
|
Database, OpenTableRequest, TableNamesRequest,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A database implementation that uses lance-namespace for table management
|
/// A database implementation that uses lance-namespace for table management
|
||||||
@@ -90,51 +89,6 @@ impl std::fmt::Display for LanceNamespaceDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LanceNamespaceDatabase {
|
|
||||||
/// Create a temporary listing database for the given location
|
|
||||||
///
|
|
||||||
/// Merges storage options with priority: connection < user < namespace
|
|
||||||
async fn create_listing_database(
|
|
||||||
&self,
|
|
||||||
location: &str,
|
|
||||||
table_id: Vec<String>,
|
|
||||||
user_storage_options: Option<&HashMap<String, String>>,
|
|
||||||
response_storage_options: Option<&HashMap<String, String>>,
|
|
||||||
) -> Result<ListingDatabase> {
|
|
||||||
// Merge storage options: connection < user < namespace
|
|
||||||
let mut merged_storage_options = self.storage_options.clone();
|
|
||||||
if let Some(opts) = user_storage_options {
|
|
||||||
merged_storage_options.extend(opts.clone());
|
|
||||||
}
|
|
||||||
if let Some(opts) = response_storage_options {
|
|
||||||
merged_storage_options.extend(opts.clone());
|
|
||||||
}
|
|
||||||
|
|
||||||
let request = ConnectRequest {
|
|
||||||
uri: location.to_string(),
|
|
||||||
#[cfg(feature = "remote")]
|
|
||||||
client_config: Default::default(),
|
|
||||||
options: merged_storage_options,
|
|
||||||
read_consistency_interval: self.read_consistency_interval,
|
|
||||||
session: self.session.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut listing_db = ListingDatabase::connect_with_options(&request).await?;
|
|
||||||
|
|
||||||
// Create storage options provider only if namespace returned storage options
|
|
||||||
// (not just user-provided options)
|
|
||||||
if response_storage_options.is_some() {
|
|
||||||
let provider = Arc::new(LanceNamespaceStorageOptionsProvider::new(
|
|
||||||
self.namespace.clone(),
|
|
||||||
table_id,
|
|
||||||
)) as Arc<dyn StorageOptionsProvider>;
|
|
||||||
listing_db.storage_options_provider = Some(provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(listing_db)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Database for LanceNamespaceDatabase {
|
impl Database for LanceNamespaceDatabase {
|
||||||
fn uri(&self) -> &str {
|
fn uri(&self) -> &str {
|
||||||
@@ -195,19 +149,12 @@ impl Database for LanceNamespaceDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn create_table(&self, request: DbCreateTableRequest) -> Result<Arc<dyn BaseTable>> {
|
async fn create_table(&self, request: DbCreateTableRequest) -> Result<Arc<dyn BaseTable>> {
|
||||||
// Extract user-provided storage options from request
|
|
||||||
let user_storage_options = request
|
|
||||||
.write_options
|
|
||||||
.lance_write_params
|
|
||||||
.as_ref()
|
|
||||||
.and_then(|lwp| lwp.store_params.as_ref())
|
|
||||||
.and_then(|sp| sp.storage_options.as_ref());
|
|
||||||
|
|
||||||
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());
|
||||||
let describe_request = DescribeTableRequest {
|
let describe_request = DescribeTableRequest {
|
||||||
id: Some(table_id.clone()),
|
id: Some(table_id.clone()),
|
||||||
version: None,
|
version: None,
|
||||||
|
with_table_uri: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let describe_result = self.namespace.describe_table(describe_request).await;
|
let describe_result = self.namespace.describe_table(describe_request).await;
|
||||||
@@ -235,34 +182,20 @@ impl Database for LanceNamespaceDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
CreateTableMode::ExistOk(_) => {
|
CreateTableMode::ExistOk(_) => {
|
||||||
if let Ok(response) = describe_result {
|
if describe_result.is_ok() {
|
||||||
let location = response.location.ok_or_else(|| Error::Runtime {
|
let native_table = NativeTable::open_from_namespace(
|
||||||
message: "Table location is missing from namespace response".to_string(),
|
self.namespace.clone(),
|
||||||
})?;
|
&request.name,
|
||||||
|
request.namespace.clone(),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
self.read_consistency_interval,
|
||||||
|
self.server_side_query_enabled,
|
||||||
|
self.session.clone(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let listing_db = self
|
return Ok(Arc::new(native_table));
|
||||||
.create_listing_database(
|
|
||||||
&location,
|
|
||||||
table_id.clone(),
|
|
||||||
user_storage_options,
|
|
||||||
response.storage_options.as_ref(),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let namespace_client = self
|
|
||||||
.server_side_query_enabled
|
|
||||||
.then(|| self.namespace.clone());
|
|
||||||
|
|
||||||
return listing_db
|
|
||||||
.open_table(OpenTableRequest {
|
|
||||||
name: request.name.clone(),
|
|
||||||
namespace: request.namespace.clone(),
|
|
||||||
index_cache_size: None,
|
|
||||||
lance_read_params: None,
|
|
||||||
location: Some(location),
|
|
||||||
namespace_client,
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,82 +227,37 @@ impl Database for LanceNamespaceDatabase {
|
|||||||
message: "Table location is missing from create_empty_table response".to_string(),
|
message: "Table location is missing from create_empty_table response".to_string(),
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let listing_db = self
|
let native_table = NativeTable::create_from_namespace(
|
||||||
.create_listing_database(
|
self.namespace.clone(),
|
||||||
&location,
|
&location,
|
||||||
table_id.clone(),
|
&request.name,
|
||||||
user_storage_options,
|
request.namespace.clone(),
|
||||||
create_empty_response.storage_options.as_ref(),
|
request.data,
|
||||||
)
|
None, // write_store_wrapper not used for namespace connections
|
||||||
.await?;
|
request.write_options.lance_write_params,
|
||||||
|
self.read_consistency_interval,
|
||||||
|
self.server_side_query_enabled,
|
||||||
|
self.session.clone(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let namespace_client = self
|
Ok(Arc::new(native_table))
|
||||||
.server_side_query_enabled
|
|
||||||
.then(|| self.namespace.clone());
|
|
||||||
|
|
||||||
let create_request = DbCreateTableRequest {
|
|
||||||
name: request.name,
|
|
||||||
namespace: request.namespace,
|
|
||||||
data: request.data,
|
|
||||||
mode: request.mode,
|
|
||||||
write_options: request.write_options,
|
|
||||||
location: Some(location),
|
|
||||||
namespace_client,
|
|
||||||
};
|
|
||||||
|
|
||||||
listing_db.create_table(create_request).await
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn open_table(&self, request: OpenTableRequest) -> Result<Arc<dyn BaseTable>> {
|
async fn open_table(&self, request: OpenTableRequest) -> Result<Arc<dyn BaseTable>> {
|
||||||
// Extract user-provided storage options from request
|
let native_table = NativeTable::open_from_namespace(
|
||||||
let user_storage_options = request
|
self.namespace.clone(),
|
||||||
.lance_read_params
|
&request.name,
|
||||||
.as_ref()
|
request.namespace.clone(),
|
||||||
.and_then(|lrp| lrp.store_options.as_ref())
|
None, // write_store_wrapper not used for namespace connections
|
||||||
.and_then(|so| so.storage_options.as_ref());
|
request.lance_read_params,
|
||||||
|
self.read_consistency_interval,
|
||||||
|
self.server_side_query_enabled,
|
||||||
|
self.session.clone(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let mut table_id = request.namespace.clone();
|
Ok(Arc::new(native_table))
|
||||||
table_id.push(request.name.clone());
|
|
||||||
|
|
||||||
let describe_request = DescribeTableRequest {
|
|
||||||
id: Some(table_id.clone()),
|
|
||||||
version: None,
|
|
||||||
};
|
|
||||||
let response = self
|
|
||||||
.namespace
|
|
||||||
.describe_table(describe_request)
|
|
||||||
.await
|
|
||||||
.map_err(|e| Error::Runtime {
|
|
||||||
message: format!("Failed to describe table: {}", e),
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let location = response.location.ok_or_else(|| Error::Runtime {
|
|
||||||
message: "Table location is missing from namespace response".to_string(),
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let listing_db = self
|
|
||||||
.create_listing_database(
|
|
||||||
&location,
|
|
||||||
table_id.clone(),
|
|
||||||
user_storage_options,
|
|
||||||
response.storage_options.as_ref(),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let namespace_client = self
|
|
||||||
.server_side_query_enabled
|
|
||||||
.then(|| self.namespace.clone());
|
|
||||||
|
|
||||||
let open_request = OpenTableRequest {
|
|
||||||
name: request.name.clone(),
|
|
||||||
namespace: request.namespace.clone(),
|
|
||||||
index_cache_size: request.index_cache_size,
|
|
||||||
lance_read_params: request.lance_read_params,
|
|
||||||
location: Some(location),
|
|
||||||
namespace_client,
|
|
||||||
};
|
|
||||||
|
|
||||||
listing_db.open_table(open_request).await
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn clone_table(&self, _request: CloneTableRequest) -> Result<Arc<dyn BaseTable>> {
|
async fn clone_table(&self, _request: CloneTableRequest) -> Result<Arc<dyn BaseTable>> {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ use lance::dataset::{
|
|||||||
use lance::dataset::{MergeInsertBuilder as LanceMergeInsertBuilder, WhenNotMatchedBySource};
|
use lance::dataset::{MergeInsertBuilder as LanceMergeInsertBuilder, WhenNotMatchedBySource};
|
||||||
use lance::index::vector::utils::infer_vector_dim;
|
use lance::index::vector::utils::infer_vector_dim;
|
||||||
use lance::index::vector::VectorIndexParams;
|
use lance::index::vector::VectorIndexParams;
|
||||||
use lance::io::WrappingObjectStore;
|
use lance::io::{ObjectStoreParams, WrappingObjectStore};
|
||||||
use lance_datafusion::exec::{analyze_plan as lance_analyze_plan, execute_plan};
|
use lance_datafusion::exec::{analyze_plan as lance_analyze_plan, execute_plan};
|
||||||
use lance_datafusion::utils::StreamingWriteSource;
|
use lance_datafusion::utils::StreamingWriteSource;
|
||||||
use lance_index::scalar::{BuiltinIndexType, ScalarIndexParams};
|
use lance_index::scalar::{BuiltinIndexType, ScalarIndexParams};
|
||||||
@@ -40,9 +40,10 @@ use lance_index::vector::pq::PQBuildParams;
|
|||||||
use lance_index::vector::sq::builder::SQBuildParams;
|
use lance_index::vector::sq::builder::SQBuildParams;
|
||||||
use lance_index::DatasetIndexExt;
|
use lance_index::DatasetIndexExt;
|
||||||
use lance_index::IndexType;
|
use lance_index::IndexType;
|
||||||
|
use lance_io::object_store::LanceNamespaceStorageOptionsProvider;
|
||||||
use lance_namespace::models::{
|
use lance_namespace::models::{
|
||||||
QueryTableRequest as NsQueryTableRequest, QueryTableRequestFullTextQuery,
|
QueryTableRequest as NsQueryTableRequest, QueryTableRequestColumns,
|
||||||
QueryTableRequestVector, StringFtsQuery,
|
QueryTableRequestFullTextQuery, QueryTableRequestVector, StringFtsQuery,
|
||||||
};
|
};
|
||||||
use lance_namespace::LanceNamespace;
|
use lance_namespace::LanceNamespace;
|
||||||
use lance_table::format::Manifest;
|
use lance_table::format::Manifest;
|
||||||
@@ -1611,6 +1612,105 @@ impl NativeTable {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Opens an existing Table using a namespace client.
|
||||||
|
///
|
||||||
|
/// This method uses `DatasetBuilder::from_namespace` to open the table, which
|
||||||
|
/// automatically fetches the table location and storage options from the namespace.
|
||||||
|
/// This eliminates the need to pre-fetch and merge storage options before opening.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `namespace_client` - The namespace client to use for fetching table metadata
|
||||||
|
/// * `name` - The table name
|
||||||
|
/// * `namespace` - The namespace path (e.g., vec!["parent", "child"])
|
||||||
|
/// * `write_store_wrapper` - Optional wrapper for the object store on write path
|
||||||
|
/// * `params` - Optional read parameters
|
||||||
|
/// * `read_consistency_interval` - Optional interval for read consistency
|
||||||
|
/// * `server_side_query_enabled` - Whether to enable server-side query execution.
|
||||||
|
/// When true, the namespace_client will be stored and queries will be executed
|
||||||
|
/// on the namespace server. When false, the namespace is only used for opening
|
||||||
|
/// the table, and queries are executed locally.
|
||||||
|
/// * `session` - Optional session for object stores and caching
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// * A [NativeTable] object.
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
pub async fn open_from_namespace(
|
||||||
|
namespace_client: Arc<dyn LanceNamespace>,
|
||||||
|
name: &str,
|
||||||
|
namespace: Vec<String>,
|
||||||
|
write_store_wrapper: Option<Arc<dyn WrappingObjectStore>>,
|
||||||
|
params: Option<ReadParams>,
|
||||||
|
read_consistency_interval: Option<std::time::Duration>,
|
||||||
|
server_side_query_enabled: bool,
|
||||||
|
session: Option<Arc<lance::session::Session>>,
|
||||||
|
) -> Result<Self> {
|
||||||
|
let mut params = params.unwrap_or_default();
|
||||||
|
|
||||||
|
// Set the session in read params
|
||||||
|
if let Some(sess) = session {
|
||||||
|
params.session(sess);
|
||||||
|
}
|
||||||
|
|
||||||
|
// patch the params if we have a write store wrapper
|
||||||
|
let params = match write_store_wrapper.clone() {
|
||||||
|
Some(wrapper) => params.patch_with_store_wrapper(wrapper)?,
|
||||||
|
None => params,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Build table_id from namespace + name
|
||||||
|
let mut table_id = namespace.clone();
|
||||||
|
table_id.push(name.to_string());
|
||||||
|
|
||||||
|
// Use DatasetBuilder::from_namespace which automatically fetches location
|
||||||
|
// and storage options from the namespace
|
||||||
|
let builder = DatasetBuilder::from_namespace(
|
||||||
|
namespace_client.clone(),
|
||||||
|
table_id,
|
||||||
|
false, // Don't ignore namespace storage options
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| match e {
|
||||||
|
lance::Error::Namespace { source, .. } => Error::Runtime {
|
||||||
|
message: format!("Failed to get table info from namespace: {:?}", source),
|
||||||
|
},
|
||||||
|
source => Error::Lance { source },
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let dataset = builder
|
||||||
|
.with_read_params(params)
|
||||||
|
.load()
|
||||||
|
.await
|
||||||
|
.map_err(|e| match e {
|
||||||
|
lance::Error::DatasetNotFound { .. } => Error::TableNotFound {
|
||||||
|
name: name.to_string(),
|
||||||
|
source: Box::new(e),
|
||||||
|
},
|
||||||
|
source => Error::Lance { source },
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let uri = dataset.uri().to_string();
|
||||||
|
let dataset = DatasetConsistencyWrapper::new_latest(dataset, read_consistency_interval);
|
||||||
|
let id = Self::build_id(&namespace, name);
|
||||||
|
|
||||||
|
let stored_namespace_client = if server_side_query_enabled {
|
||||||
|
Some(namespace_client)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
name: name.to_string(),
|
||||||
|
namespace,
|
||||||
|
id,
|
||||||
|
uri,
|
||||||
|
dataset,
|
||||||
|
read_consistency_interval,
|
||||||
|
namespace_client: stored_namespace_client,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn get_table_name(uri: &str) -> Result<String> {
|
fn get_table_name(uri: &str) -> Result<String> {
|
||||||
let path = Path::new(uri);
|
let path = Path::new(uri);
|
||||||
let name = path
|
let name = path
|
||||||
@@ -1722,6 +1822,102 @@ impl NativeTable {
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a new Table using a namespace client for storage options.
|
||||||
|
///
|
||||||
|
/// This method sets up a `StorageOptionsProvider` from the namespace client,
|
||||||
|
/// enabling automatic credential refresh for cloud storage. The namespace
|
||||||
|
/// is used for:
|
||||||
|
/// 1. Setting up storage options provider for credential vending
|
||||||
|
/// 2. Optionally enabling server-side query execution
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `namespace_client` - The namespace client to use for storage options
|
||||||
|
/// * `uri` - The URI to the table (obtained from create_empty_table response)
|
||||||
|
/// * `name` - The table name
|
||||||
|
/// * `namespace` - The namespace path (e.g., vec!["parent", "child"])
|
||||||
|
/// * `batches` - RecordBatch to be saved in the database
|
||||||
|
/// * `write_store_wrapper` - Optional wrapper for the object store on write path
|
||||||
|
/// * `params` - Optional write parameters
|
||||||
|
/// * `read_consistency_interval` - Optional interval for read consistency
|
||||||
|
/// * `server_side_query_enabled` - Whether to enable server-side query execution
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// * A [NativeTable] object.
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
pub async fn create_from_namespace(
|
||||||
|
namespace_client: Arc<dyn LanceNamespace>,
|
||||||
|
uri: &str,
|
||||||
|
name: &str,
|
||||||
|
namespace: Vec<String>,
|
||||||
|
batches: impl StreamingWriteSource,
|
||||||
|
write_store_wrapper: Option<Arc<dyn WrappingObjectStore>>,
|
||||||
|
params: Option<WriteParams>,
|
||||||
|
read_consistency_interval: Option<std::time::Duration>,
|
||||||
|
server_side_query_enabled: bool,
|
||||||
|
session: Option<Arc<lance::session::Session>>,
|
||||||
|
) -> Result<Self> {
|
||||||
|
// Build table_id from namespace + name for the storage options provider
|
||||||
|
let mut table_id = namespace.clone();
|
||||||
|
table_id.push(name.to_string());
|
||||||
|
|
||||||
|
// Set up storage options provider from namespace
|
||||||
|
let storage_options_provider = Arc::new(LanceNamespaceStorageOptionsProvider::new(
|
||||||
|
namespace_client.clone(),
|
||||||
|
table_id,
|
||||||
|
));
|
||||||
|
|
||||||
|
// Start with provided params or defaults
|
||||||
|
let mut params = params.unwrap_or_default();
|
||||||
|
|
||||||
|
// Set the session in write params
|
||||||
|
if let Some(sess) = session {
|
||||||
|
params.session = Some(sess);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure store_params exists and set the storage options provider
|
||||||
|
let store_params = params
|
||||||
|
.store_params
|
||||||
|
.get_or_insert_with(ObjectStoreParams::default);
|
||||||
|
store_params.storage_options_provider = Some(storage_options_provider);
|
||||||
|
|
||||||
|
// Patch the params if we have a write store wrapper
|
||||||
|
let params = match write_store_wrapper.clone() {
|
||||||
|
Some(wrapper) => params.patch_with_store_wrapper(wrapper)?,
|
||||||
|
None => params,
|
||||||
|
};
|
||||||
|
|
||||||
|
let insert_builder = InsertBuilder::new(uri).with_params(¶ms);
|
||||||
|
let dataset = insert_builder
|
||||||
|
.execute_stream(batches)
|
||||||
|
.await
|
||||||
|
.map_err(|e| match e {
|
||||||
|
lance::Error::DatasetAlreadyExists { .. } => Error::TableAlreadyExists {
|
||||||
|
name: name.to_string(),
|
||||||
|
},
|
||||||
|
source => Error::Lance { source },
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let id = Self::build_id(&namespace, name);
|
||||||
|
|
||||||
|
let stored_namespace_client = if server_side_query_enabled {
|
||||||
|
Some(namespace_client)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
name: name.to_string(),
|
||||||
|
namespace,
|
||||||
|
id,
|
||||||
|
uri: uri.to_string(),
|
||||||
|
dataset: DatasetConsistencyWrapper::new_latest(dataset, read_consistency_interval),
|
||||||
|
read_consistency_interval,
|
||||||
|
namespace_client: stored_namespace_client,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async fn optimize_indices(&self, options: &OptimizeOptions) -> Result<()> {
|
async fn optimize_indices(&self, options: &OptimizeOptions) -> Result<()> {
|
||||||
info!("LanceDB: optimizing indices: {:?}", options);
|
info!("LanceDB: optimizing indices: {:?}", options);
|
||||||
self.dataset
|
self.dataset
|
||||||
@@ -2152,7 +2348,10 @@ impl NativeTable {
|
|||||||
// Convert select to columns list
|
// Convert select to columns list
|
||||||
let columns = match &vq.base.select {
|
let columns = match &vq.base.select {
|
||||||
Select::All => None,
|
Select::All => None,
|
||||||
Select::Columns(cols) => Some(cols.clone()),
|
Select::Columns(cols) => Some(Box::new(QueryTableRequestColumns {
|
||||||
|
column_names: Some(cols.clone()),
|
||||||
|
column_aliases: None,
|
||||||
|
})),
|
||||||
Select::Dynamic(_) => {
|
Select::Dynamic(_) => {
|
||||||
return Err(Error::NotSupported {
|
return Err(Error::NotSupported {
|
||||||
message:
|
message:
|
||||||
@@ -2225,7 +2424,10 @@ impl NativeTable {
|
|||||||
|
|
||||||
let columns = match &q.select {
|
let columns = match &q.select {
|
||||||
Select::All => None,
|
Select::All => None,
|
||||||
Select::Columns(cols) => Some(cols.clone()),
|
Select::Columns(cols) => Some(Box::new(QueryTableRequestColumns {
|
||||||
|
column_names: Some(cols.clone()),
|
||||||
|
column_aliases: None,
|
||||||
|
})),
|
||||||
Select::Dynamic(_) => {
|
Select::Dynamic(_) => {
|
||||||
return Err(Error::NotSupported {
|
return Err(Error::NotSupported {
|
||||||
message: "Dynamic columns are not supported for server-side query"
|
message: "Dynamic columns are not supported for server-side query"
|
||||||
@@ -4950,7 +5152,13 @@ mod tests {
|
|||||||
assert_eq!(ns_request.k, 10);
|
assert_eq!(ns_request.k, 10);
|
||||||
assert_eq!(ns_request.offset, Some(5));
|
assert_eq!(ns_request.offset, Some(5));
|
||||||
assert_eq!(ns_request.filter, Some("id > 0".to_string()));
|
assert_eq!(ns_request.filter, Some("id > 0".to_string()));
|
||||||
assert_eq!(ns_request.columns, Some(vec!["id".to_string()]));
|
assert_eq!(
|
||||||
|
ns_request
|
||||||
|
.columns
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|c| c.column_names.clone()),
|
||||||
|
Some(vec!["id".to_string()])
|
||||||
|
);
|
||||||
assert_eq!(ns_request.vector_column, Some("vector".to_string()));
|
assert_eq!(ns_request.vector_column, Some("vector".to_string()));
|
||||||
assert_eq!(ns_request.distance_type, Some("l2".to_string()));
|
assert_eq!(ns_request.distance_type, Some("l2".to_string()));
|
||||||
assert!(ns_request.vector.single_vector.is_some());
|
assert!(ns_request.vector.single_vector.is_some());
|
||||||
@@ -4991,7 +5199,13 @@ mod tests {
|
|||||||
assert_eq!(ns_request.k, 20);
|
assert_eq!(ns_request.k, 20);
|
||||||
assert_eq!(ns_request.offset, Some(5));
|
assert_eq!(ns_request.offset, Some(5));
|
||||||
assert_eq!(ns_request.filter, Some("id > 5".to_string()));
|
assert_eq!(ns_request.filter, Some("id > 5".to_string()));
|
||||||
assert_eq!(ns_request.columns, Some(vec!["id".to_string()]));
|
assert_eq!(
|
||||||
|
ns_request
|
||||||
|
.columns
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|c| c.column_names.clone()),
|
||||||
|
Some(vec!["id".to_string()])
|
||||||
|
);
|
||||||
assert_eq!(ns_request.with_row_id, Some(true));
|
assert_eq!(ns_request.with_row_id, Some(true));
|
||||||
assert_eq!(ns_request.bypass_vector_index, Some(true));
|
assert_eq!(ns_request.bypass_vector_index, Some(true));
|
||||||
assert!(ns_request.vector_column.is_none()); // No vector column for plain queries
|
assert!(ns_request.vector_column.is_none()); // No vector column for plain queries
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ impl DatasetRef {
|
|||||||
let should_checkout = match &target_ref {
|
let should_checkout = match &target_ref {
|
||||||
refs::Ref::Version(_, Some(target_ver)) => version != target_ver,
|
refs::Ref::Version(_, Some(target_ver)) => version != target_ver,
|
||||||
refs::Ref::Version(_, None) => true, // No specific version, always checkout
|
refs::Ref::Version(_, None) => true, // No specific version, always checkout
|
||||||
refs::Ref::Tag(_) => true, // Always checkout for tags
|
refs::Ref::VersionNumber(target_ver) => version != target_ver,
|
||||||
|
refs::Ref::Tag(_) => true, // Always checkout for tags
|
||||||
};
|
};
|
||||||
|
|
||||||
if should_checkout {
|
if should_checkout {
|
||||||
|
|||||||
Reference in New Issue
Block a user