You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Reimplement list comprehension to use ARRAY sublinks.
- Some test results were not correct. All the test results that are
modified are correct and are verified with neo4j.
- Also resolves the issue of using list comprehension in MERGE clause (1611)
and issue 1850
* Licensed to the Apache Software Foundation (ASF) under one
3
+
* or more contributor license agreements. See the NOTICE file
4
+
* distributed with this work for additional information
5
+
* regarding copyright ownership. The ASF licenses this file
6
+
* to you under the Apache License, Version 2.0 (the
7
+
* "License"); you may not use this file except in compliance
8
+
* with the License. You may obtain a copy of the License at
9
+
*
10
+
* http://www.apache.org/licenses/LICENSE-2.0
11
+
*
12
+
* Unless required by applicable law or agreed to in writing,
13
+
* software distributed under the License is distributed on an
14
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+
* KIND, either express or implied. See the License for the
16
+
* specific language governing permissions and limitations
17
+
* under the License.
18
+
*/
19
+
20
+
LOAD 'age';
21
+
SET search_path TO ag_catalog;
22
+
23
+
SELECT create_graph('list_comprehension');
24
+
25
+
SELECT*from cypher('list_comprehension', $$ CREATE (u {list: [0, 2, 4, 6, 8, 10, 12]}) RETURN u $$) AS (result agtype);
26
+
SELECT*from cypher('list_comprehension', $$ CREATE (u {list: [1, 3, 5, 7, 9, 11, 13]}) RETURN u $$) AS (result agtype);
27
+
SELECT*from cypher('list_comprehension', $$ CREATE (u {list: []}) RETURN u $$) AS (result agtype);
28
+
29
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2)] $$) AS (result agtype);
30
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2)][2] $$) AS (result agtype);
31
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2)][1..4] $$) AS (result agtype);
32
+
33
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0] $$) AS (result agtype);
34
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0][2] $$) AS (result agtype);
35
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0][0..4] $$) AS (result agtype);
36
+
37
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0 | u^2 ] $$) AS (result agtype);
38
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0 | u^2 ][3] $$) AS (result agtype);
39
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) WHERE u % 3=0 | u^2 ][1..5] $$) AS (result agtype);
40
+
41
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) | u^2 ] $$) AS (result agtype);
42
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) | u^2 ][0] $$) AS (result agtype);
43
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN range(1, 30, 2) | u^2 ][0..2] $$) AS (result agtype);
44
+
45
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN (u) $$) AS (result agtype);
46
+
SELECT*FROM cypher('list_comprehension', $$ MATCH () RETURN [i IN range(0, 20, 2) WHERE i % 3=0 ] $$) AS (result agtype);
47
+
SELECT*FROM cypher('list_comprehension', $$ MATCH () RETURN [i IN range(0, 20, 2) WHERE i % 3=0 | i^2 ] $$) AS (result agtype);
48
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i IN range(0, 20, 2) WHERE i % 3=0 | i^2 ] $$) AS (result agtype);
49
+
SELECT*FROM cypher('list_comprehension', $$ MATCH p=() RETURN [i IN range(0, 20, 2) WHERE i % 3=0 | i^2 ] $$) AS (result agtype);
50
+
SELECT*FROM cypher('list_comprehension', $$ MATCH p=(u) RETURN [i IN range(0, 20, 2) WHERE i % 3=0 | i^2 ] $$) AS (result agtype);
51
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.list] $$) AS (result agtype);
52
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.listWHERE i % 3=0] $$) AS (result agtype);
53
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.listWHERE i % 3=0 | i/3] $$) AS (result agtype);
54
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.listWHERE i % 3=0 | i/3][1] $$) AS (result agtype);
55
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.listWHERE i % 3=0 | i/3][0..2] $$) AS (result agtype);
56
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) RETURN [i INu.listWHERE i % 3=0 | i/3][0..2][1] $$) AS (result agtype);
57
+
58
+
-- Nested cases
59
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3]]] $$) AS (result agtype);
60
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [i IN [1,2,3]]]] $$) AS (result agtype);
61
+
62
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1]] $$) AS (result agtype);
63
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3]] WHERE i>1] $$) AS (result agtype);
64
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1] WHERE i>2] $$) AS (result agtype);
65
+
66
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1 | i^2]] $$) AS (result agtype);
67
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3]] WHERE i>1 | i^2] $$) AS (result agtype);
68
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1] WHERE i>2 | i^2] $$) AS (result agtype);
69
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1 | i^2] WHERE i>4] $$) AS (result agtype);
70
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN [i IN [1,2,3] WHERE i>1 | i^2] WHERE i>4 | i^2] $$) AS (result agtype);
71
+
72
+
-- List comprehension inside where and property constraints
73
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i IN range(0,12,2)] RETURN u $$) AS (result agtype);
74
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i IN range(1,13,2)] RETURN u $$) AS (result agtype);
75
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i IN range(0,12,2) WHERE i>4] RETURN u $$) AS (result agtype);
76
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i IN range(1,13,2) WHERE i>4 | i^1] RETURN u $$) AS (result agtype);
77
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list@>[i IN range(0,6,2)] RETURN u $$) AS (result agtype);
78
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) MATCH (v) WHEREv.list=[i INu.list] RETURN v $$) AS (result agtype);
79
+
80
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list:[i IN range(0,12,2)]}) RETURN u $$) AS (result agtype);
81
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list:[i IN range(1,13,2)]}) RETURN u $$) AS (result agtype);
82
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list:[i IN range(0,12,2) WHERE i>4]}) RETURN u $$) AS (result agtype);
83
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list:[i IN range(1,13,2) WHERE i>4 | i^1]}) RETURN u $$) AS (result agtype);
84
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) MATCH (v {list:[i INu.list]}) RETURN v $$) AS (result agtype);
85
+
86
+
SELECT*FROM cypher('list_comprehension', $$ CREATE (u {list:[i IN range(12,24,2)]}) RETURN u $$) AS (result agtype);
87
+
SELECT*FROM cypher('list_comprehension', $$ CREATE (u {list:[i IN range(0,12,2) WHERE i>4]}) RETURN u $$) AS (result agtype);
88
+
SELECT*FROM cypher('list_comprehension', $$ CREATE (u {list:[i IN range(1,13,2) WHERE i>4 | i^2]}) RETURN u $$) AS (result agtype);
89
+
SELECT*FROM cypher('list_comprehension', $$ WITH [u IN [1,2,3]] AS a CREATE (u {list:a}) RETURN u $$) AS (result agtype);
90
+
91
+
-- List comprehension in the WITH WHERE clause
92
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u) WITH u WHEREu.list= [u IN [0, 2, 4, 6, 8, 10, 12]] RETURN u $$) AS (u agtype);
93
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u) WITH u WHEREu.list= [u IN [0, 2, 4, 6, 8, 10, 12]] OR size(u.list) =0 RETURN u $$) AS (u agtype);
94
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u) WITH u WHEREu.list= [u IN [0, 2, 4, 6, 8, 10, 12]] OR size(u.list)::bool RETURN u $$) AS (u agtype);
95
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u) WITH u WHEREu.list= [u IN [0, 2, 4, 6, 8, 10, 12]] OR NOT size(u.list)::bool RETURN u $$) AS (u agtype);
96
+
97
+
SELECT*FROM cypher('list_comprehension', $$ CREATE(u:csm_match {list: ['abc', 'def', 'ghi']}) $$) AS (u agtype);
98
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u: csm_match) WITH u WHERE [u INu.list][0] STARTS WITH "ab" RETURN u $$) AS (u agtype);
99
+
100
+
SELECT*FROM cypher('list_comprehension', $$ WITH [1, 2, 3] AS u WHERE u = [u IN [1, 2, 3]] RETURN u $$) AS (u agtype);
101
+
SELECT*FROM cypher('list_comprehension', $$ WITH 1AS u WHERE u = [u IN [1, 2, 3]][0] RETURN u $$) AS (u agtype);
102
+
SELECT*FROM cypher('list_comprehension', $$ WITH ['abc', 'defgh'] AS u WHERE [v In u][1] STARTS WITH 'de' RETURN u $$) AS (u agtype);
103
+
104
+
-- List comprehension in UNWIND
105
+
SELECT*FROM cypher('list_comprehension', $$ UNWIND [u IN [1, 2, 3]] AS u RETURN u $$) AS (u agtype);
106
+
SELECT*FROM cypher('list_comprehension', $$ UNWIND [u IN [1, 2, 3] WHERE u >1 | u*2] AS u RETURN u $$) AS (u agtype);
107
+
108
+
-- invalid use of aggregation in UNWIND
109
+
SELECT*FROM cypher('list_comprehension', $$ WITH [1, 2, 3] AS u UNWIND collect(u) AS v RETURN v $$) AS (u agtype);
110
+
111
+
-- List comprehension in SET
112
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u {list: [0, 2, 4, 6, 8, 10, 12]}) SETu.a= [u IN range(0, 5)] RETURN u $$) AS (u agtype);
113
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u {list: [0, 2, 4, 6, 8, 10, 12]}) SETu.a= [u IN []] RETURN u $$) AS (u agtype);
114
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u {list: [0, 2, 4, 6, 8, 10, 12]}) SET u += {b: [u IN range(0, 5)]} RETURN u $$) AS (u agtype);
115
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u {list: [0, 2, 4, 6, 8, 10, 12]}) WITh u, collect(u.list) AS v SET u += {b: [u IN range(0, 5)]} SETu.c= [u IN v[0]] RETURN u $$) AS (u agtype);
116
+
117
+
-- invalid use of aggregation in SET
118
+
SELECT*FROM cypher('list_comprehension', $$ MATCH(u {list: [0, 2, 4, 6, 8, 10, 12]}) SETu.c= collect(u.list) RETURN u $$) AS (u agtype);
119
+
120
+
-- List comprehension variable scoping
121
+
SELECT*FROM cypher('list_comprehension', $$ WITH 1AS m, [m IN [1, 2, 3]] AS n RETURN [m IN [1, 2, 3]] $$) AS (result agtype);
122
+
SELECT*FROM cypher('list_comprehension', $$ WITH 1AS m RETURN [m IN [1, 2, 3]], m $$) AS (result agtype, result2 agtype);
123
+
SELECT*FROM cypher('list_comprehension', $$ WITH [m IN [1,2,3]] AS m RETURN [m IN [1, 2, 3]], m $$) AS (result agtype, result2 agtype);
124
+
SELECT*FROM cypher('list_comprehension', $$ CREATE n=()-[:edge]->() RETURN [n IN nodes(n)] $$) AS (u agtype);
125
+
126
+
-- Multiple list comprehensions in RETURN and WITH clause
127
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3]], [u IN [1,2,3]] $$) AS (result agtype, result2 agtype);
128
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3] WHERE u>1], [u IN [1,2,3] WHERE u>2] $$) AS (result agtype, result2 agtype);
129
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3] WHERE u>1 | u^3], [u IN [1,2,3] WHERE u>2 | u^3] $$) AS (result agtype, result2 agtype);
130
+
131
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3]] AS u, [u IN [1,2,3]] AS i $$) AS (result agtype, result2 agtype);
132
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3] WHERE u>1] AS u, [u IN [1,2,3] WHERE u>2] AS i $$) AS (result agtype, result2 agtype);
133
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [1,2,3] WHERE u>1 | u^3] AS u, [u IN [1,2,3] WHERE u>2 | u^3] AS i $$) AS (result agtype, result2 agtype);
134
+
135
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [u IN [1,2,3]]], [u IN [u IN [1,2,3]]] $$) AS (result agtype, result2 agtype);
136
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [u IN [1,2,3] WHERE u>1] WHERE u>2], [u IN [u IN [1,2,3] WHERE u>1] WHERE u>2] $$) AS (result agtype, result2 agtype);
137
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [u IN [u IN [1,2,3] WHERE u>1] WHERE u>2 | u^3], [u IN [u IN [1,2,3] WHERE u>1] WHERE u>2 | u^3] $$) AS (result agtype, result2 agtype);
138
+
139
+
SELECT*FROM cypher('list_comprehension', $$ WITH [u IN [1,2,3]] AS u, [u IN [1,2,3]] AS i RETURN u, i $$) AS (result agtype, result2 agtype);
140
+
141
+
-- Should error out
142
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN range(0, 10, 2)],i $$) AS (result agtype, i agtype);
143
+
SELECT*FROM cypher('list_comprehension', $$ RETURN [i IN range(0, 10, 2) WHERE i>5 | i^2], i $$) AS (result agtype, i agtype);
-- Issue - error using list comprehension with WITH *
150
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH *, [i in [1,2,3]] as list RETURN list LIMIT1 $$) AS (result agtype);
151
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH *, [i in [1,2,3]] as list RETURN [i in list] LIMIT1 $$) AS (result agtype);
152
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH *WHEREu.list=[i IN range(0,12,2)] RETURN u $$) AS (result agtype);
153
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH *WHEREu.list=[i INu.list] RETURN u LIMIT1 $$) AS (result agtype);
154
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH * WITH *, [i in [1,2,3]] as list RETURN list LIMIT1 $$) AS (result agtype);
155
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WITH *, [i in [1,2,3]] as list WITH * RETURN list LIMIT1 $$) AS (result agtype);
156
+
157
+
-- Issue 1955 - variable reference in list comprehension
158
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i INu.list] RETURN u $$) AS (result agtype);
159
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHEREu.list=[i INu.listWHERE i>0] RETURN u $$) AS (result agtype);
160
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u) WHERE size([e inu.listwhere e starts with "a"])>0 RETURN u $$) AS (result agtype);
161
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u ={list:[i INu.list | i+1]}) RETURN u $$) AS (result agtype);
162
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u ={list:[i INu.listWHERE i>0]}) RETURN u$$) AS (result agtype);
163
+
164
+
-- List comprehension in MERGE
165
+
SELECT*FROM cypher('list_comprehension', $$ MERGE (u {list:[i IN [1,2,3]]}) RETURN u $$) AS (result agtype);
166
+
SELECT*FROM cypher('list_comprehension', $$ MERGE (u ={list:[i IN [1,2,3] WHERE i>1]}) RETURN u $$) AS (result agtype);
167
+
SELECT*FROM cypher('list_comprehension', $$ MERGE (u ={list:[i IN [1,2,3] WHERE i>1 | i^2]}) RETURN u $$) AS (result agtype);
168
+
169
+
-- Issue 1850
170
+
SELECT*FROM cypher('list_comprehension', $$ CREATE (u {list: [0, 2, 4, 6, 8, 10, 12]}) $$) AS (result agtype);
171
+
SELECT*FROM cypher('list_comprehension', $$ WITH [1, 2, 3] AS u UNWIND collect(u) AS v RETURN v $$) AS (result agtype);
172
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list: [0, 2, 4, 6, 8, 10, 12]}) WITH u, collect(u.list) AS v SET u += {b: [u IN range(0, 5)]} SETu.c= [u IN v[0]] RETURN u $$) AS (result agtype);
173
+
SELECT*FROM cypher('list_comprehension', $$ MATCH (u {list: [0, 2, 4, 6, 8, 10, 12]}) SETu.c= collect(u.list) RETURN u $$) AS (u agtype);
0 commit comments