Обсуждение: C function proposal redux

Поиск
Список
Период
Сортировка

C function proposal redux

От
mlw
Дата:
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


Re: C function proposal redux

От
Karel Zak
Дата:
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