pgsql: Fix up Perl-to-Postgres datatype conversions in pl/perl. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix up Perl-to-Postgres datatype conversions in pl/perl.
Date
Msg-id E1RETOa-0001Vx-5t@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix up Perl-to-Postgres datatype conversions in pl/perl.

This patch restores the pre-9.1 behavior that pl/perl functions returning
VOID ignore the result value of their last Perl statement.  9.1.0
unintentionally threw an error if the last statement returned a reference,
as reported by Amit Khandekar.

Also, make sure it works to return a string value for a composite type,
so long as the string meets the type's input format.  We already allowed
the equivalent behavior for arrays, so it seems inconsistent to not allow
it for composites.

In addition, ensure we throw errors for attempts to return arrays or hashes
when the function's declared result type is not an array or composite type,
respectively.  Pre-9.1 versions rather uselessly returned strings like
ARRAY(0x221a9a0) or HASH(0x221aa90), while 9.1.0 threw an error for the
hash case and returned a garbage value for the array case.

Also, clean up assorted grotty coding in Perl array conversion, including
use of a session-lifespan memory context to accumulate the array value
(resulting in session-lifespan memory leak on error), failure to apply the
declared typmod if any, and failure to detect some cases of non-rectangular
multi-dimensional arrays.

Alex Hunsaker and Tom Lane

Branch
------
REL9_1_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/7c64c9f6b767b84597d69cfa2ae03d9a9655ec75

Modified Files
--------------
src/pl/plperl/expected/plperl.out       |   58 ++++++-
src/pl/plperl/expected/plperl_array.out |   10 +
src/pl/plperl/plperl.c                  |  297 ++++++++++++++++++-------------
src/pl/plperl/sql/plperl.sql            |   47 +++++
src/pl/plperl/sql/plperl_array.sql      |    7 +
5 files changed, 289 insertions(+), 130 deletions(-)


pgsql-committers by date:

Previous
From: Bruce Momjian
Date:
Subject: pgsql: Update documentation about ts_rank().
Next
From: Tom Lane
Date:
Subject: pgsql: Fix up Perl-to-Postgres datatype conversions in pl/perl.