Re: Implementing an operator in C?
От | Mario Weilguni |
---|---|
Тема | Re: Implementing an operator in C? |
Дата | |
Msg-id | 01020519043801.01393@wotan обсуждение исходный текст |
Ответ на | Re: Implementing an operator in C? (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | 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 по дате отправления: