Re: [Plperlng-devel] strange bug in plperl
От | Sergej Sergeev |
---|---|
Тема | Re: [Plperlng-devel] strange bug in plperl |
Дата | |
Msg-id | 40EA6AEC.8050505@inbox.ru обсуждение исходный текст |
Ответ на | strange bug in plperl (Andrew Dunstan <andrew@dunslane.net>) |
Список | pgsql-hackers |
Atached patch fix this bug Serg Andrew Dunstan wrote: > > Can anyone suggest why I might be seeing this effect (each notice > comes out once per row plus once per function call) > > thanks > > andrew > > andrew=# create function tstset() returns setof tst language plperl as $$ > andrew$# elog(NOTICE,"tstset called"); > andrew$# return [{i=>1,v=>"one"},{i=>2,v=>"two"}]; > andrew$# $$; > CREATE FUNCTION > andrew=# select * from tstset(); > NOTICE: tstset called > NOTICE: tstset called > NOTICE: tstset called > i | v ---+----- > 1 | one > 2 | two > (2 rows) > > _______________________________________________ > Plperlng-devel mailing list > Plperlng-devel@pgfoundry.org > http://pgfoundry.org/mailman/listinfo/plperlng-devel > > *** plperl.c 2004-07-01 23:50:22.000000000 +0300 --- newplperl.c 2004-07-06 11:57:56.000000000 +0300 *************** *** 99,104 **** --- 99,105 ---- static HV *plperl_proc_hash = NULL; AV *g_row_keys = NULL; AV *g_column_keys = NULL; + SV *srf_perlret=NULL; /*keep returned value*/ int g_attr_num = 0; /********************************************************************** *************** *** 839,847 **** /* Find or compile the function */ prodesc = compile_plperl_function(fcinfo->flinfo->fn_oid, false); /************************************************************ ! * Call the Perl function ************************************************************/ ! perlret = plperl_call_perl_func(prodesc, fcinfo); if (prodesc->fn_retistuple && SRF_IS_FIRSTCALL()) { --- 840,855 ---- /* Find or compile the function */ prodesc = compile_plperl_function(fcinfo->flinfo->fn_oid, false); /************************************************************ ! * Call the Perl function if not returning set ************************************************************/ ! if (!prodesc->fn_retistuple) ! perlret = plperl_call_perl_func(prodesc, fcinfo); ! else { ! if (SRF_IS_FIRSTCALL()) /*call function only once*/ ! srf_perlret = plperl_call_perl_func(prodesc, fcinfo); ! perlret = srf_perlret; ! } ! if (prodesc->fn_retistuple && SRF_IS_FIRSTCALL()) {
В списке pgsql-hackers по дате отправления: