Re: another plperl bug

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: another plperl bug
Date: 2004-11-23 06:56:24
Message-ID: 20041123065623.GA23197@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches

On Mon, Nov 22, 2004 at 03:34:17PM -0500, Tom Lane wrote:
>
> Thanks for the examples. I extended this into a simple regression test
> which I've added to CVS. If anyone would like to add some test cases
> for more interesting stuff (triggers and error handling come to mind),
> step right up ...

How far do you want to go with checking return types? Some of the
following test cases are approaching "garbage in, garbage out"
territory and I don't know how much effort you want to put into
protecting programmers from themselves. Some of the cases already
raise errors; for consistency I'm inclined to think they all should.

Tests run against plperl.c 1.63, SPI.xs 1.11.

Test Case 1: scalar expected, non-scalar returned

CREATE FUNCTION test1() RETURNS TEXT AS $$
return ["test"];
$$ LANGUAGE plperl;

SELECT test1();
test1
------------------
ARRAY(0x8427a58)
(1 row)

Test Case 2: list of scalars expected, scalar returned

CREATE FUNCTION test2() RETURNS SETOF TEXT AS $$
return "test";
$$ LANGUAGE plperl;

SELECT * FROM test2();
ERROR: plperl: set-returning function must return reference to array

Test Case 3: list of scalars expected, list of non-scalars returned

CREATE FUNCTION test3() RETURNS SETOF TEXT AS $$
return [["test 1"], ["test 2"]];
$$ LANGUAGE plperl;

SELECT * FROM test3();
test3
------------------
ARRAY(0x8424e10)
ARRAY(0x8424fcc)
(2 rows)

Test Case 4: hash expected, non-hash returned

CREATE TYPE footype AS (txtval TEXT, intval INTEGER);

CREATE FUNCTION test4() RETURNS footype AS $$
return "test";
$$ LANGUAGE plperl;

SELECT test4();
ERROR: plperl: composite-returning function must return a reference to hash

Test Case 5: hash expected, keys not scalars

CREATE FUNCTION test5() RETURNS footype AS $$
return {["txtval"] => "test", ["intval"] => 42};
$$ LANGUAGE plperl;

SELECT test5();
ERROR: plperl: invalid attribute "ARRAY(0x8431950)" in hash

Test Case 6: hash expected, value not scalar

CREATE FUNCTION test6() RETURNS footype AS $$
return {txtval => ["test"], intval => 42};
$$ LANGUAGE plperl;

SELECT * FROM test6();
txtval | intval
------------------+--------
ARRAY(0x8433f9c) | 42
(1 row)

Test Case 7: list of hashes expected, list of non-hashes returned

CREATE FUNCTION test7() RETURNS SETOF footype AS $$
return ["test 1", 42];
$$ LANGUAGE plperl;

SELECT * FROM test7();
ERROR: plperl: element of result array is not a reference to hash

Test Case 8: list of hashes expected, hash key not scalar

CREATE FUNCTION test8() RETURNS SETOF footype AS $$
return [{["txtval"] => "test 1", ["intval"] => 1}];
$$ LANGUAGE plperl;

SELECT * FROM test8();
ERROR: plperl: invalid attribute "ARRAY(0x8437b48)" in hash

Test Case 9: list of hashes expected, hash value not scalar

CREATE FUNCTION test9() RETURNS SETOF footype AS $$
return [{txtval => ["test 1"], intval => 42}];
$$ LANGUAGE plperl;

SELECT * FROM test9();
txtval | intval
------------------+--------
ARRAY(0x8438d74) | 42
(1 row)

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Matt 2004-11-23 09:03:10 Re: patch: plpgsql - access records with rec.(expr)
Previous Message Barry Lind 2004-11-23 05:34:48 Re: [JDBC] Strange server error with current 8.0beta driver

Browse pgsql-patches by date

  From Date Subject
Next Message Peter Eisentraut 2004-11-23 13:59:16 Re: htmlhelp generation
Previous Message Neil Conway 2004-11-23 00:24:31 Re: pgcrypto: Makefile check