From b04d69161354f7cfc3d8153b67145dbebc4a4698 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 22 Jan 2015 13:30:08 -0500
Subject: [PATCH] docs:  update libpq's PQputCopyData and PQputCopyEnd

Clarify the meaning of libpq return values for PQputCopyData and
PQputCopyEnd, particularly in non-blocking mode.

Report by Robert Haas
---
 doc/src/sgml/libpq.sgml | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
index de272c5c53d..ad104a3a581 100644
--- a/doc/src/sgml/libpq.sgml
+++ b/doc/src/sgml/libpq.sgml
@@ -4318,8 +4318,8 @@ int PQsetnonblocking(PGconn *conn, int arg);
       <para>
        In the nonblocking state, calls to
        <function>PQsendQuery</function>, <function>PQputline</function>,
-       <function>PQputnbytes</function>, and
-       <function>PQendcopy</function> will not block but instead return
+       <function>PQputnbytes</function>, <function>PQputCopyData</function>,
+       and <function>PQendcopy</function> will not block but instead return
        an error if they need to be called again.
       </para>
 
@@ -4961,9 +4961,9 @@ int PQputCopyData(PGconn *conn,
       <para>
        Transmits the <command>COPY</command> data in the specified
        <parameter>buffer</>, of length <parameter>nbytes</>, to the server.
-       The result is 1 if the data was sent, zero if it was not sent
-       because the attempt would block (this case is only possible if the
-       connection is in nonblocking mode), or -1 if an error occurred.
+       The result is 1 if the data was queued, zero if it was not queued
+       because of full buffers (this will only happen in nonblocking mode),
+       or -1 if an error occurred.
        (Use <function>PQerrorMessage</function> to retrieve details if
        the return value is -1.  If the value is zero, wait for write-ready
        and try again.)
@@ -5009,13 +5009,18 @@ int PQputCopyEnd(PGconn *conn,
        connections.)
       </para>
 
-      <para>
-       The result is 1 if the termination data was sent, zero if it was
-       not sent because the attempt would block (this case is only possible
-       if the connection is in nonblocking mode), or -1 if an error
-       occurred.  (Use <function>PQerrorMessage</function> to retrieve
-       details if the return value is -1.  If the value is zero, wait for
-       write-ready and try again.)
+      <para> 
+       The result is 1 if the termination message was sent; or in
+       nonblocking mode, this may only indicate that the termination
+       message was successfully queued.  (In nonblocking mode, to be
+       certain that the data has been sent, you should next wait for
+       write-ready and call <function>PQflush</>, repeating until it
+       returns zero.)  Zero indicates that the function could not queue
+       the termination message because of full buffers; this will only
+       happen in nonblocking mode.  (In this case, wait for
+       write-ready and try the <function>PQputCopyEnd</> call
+       again.)  If a hard error occurs, -1 is returned; you can use
+       <function>PQerrorMessage</function> to retrieve details.
       </para>
 
       <para>
-- 
GitLab