• Tom Lane's avatar
    Fix up Perl-to-Postgres datatype conversions in pl/perl. · 23610daf
    Tom Lane authored
    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
    23610daf
plperl_array.out 7.62 KB