Fix libpq state machine in pipeline mode
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 29 Jun 2021 19:01:29 +0000 (15:01 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 29 Jun 2021 19:01:29 +0000 (15:01 -0400)
commit690339fcd58759d213523f87071f992c4402e980
treee82c515c1bcda39014f091542f4e1111e3743e35
parent69cf1d5429d48d030d71d5dd4931084d422413cb
Fix libpq state machine in pipeline mode

The original coding required that PQpipelineSync had been called before
the first call to PQgetResult, and failure to do that would result in an
unexpected NULL result being returned.  Fix by setting the right state
when a query is sent, rather than leaving it unchanged and having
PQpipelineSync apply the necessary state change.

A new test case to verify the behavior is added, which relies on the new
PQsendFlushRequest() function added by commit a7192326c74d.

Backpatch to 14, where pipeline mode was added.

Reported-by: Boris Kolpackov <boris@codesynthesis.com>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/boris.20210616110321@codesynthesis.com
src/interfaces/libpq/fe-exec.c
src/test/modules/libpq_pipeline/libpq_pipeline.c
src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
src/test/modules/libpq_pipeline/traces/nosync.trace [new file with mode: 0644]