C function proposal redux

Started by mlwabout 25 years ago2 messages
#1mlw
markw@mohawksoft.com

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)

--
http://www.mohawksoft.com

#2Karel Zak
zakkr@zf.jcu.cz
In reply to: mlw (#1)
Re: C function proposal redux

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