Re: Add SPI results constants available for PL/*

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Christopher Browne <cbbrowne(at)gmail(dot)com>, Samuel PHAN <samuel(at)nomao(dot)com>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Add SPI results constants available for PL/*
Date: 2012-01-10 17:59:47
Message-ID: 4F0C7C93.3040609@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 01/10/2012 12:34 PM, Pavel Stehule wrote:
>>
>> Actually, now I look closer I see that PLPerl passes back a stringified
>> status from SPI_execute(), so there is no great need for setting up these
>> constants. It's probably water under the bridge now, but maybe PLPython
>> should have done this too.
>>
> This is not documented well - I see nothing about result value in doc.
> Does it raise exception when SPI returns some bad result value?

The docs state:

You can then access the command status (e.g., SPI_OK_INSERT) like this:

$res = $rv->{status};

And it works like this:

andrew=# do 'my $rv = spi_exec_query("select 1 as a");
elog(NOTICE,$rv->{status});' language plperl;
NOTICE: SPI_OK_SELECT
CONTEXT: PL/Perl anonymous code block
DO
andrew=#

An error causes the function to end, so it never sees the error status:

andrew=# do 'my $rv = spi_exec_query("select blurfl");
elog(NOTICE,$rv->{status});' language plperl;
ERROR: column "blurfl" does not exist at line 1.
CONTEXT: PL/Perl anonymous code block
andrew=#

If you think more documentation is needed, submit a patch.

cheers

andrew

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2012-01-10 18:03:31 Re: Add SPI results constants available for PL/*
Previous Message Jan-Benedict Glaw 2012-01-10 17:54:06 Re: pgsphere