Re: Implementing an operator in C? - Mailing list pgsql-hackers

From Mario Weilguni
Subject Re: Implementing an operator in C?
Date
Msg-id 01020519043801.01393@wotan
Whole thread Raw
In response to Re: Implementing an operator in C?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Am Sonntag,  4. Februar 2001 20:12 schrieben Sie:
> Mario Weilguni <mweilguni@sime.com> writes:
> >           float8 num3 = numeric_float8(num1);
>
> That won't work in the brave new world of 7.1 :-(.  You need to do
> something like
>
>     float8 num3 = DatumGetFloat8(DirectFunctionCall1(numeric_float8,
>                     NumericGetDatum(num1)));
>
> Ugly, I know ... but we have to be rigidly careful about converting
> values to Datum and back in order to avoid portability problems.
>
> A decent C compiler should've warned about type mismatches in your call,
> BTW.
>
>             regards, tom lane

Thanks alot for the info, but the problem is elsewhere. Even a simple 
function like
Datum
nef(PG_FUNCTION_ARGS)
{
         Numeric                 num1 = PG_GETARG_NUMERIC(0);
         PG_RETURN_BOOL(true);
}

will crash. The macro PG_GETARG_NUMERIC evaluates to:
((Numeric)pg_detoast_datum((struct varlena *) ((Pointer) ( (fcinfo->arg[0])))
and this pg_detoast_datum will lead to a crash (SIGSEGV). So I think I must 
be doing something wrong here, isn't it?

Thanks!

Best regards,
         Mario Weilguni

-- 
===================================================Mario Weilguni                               KPNQwest Austria GmbH
 Senior Engineer Web Solutions                         Nikolaiplatz 4
 tel: +43-316-813824                                8020 graz, austria
 fax: +43-316-813824-26                    http://www.kpnqwest.at
 e-mail: mario.weilguni@kpnqwest.com
===================================================



pgsql-hackers by date:

Previous
From: "Mike Miller"
Date:
Subject: Re: Re: Re: grant privileges to a database [URGENT]
Next
From: Ryan Kirkpatrick
Date:
Subject: Re: [PATCHES] A Sparc/Linux patch (for 7.1), and a Linux rc.d/init.d script....