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: Raincloud oracle gains repeated/list column support (#261)
RaincloudConformanceIntegrationTest's Parquet oracle previously aborted
on any column with maxRepetitionLevel > 0 (LIST/repeated groups), which
is how Vortex FixedSizeList/List columns round-trip through Parquet —
blocking conformance verification for glove-* and osm-germany-relations.
Rewrite the oracle to iterate top-level schema fields (one CSV cell per
Vortex column, matching CsvExporter's model) instead of leaf columns
(which for a nested field would wrongly emit multiple cells for what
CsvExporter renders as one JSON array/object). Primitive top-level
fields keep the existing physical-type rendering; LIST/STRUCT fields
render via hardwood's row-object API (RowReader.getList/getStruct,
PqList, PqStruct) walked alongside the SchemaNode tree so unsigned
INT32/INT64 detection (#253) still applies at any nesting depth,
mirroring CsvExporter's jsonObject/jsonArray/jsonValue rules exactly.
Verifying against real hydrated data (glove-6b-50d/100d/200d,
osm-germany-relations) surfaced two genuine, separate bugs the
previously-aborting oracle had never let this test path reach:
- CsvExporter.offsetAt only handled I32/I64 list offsets; osm's
members/tags columns use I16 offsets, throwing VortexException.
offsets can legally be any integer ptype (the encoder picks the
narrowest that fits, same as VarBinArray's offsets) (#263).
- ScanIterator.sliceArray had no case for ListArray/FixedSizeListArray,
so scanning such a column failed whenever its covering flat chunk
spans several scan windows (misaligned per-column chunk grids) — a
real reading gap, not only an export-side one (#265).
Both fixed; all 4 slugs now conform end-to-end and flip to `ok` in the
matrix. Full ./mvnw verify (integration + unit, 304 tests) green.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
15
### Fixed
16
16
17
17
- Nullable Utf8/Binary columns are now compressed through the full cascade instead of stored as raw `vortex.varbin`. `MaskedEncodingEncoder` previously encoded its non-null values with a fixed first-match encoder (primitive/varbin), so a nullable low-cardinality string column never reached Dict or FSST — producing files 10–47× larger than the Rust reference on the string-heavy Raincloud corpus (e.g. `uci-mushroom` 22×, `uci-online-retail-ii` 25×). The masked values now run through the same `CascadingCompressor` as dense columns, dropping those ratios to ~2–3×. ([#258](https://github.com/dfa1/vortex-java/issues/258))
18
+
-`ScanIterator` can now slice a shared `ListArray`/`FixedSizeListArray` whose covering flat chunk spans several scan windows (misaligned per-column chunk grids). Previously any scan over such a column threw `VortexException("scan: cannot slice shared array of type ...")` — a real reading gap, not only an export-side one. ([#265](https://github.com/dfa1/vortex-java/issues/265))
19
+
-`CsvExporter` now reads `vortex.list` offsets of any integer width (`I8`/`U8`/`I16`/`U16`, matching `VarBinArray`'s offsets), not only `I32`/`I64`. A narrower-offset list column (e.g. Raincloud's `osm-germany-relations`, whose offsets are `I16`) previously threw `VortexException("unexpected list offsets type: ...")` on export. ([#263](https://github.com/dfa1/vortex-java/issues/263))
0 commit comments