diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-07-03 16:10:50 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-07-03 16:10:50 -0400 |
| commit | 8b6010b8350a1756cd85595705971df81b5ffc07 (patch) | |
| tree | eda51b5b21c1030a24f0be7bb3a11b770aba5c7a /src/pl/plpython/sql/plpython_spi.sql | |
| parent | f545d233ebce6971b6f9847680e48b679e707d22 (diff) | |
| download | postgresql-8b6010b8350a1756cd85595705971df81b5ffc07.tar.gz | |
Improve support for composite types in PL/Python.
Allow PL/Python functions to return arrays of composite types.
Also, fix the restriction that plpy.prepare/plpy.execute couldn't
handle query parameters or result columns of composite types.
In passing, adopt a saner arrangement for where to release the
tupledesc reference counts acquired via lookup_rowtype_tupdesc.
The callers of PLyObject_ToCompositeDatum were doing the lookups,
but then the releases happened somewhere down inside subroutines
of PLyObject_ToCompositeDatum, which is bizarre and bug-prone.
Instead release in the same function that acquires the refcount.
Ed Behn and Ronan Dunklau, reviewed by Abhijit Menon-Sen
Diffstat (limited to 'src/pl/plpython/sql/plpython_spi.sql')
| -rw-r--r-- | src/pl/plpython/sql/plpython_spi.sql | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/pl/plpython/sql/plpython_spi.sql b/src/pl/plpython/sql/plpython_spi.sql index 09f0d7f2d7..a882738e0b 100644 --- a/src/pl/plpython/sql/plpython_spi.sql +++ b/src/pl/plpython/sql/plpython_spi.sql @@ -284,6 +284,17 @@ plan = plpy.prepare("select fname, lname from users where fname like $1 || '%'", c = plpy.cursor(plan, ["a", "b"]) $$ LANGUAGE plpythonu; +CREATE TYPE test_composite_type AS ( + a1 int, + a2 varchar +); + +CREATE OR REPLACE FUNCTION plan_composite_args() RETURNS test_composite_type AS $$ +plan = plpy.prepare("select $1 as c1", ["test_composite_type"]) +res = plpy.execute(plan, [{"a1": 3, "a2": "label"}]) +return res[0]["c1"] +$$ LANGUAGE plpythonu; + SELECT simple_cursor_test(); SELECT double_cursor_close(); SELECT cursor_fetch(); @@ -293,3 +304,4 @@ SELECT next_after_close(); SELECT cursor_fetch_next_empty(); SELECT cursor_plan(); SELECT cursor_plan_wrong_args(); +SELECT plan_composite_args(); |
