Hi, I'm getting an error with the following query, and I don't understand why. Is it a bug?
// Get all movies that rdj acted in, including the franchise of each movie
MATCH (person:Person {shortId: "rdj"})
OPTIONAL MATCH _path1 = (person)-[_rel1:ACTED_IN]->(_movie1:Movie)
// If this is uncommented, there is no error:
// WITH person, _movie1, _path1, _rel1
CALL {
WITH _movie1
OPTIONAL MATCH (_movie1)-[:FRANCHISE_IS]->(_moviefranchise1:MovieFranchise)
RETURN _moviefranchise1 LIMIT 1
}
WITH person, _movie1, _path1, _rel1, _moviefranchise1 {.uuid, .name} AS _franchise1
WITH person, _movie1, _path1, _rel1, _franchise1 ORDER BY _movie1.year DESC
WITH person, collect(_movie1 {.title, .year, franchise: _franchise1}) AS _movies1
RETURN person.name AS name, _movies1 AS movies ORDER BY person.name
I think you can ignore the second half of my query. The problem is in the first part, with the path variable _path1
. If I run the query as shown above, I get this syntax error:
Variable `_path1` not defined (line 10, column 22 (offset: 299))
" LIMIT 1"
The line in question does not reference the _path1
variable anyways.
If I uncomment the additional WITH
statement that is shown commented out, the query runs successfully. But why is that needed?
(Note: I know the _path1
variable is not being used here, but I'm generating these cypher queries programmatically and I found that I need to include the path variable to avoid some edge cases with similar queries when combined with collect()
)
This is on Neo4j 4.2
P.S. this doesn't really affect me, but I noticed that if I keep the query as written (with WITH
still commented out, and change the subquery to
CALL {
WITH _movie1, _path1
...
Then it gives a strange error:
Importing WITH should consist only of simple references to outside variables. Aliasing or expressions are not supported. (line 6, column 5 (offset: 137))
" WITH _movie1 AS _movie1, _path1 AS _path1"
^
where the cypher shown in the error message doesn't even match the query I wrote.