[UUID 4c] CASE, IN and comparison transforms over the logical UUID type - #19183
Open
xiangfu0 wants to merge 1 commit into
Open
[UUID 4c] CASE, IN and comparison transforms over the logical UUID type#19183xiangfu0 wants to merge 1 commit into
xiangfu0 wants to merge 1 commit into
Conversation
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Aug 7, 2026
Adds UUID handling to the predicate evaluators, so =, !=, IN, NOT IN and range predicates work against a UUID column on both the raw and the dictionary path. UUID follows the pattern TIMESTAMP already uses: a logical type whose stored type does the work. The literal is parsed to its 16-byte stored form once, when the evaluator is built, and from there the existing BYTES evaluators apply -- no per-value conversion in the scan loop. The dictionary path needs no UUID branch: Dictionary#getStoredValue returns hex for a UUID column and indexOf(String) hex-decodes, so the existing String-keyed lookup is already correct. PredicateUtils renders the literal to that hex form for those String-typed lookup APIs. Split into apache#19181 (CAST), apache#19182 (bloom filter pruning) and apache#19183 (transform functions); this PR is now just the predicate evaluators.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #19183 +/- ##
============================================
+ Coverage 66.62% 66.64% +0.01%
Complexity 1423 1423
============================================
Files 3443 3443
Lines 218626 218632 +6
Branches 34792 34793 +1
============================================
+ Hits 145662 145702 +40
+ Misses 61240 61208 -32
+ Partials 11724 11722 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
xiangfu0
added a commit
to xiangfu0/pinot
that referenced
this pull request
Aug 7, 2026
Adds UUID handling to the predicate evaluators, so =, !=, IN, NOT IN and range predicates work against a UUID column on both the raw and the dictionary path. UUID follows the pattern TIMESTAMP already uses: a logical type whose stored type does the work. The literal is parsed to its 16-byte stored form once, when the evaluator is built, and from there the existing BYTES evaluators apply -- no per-value conversion in the scan loop. The dictionary path needs no UUID branch: Dictionary#getStoredValue returns hex for a UUID column and indexOf(String) hex-decodes, so the existing String-keyed lookup is already correct. PredicateUtils renders the literal to that hex form for those String-typed lookup APIs. Split into apache#19181 (CAST), apache#19182 (bloom filter pruning) and apache#19183 (transform functions); this PR is now just the predicate evaluators.
xiangfu0
force-pushed
the
uuid-split/04c-transforms
branch
from
August 7, 2026 23:41
dc7bd30 to
0277638
Compare
xiangfu0
force-pushed
the
uuid-split/04c-transforms
branch
3 times, most recently
from
August 8, 2026 00:25
af0fbd4 to
0959699
Compare
xiangfu0
commented
Aug 8, 2026
| return _bytesValuesSV; | ||
| } | ||
|
|
||
|
|
Add UUID transform regression coverage and stored-byte handling for CASE. - CASE validates bare UUID branches as fixed-width hex and initializes the bytes result buffer for null-aware evaluation; canonical dashed values require CAST(... AS UUID). - IN already uses the BYTES stored path; cover uppercase hex, explicit UUID casts, and rejection of bare canonical strings. - Binary comparisons already dispatch through BYTES stored types; add dictionary/raw regression coverage and improve diagnostics and comparator documentation. Split out of apache#18872. Prerequisite UUID changes apache#19181 and apache#19182 are now on master.
xiangfu0
force-pushed
the
uuid-split/04c-transforms
branch
from
August 8, 2026 00:30
0959699 to
86e8f72
Compare
Jackie-Jiang
approved these changes
Aug 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds logical UUID handling and regression coverage for CASE, IN, and binary comparison transforms.
CaseTransformFunction
UUID results use the BYTES stored path. A bare STRING branch must be the fixed-width 32-character hex encoding of the 16 UUID bytes. Canonical dashed UUID text must be written as
CAST('...' AS UUID). The null-aware bytes path also initializes the bytes result buffer correctly.InTransformFunction
UUID membership reuses the existing BYTES stored path. Bare literals must be fixed-width hex; canonical dashed text must use
CAST(... AS UUID). This PR adds regression coverage for uppercase hex, explicit UUID casts, and rejection of bare canonical strings.BinaryOperatorTransformFunction
Binary comparisons already dispatch through stored BYTES. This PR adds dictionary/raw UUID regression coverage and improves comparison diagnostics and documentation.
Testing
About this PR
Split out of #18872. Part of #18140. Prerequisites #19181 and #19182 are merged.