diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-11-15 14:26:55 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-11-15 14:26:55 -0500 |
commit | add0ea88e7722b48d1f3a7c38e3cfd7f1e854674 (patch) | |
tree | 4e1c26e91a5e8645f2711c1f3cbca4218b814e39 /src/pl/plpython/sql/plpython_setof.sql | |
parent | 3134d8863e8473e3ed791e27d484f9e548220411 (diff) | |
download | postgresql-add0ea88e7722b48d1f3a7c38e3cfd7f1e854674.tar.gz postgresql-add0ea88e7722b48d1f3a7c38e3cfd7f1e854674.zip |
Fix aboriginal mistake in plpython's set-returning-function support.
We must stay in the function's SPI context until done calling the iterator
that returns the set result. Otherwise, any attempt to invoke SPI features
in the python code called by the iterator will malfunction. Diagnosis and
patch by Jan Urbanski, per bug report from Jean-Baptiste Quenot.
Back-patch to 8.2; there was no support for SRFs in previous versions of
plpython.
Diffstat (limited to 'src/pl/plpython/sql/plpython_setof.sql')
-rw-r--r-- | src/pl/plpython/sql/plpython_setof.sql | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/pl/plpython/sql/plpython_setof.sql b/src/pl/plpython/sql/plpython_setof.sql index 53d91a9e7d7..80a8d5b4c1e 100644 --- a/src/pl/plpython/sql/plpython_setof.sql +++ b/src/pl/plpython/sql/plpython_setof.sql @@ -35,6 +35,15 @@ class producer: return producer(count, content) $$ LANGUAGE plpythonu; +CREATE FUNCTION test_setof_spi_in_iterator() RETURNS SETOF text AS +$$ + for s in ('Hello', 'Brave', 'New', 'World'): + plpy.execute('select 1') + yield s + plpy.execute('select 2') +$$ +LANGUAGE plpythonu; + -- Test set returning functions SELECT test_setof_as_list(0, 'list'); @@ -51,3 +60,5 @@ SELECT test_setof_as_iterator(0, 'list'); SELECT test_setof_as_iterator(1, 'list'); SELECT test_setof_as_iterator(2, 'list'); SELECT test_setof_as_iterator(2, null); + +SELECT test_setof_spi_in_iterator(); |