From: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
---|---|
To: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [PATCHES] WIP 2 interpreters for plperl |
Date: | 2006-11-12 16:03:49 |
Message-ID: | 455745E5.9000505@dunslane.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-patches |
[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);
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Treat | 2006-11-12 18:01:20 | Re: Frequent Update Project: Design Overview of HOTUpdates |
Previous Message | Martijn van Oosterhout | 2006-11-12 13:37:38 | Re: Giving up multiple postmaster + RPM issue |
From | Date | Subject | |
---|---|---|---|
Next Message | Magnus Hagander | 2006-11-12 20:42:41 | Update to mingw FAQ |
Previous Message | Tom Lane | 2006-11-12 04:28:50 | Re: [PATCHES] BUG #2704: pg_class.relchecks overflow problem |