Thread: [PATCH] Reset single-row processing mode at end of pipeline commands queue
Hello, I'm trying to make single-row mode and pipeline mode work together in Psycopg using libpq. I think there is something wrong with respect to the single-row mode flag, not being correctly reset, in some situations. The minimal case I'm considering is (in a pipeline): * send query 1, * get its results in single-row mode, * send query 2, * get its results *not* in single-row mode. It seems that, as the command queue in the pipeline is empty after getting the results of query 1, the single-row mode flag is not reset and is still active for query 2, thus leading to an unexpected PGRES_SINGLE_TUPLE status. The attached patch demonstrates this in the test suite. It also suggests to move the statement resetting single-row mode up in pqPipelineProcessQueue(), before exiting the function when the command queue is empty in particular. Thanks for considering, Denis
Attachment
Re: [PATCH] Reset single-row processing mode at end of pipeline commands queue
From
Alvaro Herrera
Date:
Hello Denis, On 2022-Oct-07, Denis Laxalde wrote: > I'm trying to make single-row mode and pipeline mode work together in > Psycopg using libpq. I think there is something wrong with respect to the > single-row mode flag, not being correctly reset, in some situations. > > The minimal case I'm considering is (in a pipeline): > * send query 1, > * get its results in single-row mode, > * send query 2, > * get its results *not* in single-row mode. > > It seems that, as the command queue in the pipeline is empty after getting > the results of query 1, the single-row mode flag is not reset and is still > active for query 2, thus leading to an unexpected PGRES_SINGLE_TUPLE status. > > The attached patch demonstrates this in the test suite. It also suggests to > move the statement resetting single-row mode up in pqPipelineProcessQueue(), > before exiting the function when the command queue is empty in particular. Your suggestion to move the code up seems correct to me. Therefore, I have pushed this including the added test code. Thanks for an excellent report and patch. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/