GGraziadei opened a new pull request, #17893:
URL: https://github.com/apache/iceberg/pull/17893

   Closes #17657.
   
   Follow-up to #16827, which deliberately mirrored the Z-order surface to keep 
that diff reviewable. This PR is the deferred de-duplication, along the lines 
@RussellSpitzer suggested in review ("we'll probably want a `MultiColumnTerm` 
or something like that in the future").
   
   ### What changed
   
   **Core** — new `org.apache.iceberg.expressions.MultiColumnTerm`, an 
immutable `Term` over an ordered list of column references. `Zorder` and 
`Hilbert` (previously identical apart from the class name) become two-line 
subclasses. Public constructors and `refs()` are unchanged; the parsed SQL 
grammar is untouched.
   
   **Spark 4.1** — `SparkZOrderFileRewriteRunner` and 
`SparkHilbertFileRewriteRunner` move onto a new abstract 
`SparkCurveFileRewriteRunner`, parameterised by the internal value column name, 
the exact per-curve error messages, and the combine step. The shared pieces — 
internal column schema/sort order, column validation (`validZOrderColNames` / 
`validHilbertColNames` were byte-for-byte the same logic), `sortSchema`, 
`sortedDF`, and the per-column ordered-bytes conversion — now live in one 
place. Each runner keeps only what is genuinely curve-specific: Z-order its two 
options and the interleave combine (~120 lines), Hilbert its fixed per-column 
bit width and the Hilbert-index combine (~75 lines). Adding a further curve is 
now a small, local change.
   
   **Dispatch** — the duplicated `zorder`/`hilbert` branches in 
`Spark3Util.toIcebergTerm` share one reference-extraction helper, and 
`RewriteDataFilesProcedure` collapses its two per-curve term lists into a 
single `List<MultiColumnTerm>` (mixing curves is detected by distinct term 
classes; error messages unchanged).
   
   ### What did not change
   
   Engine-side behaviour is bit-for-bit identical, which the existing tests 
enforce: **every pre-existing Z-order and Hilbert test passes unmodified** 
(`TestSparkFileRewriteRunners`, the Z-order/Hilbert cases of 
`TestRewriteDataFilesAction`, `TestRewriteDataFilesProcedure`). The only test 
change is the new `TestMultiColumnTerm` in core. All user-facing error messages 
are preserved exactly. Spark 3.5/4.0 are untouched.
   
   ### Out of scope
   
   The wider "arbitrary function via `Expressions`" refactor discussed in 
#16827 review builds naturally on this abstraction but is split out per the 
issue, to keep this diff mechanical and easy to verify.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to