Thread

Commits

  1. libpq: Reset singlerow flag correctly in pipeline mode

  1. [PATCH] Reset single-row processing mode at end of pipeline commands queue

    Denis Laxalde <denis.laxalde@dalibo.com> — 2022-10-07T13:08:05Z

    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
  2. Re: [PATCH] Reset single-row processing mode at end of pipeline commands queue

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2022-10-14T17:34:58Z

    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/