Skip to content

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

Merged
jrgemignani merged 1 commit intoapache:masterfrom
MuhammadTahaNaveed:fix-i2395
Apr 25, 2026
Merged

Fix property access on list comprehension / predicate loop variables#2402
jrgemignani merged 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 thread src/backend/parser/cypher_expr.c
@jrgemignani jrgemignani merged commit 5a74048 into apache:master Apr 25, 2026
10 checks passed
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