diff --git a/docs/adr/0013-drop-materialized-fallbacks.md b/docs/adr/0015-drop-materialized-fallbacks.md similarity index 97% rename from docs/adr/0013-drop-materialized-fallbacks.md rename to docs/adr/0015-drop-materialized-fallbacks.md index 7fd166e2..2199864e 100644 --- a/docs/adr/0013-drop-materialized-fallbacks.md +++ b/docs/adr/0015-drop-materialized-fallbacks.md @@ -1,6 +1,6 @@ -# ADR 0013: Drop Materialized fallbacks once Lazy has shipped +# ADR 0015: Drop Materialized fallbacks once Lazy has shipped -- **Status:** Accepted +- **Status:** Completed - **Date:** 2026-06-16 - **Deciders:** project maintainer - **Supersedes:** — @@ -72,7 +72,7 @@ A Materialized branch may be deleted when **all** of these hold: - Decompression-style encodings — `bitpacked`, `pco`, `zstd`, `fsst`, `delta`, `patched` — keep their Materialized output. ADR 0010 § - "Decompression encodings stay eager" applies; ADR 0013 does not change + "Decompression encodings stay eager" applies; ADR 0015 does not change it. - Materialisation fallbacks inside `ArraySegments.of(arr, arena)` stay — they exist for callers that explicitly request a `MemorySegment` from a diff --git a/docs/adr/ADR.md b/docs/adr/ADR.md index 315c5403..c5b1dace 100644 --- a/docs/adr/ADR.md +++ b/docs/adr/ADR.md @@ -27,3 +27,4 @@ Each ADR is a Markdown file named `NNNN-short-title.md`. Use `template.md` as th | 0012 | Zero-copy layout decoding: lazy Chunked/Dict | Implemented | | 0013 | Compute primitives: masks, kernels, no-materialise | Proposed | | 0014 | Variant encoding: chunked constants now, parquet.variant later | Implemented | +| 0015 | Drop Materialized fallbacks once Lazy has shipped | Completed | diff --git a/docs/compatibility.md b/docs/compatibility.md index 12eb97d9..db93a43d 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -96,16 +96,16 @@ decoder falls into one of three shapes: | `vortex.bool` | Zero-copy | Zero-copy | mmap slice (bit-packed) | | `vortex.null` | n/a | n/a | no per-row data | | `vortex.bytebool` | Zero-copy | Zero-copy | mmap slice | -| `vortex.zigzag` | Lazy | Lazy | `LazyZigZagXxxArray` (I8/I16/I32/I64); broadcast → `LazyConstantXxxArray`, ADR 0010 + 0013 | -| `vortex.constant` | Lazy | Lazy | `LazyConstantXxxArray` (primitive + bool + decimal); per-row broadcast, no buffer, ADR 0013 | +| `vortex.zigzag` | Lazy | Lazy | `LazyZigZagXxxArray` (I8/I16/I32/I64); broadcast → `LazyConstantXxxArray`, ADR 0010 + 0015 | +| `vortex.constant` | Lazy | Lazy | `LazyConstantXxxArray` (primitive + bool + decimal); per-row broadcast, no buffer, ADR 0015 | | `vortex.ext` | Zero-copy | Zero-copy | wraps storage | -| `vortex.runend` | Lazy | Lazy | `LazyRunEndXxxArray` (primitive + bool); Utf8/Binary stays Materialized (offset rebasing), ADR 0013 | +| `vortex.runend` | Lazy | Lazy | `LazyRunEndXxxArray` (primitive + bool); Utf8/Binary stays Materialized (offset rebasing), ADR 0015 | | `vortex.varbin` | Zero-copy | Zero-copy | bytes + offsets slices | | `vortex.varbinview` | Lazy | Lazy | `VarBinArray.ViewMode` — keeps views + data buffers as mmap slices | -| `vortex.alp` | Lazy | Lazy | `LazyAlpXxxArray`; broadcast → `LazyConstantXxxArray`; patched stays Materialized, ADR 0010 + 0013 | +| `vortex.alp` | Lazy | Lazy | `LazyAlpXxxArray`; broadcast → `LazyConstantXxxArray`; patched stays Materialized, ADR 0010 + 0015 | | `vortex.alprd` | Lazy | Lazy | `LazyAlpRdDoubleArray`/`LazyAlpRdFloatArray` — left/right + patches on access | | `vortex.dict` | Lazy | Lazy | `DictXxxArray` (numeric) + `VarBinArray.DictMode` (string), ADR 0012 | -| `vortex.sparse` | Lazy | Lazy | `LazySparseXxxArray` (primitive + bool); Utf8/Binary stays Materialized, ADR 0013 | +| `vortex.sparse` | Lazy | Lazy | `LazySparseXxxArray` (primitive + bool); Utf8/Binary stays Materialized, ADR 0015 | | `vortex.sequence` | Zero-copy | Zero-copy | synthetic (no data) | | `vortex.struct` | Zero-copy | Zero-copy | `StructArray` wraps fields | | `vortex.chunked` | Lazy | Lazy | `ChunkedXxxArray` (primitive/Bool) + `VarBinArray.ChunkedMode` (Utf8/Binary), ADR 0012 | @@ -121,8 +121,8 @@ decoder falls into one of three shapes: | `vortex.pco` | Materialized | Materialized | range-encoded decompression | | `fastlanes.bitpacked` | Materialized | Materialized | window unpacks bits | | `fastlanes.delta` | Materialized | Materialized | cumulative sum requires sequential decode | -| `fastlanes.for` | Lazy | Lazy | `LazyForXxxArray` (I8/U8/I16/U16/I32/U32/I64/U64), ADR 0010 + 0013 | -| `fastlanes.rle` | Lazy | Lazy | `LazyRleXxxArray`; validity → `OffsetBoolArray`; empty → `LazyConstantXxxArray`, ADR 0013 | +| `fastlanes.for` | Lazy | Lazy | `LazyForXxxArray` (I8/U8/I16/U16/I32/U32/I64/U64), ADR 0010 + 0015 | +| `fastlanes.rle` | Lazy | Lazy | `LazyRleXxxArray`; validity → `OffsetBoolArray`; empty → `LazyConstantXxxArray`, ADR 0015 | | `vortex.patched` | Materialized | Materialized | inner is full base + chunked patches (1024-elem blocks, lane-window-sorted); per-row access requires 2 laneOffsets reads + binary search inside the chunk window, so eager scatter wins for full scans | | `vortex.variant` | Lazy | Lazy | container wraps constant/chunked core (inner-typed) + optional shredded child | | `vortex.onpair` | n/a | n/a | not ported |