----- Original Message ----- From: "Tom Lane" <[EMAIL PROTECTED]>
To: "Heikki Linnakangas" <[EMAIL PROTECTED]>
Cc: "dv @ nabble" <[EMAIL PROTECTED]>; "pgsql-hackers list" <pgsql-hackers@postgresql.org>
Sent: Monday, April 28, 2008 5:07 PM
Subject: Re: [HACKERS] SRF in SFRM_ValuePerCall mode


"Heikki Linnakangas" <[EMAIL PROTECTED]> writes:
dv @ nabble wrote:
I am working on implementation of custom "C" SRF for our team. The SRF uses
SFRM_ValuePerCall mode. I know that sometimes even in SFRM_ValuePerCall
mode
all the rows returned from SRF are "materialized" (for performing JOINs,
for
example).

Yep, they are unfortunately always materialized. Back when set returning
functions were implemented, the original patch did actually support true
"value per call" mode, where the whole result set was not materialized.
However, it was dropped because of some issues I can't remember off the
top of my head. The value-per-call API was committed, so that it was
already in place when someone gets around to implement the backend
support for it.

That's a rather revisionist view of history ;-)  Value-per-call mode has
always been there, just not in nodeFunctionscan.c.

If you're not joining to the function result, and you don't need the
ability to determine its result type on the fly, you could declare it
as returning a specific rowtype and then call it in the targetlist:

select vpc();

You mean make the function return the only row?
This is not the functionality we need. What we want is to create a SETOF function that will emulate a table and query this "table" with WHERE filter and LIMIT clauses to limit the row count we want to return. We might pass the filter and the limit to the function, but we want to
implement it in more natural way.

Thanks,
Denis

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to