From: | Mario Weilguni <Mario(dot)Weilguni(at)kpnqwest(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Implementing an operator in C? |
Date: | 2001-02-05 18:04:38 |
Message-ID: | 01020519043801.01393@wotan |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Am Sonntag, 4. Februar 2001 20:12 schrieben Sie:
> Mario Weilguni <mweilguni(at)sime(dot)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(dot)weilguni(at)kpnqwest(dot)com
===================================================
From | Date | Subject | |
---|---|---|---|
Next Message | Mathieu Dube | 2001-02-05 18:18:48 | Re: Re: 1024 limits?? |
Previous Message | Mitch Vincent | 2001-02-05 18:00:44 | Re: Like vs '=' |