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

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Francesco Casadei <f_casadei(at)libero(dot)it>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: return value of a version-1 C function (Solved)
Date: 2001-06-05 14:35:17
Message-ID: 15288.991751717@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Francesco Casadei <f_casadei(at)libero(dot)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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tony Grant 2001-06-05 14:49:23 XML question
Previous Message Randall Perry 2001-06-05 14:22:02 Text data type doesn't accept newlines?