-- SRF tests

--> Type by Value
CREATE OR REPLACE FUNCTION srftbvseq () RETURNS SETOF int
LANGUAGE plpy AS 'return (123,321,234,432,345,543)';
SELECT srftbvseq();
SELECT * FROM srftbvseq();

CREATE OR REPLACE FUNCTION srftbviter () RETURNS SETOF int
LANGUAGE plpy AS 'return iter((123,321,234,432,345,543))';
SELECT srftbviter();
SELECT * FROM srftbviter();

CREATE OR REPLACE FUNCTION srftbvgen () RETURNS SETOF int
LANGUAGE plpy AS 'yield -123; yield 123; yield 475; yield 8593';
SELECT srftbvgen();
SELECT * FROM srftbvgen();


--> Type by Reference
CREATE OR REPLACE FUNCTION srftbrseq () RETURNS SETOF text
LANGUAGE plpy AS 'return ("foo", "bar", "feh")';
SELECT srftbrseq();
SELECT * FROM srftbrseq();

CREATE OR REPLACE FUNCTION srftbriter () RETURNS SETOF text
LANGUAGE plpy AS 'return iter(("fleh", "flaw", "bleh"))';
SELECT srftbriter();
SELECT * FROM srftbriter();

CREATE OR REPLACE FUNCTION srftbrgen () RETURNS SETOF text
LANGUAGE plpy AS 'yield "ack"; yield "oak"; yield "troke"; yield "nope"';
SELECT srftbrgen();
SELECT * FROM srftbrgen();

--> Arbitrary Composite type
CREATE TYPE composite AS ( foo text, bar int2 );

CREATE OR REPLACE FUNCTION srfctseq () RETURNS SETOF composite
LANGUAGE plpy AS 'return (("foo", 321), ("bar", 213), ("feh", 123))';
SELECT srfctseq();
SELECT * FROM srfctseq();

CREATE OR REPLACE FUNCTION srfctiter () RETURNS SETOF composite
LANGUAGE plpy AS 'return iter((("foo", 321), ("bar", 213), ("feh", 123)))';
SELECT srfctiter();
SELECT * FROM srfctiter();

CREATE OR REPLACE FUNCTION srfctgen () RETURNS SETOF composite
LANGUAGE plpy AS 'yield ("foo", 321); yield ("bar", 213); yield ("feh", 123)';
SELECT srfctgen();
SELECT * FROM srfctgen();

DROP TYPE composite CASCADE;

/* vim: set filetype=sql: */
