Skip to content

API: Fix Identity projection for mismatched transform types#17261

Open
yadavay-amzn wants to merge 1 commit into
apache:mainfrom
yadavay-amzn:fix/15502-identity-projection
Open

API: Fix Identity projection for mismatched transform types#17261
yadavay-amzn wants to merge 1 commit into
apache:mainfrom
yadavay-amzn:fix/15502-identity-projection

Conversation

@yadavay-amzn

Copy link
Copy Markdown
Contributor

This continues #16074, which was auto-closed by the stale bot and can no longer be reopened (GitHub blocks reopening because the branch was force-pushed/recreated). Same fix, rebased onto current main.

What

Identity.projectStrict() currently produces a predicate even when the predicate term is a transform expression rather than a BoundReference, which yields an invalid cross-type predicate during partition projection. This adds a guard so that a non-BoundReference term makes projectStrict() return null, letting the projection framework fall back to alwaysTrue/alwaysFalse. project() delegates to projectStrict(), so both paths are covered.

Why

Fixes #15502 - Identity partition projection returns incorrect results when the source and projected transform types differ.

Tests

Adds a regression test in TestProjection that exercises the mismatched-transform case; it fails on the pre-fix code (producing an invalid ref(...) == ... predicate instead of alwaysTrue) and passes with the fix.

…5502)

Identity.project() and projectStrict() delegate to projectStrict() which
creates an unbound predicate with the literal from the input predicate.
When the predicate term is a transform (e.g. hours(ts) = 490674), the
literal type (integer) does not match the partition field type
(timestamptz), causing a ValidationException when the unbound predicate
is later bound to the partition schema.

Fix: Return null from projectStrict() when the predicate term is not a
BoundReference, indicating the identity transform cannot project
transform-based predicates. This causes the projection to fall back to
alwaysTrue (inclusive) or alwaysFalse (strict), which is correct.
@yadavay-amzn

Copy link
Copy Markdown
Contributor Author

@ebyhr this is the rebased continuation of #16074 (which the stale bot closed and GitHub won't let me reopen - the branch was force-pushed/recreated). It's a small fix (+35/-0) for Identity projection on mismatched transform types (#15502), now rebased onto current main and green. Would you be willing to take another look when you have a moment?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ValidationException when filtering identity-partitioned timestamp field using other transforms

1 participant