Thread: Help with plperl
Hi, could anyone help me with a problem I am having creating a plperl function. The return always complains with the following error: composite-returning Perl function must return reference to hash Thanks Alex CREATE TYPE sometype AS ( jid INTEGER, start_time TEXT, descr TEXT ); CREATE OR REPLACE FUNCTION testq() RETURNS sometype AS $$ my $results = []; my $query = "SELECT jid, start_time FROM schedule LIMIT 10"; $rv = spi_exec_query($query); elog(INFO, "QUERY: $query"); elog(INFO, "ROWS: $rv->{processed}"); for ( $i = 0; $i < $rv->{processed}; $i++ ) { my $row = $rv->{rows}[$i]; push @$results, { jid => $row->{jid}, start_time => $row->{start_time}, descr => 'Test' }; } return $results; $$ LANGUAGE plperl;
On Mon, Aug 22, 2005 at 03:58:25AM +1000, Alex wrote: > could anyone help me with a problem I am having creating a plperl function. > > The return always complains with the following error: > composite-returning Perl function must return reference to hash The above error tells you what's wrong: PL/Perl expects you to return a hash reference because the return type is "sometype"; the code returns an array reference so you get an error. Since you're pushing hash references onto the array, I'm guessing you meant to return "SETOF sometype". -- Michael Fuhr
On Mon, Aug 22, 2005 at 03:58:25AM +1000, Alex wrote: > Hi, > could anyone help me with a problem I am having creating a plperl function. > > The return always complains with the following error: > composite-returning Perl function must return reference to hash Well, since you're returning a reference to an array, I imagine it's complaining about that. Looking at your function though, it appears to be building a set of "sometype" rather than a single one. Perhaps you meant your function to be defined as: RETURNS SETOF sometype. Hope this helps, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them.