Summary
query_graph accepts UNWIND without error but never executes it — the clause is parsed and then ignored by the executor, so the rest of the query runs as if the UNWIND were absent. This contradicts the README, which both lists UNWIND as supported and states that unsupported syntax "fails with a clear unsupported … error." Instead the user gets a silently wrong result.
Reproduction (v0.9.0)
query_graph:
UNWIND [1,2,3] AS x MATCH (f:Function) WHERE f.name = 'main' RETURN f.name
Expected (per README): either 3× row multiplication, or a clear "unsupported" error.
Actual: the UNWIND is ignored; the MATCH runs once and returns its rows with no error and no warning.
Location
Parser accepts UNWIND (src/cypher/cypher.c:1832-1866) but the executor loop (cypher.c:4635-4694) has no UNWIND handling, so x is never bound and no row expansion occurs.
Suggested fix
Either implement UNWIND (bind the list elements and cross-product with subsequent MATCH/RETURN), or — consistent with the documented contract — reject it with the same unsupported … error path used for other unimplemented clauses so it fails loudly instead of silently.
Related
A sibling correctness gap: comparisons against unbound OPTIONAL MATCH variables evaluate TRUE (~cypher.c:2611-2612), which is also a silent-wrong-answer path. Happy to file separately if preferred.
Summary
query_graphacceptsUNWINDwithout error but never executes it — the clause is parsed and then ignored by the executor, so the rest of the query runs as if theUNWINDwere absent. This contradicts the README, which both listsUNWINDas supported and states that unsupported syntax "fails with a clearunsupported …error." Instead the user gets a silently wrong result.Reproduction (v0.9.0)
Location
Parser accepts
UNWIND(src/cypher/cypher.c:1832-1866) but the executor loop (cypher.c:4635-4694) has noUNWINDhandling, soxis never bound and no row expansion occurs.Suggested fix
Either implement
UNWIND(bind the list elements and cross-product with subsequent MATCH/RETURN), or — consistent with the documented contract — reject it with the sameunsupported …error path used for other unimplemented clauses so it fails loudly instead of silently.Related
A sibling correctness gap: comparisons against unbound OPTIONAL MATCH variables evaluate TRUE (~
cypher.c:2611-2612), which is also a silent-wrong-answer path. Happy to file separately if preferred.