Re: return value of a version-1 C function (Solved)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: return value of a version-1 C function (Solved)
Дата
Msg-id 15288.991751717@sss.pgh.pa.us
обсуждение исходный текст
Ответ на return value of a version-1 C function (Solved)  (Francesco Casadei <f_casadei@libero.it>)
Ответы Re: return value of a version-1 C function (Solved)  (Francesco Casadei <f_casadei@libero.it>)
Список pgsql-general
Francesco Casadei <f_casadei@libero.it> writes:
> 1) SPI_connect() and SPI_finish() mark a new memory context; since I must
> return cod I need to SPI_palloc() it in the upper Executor context. The
> problem is: how can I free the SPI_palloc()'ed memory?

I don't believe you need to.  AFAICT, SPI_palloc will allocate in the
context that was current when SPI_connect was called.  Assuming that
that was the active context when your function was entered, that is the
right context to palloc your result value in.  It's the executor's
responsibility to clean up the result value, not yours.

> 2) If I use the VARSIZE(__PTR) macro (defined in postgres.h) to set
> the size of cod, the compiler will complain about an invalid
> lvalue. This is not valid:

> VARSIZE(cod) = VARHDRSZ + 8;

Right.  As of 7.1 this should be

    VARATT_SIZEP(cod) = VARHDRSZ + 8;

Did we miss any places in the documentation where this needs to be
updated?

> 3) The following variable is an identifier (Name):

> Name tablename = PG_GETARG_NAME(0);

> (void)strlcat(query, NameStr(fieldname), sizeof(query));

Should be NameStr(*tablename).  Not too consistent maybe, but I didn't
invent that macro ;-)

            regards, tom lane

В списке pgsql-general по дате отправления:

Предыдущее
От: Evelio Martinez
Дата:
Сообщение: Postgresql and W98
Следующее
От: Tom Lane
Дата:
Сообщение: Re: psql , stored procedure, triggers and errors