Re: suspicious pointer/integer coersion
От | Andrew Dunstan |
---|---|
Тема | Re: suspicious pointer/integer coersion |
Дата | |
Msg-id | 42D1B8F0.8020100@dunslane.net обсуждение исходный текст |
Ответ на | Re: suspicious pointer/integer coersion (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: suspicious pointer/integer coersion
|
Список | pgsql-hackers |
Tom Lane wrote: >Andrew Dunstan <andrew@dunslane.net> writes: > > >>Works for me. There are some other things about the procdesc stuff I'm >>trying to sort out (especially if we should be storing per-call info >>inside it). >> >> > >Hmm, probably not ... check to see if a recursive plperl function >behaves sanely. (This might not have been much of an issue before >we had SPI support in plperl, since there was no way to recurse; >but it is an issue now.) > > Behaviour is not good (see below for proof). ISTM we'll need some sort of implicit of explicit stack of per-call data. The trick will be getting it to behave right under error recovery. cheers andrew [andrew inst]$ bin/psql -e -f recurse.sql create or replace function recurse(i int) returns setof text language plperl as $$ my $i = shift; elog(NOTICE,"i = $i"); foreach my $x (1..$i) { return_next "hello $x"; } if ($i > 2) { my $z = $i-1; my $cursor = spi_query("select * from recurse($z)"); while (defined(my $row = spi_fetchrow($cursor))) { return_next"recurse $i: $row"; } } return undef; $$; CREATE FUNCTION select * from recurse(2); psql:recurse.sql:24: NOTICE: i = 2recurse ---------hello 1hello 2 (2 rows) select * from recurse(3); psql:recurse.sql:25: NOTICE: i = 3 psql:recurse.sql:25: NOTICE: i = 2 psql:recurse.sql:25: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. psql:recurse.sql:25: connection to server was lost [andrew inst]$
В списке pgsql-hackers по дате отправления: