Repository navigation
Cypher: relationship alias unsupported in row expression select (blocks IC11 job-referral) #1072
Copy link
Copy link
Closed
Description
Activity
- added 10 commits that reference this issue
on May 3, 2026 Closed via #1249 (merged at ef42830).
Implementation summary
Bare relationship-alias tokens in row expressions (
select([("rel", "workAt")]),WHERE rel IS NOT NULL,RETURN rel) now resolve and render as Cypher-style[:TYPE {prop: value, ...}]strings, with cell-for-cell parity betweenselect/where_rowsandRETURN <relAlias>.Key changes
graphistry/compute/gfql/row/pipeline.py::_gfql_resolve_tokenextends the bare-alias branch with edge-alias resolution: prefer{alias}.{_edge}when present, otherwise dispatch to the new shared vectorized renderer.graphistry/compute/gfql/row/entity_props.pyexposes a shared edge-entity renderer reused bycypher/result_postprocess.py::_format_edge_entitiesand the row-pipeline path.- Edge-alias classification is gated on
_gfql_rows_edge_aliasesmetadata propagated through row-table adapters so node-alias frames missing a node-id column are not misrendered as edges. - Renderer normalizes string escaping (
\\,'), float formatting (strips trailing.0+), and treats blank/whitespacetypeas absent ([{...}]instead of[: {...}]). - Re-entry
WHEREsecondary-alias property predicates (MATCH ... WITH a, b ... MATCH ... WHERE b.x = ...) are rewritten when the predicate has noexpr_treeby synthesizing WHERE expression text from structured predicates and clearing consumed predicates incypher/lowering.pyto avoid stale dual representation.
Test coverage — added regressions covering string escaping, float normalization, null-only properties, missing/empty
type, multi-edge rows,select/returnparity, node-alias misclassification guard, bare-aliasidparity, cuDF rendering, and re-entry WHERE rewrites on secondary aliases (incl. OR/XOR-around carried+trailing alias property paths).Validation
- Local: row pipeline + cypher tests
1068 passed, 70 skipped; full TCK3784 passed, 911 xfailed. - DGX-Spark (RAPIDS 25.02 + 26.02): targeted PR tests pass on both; broader
gfqlprofile passes (294 on 26.02; 289 on 25.02 with 2 pre-existing flaky cuDF tests deselected for environmental reasons). - PR CI: all required checks green at head
577031237.
Carries
#1071multi-alias carry throughWITHbefore MATCH re-entry — CLOSED via#1247.#1236OR/XOR-around-pattern WHERE lowering — CLOSED via#1244.- Composes cleanly with
#1248(ReentryPlan + multi-whole-row prefix WITH).
Summary
When an IC11-style Cypher query uses a relationship alias (e.g.
workAt) in aselectrow expression, the engine raises an unsupported-token error. This blocks execution of LDBC SNB Interactive Complex Query 11 (IC11 — job-referral).Error
Failing Pattern
IC11 matches a friend-of-friend to a company via a
WORKS_ATrelationship and then projects properties from both the relationship (workAt) and the company node:The
workAtrelationship alias appears in theRETURNprojection, and the engine'sselectrow expression evaluator does not handle relationship aliases — only node aliases are supported.Relationship to Related Issues
selectrow expression path, not the GFQL AST path.Affected Queries
interactive-complex-11.cypher) —job-referralprimitiveworkAt.workFrom)Provenance
Measured and reported from the pyg-bench SNB Interactive conformance harness.