--
-- Tests for procedures / CALL syntax
--
CREATE PROCEDURE test_proc1()
LANGUAGE plpython3u
AS $$
pass
$$;
CALL test_proc1();
-- error: can't return non-None
CREATE PROCEDURE test_proc2()
LANGUAGE plpython3u
AS $$
return 5
$$;
CALL test_proc2();
ERROR:  PL/Python procedure did not return None
CONTEXT:  PL/Python procedure "test_proc2"
CREATE TABLE test1 (a int);
CREATE PROCEDURE test_proc3(x int)
LANGUAGE plpython3u
AS $$
plpy.execute("INSERT INTO test1 VALUES (%s)" % x)
$$;
CALL test_proc3(55);
SELECT * FROM test1;
 a  
----
 55
(1 row)

-- output arguments
CREATE PROCEDURE test_proc5(INOUT a text)
LANGUAGE plpython3u
AS $$
return [a + '+' + a]
$$;
CALL test_proc5('abc');
    a    
---------
 abc+abc
(1 row)

CREATE PROCEDURE test_proc6(a int, INOUT b int, INOUT c int)
LANGUAGE plpython3u
AS $$
return (b * a, c * a)
$$;
CALL test_proc6(2, 3, 4);
 b | c 
---+---
 6 | 8
(1 row)

-- OUT parameters
CREATE PROCEDURE test_proc9(IN a int, OUT b int)
LANGUAGE plpython3u
AS $$
plpy.notice("a: %s" % (a))
return (a * 2,)
$$;
DO $$
DECLARE _a int; _b int;
BEGIN
  _a := 10; _b := 30;
  CALL test_proc9(_a, _b);
  RAISE NOTICE '_a: %, _b: %', _a, _b;
END
$$;
NOTICE:  a: 10
NOTICE:  _a: 10, _b: 20
DROP PROCEDURE test_proc1;
DROP PROCEDURE test_proc2;
DROP PROCEDURE test_proc3;
DROP TABLE test1;
