Summary
A node alias equal to the node-id binding column is rejected up front with GFQLValidationError on every engine. The three other binding columns are not guarded:
| alias |
pandas / cuDF |
polars |
edge alias = source column (name="s") |
served, but the marker overwrites the source column: result has no edges |
served with an extra s_right column |
edge alias = destination column (name="d") |
served, destination column replaced by True ((3, True) edge pairs) |
served, extra d_right |
edge alias = edge-id binding (name="eid") |
served, edge-id column replaced by True |
raw polars.exceptions.SchemaError: datatypes of join keys don't match (not a GFQL error) |
Repro
import pandas as pd, graphistry
from graphistry.compute.ast import n, e_forward
nodes = pd.DataFrame({"key": [1, 2, 3], "id": [10, 20, 30]})
edges = pd.DataFrame({"s": [3, 3], "d": [1, 2], "type": ["HAS_CREATOR", "OTHER"], "eid": [100, 101]})
g = graphistry.nodes(nodes, "key").edges(edges, "s", "d", "eid")
ops = [n({"id": 30}, name="m"), e_forward({"type": "HAS_CREATOR"}, name="s"), n(name="p")]
g.gfql(ops)._edges # empty on pandas; the seed's HAS_CREATOR edge is gone
Found by the alias/column collision probe run for the #2046 review.
Expected
The chain validator rejects an alias that equals any binding column (source, destination, edge id) the same way it rejects the node-id binding, on every engine, before execution.
Pins
Strict-xfail pins live in graphistry/tests/compute/test_chain_alias_column_collision.py (every engine) and flip when the validator covers these.
Summary
A node alias equal to the node-id binding column is rejected up front with
GFQLValidationErroron every engine. The three other binding columns are not guarded:name="s")s_rightcolumnname="d")True((3, True)edge pairs)d_rightname="eid")Truepolars.exceptions.SchemaError: datatypes of join keys don't match(not a GFQL error)Repro
Found by the alias/column collision probe run for the #2046 review.
Expected
The chain validator rejects an alias that equals any binding column (source, destination, edge id) the same way it rejects the node-id binding, on every engine, before execution.
Pins
Strict-xfail pins live in
graphistry/tests/compute/test_chain_alias_column_collision.py(every engine) and flip when the validator covers these.