diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index a207cabff..ae8905c92 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -138,6 +138,46 @@ $$) AS (a agtype); {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (4 rows) +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]-() RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]-(:v1) RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[]-()-[e]-(:v1) RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-()-[]-(:v1) RETURN a +$$) AS (a agtype); + a +---------------------------------------------------------------------------------- + {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex + {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex +(2 rows) + -- Right Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[:e1]->(b:v1)-[:e1]->(c:v1) RETURN a, b, c @@ -187,6 +227,33 @@ $$) AS (a agtype); {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (1 row) +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]->() RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[e]->(:v1) RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]->(:v1) RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + --Left Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)<-[:e1]-(b:v1)<-[:e1]-(c:v1) RETURN a, b, c @@ -236,6 +303,15 @@ $$) AS (a agtype); {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge (1 row) +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)<-[e]-(:v1) RETURN e +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + --Divergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v2 {id:'initial'})<-[:e2]-(:v2 {id:'middle'})-[:e2]->(:v2 {id:'end'}) @@ -278,6 +354,40 @@ $$) AS (i agtype); {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex (4 rows) +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v2)<-[]-(:v2)-[]->(:v2) + MATCH p=()-[]->() + RETURN p +$$) AS (i agtype); + i +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path + [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path + [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path + [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path +(8 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()<-[]-(:v2)-[]->() + MATCH p=()-[]->() + RETURN p +$$) AS (i agtype); + i +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path + [{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex, {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge, {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex]::path + [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path + [{"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex, {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge, {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path +(8 rows) + --Convergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v3 {id:'initial'})-[:e3]->(:v3 {id:'middle'})<-[:e3]-(:v3 {id:'end'}) @@ -296,6 +406,16 @@ $$) AS (i agtype); {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge (2 rows) +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v3)-[b:e3]->() + RETURN b +$$) AS (i agtype); + i +--------------------------------------------------------------------------------------------------------------------------- + {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge + {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge +(2 rows) + SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() MATCH p=(n)<-[]-() @@ -343,6 +463,16 @@ $$) AS (div_path agtype); [{"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path (1 row) +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]->(:v3)<-[]-(b) + where a.id = 'initial' + RETURN b +$$) AS (con_path agtype); + con_path +------------------------------------------------------------------------------ + {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex +(1 row) + --Patterns SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1), p=(a)-[]-()-[]-() @@ -421,6 +551,27 @@ $$) AS (i agtype, b agtype, c agtype); 1 | "initial" | "middle" (12 rows) +SELECT * FROM cypher('cypher_match', $$ + MATCH (a:v) + MATCH (:v1)-[]-(c) + RETURN a.i, c.id +$$) AS (i agtype, c agtype); + i | c +---+----------- + | "initial" + 0 | "initial" + 1 | "initial" + | "middle" + 0 | "middle" + 1 | "middle" + | "middle" + 0 | "middle" + 1 | "middle" + | "end" + 0 | "end" + 1 | "end" +(12 rows) + -- -- Property constraints -- @@ -1629,6 +1780,39 @@ $$) AS (a agtype, r agtype); {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge (1 row) +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((:A)<-[]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + a | r +-----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge +(1 row) + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((c)<-[]-(:A)) + RETURN a, r +$$) AS (a agtype, r agtype); + a | r +-----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge +(1 row) + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((:C)<-[]-(:A)) + RETURN a, r +$$) AS (a agtype, r agtype); + a | r +-----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge +(1 row) + SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c) diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index fb6508423..739558d1f 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -68,6 +68,22 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[e]-() RETURN e $$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]-() RETURN e +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]-(:v1) RETURN e +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[]-()-[e]-(:v1) RETURN e +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-()-[]-(:v1) RETURN a +$$) AS (a agtype); + -- Right Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[:e1]->(b:v1)-[:e1]->(c:v1) RETURN a, b, c @@ -93,6 +109,18 @@ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[b:e1]-()-[]->() RETURN b $$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]->() RETURN e +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[e]->(:v1) RETURN e +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)-[e]->(:v1) RETURN e +$$) AS (a agtype); + --Left Path Test SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)<-[:e1]-(b:v1)<-[:e1]-(c:v1) RETURN a, b, c @@ -118,6 +146,10 @@ SELECT * FROM cypher('cypher_match', $$ MATCH ()<-[b:e1]-()-[]-() RETURN b $$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v1)<-[e]-(:v1) RETURN e +$$) AS (a agtype); + --Divergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v2 {id:'initial'})<-[:e2]-(:v2 {id:'middle'})-[:e2]->(:v2 {id:'end'}) @@ -140,6 +172,18 @@ SELECT * FROM cypher('cypher_match', $$ RETURN n $$) AS (i agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v2)<-[]-(:v2)-[]->(:v2) + MATCH p=()-[]->() + RETURN p +$$) AS (i agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()<-[]-(:v2)-[]->() + MATCH p=()-[]->() + RETURN p +$$) AS (i agtype); + --Convergent Path Tests SELECT * FROM cypher('cypher_match', $$ CREATE (:v3 {id:'initial'})-[:e3]->(:v3 {id:'middle'})<-[:e3]-(:v3 {id:'end'}) @@ -150,6 +194,10 @@ SELECT * FROM cypher('cypher_match', $$ RETURN b $$) AS (i agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (:v3)-[b:e3]->() + RETURN b +$$) AS (i agtype); SELECT * FROM cypher('cypher_match', $$ MATCH ()-[]->(n:v1)<-[]-() @@ -181,6 +229,12 @@ SELECT * FROM cypher('cypher_match', $$ RETURN div_path $$) AS (div_path agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]->(:v3)<-[]-(b) + where a.id = 'initial' + RETURN b +$$) AS (con_path agtype); + --Patterns SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1), p=(a)-[]-()-[]-() @@ -220,6 +274,12 @@ SELECT * FROM cypher('cypher_match', $$ RETURN a.i, b.id, c.id $$) AS (i agtype, b agtype, c agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a:v) + MATCH (:v1)-[]-(c) + RETURN a.i, c.id +$$) AS (i agtype, c agtype); + -- -- Property constraints -- @@ -794,6 +854,27 @@ SELECT * FROM cypher('test_retrieve_var', $$ RETURN a, r $$) AS (a agtype, r agtype); +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((:A)<-[]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((c)<-[]-(:A)) + RETURN a, r +$$) AS (a agtype, r agtype); + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS((:C)<-[]-(:A)) + RETURN a, r +$$) AS (a agtype, r agtype); + SELECT * FROM cypher('test_retrieve_var', $$ MATCH (a:A)-[r:incs]->() WITH a, r OPTIONAL MATCH (a)-[r]->(c)