Closed YuanchengJiang closed 1 year ago
This seems like a bug to me. Consider this test case:
postgres=# create graph test;
CREATE GRAPH
postgres=# set graph_path to test;
SET
postgres=# create vlabel person;
CREATE VLABEL
postgres=# create elabel knows;
CREATE ELABEL
postgres=#
postgres=# create (fred:person {name: 'Fred'})-[:knows {name: 'Fred/Rob'}]->(rob:person {name: 'Rob'}), (rob)-[:knows {name: 'Rob/Sam'}]->(sam:person {name: 'Sam'}), (sam)-[:knows {name: 'Sam/Joe'}]->(joe:person {name: 'Joe'});
UPDATE 7
postgres=# match (a)-[e1]->(b)-[e2]->(c) return a.name as a, e1.name as e1, b.name as b, b.name as b, e2.name as e2, c.name as c;
a | e1 | b | b | e2 | c
--------+------------+-------+-------+-----------+-------
"Fred" | "Fred/Rob" | "Rob" | "Rob" | "Rob/Sam" | "Sam"
"Rob" | "Rob/Sam" | "Sam" | "Sam" | "Sam/Joe" | "Joe"
(2 rows)
OK, so far so good. That's equivalent to your Query 2. Those are the results I expected to see.
Now let's try to do something like your Query 1:
postgres=# match (a)-[e1]->(b), (b)-[e2]->(c) return a.name as a, e1.name as e1, b.name as b, b.name as b, e2.name as e2, c.name as c;
a | e1 | b | b | e2 | c
--------+------------+--------+--------+------------+-------
"Rob" | "Rob/Sam" | "Fred" | "Fred" | "Fred/Rob" | "Rob"
"Sam" | "Sam/Joe" | "Fred" | "Fred" | "Fred/Rob" | "Rob"
"Fred" | "Fred/Rob" | "Rob" | "Rob" | "Rob/Sam" | "Sam"
"Sam" | "Sam/Joe" | "Rob" | "Rob" | "Rob/Sam" | "Sam"
"Fred" | "Fred/Rob" | "Sam" | "Sam" | "Sam/Joe" | "Joe"
"Rob" | "Rob/Sam" | "Sam" | "Sam" | "Sam/Joe" | "Joe"
(6 rows)
Well, that's not good. Some of those edges are just not right. Specifically, these are wrong (the edges that are shown don't match the corresponding vertices):
"Rob" | "Rob/Sam" | "Fred" | "Fred" | "Fred/Rob" | "Rob"
"Sam" | "Sam/Joe" | "Fred" | "Fred" | "Fred/Rob" | "Rob"
"Sam" | "Sam/Joe" | "Rob" | "Rob" | "Rob/Sam" | "Sam"
"Fred" | "Fred/Rob" | "Sam" | "Sam" | "Sam/Joe" | "Joe"
Interestingly though, if you give "b" a label in the query it resolves the issue:
postgres=# match (a)-[e1]->(b:person), (b:person)-[e2]->(c) return a.name as a, e1.name as e1, b.name as b, b.name as b, e2.name as e2, c.name as c;
a | e1 | b | b | e2 | c
--------+------------+-------+-------+-----------+-------
"Fred" | "Fred/Rob" | "Rob" | "Rob" | "Rob/Sam" | "Sam"
"Rob" | "Rob/Sam" | "Sam" | "Sam" | "Sam/Joe" | "Joe"
(2 rows)
I'm using v2.13.0 here.
Will be fixed with #599 . This patch included in v2.13.1.
Version: 2.13.0
Query 1:
Query 2: