Fix property access on list comprehension / predicate loop variables by MuhammadTahaNaveed · Pull Request #2402 · apache/age · GitHub
Skip to content

Fix property access on list comprehension / predicate loop variables#2402

Open
MuhammadTahaNaveed wants to merge 1 commit intoapache:masterfrom
MuhammadTahaNaveed:fix-i2395
Open

Fix property access on list comprehension / predicate loop variables#2402
MuhammadTahaNaveed wants to merge 1 commit intoapache:masterfrom
MuhammadTahaNaveed:fix-i2395

Conversation

@MuhammadTahaNaveed
Copy link
Copy Markdown
Member

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.

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>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_indirection to return NULL (instead of erroring) when a properties column is not present, enabling fallback indirection handling.
  • Add regression coverage for property access on loop variables in any/all/none/single and 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
File Description
src/backend/parser/cypher_expr.c Avoids hard error when properties column is missing; allows fallback transformation + indirection via agtype operators.
regress/sql/predicate_functions.sql Adds regression queries for property access on predicate loop variables (maps + collected vertices).
regress/sql/list_comprehension.sql Adds regression queries for property access on list-comprehension loop variables (maps + vertices).
regress/expected/predicate_functions.out Captures expected results for the new predicate-function regression queries.
regress/expected/list_comprehension.out Captures expected results for the new list-comprehension regression queries.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1333 to +1334
* If there's no "properties" column, continue transforming the
* ColumnRef as an agtype value and try to apply the indirection via
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

List comprehension over a collected node list may fail when accessing node properties.

3 participants