Fix property access on list comprehension / predicate loop variables#2402
Fix property access on list comprehension / predicate loop variables#2402MuhammadTahaNaveed wants to merge 1 commit intoapache:masterfrom
Conversation
transform_column_ref_for_indirection errored with "could not find properties for <name>" when the referenced RTE had no "properties" column (as is the case for the unnest() RTE used by list comprehension and the any/all/none/single predicate functions), breaking queries like [x IN list | x.name] and any(x IN list WHERE x.n > 1). Return NULL instead so the caller continues transforming the ColumnRef as an agtype value and applies the indirection via agtype_access_operator. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Fixes Cypher property access (x.prop) on list-comprehension and predicate-function loop variables by avoiding an error path when the referenced RTE doesn’t have a properties column (e.g., unnest()-backed loop variables), allowing indirection to be applied via agtype_access_operator instead.
Changes:
- Update
transform_column_ref_for_indirectionto returnNULL(instead of erroring) when apropertiescolumn is not present, enabling fallback indirection handling. - Add regression coverage for property access on loop variables in
any/all/none/singleand list comprehensions. - Update expected regression outputs accordingly.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| * If there's no "properties" column, continue transforming the | ||
| * ColumnRef as an agtype value and try to apply the indirection via |
There was a problem hiding this comment.
The new block comment implies this function itself will “continue transforming the ColumnRef as an agtype value”, but the function only returns the result of scanNSItemForColumn (possibly NULL). Consider rewording to explicitly state that returning NULL is intentional so the caller (transform_A_Indirection) will fall back to transforming the ColumnRef and applying indirection via agtype_access_operator.

transform_column_ref_for_indirectionerrored withcould not find properties for <name>when the referenced RTE had no "properties" column (as is the case for the unnest() RTE used by list comprehension and the any/all/none/single predicate functions), breaking queries like[x IN list | x.name] and any(x IN list WHERE x.n > 1).Return NULL instead so the caller continues transforming the ColumnRef as an agtype value and applies the indirection via agtype_access_operator.