Bad plan for UNWIND and MATCH
Opened this issue · 0 comments
szarnyasg commented
To reproduce the issue, add the following to one of the compiler tests, e.g. RandomCompilationTest
:
test("Indexing array in MATCH") {
val stages = compile(
"""UNWIND [[20, 30]] AS tuple
|MATCH (org:Organisation {id: tuple[0]})
|RETURN org.id
""".stripMargin)
printlnSuppressIfIngraph(stages.toString)
}
This results in:
'Production
+- 'Projection [ret(p(id, v(org, {}, false, (org#0)), (org.id#0)), (org.id), (org.id#1))]
+- 'Join
:- 'Unwind unwindattribute(listexpression(listexpression(20, 30)), tuple, (tuple#0))
: +- Dual
+- 'AllDifferent
+- 'Selection (p(id, v(org, {}, false, (org#0)), (org.id#0)) = indexlookupexpression(unwindattribute(listexpression(listexpression(20, 30)), tuple, (tuple#0)), 0))
+- 'GetVertices v(org, {Organisation}, (id,indexlookupexpression(unwindattribute(listexpression(listexpression(20, 30)), tuple, (tuple#0)), 0)), false, (org#0))
This plan does not work because the Selection
operator is trying to filter for tuple#0
, which is produced on the other branch of the Join
operator (by the Unwind
operator).
This currently blocks Interactive update 1.