Skip to content

Commit 68186f8

Browse files
dfa1claude
andcommitted
docs(adr): ADR 0010 → Implemented; Phase 3 superseded by ADR 0013
Phases 0/1/2 (lazy decode for 1:1 transforms — ALP, FoR, ZigZag) shipped over 2026-06-14 — 2026-06-15. Update status from Proposed to Implemented and add an Outcome section noting: - Phase 1 — Array hierarchy refactor to non-sealed interfaces. - Phase 2 — LazyAlpDouble/Float, LazyForLong/Int, LazyZigZagLong/Int records; ArraySegments.of(arr, arena) materialise fallback. - Pattern generalised beyond 1:1 transforms: ADR 0012 (lazy Chunked / Dict / VarBin) plus vortex.runend, vortex.sparse, and fastlanes.rle adopted the same top-level record + materialise-fallback shape (see LazyRunEnd*, LazySparse*, LazyRle* in reader.array). Phase 3 (compute pushdown) is superseded by ADR 0013 — that ADR lands the masks-and-kernels framework Phase 3 sketched, plus the wider design needed for pushdown to compose across the lazy storage types from ADRs 0010 and 0012. Also update docs/adr/ADR.md index entry from Proposed to Implemented. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent f35f9a9 commit 68186f8

2 files changed

Lines changed: 34 additions & 2 deletions

File tree

docs/adr/0010-lazy-decode.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# ADR 0010: Lazy decode for 1:1 transform encodings
22

3-
- **Status:** Proposed
3+
- **Status:** Implemented
44
- **Date:** 2026-06-13
5+
- **Implemented:** 2026-06-14 — 2026-06-15
56
- **Deciders:** project maintainer
67
- **Supersedes:**
78
- **Superseded by:**
@@ -606,6 +607,37 @@ Net negative.
606607
Rejected: only works if scan does not eagerly decode — which is exactly
607608
phase 1.
608609

610+
## Outcome
611+
612+
Phases 0/1/2 (lazy decode for the 1:1 transforms) shipped over 2026-06-14 — 2026-06-15:
613+
614+
- **Phase 1 — Array hierarchy refactor.** Primitive `Array` interfaces (`LongArray`,
615+
`IntArray`, `DoubleArray`, …) converted to non-sealed so new lazy variants can implement
616+
them without touching the hierarchy.
617+
- **Phase 2 — Lazy ALP / FoR / ZigZag.** `LazyAlpDoubleArray`, `LazyAlpFloatArray`,
618+
`LazyForLongArray`, `LazyForIntArray`, `LazyZigZagLongArray`, `LazyZigZagIntArray`
619+
shipped. Each holds the encoded child + transform parameters; per-row dispatch applies
620+
the transform on demand. `ArraySegments.of(arr, arena)` materialises into a fresh segment
621+
only when a downstream caller demands a contiguous buffer.
622+
623+
The lazy-storage pattern generalised beyond the 1:1 transform scope of this ADR. Adjacent
624+
encodings adopted the same top-level record shape:
625+
626+
- [ADR 0012 — Lazy Chunked / Dict / VarBin layouts](0012-zero-copy-layout-decoding.md).
627+
- `vortex.runend`, `vortex.sparse`, `fastlanes.rle` (lazy lookup tables; not 1:1 transforms
628+
but the same lazy-record + `ArraySegments` materialise pattern; see
629+
`LazyRunEndXxxArray`, `LazySparseXxxArray`, `LazyRleXxxArray` in `reader.array`).
630+
631+
`docs/compatibility.md` Decode shape table tracks per-encoding status.
632+
633+
### Phase 3 — superseded
634+
635+
The compute-pushdown phase (per-encoding `compareXxx` / `take` / `filter` operating on the
636+
encoded form) is **superseded by [ADR 0013 — Compute primitives: masks, kernels,
637+
no-materialise](0013-compute-primitives.md)**. ADR 0013 lands the masks-and-kernels
638+
framework that Phase 3 sketched, plus the wider design needed to make pushdown compose
639+
across the lazy storage types from ADRs 0010 and 0012.
640+
609641
## References
610642

611643
- Rust reference: `https://github.com/spiraldb/vortex/tree/main/encodings/alp/src/alp/compute`

docs/adr/ADR.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Each ADR is a Markdown file named `NNNN-short-title.md`. Use `template.md` as th
2222
| 0007 | Pure-Java vortex.pco encoder | Implemented |
2323
| 0008 | Domain primitives for unsigned integers | Proposed |
2424
| 0009 | Write API ergonomics | Completed |
25-
| 0010 | Lazy decode | Proposed |
25+
| 0010 | Lazy decode | Implemented |
2626
| 0011 | Writer zero-copy MemorySegment overload | Deferred |
2727
| 0012 | Zero-copy layout decoding: lazy Chunked/Dict | Implemented |
2828
| 0013 | Compute primitives: masks, kernels, no-materialise | Proposed |

0 commit comments

Comments
 (0)