Re: return_next for plperl (was Re: call for help)

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Abhijit Menon-Sen <ams(at)oryx(dot)com>
Cc: plperlng-devel(at)pgfoundry(dot)org, pgsql-patches(at)postgresql(dot)org
Subject: Re: return_next for plperl (was Re: call for help)
Date: 2005-06-04 20:33:19
Message-ID: 200506042033.j54KXJW08961@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


Mega-patch version applied. Thanks.

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

Abhijit Menon-Sen wrote:
> At 2005-05-21 20:18:50 +0530, ams(at)oryx(dot)com wrote:
> >
> > > The second issue is where plperl returns a large result set.
>
> I have attached the following seven patches to address this problem:
>
> 1. Trivial. Replaces some errant spaces with tabs.
>
> 2. Trivial. Fixes the spelling of Jan's name, and gets rid of many
> inane, useless, annoying, and often misleading comments. Here's
> a sample: "plperl_init_all() - Initialize all".
>
> (I have tried to add some useful comments here and there, and will
> continue to do so now and again.)
>
> 3. Trivial. Splits up some long lines.
>
> 4. Converts SRFs in PL/Perl to use a Tuplestore and SFRM_Materialize
> to return the result set, based on the PL/PgSQL model.
>
> There are two major consequences: result sets will spill to disk when
> they can no longer fit in work_mem; and "select foo_srf()" no longer
> works. (I didn't lose sleep over the latter, since that form is not
> valid in PL/PgSQL, and it's not documented in PL/Perl.)
>
> 5. Trivial, but important. Fixes use of "undef" instead of undef. This
> would cause empty functions to fail in bizarre ways. I suspect that
> there's still another (old) bug here. I'll investigate further.
>
> 6. Moves the majority of (4) out into a new plperl_return_next()
> function, to make it possible to expose the functionality to
> Perl; cleans up some of the code besides.
>
> 7. Add an spi_return_next function for use in Perl code.
>
> If you want to apply the patches and try them out, 8-composite.diff is
> what you should use. (Note: my patches depend upon Andrew's use-strict
> and %_SHARED patches being applied.)
>
> Here's something to try:
>
> create or replace function foo() returns setof record as $$
> $i = 0;
> for ("World", "PostgreSQL", "PL/Perl") {
> spi_return_next({f1=>++$i, f2=>'Hello', f3=>$_});
> }
> return;
> $$ language plperl;
> select * from foo() as (f1 integer, f2 text, f3 text);
>
> (Many thanks to Andrews Dunstan and Supernews for their help.)
>
> Questions, comments, and suggestions welcome.
>
> -- ams
> Just Another Cut-and-Paste Hacker

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2005-06-04 20:42:34 Re: Updated kerberos service name patch
Previous Message Bruce Momjian 2005-06-04 20:14:57 Re: AllocSetReset improvement