Hi All,

The openCypher specification for MERGE has an ambiguous specification on
the subject of undirected relationships.

Per the document on page 119 in the section titled "Merge on an undirected
relationship":

MERGE can also be used with an undirected relationship. When it needs to
create a new one, it will pick a direction.

Query:
MATCH (charlie:Person {name: 'Charlie Sheen'}), (oliver:Person {name:
'Oliver Stone'})
MERGE (charlie)-[r:KNOWS]-(oliver)
RETURN r

As 'Charlie Sheen' and 'Oliver Stone' do not know each other, this MERGE
query will create a KNOWS relationship between them. The direction of the
created relationship is arbitrary.

We should probably clarify that. Having MERGE use undirected edges to find
paths is a potentially useful feature, but "The direction of the created
relationship is arbitrary" is unclear and should be clarified.

I believe there are two potential ways to solve this issue:
Option 1: Do not let MERGE use undirected edges.
Option 2: Have a default direction that AGE will use every time MERGE
creates an edge where direction is not specified.

Personally, I lean towards proposal 2 with the default direction being a
right directed edge. The other way limits functionality, and as long as the
decision we make is expressed well in the documentation, I don't believe it
is too confusing.

Please let us know what you think.

Reply via email to