--
--> Fundamentals
CREATE OR REPLACE FUNCTION
nothing() RETURNS VOID LANGUAGE plpy AS 'pass';
SELECT nothing();

--
--> Simple passthroughs
CREATE OR REPLACE FUNCTION
return(int) RETURNS int LANGUAGE plpy AS 'return args[0]';
SELECT return(-3);

CREATE OR REPLACE FUNCTION
return(bigint) RETURNS bigint LANGUAGE plpy AS 'return args[0]';
SELECT return(-12839128482);

CREATE OR REPLACE FUNCTION
return(text) RETURNS text LANGUAGE plpy AS 'return args[0]';
SELECT return('\nfoo bar feh   \t\t\n\n');

CREATE OR REPLACE FUNCTION
return(bytea) RETURNS bytea LANGUAGE plpy AS 'return args[0]';
SELECT return('\\0foobar\\0');

--
--> Test reinitialization
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();
SELECT plpy_finalizer();
SELECT nothing();

--
--> Test syntax exception
CREATE OR REPLACE FUNCTION syntaxerror () RETURNS VOID
LANGUAGE plpy AS '***';

--
--> Test reinitialization from exception
CREATE OR REPLACE FUNCTION exception () RETURNS VOID
LANGUAGE plpy AS 'foo';
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();
SELECT exception();
SELECT nothing();


CREATE TABLE complex ( i int, b bigint, t text );
INSERT INTO complex VALUES ( 1, 2, '3' );
CREATE OR REPLACE FUNCTION ctest (complex) RETURNS VOID LANGUAGE plpy
AS 'Postgres.INFO(repr(args))';

SELECT ctest(complex) FROM complex;
DROP FUNCTION ctest(complex);
DROP TABLE complex;

/* vim: set filetype=sql: */
