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