This repository was archived by the owner on Apr 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
Bad plan for UNWIND and MATCH #380
Copy link
Copy link
Open
Labels
Description
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.
Reactions are currently unavailable