Skip to content

chore(deps)!: arrow 55 -> 59 - #131

Merged
anoop-narang merged 2 commits into
mainfrom
chore/arrow-59
Sep 3, 2026
Merged

chore(deps)!: arrow 55 -> 59#131
anoop-narang merged 2 commits into
mainfrom
chore/arrow-59

Conversation

@anoop-narang

Copy link
Copy Markdown
Contributor

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.

arrow-ipc     = { version = "59", optional = true }
arrow-array   = { version = "59", optional = true }
arrow-schema  = { version = "59", optional = true }

Why this is breaking, and for whom

ArrowResult exposes RecordBatch and SchemaRef in its public API, so arrow's major version is effectively part of this crate's surface. A caller using the arrow feature 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:

note: two different versions of crate `arrow_schema` are being used; two types
      coming from two different versions of the same crate are different types
      even if they look the same

Callers not using the arrow feature 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 required
  • cargo test --all-features — all tests pass
  • Cargo.lock resolves arrow-array to 59.3.0

Also 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 --check and cargo clippy -D warnings are already failing on main under rustc 1.92 (8 clippy errors, several fmt diffs), in files this PR does not touch. Confirmed against an unmodified origin/main worktree, 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.

`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
anoop-narang requested a review from a team as a code owner September 3, 2026 13:22
@anoop-narang
anoop-narang requested review from rohan-hotdata and removed request for a team September 3, 2026 13:22
Comment thread Cargo.toml
claude[bot]
claude Bot previously approved these changes Sep 3, 2026

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prior super nit is addressed: README.md:211-213 now names arrow 59 next to the dependency snippet. No further findings.

@anoop-narang
anoop-narang merged commit 56ffac7 into main Sep 3, 2026
4 checks passed
@anoop-narang
anoop-narang deleted the chore/arrow-59 branch September 3, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant