[moving to -hackers]

I wrote:


I have made some progress with what I think is needed to have two interpreters for plperl. This is a lot harder than the pltcl case for two reasons: 1. there are no restrictions on having 2 tcl interpreters, and 2. tcl does not need to save and restore context as we have to do with perl. I think I have a conceptual siolution to these two problems, but what I have is currently segfaulting somewhat myteriously. Tracing a dynamically loaded library in a postgres backend with a debugger is less than fun, too. I am attaching what I currently have, liberally sprinkled with elog(NOTICE) calls as trace writes.



With a little more perseverance I found the problem. The attached patch passes regression. But it now needs plenty of eyeballs and testing.



Well, if anyone cast eyeballs over it they kept it secret from me :-(


However, I have now tested the patch with the little script shown below and it seems to do the Right Thing (tm) in switching context and restoring it. So I think it can be applied to HEAD, along with an addition to the docs and a release note.

Since this is a behaviour modification, do we want to apply it to the back branches? Doing so would certainly be possible, although it would be non-trivial.

cheers

andrew


------------

drop function if exists f1(int);
drop function if exists f2(int);


create function f1(int) returns void language plperl as
$$

 my $arg = shift;
 elog NOTICE,"in plperl func f1($arg)";
 return if ($arg > 5);
 $arg++;
 spi_exec_query("select f2($arg)");

$$;

create function f2(int) returns void language plperlu as
$$

 my $arg = shift;
 elog NOTICE,"in plperlu func f2($arg)";
 return if ($arg > 5);
 $arg++;
 spi_exec_query("select f1($arg)");

$$;


select f1(0);
select f2(0);




---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

               http://www.postgresql.org/about/donate

Reply via email to