v0.8.2
Immutable
release. Only release title and notes can be modified.
The headline is writer-side zone-map statistics: the writer now emits vortex.stats (zoned) layouts carrying per-chunk MIN/MAX, NULL_COUNT, and SUM — matching the Rust reference — so zone-map chunk pruning and aggregate push-down work on Java-written files (previously the reader could decode these stats but the writer never produced them). The release also continues the test-hardening track: the lowest-covered encoder/decoder paths are filled in, SonarCloud new-code coverage is back to 100% with the quality gate green (overall ~83%, all ratings A, zero bugs/vulnerabilities), and the build toolchain is refreshed across eight dependency bumps.
Added
- Writer:
vortex.stats(zoned) layout emission, toggled byWriteOptions.enableZoneMaps. Each column is wrapped with a per-zone (one zone per chunk) statistics table; the stat set follows the Rust reference exactly. (838dba82, f2d74351) - Writer: per-zone MIN/MAX for primitive columns including F16, extension columns (over their storage primitive), Utf8 columns (full string bounds), and dictionary-encoded columns (computed on the logical values, independent of the dict encoding). (838dba82, fb5d096a, 38ab5c51, c1198253, e51da936)
- Writer: per-zone NULL_COUNT for every column type. (135c9b37, c52d4b83, ab233b86)
- Writer: per-zone SUM for numeric primitive columns (signed →
i64, unsigned →u64, float →f64; integer overflow records a null sum). Matches Rust, which sums numeric primitives and decimals but not Utf8/extension columns. (9661f554) - Reader:
RowFilter.isNull/RowFilter.isNotNullpredicates with zone-map chunk pruning — IS NULL skips chunks with zero nulls, IS NOT NULL skips all-null chunks — via the per-chunknull_count. (2749b6ca) - Reader:
columnStats()aggregatesnull_countacross a column's chunks (reported only when every chunk carries one). (cb844f23)
Changed
- Reader: the shared default
HttpClientbehindVortexHttpReader.open(URI, ReadRegistry)is now a package-private non-final field used purely as a unit-test seam, so the default-client overload is driven to a normal return by a mocked client instead of a live network call. Production never reassigns it. (12e46270)
Tests
- Coverage for the ten lowest-coverage encode/decode classes —
ZigZagEncodingDecoder/Encoder,SequenceEncodingEncoder,VariantEncodingDecoder.dtypeFromProto(every proto→coreDTypearm),TimeExtensionEncoder,VarBinViewEncodingDecoder,VarBinEncodingDecoder,AlpEncodingDecoder,DateTimePartsEncodingDecoder, andDeltaEncodingDecoder— exercising guards, broadcast/constant paths, and ptype arms. (a3012d4a, c9386eda, 6c9682b8, bbb9d669, 7742ecd3) - Writer: property-based and mutation-driven round-trips for the Delta and AlpRd encoders. (d3d245a6)
- Reader: HTTP fixtures bumped to
v0.75.0with a smoke test across all encodings; theopen(URI, ReadRegistry)overload is now covered via the default-client seam. (8a1b5db2, 12e46270) - Reader: decoder tests allocate via
Arena.ofAuto()instead of the never-freedArena.global(). (59ec2e2a)
Build
- Dependency refresh:
jacoco-maven-plugin0.8.13→0.8.15,pitest-maven1.20.0→1.25.5,checkstyle13.5.0→13.6.0,byte-buddy-agent1.17.7→1.18.10,central-publishing-maven-plugin0.10.0→0.11.0,maven-jar-plugin3.4.1→3.5.0,maven-dependency-plugin3.7.0→3.11.0, andactions/checkout6→7. (dab876b7, 7b7c3580, 46659a73, 46a30be1, c6723832, 3e5fa349, c943f81b, af009116)