Re: c language functions

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Rodrigo Barboza <rodrigombufrj(at)gmail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: c language functions
Date: 2013-04-03 17:27:57
Message-ID: CA+TgmoYMUgSMn7fhByR+jT7N7c0CYT86nZyFPXjNusEUt2Sujw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Apr 3, 2013 at 11:26 AM, Rodrigo Barboza
<rodrigombufrj(at)gmail(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2013-04-03 17:36:53 Re: Drastic performance loss in assert-enabled build in HEAD
Previous Message Robert Haas 2013-04-03 17:24:55 Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]