Обсуждение: What's the correct way to use FunctionCallInvoke()?

Поиск
Список
Период
Сортировка

What's the correct way to use FunctionCallInvoke()?

От
Zoltan Boszormenyi
Дата:
Hi,

I have a problem calling a C function
from another C function - DirectFunctionCall*
cannot be used since some parameters may be NULL.
This dies:

  FunctionCallInfoData  fcinfo1;

  InitFunctionCallInfoData(fcinfo1, NULL, 7, NULL, NULL);
/*  arg[] and arnull[] are filled with correct values */
  result = myfunc(&fcinfo1);

Also this also:

  FunctionCallInfoData  fcinfo1;
  FmgrInfo              flinfo1;

  MemSet(&flinfo1, 0, sizeof(flinfo1));
  flinfo1.fn_addr = myfunc;
  flinfo1.fn_nargs = 7;
  InitFunctionCallInfoData(fcinfo1, &flinfo1, 7, NULL, NULL);
/*  arg[] and arnull[] are filled with correct values */
  result = FunctionCallInvoke(&fcinfo1);

How to do it correctly? I am on PostgreSQL 8.1.9 currently.

--
----------------------------------
Zoltán Böszörményi
Cybertec Geschwinde & Schönig GmbH
http://www.postgresql.at/


Re: What's the correct way to use FunctionCallInvoke()?

От
Tom Lane
Дата:
Zoltan Boszormenyi <zb@cybertec.at> writes:
>   FmgrInfo              flinfo1;

>   MemSet(&flinfo1, 0, sizeof(flinfo1));

This is certainly not the approved way to set up an FmgrInfo.
Use fmgr_info().

            regards, tom lane