mirror of
https://github.com/lancedb/lancedb.git
synced 2026-08-18 03:58:26 +00:00
8a4eaaa8b9993e7d3c33c0663551a8a73b606525
2679 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
dfbe5becaa |
chore: update lance dependency to v8.0.0-beta.12 (#3538)
Updates Rust workspace Lance crates and Java lance-core to v8.0.0-beta.12. No compatibility fixes were required; validation passed with cargo clippy and cargo fmt. Lance tag: https://github.com/lance-format/lance/releases/tag/v8.0.0-beta.12 |
||
|
|
49815da933 |
refactor: extract create_index module from table.rs (#3521)
## Summary - Extracts the `create_index` code cluster from `table.rs` into a new `rust/lancedb/src/table/create_index.rs` submodule, continuing the work from #2949. - Moves 8 `NativeTable` inherent methods (`load_indices`, `validate_index_type`, `build_ivf_params`, `get_num_sub_vectors`, `get_vector_dimension`, `resolve_index_field`, `make_index_params`, `get_index_type_for_field`) and 11 associated tests into the new module. - Reduces `table.rs` from ~5009 to ~3804 lines (-1205 lines) with no behavioral changes. ## Test plan UT |
||
|
|
f8caef3aca |
feat(bindings): expose new IndexConfig fields in Python and Node.js (#3534)
## Summary Surfaces the rich per-index metadata added in #3497 to the Python and Node.js language bindings. Closes #3495. New optional fields exposed on `IndexConfig` in both bindings: - `index_uuid` / `indexUuid` — UUID of the first index segment - `type_url` / `typeUrl` — protobuf type URL for the index - `created_at` / `createdAt` — creation timestamp (milliseconds since Unix epoch) - `num_indexed_rows` / `numIndexedRows` — rows covered by the index - `num_unindexed_rows` / `numUnindexedRows` — rows not yet indexed - `size_bytes` / `sizeBytes` — total index file size in bytes - `num_segments` / `numSegments` — number of index segments - `index_version` / `indexVersion` — on-disk format version - `index_details` / `indexDetails` — type-specific JSON details string All fields are `None`/`undefined` for remote tables (which don't yet surface this metadata through the server response). ## Changes - `python/src/index.rs`: extend `IndexConfig` pyclass; update `From` impl; update `__getitem__` - `python/python/lancedb/_lancedb.pyi`: add type hints for new fields - `python/python/tests/test_table.py`: new `test_index_config_fields` test - `nodejs/src/table.rs`: extend `IndexConfig` napi struct; update `From` impl - `nodejs/__test__/table.test.ts`: new test; update existing `toEqual` assertions to `expect.objectContaining` to accommodate new fields ## Test plan - [x] Python: `uv run --extra tests pytest python/tests/test_table.py::test_index_config_fields` - [x] Node.js: `pnpm test __test__/table.test.ts` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
40f3e22600 |
feat: support rename_table on LanceNamespaceDatabase (#3520)
## Summary Closes #3412 Implements `rename_table` for `LanceNamespaceDatabase` (sync and async Python) and the Rust `NamespaceDatabase` backend. Previously these raised `NotImplementedError`; this PR delegates to the `LanceNamespace.rename_table` method which is part of the lance-namespace spec. ### Changes - **`rust/lancedb/src/database/namespace.rs`**: Remove the `NotImplementedError` stub for `rename_table`. Build a `RenameTableRequest` (with `id`, `new_table_name`, and optionally `new_namespace_id`) and call `self.namespace.rename_table(...)`, mirroring the existing `drop_table` pattern. - **`python/python/lancedb/namespace.py`**: Import `RenameTableRequest` from `lance_namespace`. Replace the `raise NotImplementedError` in both `LanceNamespaceDatabase.rename_table` (sync) and `AsyncLanceNamespaceDatabase.rename_table` (async) with a call to `self._namespace_client.rename_table(request)`. - **`python/python/tests/test_namespace.py`**: Replace the `test_rename_table_not_supported` test (which checked for `NotImplementedError`) with `test_rename_table`, which: 1. Creates a table in a namespace 2. Calls `rename_table` with `cur_namespace_path` and `new_namespace_path` 3. Asserts the old name is gone from `table_names()` 4. Asserts the new name appears in `table_names()` 5. Verifies the renamed table can be opened ## Test plan - [ ] Existing namespace tests pass in CI (all rely on `lance.namespace.DirectoryNamespace` which requires the full lance package) - [ ] `test_rename_table` exercises the full rename path: create → rename → verify old gone → verify new present → open - [ ] Rust build passes with the updated `namespace.rs` (requires Rust toolchain in CI) |
||
|
|
04480c274a |
test(python): add nested field regression matrix tests (#3518)
## Summary Closes #3406 Add a regression matrix in `python/python/tests/test_nested_fields.py` that exercises the full nested field index lifecycle for both the sync and async Python table APIs. The tests will fail if any implementation regresses to leaf-only field names in `list_indices`, `index_stats`, search, or filter results. ## Test scenarios covered **Index types:** BTree scalar, IvfPq vector, FTS **Field-name edge cases (per acceptance criteria):** - `rowId` — camelCase top-level field - `` `row-id` `` — hyphenated top-level field (escaped) - `parent.`\``leaf.name`\`` ` — struct leaf whose name contains a literal dot - `MetaData.userId` — mixed-case nested path - `` `meta-data`.`user-id` `` — hyphenated struct with hyphenated leaf **Lifecycle operations per index type:** - `create_index` / `create_scalar_index` / `create_fts_index` - `list_indices` → verify canonical full dotted path (not leaf name) - `index_stats` → verify row count and index type - Filtered scan (`WHERE nested.field = value`) - Vector search via nested embedding column - FTS search via nested text column - `add` (append) then re-check index listing - `optimize` then re-check index listing **Both sync and async APIs** are covered in parallel test classes. ## Notes Lance forbids top-level field names that contain a literal `.`, so the `` `a.b` `` acceptance-criterion variant is exercised as a *struct leaf* field (`parent.`\``leaf.name`\``) rather than a top-level column. |
||
|
|
ae7f2cbfe8 |
feat(python): accept Expr in Table.delete and merge when_not_matched_by_source_delete (#3524)
Another little pain point as I was working to integrate with paperless-ngx. The read path of table.search() or table.query() already accepted an Expr, but write paths Table.delete and merge_insert(...).when_not_matched_by_source_delete did not. This PR attempts to close that gap, so writes and reads can both use Expr, instead of one side needing to build a string. |
||
|
|
4fb7c92e86 |
chore: update lance dependency to v8.0.0-beta.11 (#3533)
Updates Lance dependencies to v8.0.0-beta.11 and refreshes the Rust and Java lock/config files. This also adapts namespace external manifest store call sites to the new table-root-aware constructor required by Lance. Triggering tag: https://github.com/lancedb/lance/releases/tag/v8.0.0-beta.11 |
||
|
|
f03abc27e3 |
feat: expand IndexConfig with rich per-index metadata (#3497)
`IndexConfig` (returned by `Table::list_indices`) previously exposed only `name`, `index_type`, and `columns`. Lance's `describe_indices` provides richer per-index info cheaply (reads manifest metadata, often cached), so this surfaces it. Adds these `Option<T>` fields to `lancedb::index::IndexConfig`, populated in `NativeTable::list_indices` from the `IndexDescription`: - `index_uuid`: uuid of the first segment - `type_url`: protobuf type URL (`IndexDescription::type_url`) - `created_at`: minimum creation time across segments - `num_indexed_rows`: approximate rows indexed across segments - `num_unindexed_rows`: table row count minus `num_indexed_rows` - `size_bytes`: total size of index files across segments - `num_segments`: number of segments making up the index - `index_version`: on-disk index format version (first segment) - `index_details`: index-type-specific details as JSON This field set mirrors the lance-namespace `IndexContent` contract (lance-format/lance-namespace#348) so client and server agree on the same shape. Note these are populated **locally** via `describe_indices` — `NativeTable::list_indices` reads the dataset directly and does not depend on the namespace spec change. `RemoteTable` leaves the new fields `None` until a follow-up wires them through the server response (#3494). Bindings exposure will also be a follow up: #3495 Existing `list_indices` tests in `rust/lancedb/src/table.rs` are extended to assert the new fields. Fixes #3492 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
85d9c1ce63 |
feat: adds isin support to the 'Expr' builder (#3523)
The `Expr` build already includes a lot of useful filtering options, `eq, ne, gt/gte, lt/lte, and_, or_, contains, cast`, but is was missing a membership like `isin`. This PR adds that support, as minimally as possible, allowing easy filtering for membership in a list, without needing to be a series of `where` expressions. I didn't see anything in CONTRIBUTING.md about needing a feature request or issue first, so I just made the change. My apologies if I missed that somewhere. Thanks for the vector store, we're using it now in paperless-ngx. |
||
|
|
d786e39fdc |
chore(deps): bump the rust-minor-patch group across 1 directory with 7 updates (#3531)
Bumps the rust-minor-patch group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [log](https://github.com/rust-lang/log) | `0.4.31` | `0.4.32` | | [regex](https://github.com/rust-lang/regex) | `1.12.3` | `1.12.4` | | [chrono](https://github.com/chronotope/chrono) | `0.4.44` | `0.4.45` | | [serde_with](https://github.com/jonasbb/serde_with) | `3.20.0` | `3.21.0` | | [http](https://github.com/hyperium/http) | `1.4.1` | `1.4.2` | | [uuid](https://github.com/uuid-rs/uuid) | `1.23.2` | `1.23.3` | | [napi](https://github.com/napi-rs/napi-rs) | `3.9.0` | `3.9.1` | Updates `log` from 0.4.31 to 0.4.32 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/releases">log's releases</a>.</em></p> <blockquote> <h2>0.4.32</h2> <h2>What's Changed</h2> <ul> <li>Support <code>Value</code> -> string conversions with <code>kv</code> + <code>std</code> features instead of <code>kv_std</code> by <a href="https://github.com/tisonkun"><code>@tisonkun</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/729">rust-lang/log#729</a></li> <li>Prepare for 0.4.32 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/730">rust-lang/log#730</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.31...0.4.32">https://github.com/rust-lang/log/compare/0.4.31...0.4.32</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/blob/master/CHANGELOG.md">log's changelog</a>.</em></p> <blockquote> <h2>[0.4.32] - 2026-06-04</h2> <h3>What's Changed</h3> <ul> <li>Support <code>Value</code> -> string conversions with <code>kv</code> + <code>std</code> features instead of <code>kv_std</code> by <a href="https://github.com/tisonkun"><code>@tisonkun</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/729">rust-lang/log#729</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.31...0.4.32">https://github.com/rust-lang/log/compare/0.4.31...0.4.32</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/log/commit/a5b5b2113e2767801250af184d6c3971e689ae3b"><code>a5b5b21</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/730">#730</a> from rust-lang/cargo/0.4.32</li> <li><a href="https://github.com/rust-lang/log/commit/c8d3b125c6216b3667e05544591f4fb34f53ff78"><code>c8d3b12</code></a> prepare for 0.4.32 release</li> <li><a href="https://github.com/rust-lang/log/commit/ce6cd9fef14084207f2b6758999af062f89f9d87"><code>ce6cd9f</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/729">#729</a> from tisonkun/kv-std-support</li> <li><a href="https://github.com/rust-lang/log/commit/20b3b050469d6aab6c0f2e77acaab2313d5fc9a2"><code>20b3b05</code></a> drop cfg-feature=kv as it is already met</li> <li><a href="https://github.com/rust-lang/log/commit/7bc120062895aadd440ab015e62275841465a1a6"><code>7bc1200</code></a> kv::std_support may not need value-bag</li> <li>See full diff in <a href="https://github.com/rust-lang/log/compare/0.4.31...0.4.32">compare view</a></li> </ul> </details> <br /> Updates `regex` from 1.12.3 to 1.12.4 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's changelog</a>.</em></p> <blockquote> <h1>1.12.4 (2025-06-09)</h1> <p>This release includes a performance optimization for compilation of regexes with very large character classes.</p> <p>Improvements:</p> <ul> <li><a href="https://redirect.github.com/rust-lang/regex/pull/1308">#1308</a>: Avoid re-canonicalizing the entire interval set when pushing new class ranges.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/regex/commit/7b96fdc9d5fe6a0cb4efe30e6689b050493fc1e1"><code>7b96fdc</code></a> 1.12.4</li> <li><a href="https://github.com/rust-lang/regex/commit/7b89cf0534aa58ab8a4a6672e14a59b53f08eb2c"><code>7b89cf0</code></a> deps: update to regex-syntax 0.8.11</li> <li><a href="https://github.com/rust-lang/regex/commit/140167995737fa11dfe11b8af8b9aa143b790b4e"><code>1401679</code></a> regex-syntax-0.8.11</li> <li><a href="https://github.com/rust-lang/regex/commit/d7090000b3be51677d8e79c3b8bcc8a4d176bddc"><code>d709000</code></a> changelog: 1.12.4</li> <li><a href="https://github.com/rust-lang/regex/commit/9825c741c8ac1e61e8f78cebc12205cd35e4767f"><code>9825c74</code></a> syntax: avoid re-canonicalizing the entire IntervalSet on push (<a href="https://redirect.github.com/rust-lang/regex/issues/1308">#1308</a>)</li> <li><a href="https://github.com/rust-lang/regex/commit/a7f2ff6dbc43f40994d7c3d1d968ba4ac92329e1"><code>a7f2ff6</code></a> docs: clarify regex-lite word boundaries</li> <li><a href="https://github.com/rust-lang/regex/commit/2c7b17246da744bb2e1b911d3ddc1369fe3b472a"><code>2c7b172</code></a> docs: clarify unsupported Anchored::Pattern searches</li> <li><a href="https://github.com/rust-lang/regex/commit/839d16bc65b60e2006d3599d20bfa6efc14049d8"><code>839d16b</code></a> regex-syntax-0.8.10</li> <li><a href="https://github.com/rust-lang/regex/commit/c4865a0c8446a701e10b0fd987f19068f5dcc365"><code>c4865a0</code></a> syntax: fix negation handling in HIR translation</li> <li><a href="https://github.com/rust-lang/regex/commit/d8761c00ed25c5899e3dcfb0f17e827b8e41530a"><code>d8761c0</code></a> cargo: also include <code>benches</code></li> <li>Additional commits viewable in <a href="https://github.com/rust-lang/regex/compare/1.12.3...1.12.4">compare view</a></li> </ul> </details> <br /> Updates `chrono` from 0.4.44 to 0.4.45 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/chronotope/chrono/releases">chrono's releases</a>.</em></p> <blockquote> <h2>0.4.45</h2> <h2>What's Changed</h2> <ul> <li>fix(tz): reject TZ offset hour of 24 to avoid FixedOffset overflow by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/chronotope/chrono/pull/1787">chronotope/chrono#1787</a></li> <li>tz_data: fix tzdata locations on Android by <a href="https://github.com/caruschalalamove"><code>@caruschalalamove</code></a> in <a href="https://redirect.github.com/chronotope/chrono/pull/1789">chronotope/chrono#1789</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/chronotope/chrono/commit/170338250e836976a211e64728ec956e45e78a39"><code>1703382</code></a> Prepare 0.4.45 release</li> <li><a href="https://github.com/chronotope/chrono/commit/881f9ab2f7068c98173cce86ce1a3642848ce98a"><code>881f9ab</code></a> tz_data: fix tzdata locations on Android</li> <li><a href="https://github.com/chronotope/chrono/commit/f14ead46c0feeed8d5b2471c7a55069fbc822d01"><code>f14ead4</code></a> fix(tz): reject TZ offset hour of 24 to avoid FixedOffset overflow</li> <li><a href="https://github.com/chronotope/chrono/commit/c6063e6f5a03a48c6feeac3eb5b51ab4cb902759"><code>c6063e6</code></a> Update similar-asserts requirement from 1.6.1 to 2.0.0</li> <li><a href="https://github.com/chronotope/chrono/commit/120686c82c5da90377e815edb82c9a80b6b4f2be"><code>120686c</code></a> Bump codecov/codecov-action from 5 to 6</li> <li>See full diff in <a href="https://github.com/chronotope/chrono/compare/v0.4.44...v0.4.45">compare view</a></li> </ul> </details> <br /> Updates `serde_with` from 3.20.0 to 3.21.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/jonasbb/serde_with/releases">serde_with's releases</a>.</em></p> <blockquote> <h2>serde_with v3.21.0</h2> <h3>Security</h3> <ul> <li> <p><a href="https://github.com/jonasbb/serde_with/security/advisories/GHSA-7gcf-g7xr-8hxj">GHSA-7gcf-g7xr-8hxj</a>: KeyValueMap serialization panics on empty sequence or map entries Bad or attacker controlled values could cause a panic while allocating too large values. Fixed in <a href="https://redirect.github.com/jonasbb/serde_with/issues/966">#966</a> by setting a maximum allocation size during the creation of collections like <code>Vec</code> or sets.</p> <p>Thanks to <a href="https://github.com/7thParkk"><code>@7thParkk</code></a> for reporting the issue.</p> </li> </ul> <h3>Added</h3> <ul> <li>Add <code>NoneAsZero</code> adapter that maps <code>Option<NonZero*></code> to a plain integer, encoding <code>None</code> as <code>0</code> by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> (<a href="https://redirect.github.com/jonasbb/serde_with/issues/486">#486</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Re-enable link-to-definition on docs.rs (<a href="https://redirect.github.com/jonasbb/serde_with/issues/964">#964</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Fix some doc links to point to the correct types (<a href="https://redirect.github.com/jonasbb/serde_with/issues/963">#963</a>)</li> <li>Re-enable <code>unused_qualifications</code> and fix the resulting findings by <a href="https://github.com/lms0806"><code>@lms0806</code></a> (<a href="https://redirect.github.com/jonasbb/serde_with/issues/962">#962</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jonasbb/serde_with/commit/0f4ca67e1f8fc4679e850f3a566d454fb30953c1"><code>0f4ca67</code></a> Update changelog for 3.21.0 (<a href="https://redirect.github.com/jonasbb/serde_with/issues/967">#967</a>)</li> <li><a href="https://github.com/jonasbb/serde_with/commit/7654841be1d1702a65afc0f839c67c36563c8188"><code>7654841</code></a> Update changelog for 3.21.0</li> <li><a href="https://github.com/jonasbb/serde_with/commit/c8a1d820ea25df01692b367058d587343e199389"><code>c8a1d82</code></a> Protect all collection creations against capacity overflow by using `size_hin...</li> <li><a href="https://github.com/jonasbb/serde_with/commit/6ad5fa5b474270f50016b4cc983e37f25f097ba4"><code>6ad5fa5</code></a> Properly feature gate the <code>vec_with_capacity_cautious</code> function</li> <li><a href="https://github.com/jonasbb/serde_with/commit/ef7d1417e3eacd0077f029763109368ee05c1c22"><code>ef7d141</code></a> Protect all collection creations against capacity overflow by using `size_hin...</li> <li><a href="https://github.com/jonasbb/serde_with/commit/a348da35fe808852a1b7e6fa890b425ad001d3f1"><code>a348da3</code></a> Add serde_as deserialize_as explain (<a href="https://redirect.github.com/jonasbb/serde_with/issues/958">#958</a>)</li> <li><a href="https://github.com/jonasbb/serde_with/commit/2e5bc20e29e1d42eb9c85ab503964130eb1ea62e"><code>2e5bc20</code></a> Bump the github-actions group with 3 updates (<a href="https://redirect.github.com/jonasbb/serde_with/issues/965">#965</a>)</li> <li><a href="https://github.com/jonasbb/serde_with/commit/927a3d69c3cecdf415f7d7662a0521894d313261"><code>927a3d6</code></a> Bump the github-actions group with 3 updates</li> <li><a href="https://github.com/jonasbb/serde_with/commit/62d14ec637834259e0fab59ea84b87ca329e81c1"><code>62d14ec</code></a> Enable link-to-definition on docs.rs again, after the upstream issue was reso...</li> <li><a href="https://github.com/jonasbb/serde_with/commit/4584d94f685b66b96bdcf07bffe76e5df0819ea2"><code>4584d94</code></a> Enable link-to-definition on docs.rs again, after the upstream issue was reso...</li> <li>Additional commits viewable in <a href="https://github.com/jonasbb/serde_with/compare/v3.20.0...v3.21.0">compare view</a></li> </ul> </details> <br /> Updates `http` from 1.4.1 to 1.4.2 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/hyperium/http/blob/master/CHANGELOG.md">http's changelog</a>.</em></p> <blockquote> <h1>1.4.2 (June 8, 2026)</h1> <ul> <li>Fix <code>uri::Builder</code> to allow <code>"*"</code> as the path when scheme and authority are also set, used in HTTP/2 requests.</li> <li>Fix <code>Uri</code> to properly reject <code>DEL</code> characters.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/hyperium/http/commit/82db5b8af1e3939678fee88f3c57b72fee7e3a7b"><code>82db5b8</code></a> v1.4.2</li> <li><a href="https://github.com/hyperium/http/commit/a9cdbf8aaf87198020389ba14f92d9784740c91c"><code>a9cdbf8</code></a> fix(uri): reject DEL character (<a href="https://redirect.github.com/hyperium/http/issues/842">#842</a>)</li> <li><a href="https://github.com/hyperium/http/commit/df75ca3ffe2821df665aa0962d62312691942b11"><code>df75ca3</code></a> fix(uri): allow STAR paths with scheme/auth (<a href="https://redirect.github.com/hyperium/http/issues/843">#843</a>)</li> <li><a href="https://github.com/hyperium/http/commit/ec3f8ce1bb571223d5e738c6dd7a749670f821dc"><code>ec3f8ce</code></a> feat(method): impl PartialOrd + Ord (<a href="https://redirect.github.com/hyperium/http/issues/840">#840</a>)</li> <li>See full diff in <a href="https://github.com/hyperium/http/compare/v1.4.1...v1.4.2">compare view</a></li> </ul> </details> <br /> Updates `uuid` from 1.23.2 to 1.23.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p> <blockquote> <h2>v1.23.3</h2> <h2>What's Changed</h2> <ul> <li>Fix up parser panic on empty input by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/886">uuid-rs/uuid#886</a></li> <li>Prepare for 1.23.3 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/887">uuid-rs/uuid#887</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.23.2...v1.23.3">https://github.com/uuid-rs/uuid/compare/v1.23.2...v1.23.3</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/uuid-rs/uuid/commit/20da78b1813319c8017d107089caec1ff9d6b1a8"><code>20da78b</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/887">#887</a> from uuid-rs/cargo/v1.23.3</li> <li><a href="https://github.com/uuid-rs/uuid/commit/62232ca120b1b09eea5979ca966e9669705e8841"><code>62232ca</code></a> prepare for 1.23.3 release</li> <li><a href="https://github.com/uuid-rs/uuid/commit/2320c6a0335cfddaec4df58d1a7fe410070ab9e9"><code>2320c6a</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/886">#886</a> from uuid-rs/fix/parser-panics</li> <li><a href="https://github.com/uuid-rs/uuid/commit/2d034d41a518b0a103e96d47e04690f6644de487"><code>2d034d4</code></a> fix some invalid indexers on error reporting</li> <li><a href="https://github.com/uuid-rs/uuid/commit/a8b9f142678d9640ba6dc80c5e2d69635d4dd62f"><code>a8b9f14</code></a> update fuzz infra and run in CI</li> <li>See full diff in <a href="https://github.com/uuid-rs/uuid/compare/v1.23.2...v1.23.3">compare view</a></li> </ul> </details> <br /> Updates `napi` from 3.9.0 to 3.9.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/napi-rs/napi-rs/releases">napi's releases</a>.</em></p> <blockquote> <h2>napi-v3.9.1</h2> <h3>Fixed</h3> <ul> <li><em>(napi)</em> unify Reference finalize callbacks on Arc (Rc/Arc type confusion) (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3313">#3313</a>)</li> <li><em>(napi)</em> zero-copy external strings, fix WASI double-free (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3308">#3308</a>)</li> <li><em>(napi)</em> experimental node_api_create_object_with_properties (<a href="https://redirect.github.com/napi-rs/napi-rs/pull/3304">#3304</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/napi-rs/napi-rs/commit/dea608eae7481a47d64aab563a2ab5cdd8eda03c"><code>dea608e</code></a> chore: release (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3306">#3306</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/670e5d319506beb9b7f37683d75b9b4e0edba253"><code>670e5d3</code></a> chore(release): publish</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/a9abc6166c7206d0e700910428335a3316408dae"><code>a9abc61</code></a> fix(sys): restore napi_create_object_with_properties as compat alias (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3321">#3321</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/3e5a09f2497a2b35130f7d7acd3df719cd64820b"><code>3e5a09f</code></a> chore(deps): update release-plz/action action to v0.5.130 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3320">#3320</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/09c9d97ec14dd651b4628bdfa5952355ebf9e6f5"><code>09c9d97</code></a> ci: fix Electron install on Node 24.16+/26, add Node 26 to matrix (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3319">#3319</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/ed5b5ab8f1c073bbcf2c9ae7fc3240fbcf3feb30"><code>ed5b5ab</code></a> fix(napi): unify Reference finalize callbacks on Arc (Rc/Arc type confusion) ...</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/ad7b1c8fbfd6a56a7e28390ae9820fbd1b3ed70a"><code>ad7b1c8</code></a> chore(deps): lock file maintenance (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3318">#3318</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/718eb1fceb6c73419a99b703574300c23e30a24d"><code>718eb1f</code></a> chore(deps): lock file maintenance (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3310">#3310</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/2938a9e46d5fa2d7bcfeb3c63d0b6cf9f3f4ef31"><code>2938a9e</code></a> fix(deps): update dependency <code>@emnapi/core</code> to v1.11.0 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3316">#3316</a>)</li> <li><a href="https://github.com/napi-rs/napi-rs/commit/31b38d45a6d829b62f683573d6f2af613bf3505b"><code>31b38d4</code></a> fix(deps): update dependency <code>@emnapi/runtime</code> to v1.11.0 (<a href="https://redirect.github.com/napi-rs/napi-rs/issues/3317">#3317</a>)</li> <li>Additional commits viewable in <a href="https://github.com/napi-rs/napi-rs/compare/napi-v3.9.0...napi-v3.9.1">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
8373318e89 |
feat: support FM-Index scalar index for substring search (#3532)
Adds an FM-Index — a scalar index over string and binary columns that
accelerates substring search (`contains(col, 'needle')`), distinct from
the tokenized `FTS` index — across the Rust core and the Python and
TypeScript bindings.
## Rust
- `Index::Fm(FmIndexBuilder)` and `IndexType::Fm`.
- `make_index_params` maps `Index::Fm` to Lance's
`ScalarIndexParams::for_builtin(BuiltinIndexType::Fm)`.
- `supported_fm_data_type` validates
`Utf8`/`LargeUtf8`/`Binary`/`LargeBinary` columns.
- `list_indices` round-trips the type (`"Fm"` → `IndexType::Fm`); the
remote wire type is `"FM"`.
## Python
Adds `lancedb.index.Fm`, accepted by `create_index`:
```python
from lancedb.index import Fm
await tbl.create_index("text", config=Fm())
```
## TypeScript
Adds the `Index.fm()` factory:
```ts
await tbl.createIndex("text", { config: Index.fm() });
```
|
||
|
|
8308cca05e |
chore: update lance dependency to v8.0.0-beta.9 (#3527)
Updates Lance dependencies to v8.0.0-beta.9. Includes the required Rust compatibility fix for Lance's updated vector index UUID API. Triggering tag: https://github.com/lancedb/lance/releases/tag/v8.0.0-beta.9 |
||
|
|
566b67a634 |
fix: support LargeList label list indexes (#3529)
## Summary This PR extends nested-field regression coverage across Rust local/remote, Python sync/async, and Node so canonical escaped paths stay consistent across scalar, vector, and FTS index lifecycle behavior. It also aligns LanceDB's LabelList type gate with Lance by accepting `LargeList<primitive>` columns while keeping `List<Struct<...>>` unsupported until Lance defines stable membership semantics for struct labels. Part of #3406. |
||
|
|
9c12fb6437 |
fix(nodejs): treat NAPI_RS_FORCE_WASI as truthy only when set to 'true' (#3519)
## Summary Fixes the `NAPI_RS_FORCE_WASI=false` issue by upgrading `@napi-rs/cli` from `3.5.1` to `3.7.0`. Closes #3267 ## Root Cause In the `native.js` loader generated by `napi build`, the check was: ```js if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { ``` In JavaScript, any non-empty string is truthy, so `NAPI_RS_FORCE_WASI=false` (a non-empty string) inadvertently triggered the WASI fallback path. This caused an `ENOENT` error when `lancedb.wasi.cjs` was not present. ## Fix `@napi-rs/cli@3.7.0` ([napi-rs/napi-rs#3236](https://github.com/napi-rs/napi-rs/pull/3236)) introduced a tri-state check in the template that generates `native.js`: **Before (generated by @napi-rs/cli@3.5.1):** ```js if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { ``` **After (generated by @napi-rs/cli@3.7.0):** ```js const forceWasi = process.env.NAPI_RS_FORCE_WASI === 'true' || process.env.NAPI_RS_FORCE_WASI === 'error' if (!nativeBinding || forceWasi) { ``` Only the literal string `'true'` (or `'error'` for strict mode) now activates the WASI path. All other values, including `'false'`, `'0'`, or an unset variable, behave as if WASI is not forced. ## Changes - `nodejs/package.json`: bump `@napi-rs/cli` from `3.5.1` to `3.7.0` - `nodejs/package-lock.json` / `nodejs/pnpm-lock.yaml`: update lock files to match The fix is in the upstream napi-rs tool; the generated `native.js` is not committed to this repository and is produced at build time by `napi build`. |
||
|
|
f260d3bf12 |
fix(util): convert numpy scalars in value_to_sql (#3522)
## What's broken
`Table.update(values={...})` raises `NotImplementedError: SQL conversion
is not implemented for this type` when a value is a numpy scalar such as
`np.int64`, `np.int32`, `np.float32`, or `np.bool_`. These arise
naturally from indexing an ndarray or a pandas int/bool column.
`np.float64` happens to work (it subclasses `float`), which makes the
failure inconsistent and surprising.
```python
df = pd.DataFrame({"id": np.array([10, 20], dtype="int32")})
t.update(where="id = 1", values={"id": df["id"].iloc[0]}) # np.int32
# -> NotImplementedError: SQL conversion is not implemented for this type
```
## Why it happens
`value_to_sql` is a `singledispatch` with handlers only for native
Python types and `np.ndarray`; numpy `integer`/`floating`/`bool_`
scalars aren't Python subclasses, so they fall through to the
`NotImplementedError` base.
## Fix
Register handlers for `np.bool_`, `np.integer`, and `np.floating` that
delegate to the existing native handlers.
## Test
`value_to_sql` on `np.int32/int64/float32/float64/bool_` all convert;
`np.int32` raised before.
Co-authored-by: Ishaan Samantray <ishaansamantray@Ishaans-MacBook-Pro.local>
|
||
|
|
d9018067b3 |
feat: support checking out a version on a branch (#3504)
### Description Stacked on #3490. Adds an optional version to branch checkout across the Rust core and the Python and TypeScript SDKs, so you can open a specific version on a branch ("version V of branch B"), not just the branch's latest version Rust ```rust // Open version 3 of branch "exp" (a read-only view): check out from an // existing table, or open it directly from the connection. let exp_v3 = table.checkout_branch("exp", Some(3)).await?; let exp_v3 = db.open_table("items").branch("exp").version(3).execute().await?; // checkout_latest re-attaches to the branch's writable HEAD. exp_v3.checkout_latest().await?; // With no branch, a version opens main at that version. let main_v3 = db.open_table("items").version(3).execute().await?; ``` Python ```python # Open version 3 of branch "exp" (a read-only view): check out from an # existing table, or open it directly from the connection. branch_v3 = await table.branches.checkout("exp", version=3) branch_v3 = await db.open_table("items", branch="exp", version=3) # checkout_latest re-attaches to the branch's writable HEAD. await branch_v3.checkout_latest() # With no branch, a version opens main at that version. main_v3 = await db.open_table("items", version=3) ``` TypeScript ```typescript // Open version 3 of branch "exp" (a read-only view): check out from an // existing table, or open it directly from the connection. const branchV3 = await (await table.branches()).checkout("exp", 3); const opened = await db.openTable("items", undefined, { branch: "exp", version: 3 }); // checkoutLatest re-attaches to the branch's writable HEAD. await branchV3.checkoutLatest(); // With no branch, a version opens main at that version. const mainV3 = await db.openTable("items", undefined, { version: 3 }); ``` ### Testing - Added unit tests (Rust, Python sync + async, TypeScript): branch-scoped resolution at a version number shared with `main` and with another branch, read-only enforcement on a pinned handle, `checkout_latest` recovery to the branch's HEAD, fork-point reads, and the nonexistent-version/branch error paths. - Ran smoke tests against the Python and TypeScript SDKs on local machine. |
||
|
|
53517b3aaa |
feat: add table branch support (#3490)
### Description
Adds first-class support for table branches across the Rust core and the
Python and TypeScript SDKs.
Rust
```rust
use lance::dataset::refs::Ref;
// Create a branch from main and write to it — main is untouched.
let exp = table.create_branch("exp", Ref::Version(None, None)).await?;
exp.add(batches).await?;
// Reopen the branch later: check out from a table, or open it directly.
let exp = table.checkout_branch("exp").await?;
let exp = db.open_table("items").branch("exp").execute().await?;
let branches = table.list_branches().await?;
table.delete_branch("exp").await?;
```
Python
```python
# Create a branch from main and write to it
branch = await table.branches.create("exp", from_ref="main")
await branch.add(data)
# Reopen the branch later: check out from a table, or open it directly.
branch = await table.branches.checkout("exp")
branch = await db.open_table("items", branch="exp")
await table.branches.list()
await table.branches.delete("exp")
```
TypeScript
```typescript
const branches = await table.branches();
// Create a branch from main and write to it
const branch = await branches.create("exp");
await branch.add(data);
// Reopen the branch later: check out from a table, or open it directly.
const checkedOut = await branches.checkout("exp");
const opened = await db.openTable("items", undefined, { branch: "exp" });
await branches.list();
await branches.delete("exp");
```
### Testing
- Added unit tests
- ran smoke tests against python and typescript sdks on local machine
### Next steps
- Add RemoteTable support
- Add Branch Comparison support
- Merge Branching support
|
||
|
|
3e25f584eb |
fix(python): push down namespace full reads (#3516)
## Bug Fix ### What is the bug? Namespace-backed `LanceTable.to_arrow()` full-table reads bypassed the existing `QueryTable` server-side query path and called the lower-level table `to_arrow()` implementation directly. In Geneva/Sophon this could fail while parsing the Arrow IPC response for `hist.get_table().to_arrow()` / `to_pandas()`, even though `hist.get_table().search().to_arrow()` worked. ### What issues or incorrect behavior does the bug cause? Full-table reads on namespace-backed tables with `QueryTable` pushdown could fail with Arrow IPC parse errors, while query/search reads on the same table succeeded. Since `to_pandas()` delegates through `to_arrow()` for non-blob/native cases, pandas export was affected too. ### How does this PR fix the problem? When `QueryTable` pushdown is enabled, sync and async table `to_arrow()` now construct a plain no-filter, no-limit, all-columns query and execute it through the table-level `_execute_query()` path. `AsyncTable` now preserves namespace context from async namespace connections so async full reads can make the same pushdown decision. Non-namespace tables and namespace tables without `QueryTable` pushdown keep their existing behavior. ### Tests - `uv run --extra tests --extra dev --no-sync ruff check python/lancedb/table.py python/lancedb/namespace.py python/tests/test_namespace.py` - `uv run --extra tests --extra dev --no-sync ruff format python/lancedb/table.py python/lancedb/namespace.py python/tests/test_namespace.py` - `uv run --extra tests --extra dev --no-sync pytest python/tests/test_namespace.py::TestPushdownOperations::test_lance_table_to_arrow_uses_query_pushdown python/tests/test_namespace.py::TestAsyncPushdownOperations::test_async_table_to_arrow_uses_query_pushdown python/tests/test_namespace.py::test_local_table_to_arrow_and_to_pandas_are_unchanged -q` - `uv run --extra tests --extra dev --no-sync pytest python/tests/test_namespace.py -q` |
||
|
|
59fbfd4158 |
chore: update lance dependency to v8.0.0-beta.6 (#3510)
Updates LanceDB Lance dependencies from v8.0.0-beta.5 to v8.0.0-beta.6 and refreshes Cargo metadata. No compatibility fixes were required; Java lance-core was bumped to 8.0.0-beta.6 as well. Lance tag: https://github.com/lance-format/lance/releases/tag/v8.0.0-beta.6 |
||
|
|
f37e698e2f |
chore: update lance dependency to v8.0.0-beta.5 (#3508)
Updates Lance dependencies from v8.0.0-beta.4 to v8.0.0-beta.5 across the Rust workspace and Java lance-core version. No compatibility code changes were required; clippy and rustfmt pass after installing the missing runner components. Lance tag: https://github.com/lance-format/lance/releases/tag/v8.0.0-beta.5 |
||
|
|
09b1bbc12a |
refactor!: drop unused loss field from IndexStatistics (#3496)
BREAKING CHANGE: direct Rust users lose the `IndexStatistics::loss` field. Python and Node.js consumers are unaffected in practice for remote tables (the value was always `None`/absent), but the attribute is gone for local tables too. `IndexStatistics::loss` was local-only — LanceDB Cloud never returned it, so `RemoteTable::index_stats` always set `loss: None`. It's vestigial; this removes it. - Remove `loss` from `IndexStatistics` and the internal `IndexMetadata` in `rust/lancedb/src/index.rs`, plus the summing logic in `NativeTable::index_stats`. - Drop `loss` from the Python and Node.js bindings (and their tests/docs). Fixes #3493 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
c484b24e51 |
chore: update lance dependency to v8.0.0-beta.4 (#3507)
Updates LanceDB Lance dependencies to Lance v8.0.0-beta.4. Includes the required compatibility fix for the new Lance file writer finish summary API. Lance tag: https://github.com/lance-format/lance/releases/tag/v8.0.0-beta.4 |
||
|
|
3868965413 |
fix(python): run AsyncTable.search embeddings on a dedicated executor (#3459)
## Summary `AsyncTable.search()` computes the query embedding with `loop.run_in_executor(None, ...)`, which uses asyncio's **default** `ThreadPoolExecutor`. That pool is shared with all other `run_in_executor(None, ...)` work, so a slow embedding call — a heavy local model or an HTTP request to an embeddings API — ties up those threads and starves unrelated async I/O under concurrent load. This moves the (potentially blocking) embedding call onto a **dedicated executor**, isolating it from the default pool. Closes #3310. ## Problem `python/lancedb/table.py`, `AsyncTable.search()`: ```python return ( await loop.run_in_executor( None, # asyncio's default executor, shared with other blocking I/O embedding.function.compute_query_embeddings_with_retry, query, ) )[0] ``` Under load, concurrent searches whose embeddings block (or any other code using the default executor) contend for the same small thread pool. ## Change - Add a dedicated `ThreadPoolExecutor(thread_name_prefix="lancedb-embedding")` in `background_loop.py`, exposed via `embedding_executor()`. - Use it in `AsyncTable.search()`'s `make_embedding` instead of the default executor. - Reset the executor in the existing `_reset_after_fork` hook — its worker threads don't survive `fork()`, same as the background event loop. It's recreated lazily, so this is cheap. ## Design notes The issue asked whether maintainers preferred a configurable executor, a dedicated internal one, or another approach (no response in the thread). I went with a **dedicated internal executor**: it fixes the starvation with no public API change and stays consistent with the existing `LOOP` singleton. Making the pool size configurable would be an easy follow-up if preferred. Scope is limited to `search()`. The broader "embedding functions need real async support" (including `add()`) is tracked separately in #3268. ## Testing - Added `test_async_search_runs_embedding_on_dedicated_executor`: patches the embedding function to record the executing thread during an async search and asserts it runs on a `lancedb-embedding` thread. Verified it **fails** against the previous `run_in_executor(None, ...)` and passes with the fix. - `ruff format`, `ruff check`, and `pyright` pass on the changed files. |
||
|
|
c13ebc6796 |
feat(remote): implement set/unset_lsm_write_spec REST variant (#3501)
## Summary Wires `RemoteTable::set_lsm_write_spec` / `unset_lsm_write_spec` to the sophon REST endpoints added in [lancedb/sophon#6181](https://github.com/lancedb/sophon/pull/6181), replacing the previous `NotSupported` stubs. - `set_lsm_write_spec` maps the `LsmWriteSpec` onto sophon's request DTO — mode-tagged `sharding` (`unsharded` / `bucket` / `identity`), `maintained_indexes`, and `writer_config_defaults` — and POSTs to `/v1/table/{name}/set_lsm_write_spec/`. - `unset_lsm_write_spec` POSTs to `/v1/table/{name}/unset_lsm_write_spec/`. - Both call `check_mutable` first, matching the other remote mutations. - `maintained_indexes` is sent verbatim (an empty list means "no maintained indexes", matching native semantics). ## Testing - Added mocked-endpoint unit tests for unsharded / bucket / identity set and for unset. - `cargo check --features remote --tests` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
4b287fd9c4 |
chore: update lance dependency to v8.0.0-beta.2 (#3500)
Updates Lance dependencies to v8.0.0-beta.2 across the Rust workspace and Java lance-core metadata. The update was generated with ci/update_lance_dependency.py and required no compatibility code changes. Lance tag: https://github.com/lance-format/lance/releases/tag/v8.0.0-beta.2 ## ⛔ Merge blocker: legal review required This bump pulls in a new transitive **dev/profiling** dependency chain `inferno v0.11.21` → `pprof v0.15.0` → `lance-testing`, and `inferno` is licensed **CDDL-1.0** (copyleft). To get `cargo-deny` green, `CDDL-1.0` was added to the `deny.toml` allow list. **Do not merge until legal has reviewed and signed off on allowing CDDL-1.0.** The dependency is dev/test-only and not distributed, but the allow-list addition still requires legal approval per our policy. --------- Co-authored-by: Daniel Rammer <hamersaw@protonmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
64194ea8ad |
fix(python): make LanceDBClientError pickleable (#3470)
## Summary - Add `__reduce__` methods to `LanceDBClientError` and `RetryError` so that instances can be pickled and unpickled correctly - `HttpError` inherits the fix from `LanceDBClientError` since it has no additional `__init__` parameters - Add tests verifying pickle roundtrip for all three exception classes Fixes #3447 ## Test plan - [x] Verified pickle roundtrip for `LanceDBClientError` with and without `status_code` - [x] Verified pickle roundtrip for `HttpError` (subclass, no extra init params) - [x] Verified pickle roundtrip for `RetryError` (subclass with many extra params) - [ ] CI tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Will Jones <willjones127@gmail.com> |
||
|
|
e6c5de1a58 |
chore(deps): bump the rust-minor-patch group with 3 updates (#3499)
Bumps the rust-minor-patch group with 3 updates: [log](https://github.com/rust-lang/log), [test-log](https://github.com/d-e-s-o/test-log) and [serial_test](https://github.com/palfrey/serial_test). Updates `log` from 0.4.30 to 0.4.31 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/releases">log's releases</a>.</em></p> <blockquote> <h2>0.4.31</h2> <h2>What's Changed</h2> <ul> <li>fix typos in kv compile errors and log documentation by <a href="https://github.com/Isvane"><code>@Isvane</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/726">rust-lang/log#726</a></li> <li>Leverage static str key when possible by <a href="https://github.com/tisonkun"><code>@tisonkun</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/727">rust-lang/log#727</a></li> <li>Prepare for 0.4.31 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/728">rust-lang/log#728</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Isvane"><code>@Isvane</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/726">rust-lang/log#726</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.30...0.4.31">https://github.com/rust-lang/log/compare/0.4.30...0.4.31</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/blob/master/CHANGELOG.md">log's changelog</a>.</em></p> <blockquote> <h2>[0.4.31] - 2026-06-02</h2> <h2>What's Changed</h2> <ul> <li>Leverage static str key when possible by <a href="https://github.com/tisonkun"><code>@tisonkun</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/727">rust-lang/log#727</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Isvane"><code>@Isvane</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/726">rust-lang/log#726</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.30...0.4.31">https://github.com/rust-lang/log/compare/0.4.30...0.4.31</a></p> <h2>[Unreleased]</h2> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/log/commit/580839288e5f2babc17e6c36f7d56e60082a47ef"><code>5808392</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/728">#728</a> from rust-lang/cargo/0.4.31</li> <li><a href="https://github.com/rust-lang/log/commit/86d739f51a9c59a3cb66a79e695639e6fb41465b"><code>86d739f</code></a> prepare for 0.4.31 release</li> <li><a href="https://github.com/rust-lang/log/commit/c906cfb02e351b59cfe35c0f0be22093086aabb1"><code>c906cfb</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/727">#727</a> from tisonkun/leverage-static-str-key-when-possible</li> <li><a href="https://github.com/rust-lang/log/commit/756c279649f79ce0ef8dccf952c5df4017791d1c"><code>756c279</code></a> leverage str literal as well</li> <li><a href="https://github.com/rust-lang/log/commit/3dd250d1537fd7e5974e0802b1025cc3e4561503"><code>3dd250d</code></a> rename Key::from_static_str to from_str_static</li> <li><a href="https://github.com/rust-lang/log/commit/db145979e229549215300f2696fa89b215cb1cab"><code>db14597</code></a> Leverage static str key when possible</li> <li><a href="https://github.com/rust-lang/log/commit/761461a5d0c8ea3d483d79b1de0205c2897318d2"><code>761461a</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/726">#726</a> from Isvane/fix/typos</li> <li><a href="https://github.com/rust-lang/log/commit/48ce372edd343179cb9f4837381bf34c7679db3e"><code>48ce372</code></a> fix typos in kv compile errors and log documentation</li> <li>See full diff in <a href="https://github.com/rust-lang/log/compare/0.4.30...0.4.31">compare view</a></li> </ul> </details> <br /> Updates `test-log` from 0.2.20 to 0.2.21 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/d-e-s-o/test-log/releases">test-log's releases</a>.</em></p> <blockquote> <h2>v0.2.21</h2> <ul> <li>Fixed spans in generated code, improving <code>rust-analyzer</code> interaction</li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/jorendorff"><code>@jorendorff</code></a> made their first contribution in <a href="https://redirect.github.com/d-e-s-o/test-log/pull/68">d-e-s-o/test-log#68</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/d-e-s-o/test-log/compare/v0.2.20...v0.2.21">https://github.com/d-e-s-o/test-log/compare/v0.2.20...v0.2.21</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/d-e-s-o/test-log/blob/main/CHANGELOG.md">test-log's changelog</a>.</em></p> <blockquote> <h2>0.2.21</h2> <ul> <li>Fixed spans in generated code, improving <code>rust-analyzer</code> interaction</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/d-e-s-o/test-log/commit/b7b9da034578877997e0cbfb59ea11507e0a3da8"><code>b7b9da0</code></a> Bump version to 0.2.21</li> <li><a href="https://github.com/d-e-s-o/test-log/commit/db522dc408e1ac6f04b2d0c89dda7e4b48be0584"><code>db522dc</code></a> Add CHANGELOG entry for <a href="https://redirect.github.com/d-e-s-o/test-log/issues/68">#68</a></li> <li><a href="https://github.com/d-e-s-o/test-log/commit/5e996d9ac66882e6258d1d86df91417336436d14"><code>5e996d9</code></a> Wrap the injected init code, not the original test body</li> <li><a href="https://github.com/d-e-s-o/test-log/commit/c78563c1ca76720571dc5ffe731217adc7e781ed"><code>c78563c</code></a> Retain existing spans for test code</li> <li>See full diff in <a href="https://github.com/d-e-s-o/test-log/compare/v0.2.20...v0.2.21">compare view</a></li> </ul> </details> <br /> Updates `serial_test` from 3.4.0 to 3.5.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/palfrey/serial_test/releases">serial_test's releases</a>.</em></p> <blockquote> <h2>v3.5.0</h2> <h2>What's Changed</h2> <ul> <li>Replace scc/sdd with std::sync::Mutex for Miri strict provenance compatibility by <a href="https://github.com/justanotheranonymoususer"><code>@justanotheranonymoususer</code></a> in <a href="https://redirect.github.com/palfrey/serial_test/pull/157">palfrey/serial_test#157</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/justanotheranonymoususer"><code>@justanotheranonymoususer</code></a> made their first contribution in <a href="https://redirect.github.com/palfrey/serial_test/pull/157">palfrey/serial_test#157</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/palfrey/serial_test/compare/v3.4.0...v3.5.0">https://github.com/palfrey/serial_test/compare/v3.4.0...v3.5.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/palfrey/serial_test/commit/6181f64de942180231fdb9098dd0894bbd9e7472"><code>6181f64</code></a> 3.5.0</li> <li><a href="https://github.com/palfrey/serial_test/commit/480bead2f697707cd2e61214287d5f0b8518d44d"><code>480bead</code></a> Merge pull request <a href="https://redirect.github.com/palfrey/serial_test/issues/157">#157</a> from justanotheranonymoususer/remove-scc-dep</li> <li><a href="https://github.com/palfrey/serial_test/commit/e03019e3cdc79b65daeaa913c99376aed69d4101"><code>e03019e</code></a> Update ci.yml</li> <li><a href="https://github.com/palfrey/serial_test/commit/820c0f3de967d55c52c59cac9ae55345511bf468"><code>820c0f3</code></a> Update ci.yml</li> <li><a href="https://github.com/palfrey/serial_test/commit/62a89b055fb923159c428269c5be999509344cb1"><code>62a89b0</code></a> Only skip file_lock with filesystem access</li> <li><a href="https://github.com/palfrey/serial_test/commit/5ff550164ed6f149fc80230faa8d5b5ded234190"><code>5ff5501</code></a> Update ci.yml</li> <li><a href="https://github.com/palfrey/serial_test/commit/0bd996de9eb044293e149095465701175309942e"><code>0bd996d</code></a> Let's try --all-features</li> <li><a href="https://github.com/palfrey/serial_test/commit/338e4ed891a095e2bfda01572c150449e5f26e73"><code>338e4ed</code></a> Fix formatting</li> <li><a href="https://github.com/palfrey/serial_test/commit/a55cde5d1d1572db2a8e5930d361d95df9796ea0"><code>a55cde5</code></a> Cleanup code_lock.rs</li> <li><a href="https://github.com/palfrey/serial_test/commit/9ad7a8f18c9a598109df5197214669e8680ccb96"><code>9ad7a8f</code></a> Remove unnecessary test leftover changes</li> <li>Additional commits viewable in <a href="https://github.com/palfrey/serial_test/compare/v3.4.0...v3.5.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
39a9f3e1e9 | Bump version: 0.30.1-beta.1 → 0.30.1-beta.2 | ||
|
|
952055d428 | Bump version: 0.33.1-beta.1 → 0.33.1-beta.2 python-v0.33.1-beta.2 | ||
|
|
927ba2c948 |
fix(python): route blob query pandas through scanner (#3491)
## Bug Fix ### What is the bug? `QueryBuilder.to_pandas(blob_mode="descriptions")` could still fall back to `self.to_arrow()` for query outputs with blob columns. Custom query subclasses or wrappers can have `to_arrow()` behavior that is not compatible with pandas blob-description conversion, which can surface as low-level Arrow/list-batch conversion failures. ### What issues or incorrect behavior does the bug cause? Callers need to carry local `to_pandas` or plain-scan adapter special casing for blob descriptions, and scanner-only kwargs such as row addresses and fragment selection are not represented in LanceDB query state. ### How does this PR fix the problem? This PR routes blob-output query `to_pandas()` through the Lance scanner path for `lazy`, `bytes`, and `descriptions` modes when the query is a scanner-backed plain scan. For `blob_mode="descriptions"` with `flatten`, it collects scanner Arrow/table output, applies LanceDB `flatten_columns`, and converts to pandas from there. Non-plain blob query shapes now fail with a clear unsupported error instead of falling into subclass `to_arrow()` behavior. It also adds Python query state and builder methods for scanner-only plain-scan parameters: - `with_row_address()` for `_rowaddr` - `with_fragments(...)` for Lance fragment objects - `fragment_ids([...])` as a convenience wrapper that resolves IDs to Lance fragments ## Validation - `cd python && uv run --no-sync ruff format --check python/lancedb/query.py python/tests/test_query.py` - `cd python && uv run --no-sync ruff check python/lancedb/query.py python/tests/test_query.py` Targeted pytest was intentionally not run locally per maintainer request. |
||
|
|
415d199c15 |
feat(rust): support datafusion expressions for merge insert predicates (#3444)
### Description This PR exposes native DataFusion expression support in the Rust SDK's `MergeInsertBuilder` via two new builder methods: `when_matched_update_all_expr` and `when_not_matched_by_source_delete_expr`. For remote LanceDB tables (where operations are serialized over HTTP/JSON to the SaaS backend), native DataFusion expression trees cannot be executed directly. The SDK handles this gracefully by returning a `NotSupported` error. ### Key Changes - **`MergeFilter` Enum**: Introduced a helper enum to store either a SQL string or a native `datafusion_expr::Expr`. - **`MergeInsertBuilder`**: Updated `when_matched_update_all_filt` and `when_not_matched_by_source_delete_filt` fields to store the new enum, and added `when_matched_update_all_expr` and `when_not_matched_by_source_delete_expr` builder methods. - **Execution & Remote Dispatch**: Dispatched the filter variants during local execution, and rejected expression filters with a clean `NotSupported` error in remote table request conversion. - **Testing**: Added a `test_merge_insert_expr` unit test covering conditional updates and deletes with programmatically built DataFusion expressions. ### Verification - Added integration test `test_merge_insert_expr` which successfully compiles and passes. - Formatted and linted the code. Closes #3416 |
||
|
|
a16676e05f |
ci: update python lockfile weekly (#3498)
Make sure we are getting security fixes in there regularly, and other useful bumps. |
||
|
|
4e44262499 |
test(python): add regression test for nullable struct with None (#2654) (#3483)
## Summary Regression test for [issue #2654](https://github.com/lancedb/lancedb/issues/2654) — a nullable struct column whose first batch contains only `None` values crashed in `_align_field_types` with `AttributeError: 'pyarrow.lib.DataType' object has no attribute 'fields'`. The actual fix landed in #3394, but no test was added. This PR adds the reproducer from the issue as a test. ## Test plan - `test_add_nullable_struct_with_none`: creates a table with a nullable struct column, adds a row with a non-null struct value, then a row with `None` for the struct field. Verifies both rows land correctly. - Uses Lance file format v2.1 (`new_table_data_storage_version="2.1"`) because nullable structs aren't supported on v2.0. ## Related - #3028 (the original fix attempt, now superseded) |
||
|
|
632375faf1 |
docs: add cross-SDK parity guidance for code review (#3464)
Adds a REVIEW.md at the repo root with cross-SDK parity guidance for automated code review. The Claude Code review feature automatically loads `REVIEW.md` as review-only context. This is intentionally a semantic nudge, not a deterministic check, it relies on the reviewer reading the sibling SDK, so it will catch most gaps. |
||
|
|
9969191d0d |
fix(rerankers): guard against empty vector_results in RRFReranker.rerank_multivector (#3467)
## What's broken Calling `RRFReranker().rerank_multivector([])` crashes with `IndexError: list index out of range` because the method accesses `vector_results[0]` for the type-homogeneity check before verifying the list is non-empty. The `all()` call passes vacuously on an empty iterable so the crash hits the next lines. ```python from lancedb.rerankers import RRFReranker RRFReranker().rerank_multivector([]) # IndexError: list index out of range ``` ## Why it happens The type check uses `vector_results[0]` as the reference type but never guards against an empty list. `all(...)` short-circuits to `True` when the iterable is empty, so the bad index access on the lines that follow is never reached by the existing guard logic. ## Fix Add an explicit empty-list check before any indexing. |
||
|
|
1e7326cd8c |
fix(rerankers/mrr): raise ValueError on empty vector_results list (#3469)
## What's broken
`MRRReranker.rerank_multivector([])` raises `IndexError: list index out
of range`. The crash happens on line 128 (the `all()` type-homogeneity
check passes vacuously on an empty iterable) and on line 134 which
accesses `vector_results[0]` unconditionally, with no prior guard for an
empty list.
## Why it happens
`all()` over an empty iterable returns `True`, so the type check
silently passes and execution falls through to `vector_results[0]` which
crashes.
## Fix
Added a two-line guard at the top of `rerank_multivector` that raises a
clear `ValueError("vector_results must not be empty")` before any
indexing occurs.
## Test
Added `test_mrr_reranker_empty_input` in `test_rerankers.py` which calls
`rerank_multivector([])` and asserts that a `ValueError` with the
message "must not be empty" is raised.
Fixes #3468
Co-authored-by: Aegis Dev <aegis@devteamaegis.com>
|
||
|
|
9483b534af | Bump version: 0.30.1-beta.0 → 0.30.1-beta.1 | ||
|
|
ac3411e81e | Bump version: 0.33.1-beta.0 → 0.33.1-beta.1 python-v0.33.1-beta.1 | ||
|
|
6f18eb4cce |
feat(python): support blob modes in query to_pandas (#3487)
## Feature - What is the new feature? - Adds `blob_mode` support to sync and async Python query `to_pandas()` APIs. - Enables plain scan queries to return blob columns as lazy `BlobFile` objects, raw bytes, or blob descriptions. - Lets namespace-backed local tables use Lance native blob-aware pandas conversion for lazy blobs. - Why do we need this feature? - Table and Lance dataset/scanner APIs already support blob-aware pandas conversion, but LanceDB query builders did not expose that capability. - Geneva and other callers should be able to use query-level `to_pandas(blob_mode=...)` without manually constructing Lance scanners. - How does it work? - Plain scan queries route through Lance scanner native `to_pandas(blob_mode=...)`, preserving filter, projection, limit, offset, row id, and alias/expression projection behavior. - Non-native query shapes keep existing Arrow fallback semantics and raise a clear error when they return blob columns with `blob_mode="lazy"` or `blob_mode="bytes"`. - Focused tests cover table/query blob modes, filter/select/limit/offset/alias query cases, async query behavior, vector-query error boundaries, and namespace-backed lazy blobs. ## Validation - `cd python && .venv/bin/maturin develop --uv --extras tests,dev --profile dev` - `cd python && uv run --frozen --no-sync pytest python/tests/test_table.py::test_table_to_pandas_blob_modes python/tests/test_table.py::test_async_table_to_pandas_blob_bytes python/tests/test_query.py::test_plain_scan_query_to_pandas_blob_modes python/tests/test_query.py::test_plain_scan_query_to_pandas_blob_projection python/tests/test_query.py::test_async_plain_scan_query_to_pandas_blob_projection python/tests/test_query.py::test_vector_query_to_pandas_blob_mode_requires_native_path python/tests/test_namespace.py::TestNamespaceConnection::test_table_to_pandas_blob_lazy_through_namespace -q` - `cd python && uv run --frozen --no-sync ruff format --check .` - `cd python && uv run --frozen --no-sync ruff check .` - `git diff --check` |
||
|
|
379684391e |
feat: deprecate replace_field_metadata for update_field_metadata (#3484)
### Summary Deprecates the Python replace_field_metadata (on Table and AsyncTable) in favor of update_field_metadata. Mirrors Lance, which already deprecated Dataset.replace_field_metadata for update_field_metadata. Stacked on top of #3482 as this was a follow-up task after adding update_field_metadata |
||
|
|
d065be0474 |
feat: add update_field_metadata to edit per-field metadata (#3482)
### Summary Adds update_field_metadata to the client SDK (Rust core, Python, and TypeScript) so clients can edit per-field (column) Arrow metadata (schema.fields[].metadata) ### Testing - added unit tests - ran E2E against a local server on both local and remote tables (set → merge → delete), across Python sync/async and TypeScript ### Next steps - deprecate replace_field_metadata in the python lancedb favor of this (typescript didn't have replace_field_metadata method). This matches Lance's API direction (Lance already deprecated replace_field_metadata for update_field_metadata) |
||
|
|
7b874905fd |
ci: move Lance dependency bump flow into skill (#3475)
Moves the Lance dependency bump process into an in-repository skill so local agents and GitHub Actions share the same workflow definition. The update workflow is now an explicit, optional-tag entrypoint; latest-release resolution, duplicate PR handling, Java/Rust dependency updates, and Sophon follow-up are documented in the skill and backed by a small deterministic helper. |
||
|
|
a327044e2f |
feat(python): support remote tables in PyTorch dataloaders (#3432)
This PR makes remote LanceDB tables usable from PyTorch multiprocessing workers. Remote tables now carry enough safe JSON connection state to reopen themselves after pickle/spawn or fork, and permutations lazily rebuild their reader from restored tables instead of trying to reuse process-local handles. This addresses the remote-table gap in the PyTorch dataset path while preserving the explicit connection factory escape hatch for custom worker-side credential loading or non-serializable header providers. Validated with targeted remote table, permutation, and PyTorch DataLoader tests. |
||
|
|
f20ec99dec | Bump version: 0.30.0-beta.1 → 0.30.1-beta.0 | ||
|
|
60f961584c | Bump version: 0.33.0-beta.1 → 0.33.1-beta.0 python-v0.33.1-beta.0 | ||
|
|
ac699d7ecf |
chore: bump lance to 7.2.0-beta.3 (#3471)
This updates the workspace Lance dependencies from `v7.1.0-beta.4` to `v7.2.0-beta.3` and refreshes `Cargo.lock`. The lockfile now points at Lance commit `7c070f760fa8e24c8015cb2afbd22c5e6b7898e8` and includes the transitive dependency updates required by the new beta. |
||
|
|
968277be79 |
chore(deps): bump the rust-minor-patch group with 5 updates (#3465)
Bumps the rust-minor-patch group with 5 updates: | Package | From | To | | --- | --- | --- | | [log](https://github.com/rust-lang/log) | `0.4.29` | `0.4.30` | | [serde_json](https://github.com/serde-rs/json) | `1.0.149` | `1.0.150` | | [http](https://github.com/hyperium/http) | `1.4.0` | `1.4.1` | | [uuid](https://github.com/uuid-rs/uuid) | `1.23.1` | `1.23.2` | | [aws-smithy-runtime](https://github.com/smithy-lang/smithy-rs) | `1.11.1` | `1.11.3` | Updates `log` from 0.4.29 to 0.4.30 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/releases">log's releases</a>.</em></p> <blockquote> <h2>0.4.30</h2> <h3>What's Changed</h3> <ul> <li>Support capturing of <code>std::net</code> types by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/724">rust-lang/log#724</a></li> </ul> <h3>New Contributors</h3> <ul> <li><a href="https://github.com/V0ldek"><code>@V0ldek</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/720">rust-lang/log#720</a></li> <li><a href="https://github.com/woodruffw"><code>@woodruffw</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/723">rust-lang/log#723</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.29...0.4.30">https://github.com/rust-lang/log/compare/0.4.29...0.4.30</a></p> <h3>Notable Changes</h3> <ul> <li>MSRV is bumped to 1.71.0 in <a href="https://redirect.github.com/rust-lang/log/pull/723">rust-lang/log#723</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/blob/master/CHANGELOG.md">log's changelog</a>.</em></p> <blockquote> <h2>[0.4.30] - 2026-05-21</h2> <h3>What's Changed</h3> <ul> <li>Support capturing of <code>std::net</code> types by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/724">rust-lang/log#724</a></li> </ul> <h3>New Contributors</h3> <ul> <li><a href="https://github.com/V0ldek"><code>@V0ldek</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/720">rust-lang/log#720</a></li> <li><a href="https://github.com/woodruffw"><code>@woodruffw</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/723">rust-lang/log#723</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.29...0.4.30">https://github.com/rust-lang/log/compare/0.4.29...0.4.30</a></p> <h3>Notable Changes</h3> <ul> <li>MSRV is bumped to 1.71.0 in <a href="https://redirect.github.com/rust-lang/log/pull/723">rust-lang/log#723</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/log/commit/9c55760b499b18e81de7df5f3c13a67d5661131d"><code>9c55760</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/725">#725</a> from rust-lang/cargo/0.4.30</li> <li><a href="https://github.com/rust-lang/log/commit/d1acb0585c0f6af5dc466eb255187cd6d3b7359e"><code>d1acb05</code></a> update docs on current MSRV and note latest bump in changelog</li> <li><a href="https://github.com/rust-lang/log/commit/50682937b0d9ec9a18c4c9b0510d889762e20e34"><code>5068293</code></a> prepare for 0.4.30 release</li> <li><a href="https://github.com/rust-lang/log/commit/7ccd873cb50de97690d46f69d8744a61f0b87c46"><code>7ccd873</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/724">#724</a> from rust-lang/feat/net-to-value</li> <li><a href="https://github.com/rust-lang/log/commit/923dfaaf00dca352efe45930ae009d9a22526597"><code>923dfaa</code></a> fix up test cfgs</li> <li><a href="https://github.com/rust-lang/log/commit/ecb7de8daf7feec9dcf0d31cecc8523b31a8d104"><code>ecb7de8</code></a> gate net value impls on std</li> <li><a href="https://github.com/rust-lang/log/commit/67bb4f6d2e377b0008b740631124f292e80d4e5d"><code>67bb4f6</code></a> run fmt</li> <li><a href="https://github.com/rust-lang/log/commit/25f49fe3d31e7a0797652ad4bacaff633f7237cd"><code>25f49fe</code></a> rework net type capturing</li> <li><a href="https://github.com/rust-lang/log/commit/7087dcb95cb925364b4ba1da0d7c0eead9356dfc"><code>7087dcb</code></a> feat: impl ToValue for core::net types</li> <li><a href="https://github.com/rust-lang/log/commit/67bc7e32c68a4a8908d1016693418f12b43bab90"><code>67bc7e3</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/723">#723</a> from woodruffw-forks/ww/ci</li> <li>Additional commits viewable in <a href="https://github.com/rust-lang/log/compare/0.4.29...0.4.30">compare view</a></li> </ul> </details> <br /> Updates `serde_json` from 1.0.149 to 1.0.150 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/serde-rs/json/releases">serde_json's releases</a>.</em></p> <blockquote> <h2>v1.0.150</h2> <ul> <li>Reject non-string enum object keys (<a href="https://redirect.github.com/serde-rs/json/issues/1324">#1324</a>, thanks <a href="https://github.com/puneetdixit200"><code>@puneetdixit200</code></a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/serde-rs/json/commit/a1ae73ac6a6940a4a57c673aebaa13ed4dfe3e8c"><code>a1ae73a</code></a> Release 1.0.150</li> <li><a href="https://github.com/serde-rs/json/commit/1a360b0a6c003912afc3503c834b0edd798bca28"><code>1a360b0</code></a> Merge pull request <a href="https://redirect.github.com/serde-rs/json/issues/1324">#1324</a> from puneetdixit200/reject-non-string-enum-keys</li> <li><a href="https://github.com/serde-rs/json/commit/2037b634f9dccbddc11cff189ebeb5854fa0e01c"><code>2037b63</code></a> Reject non-string enum object keys</li> <li><a href="https://github.com/serde-rs/json/commit/5d30df60e916e9b8fc46c74794007ff271fdfbbf"><code>5d30df6</code></a> Resolve manual_assert_eq pedantic clippy lint</li> <li><a href="https://github.com/serde-rs/json/commit/dc8003a88e7142529cf4a7429c4778af31dadf50"><code>dc8003a</code></a> Raise required compiler for preserve_order feature to 1.85</li> <li><a href="https://github.com/serde-rs/json/commit/a42fa980f8556cda36d896fa3713544b2e5eaa2c"><code>a42fa98</code></a> Unpin CI miri toolchain</li> <li><a href="https://github.com/serde-rs/json/commit/684a60eba18abfc0e0f7ddb0c2cd39f8f60249cf"><code>684a60e</code></a> Pin CI miri to nightly-2026-02-11</li> <li><a href="https://github.com/serde-rs/json/commit/7c7da3302b6b1cdab7f11ea49ca1a74422ab4551"><code>7c7da33</code></a> Raise required compiler to Rust 1.71</li> <li><a href="https://github.com/serde-rs/json/commit/acf4850e2969f1caccab2c4727a90ed006ba35bb"><code>acf4850</code></a> Simplify Number::is_f64</li> <li><a href="https://github.com/serde-rs/json/commit/6b8ceab565dcfe4f83dfaacd287d11c8bd8f306c"><code>6b8ceab</code></a> Resolve unnecessary_map_or clippy lint</li> <li>Additional commits viewable in <a href="https://github.com/serde-rs/json/compare/v1.0.149...v1.0.150">compare view</a></li> </ul> </details> <br /> Updates `http` from 1.4.0 to 1.4.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/hyperium/http/releases">http's releases</a>.</em></p> <blockquote> <h2>v1.4.1</h2> <h2>tl;dr</h2> <ul> <li>Fix <code>PathAndQuery::from_static()</code> and <code>from_shared()</code> to reject inputs that do not start with <code>/</code>.</li> <li>Fix <code>Extend</code> for <code>HeaderMap</code> to clamp max size hint and not overflow.</li> <li>Fix <code>header::IntoIter</code> that could use-after-free if the generic value type could panic on drop.</li> <li>Fix <code>header::{IterMut, ValuesIterMut}</code> to not violate stacked borrows.</li> </ul> <h2>What's Changed</h2> <ul> <li>chore(header): fix clippy::assign_op_pattern by <a href="https://github.com/rxc-amzn"><code>@rxc-amzn</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/806">hyperium/http#806</a></li> <li>ci: pin itoa in msrv job by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/813">hyperium/http#813</a></li> <li>Remove unnecessary explicit lifetimes by <a href="https://github.com/jplatte"><code>@jplatte</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/815">hyperium/http#815</a></li> <li>chore(ci): update to actions/checkout@v6 by <a href="https://github.com/tottoto"><code>@tottoto</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/819">hyperium/http#819</a></li> <li>tests: update to rand 0.10 by <a href="https://github.com/tottoto"><code>@tottoto</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/818">hyperium/http#818</a></li> <li>refactor: Remove usage of float instruction by <a href="https://github.com/AurelienFT"><code>@AurelienFT</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/823">hyperium/http#823</a></li> <li>refactor(uri): consolidate PathAndQuery::from_shared and from_static by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/825">hyperium/http#825</a></li> <li>fix(uri): reject Path::from_shared/from_static if doesn't start with slash by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/826">hyperium/http#826</a></li> <li>Rephrase comment by <a href="https://github.com/daalfox"><code>@daalfox</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/827">hyperium/http#827</a></li> <li>Fix typo in request builder docs by <a href="https://github.com/vleksis"><code>@vleksis</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/831">hyperium/http#831</a></li> <li>fix: clamp Extend size hint so HeaderMap reserve cannot overflow by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/833">hyperium/http#833</a></li> <li>fix(headers): fix stacked borrows for IterMut/ValuesIterMut by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/837">hyperium/http#837</a></li> <li>fix(header): use a set_len guard in IntoIter drop by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/838">hyperium/http#838</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/rxc-amzn"><code>@rxc-amzn</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/806">hyperium/http#806</a></li> <li><a href="https://github.com/AurelienFT"><code>@AurelienFT</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/823">hyperium/http#823</a></li> <li><a href="https://github.com/daalfox"><code>@daalfox</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/827">hyperium/http#827</a></li> <li><a href="https://github.com/vleksis"><code>@vleksis</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/831">hyperium/http#831</a></li> <li><a href="https://github.com/SAY-5"><code>@SAY-5</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/833">hyperium/http#833</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/hyperium/http/compare/v1.4.0...v1.4.1">https://github.com/hyperium/http/compare/v1.4.0...v1.4.1</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/hyperium/http/blob/master/CHANGELOG.md">http's changelog</a>.</em></p> <blockquote> <h1>1.4.1 (May 25, 2026)</h1> <ul> <li>Fix <code>PathAndQuery::from_static()</code> and <code>from_shared()</code> to reject inputs that do not start with <code>/</code>.</li> <li>Fix <code>Extend</code> for <code>HeaderMap</code> to clamp max size hint and not overflow.</li> <li>Fix <code>header::IntoIter</code> that could use-after-free if the generic value type could panic on drop.</li> <li>Fix <code>header::{IterMut, ValuesIterMut}</code> to not violate stacked borrows.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/hyperium/http/commit/a24c968ba3b53c4c9953164235664cab9e8fa315"><code>a24c968</code></a> v1.4.1</li> <li><a href="https://github.com/hyperium/http/commit/bc3b0441be3065fc2653e9b3b1392c0fed873482"><code>bc3b044</code></a> fix(header): use a set_len guard in IntoIter drop (<a href="https://redirect.github.com/hyperium/http/issues/838">#838</a>)</li> <li><a href="https://github.com/hyperium/http/commit/1b968dc519c49b1922bc546c95f33900e684f4ab"><code>1b968dc</code></a> fix(header): fix stacked borrows for IterMut/ValuesIterMut (<a href="https://redirect.github.com/hyperium/http/issues/837">#837</a>)</li> <li><a href="https://github.com/hyperium/http/commit/6e2dd42a15d4c1711baa2191bd1d15022e1e2e9c"><code>6e2dd42</code></a> fix: clamp Extend size hint so HeaderMap reserve cannot overflow (<a href="https://redirect.github.com/hyperium/http/issues/833">#833</a>)</li> <li><a href="https://github.com/hyperium/http/commit/68e0abb052a243a5530ad4c404cb0b169a7ecb4a"><code>68e0abb</code></a> docs: fix typo in request builder docs (<a href="https://redirect.github.com/hyperium/http/issues/831">#831</a>)</li> <li><a href="https://github.com/hyperium/http/commit/29dd307b3e382a4343fc917fa3c41125ac50dfb8"><code>29dd307</code></a> docs(extensions): rephrase internal comment (<a href="https://redirect.github.com/hyperium/http/issues/827">#827</a>)</li> <li><a href="https://github.com/hyperium/http/commit/ae48fb55b090b4859d38a3a49a8332b83492d7c1"><code>ae48fb5</code></a> fix(uri): reject Path::from_shared/from_static if doesn't start with slash (#...</li> <li><a href="https://github.com/hyperium/http/commit/1ad200ec4ce5ec714005d500f8b0cea39c6c16f5"><code>1ad200e</code></a> refactor(uri): consolidate PathAndQuery::from_shared and from_static (<a href="https://redirect.github.com/hyperium/http/issues/825">#825</a>)</li> <li><a href="https://github.com/hyperium/http/commit/d59d939f928c6d836f5c87940f01399cb45cddb9"><code>d59d939</code></a> refactor: Remove usage of float instruction (<a href="https://redirect.github.com/hyperium/http/issues/823">#823</a>)</li> <li><a href="https://github.com/hyperium/http/commit/ed680c4d90a514b7f427efc99b61e60632811d2f"><code>ed680c4</code></a> tests: update to rand 0.10 (<a href="https://redirect.github.com/hyperium/http/issues/818">#818</a>)</li> <li>Additional commits viewable in <a href="https://github.com/hyperium/http/compare/v1.4.0...v1.4.1">compare view</a></li> </ul> </details> <br /> Updates `uuid` from 1.23.1 to 1.23.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p> <blockquote> <h2>v1.23.2</h2> <h2>What's Changed</h2> <ul> <li>Improve error messages for ambiguous formats by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/882">uuid-rs/uuid#882</a></li> <li>Prepare for 1.23.2 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/883">uuid-rs/uuid#883</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.23.1...v1.23.2">https://github.com/uuid-rs/uuid/compare/v1.23.1...v1.23.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/uuid-rs/uuid/commit/d11965705f88ae2546e0d277dac8f52f47e5694f"><code>d119657</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/883">#883</a> from uuid-rs/cargo/v1.23.2</li> <li><a href="https://github.com/uuid-rs/uuid/commit/0651cfcb895d5d0b7e21edba621422bf446d585f"><code>0651cfc</code></a> prepare for 1.23.2 release</li> <li><a href="https://github.com/uuid-rs/uuid/commit/e8dea0c1fdc69e066cff93957e441022acfcb90f"><code>e8dea0c</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/882">#882</a> from uuid-rs/fix/error-msgs</li> <li><a href="https://github.com/uuid-rs/uuid/commit/bdc429a8c731a067b0d49c8890c6209dbb9f02db"><code>bdc429a</code></a> fix up serde messages</li> <li><a href="https://github.com/uuid-rs/uuid/commit/d4342e400df7adb17028b499a53a96228951baec"><code>d4342e4</code></a> make indexes 0 based and fix up more error messages</li> <li><a href="https://github.com/uuid-rs/uuid/commit/4ad479fc20fd09f34467e00adf176d4fdbdf9161"><code>4ad479f</code></a> work on more accurate parser errors</li> <li>See full diff in <a href="https://github.com/uuid-rs/uuid/compare/v1.23.1...v1.23.2">compare view</a></li> </ul> </details> <br /> Updates `aws-smithy-runtime` from 1.11.1 to 1.11.3 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/smithy-lang/smithy-rs/commits">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
5638907fa5 |
chore: update Lance to v7.2.0-beta.1 (#3461)
Update the Rust workspace Lance git dependencies and Java lance-core dependency to v7.2.0-beta.1. This keeps LanceDB aligned with the latest Lance beta release and refreshes the Cargo lockfile for the new Lance dependency graph. |
||
|
|
048f52c2aa |
feat(table): route merge_insert through the MemWAL LSM write path (#3354)
## Summary When an `LsmWriteSpec` is installed on a table (#3396), `merge_insert` upsert calls are dispatched through Lance's MemWAL `ShardWriter` (LSM-style append) instead of the standard merge path. - **`use_lsm_write`** — a `merge_insert` builder option, default `true`; set it `false` to use the standard path for a call even when a spec is set. - **`assume_pre_sharded`** — a `merge_insert` builder option, default `false`; skips the per-row shard check and routes by the first row only. - **`close_lsm_writers`** — drains and closes the table's cached MemWAL shard writers. - The `merge_insert` **`on`** columns default to, and are validated against, the table's unenforced primary key. - Shard writers are cached alongside the dataset (in `DatasetConsistencyWrapper`) and reused for the session. - `MergeResult` gains **`num_rows`** — on the LSM path the insert/update breakdown is unknown until compaction, so only the total is reported. Routing covers all three sharding strategies — bucket (murmur3, Iceberg-compatible), identity, and unsharded. Each `merge_insert` call targets a single shard; the whole input is collected and validated before a single atomic `ShardWriter::put`, so a validation failure leaves the MemWAL untouched. Bindings: Python (`merge_insert(...).use_lsm_write(...)` / `.assume_pre_sharded(...)`, `Table.close_lsm_writers`) and TypeScript (`mergeInsert(...).useLsmWrite(...)` / `.assumePreSharded(...)`, `Table.closeLsmWriters`). ## Context Reconstructed from the original #3354 branch onto current `main`: the branch predated the #3394 (unenforced primary key) / #3396 (`LsmWriteSpec`) split and has been rebuilt on that merged foundation. Depends on Lance `v7.0.0-beta.13`. The MemWAL read path (reading un-flushed shard data back into queries) and remote (LanceDB Cloud) LSM support are follow-ups. --------- Co-authored-by: Jack Ye <yezhaoqin@gmail.com> |
||
|
|
458dcabbd2 |
chore: upgrade Rust toolchain to 1.95.0 (#3390)
Bumps the pinned toolchain in `rust-toolchain.toml` from 1.94.0 to 1.95.0. Fixes new lints surfaced by clippy on 1.95.0: - `manual_checked_ops` — fragment size mean in `table.rs` uses `checked_div` - `explicit_counter_loop` — shuffle test loop in `shuffle.rs` No rustc warnings were introduced. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |