blob: 6980abe4b11e1b32b403eceb354c10fa7ae5e2c4 [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;
SELECT create_graph('cypher_call');
NOTICE: graph "cypher_call" has been created
create_graph
--------------
(1 row)
SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'a'})$$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'b'})$$) as (a agtype);
a
---
(0 rows)
CREATE SCHEMA call_stmt_test;
CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
/*
* CALL (solo)
*/
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype);
sqrt
------
8.0
(1 row)
/* CALL RETURN, should fail */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN sqrt$$) as (sqrt agtype);
ERROR: Procedure call inside a query does not support naming results implicitly
LINE 2: SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN s...
^
HINT: Name explicitly using `YIELD` instead
/* CALL YIELD */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt$$) as (sqrt agtype);
sqrt
------
8.0
(1 row)
/* incorrect variable should fail */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agtype);
ERROR: Unknown CALL output
LINE 2: ... FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) ...
^
/* qualified name */
SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype);
sqrt
------
3
(1 row)
/* nonexistent schema should fail */
SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype);
ERROR: function ag_catalog.add_agtype(agtype, agtype) does not exist
LINE 2: ...cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) a...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
/* CALL YIELD WHERE, should fail */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$) as (sqrt agtype);
ERROR: Cannot use standalone CALL with WHERE
LINE 2: SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sq...
^
HINT: Instead use `CALL ... WITH * WHERE ... RETURN *`
/*
* subquery
*/
/* CALL YIELD UPDATE/RETURN */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt RETURN sqrt $$) as (sqrt agtype);
sqrt
------
8.0
(1 row)
/* Unrecognized YIELD, correct RETURN, should fail*/
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$) as (sqrt agtype);
ERROR: Unknown CALL output
LINE 2: ...FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RET...
^
/* CALL YIELD WHERE RETURN */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype);
a
-----
8.0
(1 row)
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN sqrt $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN sqrt $$) as (a agtype);
a
-----
8.0
(1 row)
/* should fail */
SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETURN sqrt $$) as (a agtype);
ERROR: could not find rte for a
LINE 2: ...r('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETU...
^
/* MATCH CALL RETURN, should fail */
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype);
ERROR: Procedure call inside a query does not support naming results implicitly
LINE 2: SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(6...
^
HINT: Name explicitly using `YIELD` instead
/* MATCH CALL YIELD RETURN */
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
------------------------------------------------------------------------+------
{"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0
{"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0
(2 rows)
/* MATCH CALL YIELD WHERE UPDATE/RETURN */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
---+------
(0 rows)
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
------------------------------------------------------------------------+------
{"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0
{"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0
(2 rows)
SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype);
ERROR: could not find rte for b
LINE 1: ...all', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETU...
^
/* CALL MATCH YIELD WHERE UPDATE/RETURN */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype);
a
---
(0 rows)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
---+------
(0 rows)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
------------------------------------------------------------------------+------
{"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0
{"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0
(2 rows)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 MATCH (a) RETURN a, sqrt $$) as (a agtype, sqrt agtype);
a | sqrt
------------------------------------------------------------------------+------
{"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0
{"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0
(2 rows)
/* Multiple Calls: CALL YIELD CALL YIELD... RETURN */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype);
sqrt | agtype_sum
------+------------
8.0 | 4
(1 row)
/* should fail */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype);
ERROR: duplicate variable "sqrt"
LINE 2: ..., $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETUR...
^
/* Aliasing: CALL YIELD AS CALL YIELD AS ... UPDATE/RETURN */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype);
sqrt | sqrt1
------+-------
8.0 | 9.0
(1 row)
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype);
sqrt | sqrt1
------+-------
9.0 | 8.0
(1 row)
/* duplicated alias should fail */
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt1, sqrt1 $$) as (a agtype, b agtype);
ERROR: duplicate variable "sqrt1"
LINE 2: ... sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sq...
^
SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype);
ERROR: duplicate variable "sqrt"
LINE 1: ...LL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum...
^
DROP SCHEMA call_stmt_test CASCADE;
NOTICE: drop cascades to function call_stmt_test.add_agtype(agtype,agtype)
SELECT drop_graph('cypher_call', true);
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table cypher_call._ag_label_vertex
drop cascades to table cypher_call._ag_label_edge
NOTICE: graph "cypher_call" has been dropped
drop_graph
------------
(1 row)