This is an automated email from the ASF dual-hosted git repository.
rafsun42 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/age.git
The following commit(s) were added to refs/heads/master by this push:
new b3e97a37 Issue # 1007 - Add regression tests for MATCH clause using
labels only (#1019)
b3e97a37 is described below
commit b3e97a378a0e0b586cf0f2c394751d8ec91de60e
Author: Zainab Saad <[email protected]>
AuthorDate: Mon Jul 10 21:48:18 2023 +0500
Issue # 1007 - Add regression tests for MATCH clause using labels only
(#1019)
- Add regression tests for cypher queries that enter
either or both last IF conditionals in
make_directed_edge_join_conditions in cypher_clause.c
---
regress/expected/cypher_match.out | 184 ++++++++++++++++++++++++++++++++++++++
regress/sql/cypher_match.sql | 81 +++++++++++++++++
2 files changed, 265 insertions(+)
diff --git a/regress/expected/cypher_match.out
b/regress/expected/cypher_match.out
index a207cabf..ae8905c9 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 fb650842..739558d1 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)