Re: Oracle Decode Function - Mailing list pgsql-hackers
| From | Marc Lavergne |
|---|---|
| Subject | Re: Oracle Decode Function |
| Date | |
| Msg-id | 3D4166B0.3060904@richlava.com Whole thread Raw |
| In response to | Re: Oracle Decode Function ("Christopher Kings-Lynne" <chriskl@familyhealth.com.au>) |
| Responses |
Re: Oracle Decode Function
|
| List | pgsql-hackers |
> contrib/fulltextindex/fti.c uses variable numbers of arguments...
I see the code, but maybe I don't SEE the code. I'm only on my second
cup of coffee so I may be missing something but I am not betting any
money in it :) Fulltextindex appears to work because it's called within
a trigger but I don't think you can get the parser not to complain about
arguments when your function is not called internally by the trigger
manager. Here's my fat-free proof of concept:
-- -----------------------------------------------
-- /tmp/varargs.c
#include "postgre.h"
#include "fmgr.h"
PG_FUNCTION_INFO_V1(varargs);
Datum varargs(PG_FUNCTION_ARGS)
{ int32 v_0 = PG_GETARG_INT32(0); int32 v_1 = PG_GETARG_INT32(1);
PG_RETURN_INT32(v_0 + v_1);
}
-- -----------------------------------------------
gcc -Wall -L. -D_REENTRANT -fPIC -shared
-I/home/postgre/postgresql-7.2/src/include -o /tmp/varargs.so /tmp/varargs.c
-- -----------------------------------------------
-- verify it works with arg defs
create function varargs(int4, int4) returns int4 as '/tmp/varargs.so' language 'C';
-- -----------------------------------------------
select varargs(1,2);
varargs
--------- 3
(1 row)
-- -----------------------------------------------
-- verify the failure without arg defs
drop function varargs(int4 int4);
create function varargs() returns int4 as '/tmp/varargs.so' language 'C';
-- -----------------------------------------------
select varargs(1,2);
ERROR: Function 'varargs(int4, int4)' does not exist Unable to identify a function that satisfies the given
argument
types You may need to add explicit typecasts
-- -----------------------------------------------
Christopher Kings-Lynne wrote:
>>If you're asking about whether a custom function can have vararg
>>parameters, the answer appears to depend on the CREATE FUNCTION syntax.
>>I've never used them personally, but the PG_FUNCTION_ARGS and
>>PG_GETARG_xxx(#) macros (/src/includes/fmgr.h) available for compiled
>>functions would appear to support variable length argument lists. The
>>problem is that I couldn't pin down a CREATE FUNCTION that provided the
>>same vararg functionality. Hopefully somebody can answer this
>>conclusively.
>
>
> contrib/fulltextindex/fti.c uses variable numbers of arguments...
>
> Chris
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>
pgsql-hackers by date: