chore(deps)!: arrow 55 -> 59 - #131
Merged
Merged
Conversation
`ArrowResult` exposes `RecordBatch` and `SchemaRef`, so arrow's major version is part of this crate's public API: a caller on the `arrow` feature has to move in step, because arrow types from two majors are distinct types and will not compile together. Callers without the feature are unaffected. arrow 55 is four majors behind current. Nothing is broken by the gap today, but how a nested value is rendered can change across an arrow major, and a consumer decoding Arrow IPC with one version while the producer wrote it with another has nothing pinning the two together. Being current shrinks that window. Compiles and tests clean with no source changes — only the three dependency pins move.
anoop-narang
requested review from
rohan-hotdata
and removed request for
a team
September 3, 2026 13:22
Contributor
There was a problem hiding this comment.
Reviewed the dependency bump and the arrow call sites in src/arrow.rs. The used API surface (StreamReader::try_new, StreamReader::schema, RecordBatch, SchemaRef, arrow_schema::ArrowError) is unchanged across arrow 55 to 59, so no source change is expected. The crate declares no rust-version, so there is no MSRV field to update, and no Cargo.lock is committed. The CHANGELOG entry lands under ## [Unreleased], which matches the process in RELEASING.md; the release preparer must pick minor for this breaking change.
Build and test checks were still queued or in progress at review time, so this approval does not assert that they passed.
The changelog entry said "Breaking (with the `arrow` feature)", which reads as breaking *with* something rather than breaking *for* someone, and buried the answer under a second paragraph about why the bump is worth doing. Rationale belongs in the pull request; a changelog line should say what changed and who has to act. Cut to four lines. That second paragraph also described how the service renders results, which is not this crate's to publish. Removed. README: the Arrow section showed only the `hotdata` dependency line, so a caller adding `arrow = "55"` beside it met the two-majors type error with nothing nearby explaining it. Names the required major at the point of use.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Moves the three optional arrow pins from 55 to 59. Two lines of dependency change and a CHANGELOG note — no source changes were needed.
Why this is breaking, and for whom
ArrowResultexposesRecordBatchandSchemaRefin its public API, so arrow's major version is effectively part of this crate's surface. A caller using thearrowfeature has to move to arrow 59 in step — arrow types from two different majors are distinct types and will not compile together, with an error along the lines of:Callers not using the
arrowfeature are unaffected.Why do it
arrow 55 is four majors behind current. Nothing is broken by the gap today — a consumer decoding Arrow IPC on 55 and a producer writing it on a later major render the same values identically, as far as I could observe. The point is that nothing pins them together: how a nested value is rendered can change across an arrow major, and a divergence introduced that way would show up as wrong output rather than as a build failure. Staying current shrinks that window.
Verification
cargo build --all-features— clean, no source changes requiredcargo test --all-features— all tests passCargo.lockresolvesarrow-arrayto 59.3.0Also exercised end to end from a downstream consumer built against this branch via
[patch.crates-io]: it compiled with its own arrow at 59, its full suite passed, and rendering of nested lists, structs, maps, decimals, binary, durations, dates, named-timezone timestamps and non-finite floats was byte-identical to the same values fetched as JSON from the API — 12 of 12 cases, checked against both arrow 55 and 59 on the consumer side.Note for reviewers
cargo fmt --checkandcargo clippy -D warningsare already failing onmainunder rustc 1.92 (8 clippy errors, several fmt diffs), in files this PR does not touch. Confirmed against an unmodifiedorigin/mainworktree, and this branch adds none: the clippy error set is identical, 8 before and 8 after. Left alone rather than folded in, since reformatting unrelated files would bury a two-line dependency change.