--
--> Generator tests
CREATE OR REPLACE FUNCTION
genreturn() RETURNS text LANGUAGE plpy
AS 'while True: yield ''infinite text''';
SELECT genreturn();
   genreturn   
---------------
 infinite text
(1 row)

SELECT genreturn();
   genreturn   
---------------
 infinite text
(1 row)

SELECT genreturn(), genreturn(), genreturn();
   genreturn   |   genreturn   |   genreturn   
---------------+---------------+---------------
 infinite text | infinite text | infinite text
(1 row)

CREATE OR REPLACE FUNCTION
counter() RETURNS bigint LANGUAGE plpy
AS 'i=0
while True:
 i+=1
 yield i
';
CREATE TEMP TABLE gencounter (val bigint) WITHOUT OIDS;
INSERT INTO gencounter VALUES (234);
INSERT INTO gencounter VALUES (432);
INSERT INTO gencounter VALUES (123);
SELECT counter(), * FROM gencounter;
 counter | val 
---------+-----
       1 | 234
       2 | 432
       3 | 123
(3 rows)

INSERT INTO gencounter VALUES (123);
INSERT INTO gencounter VALUES (123);
INSERT INTO gencounter VALUES (-123);
SELECT max(counter()) = 6 FROM gencounter;
 ?column? 
----------
 t
(1 row)

SELECT counter(), * FROM gencounter;
 counter | val  
---------+------
       1 |  234
       2 |  432
       3 |  123
       4 |  123
       5 |  123
       6 | -123
(6 rows)

SELECT counter(), counter() FROM gencounter;
 counter | counter 
---------+---------
       1 |       1
       2 |       2
       3 |       3
       4 |       4
       5 |       5
       6 |       6
(6 rows)

SELECT counter() = counter() FROM gencounter;
 ?column? 
----------
 t
 t
 t
 t
 t
 t
(6 rows)

--
--> Test generator argument overloading
CREATE OR REPLACE FUNCTION
genrepeater(bigint) RETURNS bigint LANGUAGE plpy
AS 'while True:
 yield args[0]
';
SELECT genrepeater(val) FROM gencounter;
 genrepeater 
-------------
         234
         432
         123
         123
         123
        -123
(6 rows)

SELECT val = genrepeater(val) FROM gencounter;
 ?column? 
----------
 t
 t
 t
 t
 t
 t
(6 rows)

/* vim: set filetype=sql: */
