Thread: SPI_execute (result of a select statement)

SPI_execute (result of a select statement)

From
"Jasbinder Bali"
Date:
Hi,

While using SPI_execute for a select statement, how do we store the result returned by select statement (say a C variable)?
SPI_execute returns different values for success or failure only as per the postgres manual.

Thanks,
Jas

Re: SPI_execute (result of a select statement)

From
Martijn van Oosterhout
Date:
On Fri, Sep 01, 2006 at 02:24:32AM -0400, Jasbinder Bali wrote:
> Hi,
>
> While using SPI_execute for a select statement, how do we store the result
> returned by select statement (say a C variable)?
> SPI_execute returns different values for success or failure only as per the
> postgres manual.

Did you read the whole page?

http://www.postgresql.org/docs/8.1/interactive/spi-spi-execute.html

Especially the bit where it says:

  If the return value of the function is SPI_OK_SELECT then you may use
  the global pointer SPITupleTable *SPI_tuptable to access the result
  rows.

From there you can get the data. There's also the helper functions like
SPI_getvalue().

http://www.postgresql.org/docs/8.1/interactive/spi-interface-support.html

Hope this helps,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.

Attachment

Re: SPI_execute (result of a select statement)

From
"Jasbinder Bali"
Date:

The structure SPITupleTable is defined thus:

typedef struct
{
MemoryContext tuptabcxt; /* memory context of result table */
uint32 alloced; /* number of alloced vals */
uint32 free; /* number of free vals */
TupleDesc tupdesc; /* row descriptor */
HeapTuple *vals; /* rows */
} SPITupleTable;
If the select query returns 10 rows (say),
how to access the result of each row separately?

Can you please help me with the syntax of the same?

Regards,

~Jas

On 9/1/06, Martijn van Oosterhout <kleptog@svana.org> wrote:
On Fri, Sep 01, 2006 at 02:24:32AM -0400, Jasbinder Bali wrote:
> Hi,
>
> While using SPI_execute for a select statement, how do we store the result
> returned by select statement (say a C variable)?
> SPI_execute returns different values for success or failure only as per the
> postgres manual.

Did you read the whole page?

http://www.postgresql.org/docs/8.1/interactive/spi-spi-execute.html

Especially the bit where it says:

  If the return value of the function is SPI_OK_SELECT then you may use
  the global pointer SPITupleTable *SPI_tuptable to access the result
  rows.

From there you can get the data. There's also the helper functions like
SPI_getvalue().

http://www.postgresql.org/docs/8.1/interactive/spi-interface-support.html

Hope this helps,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFE99P3IB7bNG8LQkwRAgnBAJ9ijj6rGUXYozBviDp5K7AlYPF4VACfYcS2
m48ZBwMDuXR9/cY6i+wnqS0=
=DVar
-----END PGP SIGNATURE-----



Re: SPI_execute (result of a select statement)

From
Martijn van Oosterhout
Date:
On Fri, Sep 01, 2006 at 03:41:12AM -0400, Jasbinder Bali wrote:
> The structure SPITupleTable is defined thus:

<snip>

> If the select query returns 10 rows (say),
> how to access the result of each row separately?

<snip>

Read this:

> >http://www.postgresql.org/docs/8.1/interactive/spi-interface-support.html

I would say that the example should clear up most of your questions:

http://www.postgresql.org/docs/8.1/interactive/spi-examples.html

Hope this helps,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.

Attachment