Commit ef42830
* fix(gfql/row): resolve bare relationship alias in row expressions (#1072)
Bare edge aliases in select / where_rows / order_by row expressions raised
"unsupported token in row expression" because _gfql_resolve_token only had a
node-id fallback for the bare-alias case. Add an edge fallback: prefer the
edge-id column, otherwise render the relationship as a Cypher-style
[:TYPE {props}] string, mirroring what cypher RETURN <relAlias> already
produces via result_postprocess. Direct GFQL chains and cypher-lowered chains
now see the same column shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(cypher): support multi-alias carry through WITH before MATCH re-entry (#1071)
Pre-rewrite the prefix WITH stage in _compile_bounded_reentry_query so
secondary whole-row aliases are demoted to scalar property carries
(S.X AS __cypher_reentry_<S>_<X>__) and downstream S.X references compose
with the existing single-whole-row machinery (#1047/#1068). RETURN of a
secondary whole-row alias, and re-binding a secondary alias as a node
variable in the trailing MATCH, remain unsupported with precise errors.
Closes #1071.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(gfql): unify relationship alias rendering and harden row resolution (#1072)
* fix(gfql/cypher): close wave-3 alias resolution and reentry where gaps (#1072)
* docs(changelog): add #1072 entry for relationship alias in row expressions
Records the user-facing fix and amplifications for #1072 under
## [Development] → ### Fixed: bare edge-alias resolution in row
expressions, shared vectorized renderer in row/entity_props.py,
edge-alias gating via _gfql_rows_edge_aliases, string-escape /
float / empty-type rendering normalization, and re-entry WHERE
secondary-alias predicate rewriting via synthesized text.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test(gfql/row): add cuDF smoke test for bare relationship alias rendering
Wave 4 finding T2 (IMPORTANT): TestRelationshipAliasInRowExpression
had 14 new tests in PR #1249 but zero cuDF coverage on the new
edge-alias rendering path, despite Wave 2 vectorization being
specifically motivated by cuDF support (Wave 1 finding #4).
Adds test_select_bare_relationship_alias_renders_on_cudf_when_available
following the sibling pattern at test_row_pipeline_vectorized_cudf_when_available
(pytest.importorskip("cudf")). Asserts: (a) result keeps cuDF backend,
(b) bare-alias rendering produces "[:WORKS_AT {workFrom: 2010}]",
(c) select/return cell-for-cell parity holds on cuDF.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor(gfql/row): collapse duplicate ValueError in _gfql_resolve_token
Wave 4 finding D1 (SUGGESTION): the conditional at pipeline.py:2310 and
the raise at pipeline.py:2312 produce identical errors. After the
node-id branch (lines 2306-2309) returns, the only remaining outcome
is "unsupported token", regardless of edge_aliases membership — both
branches raised the same f-string. Collapsed to a single raise.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 80d8084 commit ef42830
7 files changed
Lines changed: 653 additions & 75 deletions
File tree
- graphistry
- compute/gfql
- cypher
- row
- tests/compute/gfql
- cypher
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5874 | 5874 | | |
5875 | 5875 | | |
5876 | 5876 | | |
5877 | | - | |
5878 | | - | |
5879 | | - | |
| 5877 | + | |
| 5878 | + | |
| 5879 | + | |
| 5880 | + | |
| 5881 | + | |
| 5882 | + | |
| 5883 | + | |
| 5884 | + | |
| 5885 | + | |
| 5886 | + | |
| 5887 | + | |
| 5888 | + | |
| 5889 | + | |
| 5890 | + | |
| 5891 | + | |
| 5892 | + | |
| 5893 | + | |
| 5894 | + | |
5880 | 5895 | | |
5881 | 5896 | | |
5882 | 5897 | | |
| |||
5907 | 5922 | | |
5908 | 5923 | | |
5909 | 5924 | | |
5910 | | - | |
| 5925 | + | |
| 5926 | + | |
| 5927 | + | |
| 5928 | + | |
5911 | 5929 | | |
5912 | 5930 | | |
5913 | 5931 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
20 | 26 | | |
21 | 27 | | |
22 | 28 | | |
| |||
270 | 276 | | |
271 | 277 | | |
272 | 278 | | |
273 | | - | |
274 | | - | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
| 279 | + | |
309 | 280 | | |
310 | 281 | | |
311 | 282 | | |
312 | 283 | | |
313 | 284 | | |
314 | 285 | | |
315 | 286 | | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
| 287 | + | |
328 | 288 | | |
329 | 289 | | |
330 | 290 | | |
| |||
377 | 337 | | |
378 | 338 | | |
379 | 339 | | |
380 | | - | |
381 | | - | |
382 | | - | |
383 | | - | |
384 | | - | |
385 | | - | |
386 | | - | |
| 340 | + | |
387 | 341 | | |
388 | | - | |
389 | | - | |
390 | | - | |
391 | | - | |
392 | | - | |
393 | | - | |
394 | | - | |
395 | | - | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
396 | 346 | | |
397 | | - | |
398 | | - | |
399 | 347 | | |
400 | 348 | | |
401 | 349 | | |
| |||
0 commit comments