Re: c language functions - Mailing list pgsql-hackers

From Robert Haas
Subject Re: c language functions
Date
Msg-id CA+TgmoYMUgSMn7fhByR+jT7N7c0CYT86nZyFPXjNusEUt2Sujw@mail.gmail.com
Whole thread Raw
In response to c language functions  (Rodrigo Barboza <rodrigombufrj@gmail.com>)
Responses Re: c language functions
List pgsql-hackers
On Wed, Apr 3, 2013 at 11:26 AM, Rodrigo Barboza
<rodrigombufrj@gmail.com> wrote:
> Hello.
> I'm trying to create a generic add function.
> I have defined a type my_uint and it needs a '+' operator.
> This operator should work like normal int + int operation.
> The function is defined expecting arguments (my_uint, anyelement).
>
> I'm confused in retrieving the anyelement type, value and than do the add
> operation and return the correct value and type.
> I tried to use PG_GETARG_DATUM, but I don't know how to extract the value
> from it (should it be a uint32, uint64, float or double).
>
> Any tips?

Well, the information the function ends up receiving is going to
depend on how the function is declared at an SQL level.  So if you are
defining the function to take an argument of anyelement (which seems
unlikely to be a useful thing to do, but let's suppose you do it
anyway) then look at the C code for some other function that takes an
anyelement argument and look at how that function unpacks it.

Similarly, if you declare the function to take int4 argument, then go
look at the C code function that takes an int4 argument and see what
it does to unpack it.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]
Next
From: Tom Lane
Date:
Subject: Re: Drastic performance loss in assert-enabled build in HEAD