Re: [PATCHES] WIP 2 interpreters for plperl

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);

In response to

Responses

Browse pgsql-hackers by date

  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

Browse pgsql-patches by date

  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