From: Mark Dilger <hornschnorter@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Subject: Re: Checking return value of SPI_execute
Date: Wed, 6 Nov 2019 07:35:18 -0800
Message-ID: <4bc8eca7-6efa-8174-a8cd-69167f233f6d@gmail.com> (raw)
In-Reply-To: <20191106042757.GE1604@paquier.xyz>
References: <17d30445-4862-7917-170f-84328dcd292d@gmail.com>
<20191106042757.GE1604@paquier.xyz>
On 11/5/19 8:27 PM, Michael Paquier wrote:
> On Tue, Nov 05, 2019 at 05:21:25PM -0800, Mark Dilger wrote:
>> please find attached a patch fixing a problem previously discussed [1] about
>> the code inappropriately ignoring the return value from SPI_execute.
>>
>> I will be adding this to https://commitfest.postgresql.org/26/
>> shortly.
>
> Yes, this should be fixed.
>
>> - SPI_execute(query, true, 0);
>> + spi_result = SPI_execute(query, true, 0);
>> + if (spi_result < 0)
>> + elog(ERROR, "SPI_execute returned %s", SPI_result_code_string(spi_result));
>
> Any queries processed in xml.c are plain SELECT queries, so it seems
> to me that you need to check after SPI_OK_SELECT as only valid
> result.
Other code that checks the return value from an SPI function is
inconsistent about whether it checks for SPI_OK_SELECT or simply checks
for a negative result. I was on the fence about which precedent to
follow, and was just slightly in favor of testing for negative rather
than SPI_OK_SELECT due to this function, query_to_oid_list, taking the
query string as an argument and not controlling whether that argument is
indeed a plain SELECT.
I don't feel strongly about it.
Mark Dilger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: hornschnorter@gmail.com, michael@paquier.xyz
Subject: Re: Checking return value of SPI_execute
In-Reply-To: <4bc8eca7-6efa-8174-a8cd-69167f233f6d@gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox