Re: Retrieving query results
Michael Paquier <michael.paquier@gmail.com>
From: Michael Paquier <michael.paquier@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Igor Korot <ikorot01@gmail.com>,
pgsql-general <pgsql-general@postgresql.org>
Date: 2017-08-28T06:05:14Z
Lists: pgsql-general
Attachments
- pg_copy_res.c (text/x-csrc)
- 0001-Refactor-error-message-handling-in-pqAddTuple.patch (application/octet-stream) patch 0001
- 0002-Improve-overflow-checks-of-pqAddTuple-in-libpq.patch (application/octet-stream) patch 0002
- (unnamed) (text/plain)
On Sun, Aug 27, 2017 at 12:12 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Michael Paquier <michael.paquier@gmail.com> writes: >> On Fri, Aug 25, 2017 at 8:10 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >>> I think the real problem occurs where we realloc the array bigger. > >> Looking at the surroundings, I think that it would be nice to have >> pqAddTuple and PQsetvalue set an error message with this patch. > > Yeah, I was thinking about that myself - the existing design presumes > that the only possible reason for failure of pqAddTuple is OOM, but > it'd be better to distinguish "too many tuples" from true OOM. So > we should also refactor to make pqAddTuple responsible for setting > the error message. Might be best to do the refactoring first. Attached are two patches: 1) 0001 refactors the code around pqAddTuple to be able to handle error messages and assign them in PQsetvalue particularly. 2) 0002 adds sanity checks in pqAddTuple for overflows, maximizing the size of what is allocated to INT_MAX but now more. pqRowProcessor() still has errmsgp, but it is never used on HEAD. At least with this set of patches it comes to be useful. We could rework check_field_number() to use as well an error message string, but I have left that out to keep things simple. Not sure if any complication is worth compared to just copying the error message in case of an unmatching column number. Attached is as well a small program I have used to test PQsetvalue through PQcopyResult to see if results get correctly allocated at each call, looking at the error message stacks on the way. -- Michael
Commits
-
Doc: document libpq's restriction to INT_MAX rows in a PGresult.
- 2a82170a56cb 9.2.24 landed
- 1e6c36260635 9.3.20 landed
- 2338ad26374e 9.4.15 landed
- c7e990bb0f4d 9.5.10 landed
- 941e47fc43cc 9.6.6 landed
- ff59f30dc30e 10.0 landed
- 6cbee65eee20 11.0 landed
-
Teach libpq to detect integer overflow in the row count of a PGresult.
- dfd1042c6ae5 9.5.10 landed
- d391fb6c3802 9.3.20 landed
- bc95e5874ac9 9.6.6 landed
- b481b39b876f 10.0 landed
- a07058a6d43b 9.2.24 landed
- 2e70d6b5e99b 11.0 landed
- 1c53722ffd00 9.4.15 landed