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:

Previous
From: Tom Lane
Date:
Subject: Re: SET LOCAL again
Next
From: Tom Lane
Date:
Subject: Re: solaris 9?