C function proposal redux
I propose we modify C functions for 7.2.
( I'll volunteer to do as much as I can figure out ;-)
(1) C functions should be able to return multiple values.
(2) A setup and breakdown function should be able to be called
surrounding the query set in which a function is called. This allows
constructors and destructors.
(3) A function should be able to tell Postgres how to use it. For
instance:
select * from table where column = function();
Should be able to instruct Postgres to either take the value returned
and search that one value (allowing index match against the value), or
perform a table scan against the function each time. Both behaviors are
important. Currently a function seems to force a table scan.
Estimates:
1 may be difficult. 2 should be easy enough. 3, depending on the code
dependencies, could either be very hard or easy. (my guess is that it
would be hard)
On Wed, 13 Dec 2000, mlw wrote:
I propose we modify C functions for 7.2.
Too simple imagine anything, but often difficult do it :-)
(1) C functions should be able to return multiple values.
for 7.2 / 7.3 are planned functions return tuples, but do it
is really diffucult. See the current source...
(2) A setup and breakdown function should be able to be called
surrounding the query set in which a function is called. This allows
constructors and destructors.
Why? Can you show any example where is it needful? If you really
need an init/destroy, you can use:
SELECT my_init();
..query...
SELECT my_destroy();
(3) A function should be able to tell Postgres how to use it. For
instance:select * from table where column = function();
Should be able to instruct Postgres to either take the value returned
and search that one value (allowing index match against the value), or
perform a table scan against the function each time. Both behaviors are
important. Currently a function seems to force a table scan.
Here I not undestand. We have 'iscacheable' - or what you mean?
Karel