blob: 93413f2c9f56acf1b95ec73df299344f9385d67f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
LOAD 'age';
SET search_path TO ag_catalog;
--
-- Load data
--
SELECT create_graph('cypher_with');
SELECT * FROM cypher('cypher_with', $$
CREATE (andres {name : 'Andres', age : 36}),
(caesar {name : 'Caesar', age : 25}),
(bossman {name : 'Bossman', age : 55}),
(david {name : 'David', age : 35}),
(george {name : 'George', age : 37}),
(andres)-[:BLOCKS]->(caesar),
(andres)-[:KNOWS]->(bossman),
(caesar)-[:KNOWS]->(george),
(bossman)-[:BLOCKS]->(david),
(bossman)-[:KNOWS]->(george),
(david)-[:KNOWS]->(andres)
$$) as (a agtype);
--
-- Test WITH clause
--
SELECT * FROM cypher('cypher_with', $$
MATCH (n)-[e]->(m)
WITH n,e,m
RETURN n,e,m
$$) AS (N1 agtype, edge agtype, N2 agtype);
-- WITH/AS
SELECT * FROM cypher('cypher_with', $$
MATCH (n)-[e]->(m)
WITH n.name AS n1, e as edge, m.name as n2
RETURN n1,label(edge),n2
$$) AS (start_node agtype,edge agtype, end_node agtype);
SELECT * FROM cypher('cypher_with',$$
MATCH (person)-[r]->(otherPerson)
WITH *, type(r) AS connectionType
RETURN person.name, connectionType, otherPerson.name
$$) AS (start_node agtype, connection agtype, end_node agtype);
SELECT * FROM cypher('cypher_with', $$
WITH true AS b
RETURN b
$$) AS (b bool);
-- WITH/WHERE
SELECT * FROM cypher('cypher_with', $$
MATCH (george {name: 'George'})<-[]-(otherPerson)
WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName
WHERE upperCaseName STARTS WITH 'C'
RETURN otherPerson.name
$$) as (name agtype);
SELECT * FROM cypher('cypher_with', $$
MATCH (david {name: 'David'})-[]-(otherPerson)-[]->()
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson.name
$$) as (name agtype);
SELECT * FROM cypher('cypher_with', $$
MATCH p = (m)-[*1..2]->(b)
WITH p, length(p) AS path_length
WHERE path_length > 1
RETURN p
$$) AS (pattern agtype);
-- MATCH/WHERE with WITH/WHERE
SELECT * FROM cypher('cypher_with', $$
MATCH (m)-[e]->(b)
WHERE label(e) = 'KNOWS'
WITH *
WHERE m.name = 'Andres'
RETURN m.name,label(e),b.name
$$) AS (N1 agtype, edge agtype, N2 agtype);
-- WITH/ORDER BY
SELECT * FROM cypher('cypher_with', $$
MATCH (n)
WITH n
ORDER BY id(n)
RETURN n
$$) as (name agtype);
-- WITH/ORDER BY/DESC
SELECT * FROM cypher('cypher_with', $$
MATCH (n)
WITH n
ORDER BY n.name DESC LIMIT 3
RETURN collect(n.name)
$$) as (names agtype);
SELECT * FROM cypher('cypher_with', $$
MATCH (n {name: 'Andres'})-[]-(m)
WITH m
ORDER BY m.name DESC LIMIT 1
MATCH (m)-[]-(o)
RETURN o.name ORDER BY o.name
$$) as (name agtype);
-- multiple WITH clauses
SELECT * FROM cypher('cypher_with', $$
MATCH (n)-[e]->(m)
WITH n, e, m
WHERE label(e) = 'KNOWS'
WITH n.name as n1, label(e) as edge, m.name as n2
WHERE n1 = 'Andres'
RETURN n1,edge,n2
$$) AS (N1 agtype, edge agtype, N2 agtype);
SELECT * FROM cypher('cypher_with', $$
UNWIND [1, 2, 3, 4, 5, 6] AS x
WITH x
WHERE x > 2
WITH x
LIMIT 5
RETURN x
$$) as (name agtype);
SELECT * FROM cypher('cypher_with', $$
MATCH (m)-[]->(b)
WITH m,b
ORDER BY id(m) DESC LIMIT 5
WITH m as start_node, b as end_node
WHERE end_node.name = 'George'
RETURN id(start_node),start_node.name,id(end_node),end_node.name
$$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype);
-- Expression item must be aliased.
SELECT * FROM cypher('cypher_with', $$
WITH 1 + 1
RETURN i
$$) AS (i int);
SELECT * FROM cypher('cypher_with', $$
MATCH (m)-[]->(b)
WITH id(m)
RETURN m
$$) AS (id agtype);
-- Reference undefined variable in WITH clause (should error out)
SELECT count(*) FROM cypher('cypher_with', $$
MATCH (m)-[]->(b)
WITH m
RETURN m,b
$$) AS (a agtype, b agtype);
SELECT * FROM cypher('cypher_with', $$
MATCH (m)-[]->(b)
WITH m AS start_node,b AS end_node
WHERE start_node.name = 'Andres'
WITH start_node
WHERE start_node.name = 'George'
RETURN id(start_node),end_node.name
$$) AS (id agtype, node agtype);
-- Clean up
SELECT drop_graph('cypher_with', true);
-- Issue 329 (should error out)
SELECT create_graph('graph');
SELECT * FROM cypher('graph', $$
CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C)
RETURN a
$$) AS (n agtype);
SELECT * FROM cypher('graph', $$
MATCH (a:A)
WHERE ID(a)=0
WITH a
OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-()
WITH a,c,COUNT(d) AS deps
WHERE deps<=1
RETURN c,d
$$) AS (n agtype, d agtype);
-- Issue 396 (should error out)
SELECT * FROM cypher('graph',$$
CREATE (v),(u),(w),
(v)-[:hasFriend]->(u),
(u)-[:hasFriend]->(w)
$$) as (a agtype);
SELECT * FROM cypher('graph',$$
MATCH p=(v)-[*1..2]->(u)
WITH p,length(p) AS path_length
RETURN v,path_length
$$) as (a agtype,b agtype);
-- Clean up
SELECT drop_graph('graph', true);
--
-- End of test
--