Re: return_next for plperl (was Re: call for help) - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: return_next for plperl (was Re: call for help)
Date
Msg-id 200506042033.j54KXJW08961@candle.pha.pa.us
Whole thread Raw
In response to return_next for plperl (was Re: call for help)  (Abhijit Menon-Sen <ams@oryx.com>)
Responses Re: return_next for plperl (was Re: call for help)
List pgsql-patches
Mega-patch version applied.  Thanks.

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


Abhijit Menon-Sen wrote:
> At 2005-05-21 20:18:50 +0530, ams@oryx.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@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: AllocSetReset improvement
Next
From: Bruce Momjian
Date:
Subject: Re: Updated kerberos service name patch