You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(reader): decode vortex.zoned aggregate-spec zone maps (vortex-jni 0.76.0)
Bumping vortex-jni to 0.76.0 broke RustWritesJavaReadsIntegrationTest
#jniWriter_perZoneSum_readFromZoneMapTable with a ClassCastException
(DType$Bool -> DType$Primitive) while decoding the per-zone stats table.
0.76.0's zoned layout (spiraldb/vortex #7938) splits the format in two: the
canonical `vortex.zoned` id now stores an ordered aggregate-function spec list
in its metadata (proto: version byte + ZonedMetadataProto) and its stats table
drops the legacy per-stat `_is_truncated` Bool flags, while the legacy
`vortex.stats` alias keeps the Stat-bitset metadata. Our reader treated the two
ids as pure aliases and always reconstructed the legacy schema, so the extra
Bool fields no longer matched the encoded table and the positional struct decode
mismatched.
The reader now dispatches on the layout id: `vortex.zoned` goes through a new
ZonedStatsSchema.aggregateStatsTableDtype that parses the aggregate specs and
maps each known aggregate (max/min/sum/null_count/nan_count/...) to its stored
stat dtype, with no truncation flags; `vortex.stats` keeps the bitset path.
Unknown/nested-state aggregates (e.g. vortex.bounded_max) bail to the per-chunk
fallback rather than decode a misaligned table. The CLI stats inspector uses the
same dispatch. This is a genuine compatibility fix on top of the dependency
bump, not a rebase-conflict resolution (the rebase onto main was clean).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
10
10
### Fixed
11
11
12
+
- Per-zone stats from current Rust writers (`vortex.zoned`, vortex-jni 0.76.0) decode again. The 0.76 zoned layout replaced the legacy `vortex.stats` bit-set metadata with an aggregate-function spec list and dropped the per-stat truncation flags; the reader now reconstructs the stats table from that spec list (min/max/sum/null_count), so `columnZoneStats` and aggregate push-down work against those files instead of throwing `ClassCastException`. ([#197](https://github.com/dfa1/vortex-java/pull/197))
12
13
- CSV export renders nested struct columns as JSON object cells (`{"field":value,...}`, strings JSON-escaped, null fields as JSON `null`, nested structs recursed) instead of throwing `unsupported array type: StructArray`. ([#217](https://github.com/dfa1/vortex-java/issues/217))
13
14
- Scanning a struct whose columns include a nested struct no longer fails chunk planning. A nested `vortex.struct` layout column (e.g. Raincloud `countries-of-the-world`'s `data` column) is now treated as a single full-range chunk source and decoded through the layout registry's new struct decoder into a `StructArray`, matching the Rust reference (a nested struct spans its parent's row range, not an independent chunking). `schema`/`count`/`inspect` already worked; plain scans and `select` of sibling columns now work too. CSV export of the struct column itself remains unsupported (a separate rendering limitation). ([#207](https://github.com/dfa1/vortex-java/issues/207))
14
15
- CSV export renders unsigned integer columns (U8–U64) with their unsigned values — high-half values previously printed as two's-complement negatives (uci-wine `magnesium` U8 132 exported as -124), silent corruption found by the Raincloud conformance suite. ([#208](https://github.com/dfa1/vortex-java/issues/208))
0 commit comments