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: