Re: PQputCopyEnd doesn't adhere to its API contract

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: PQputCopyEnd doesn't adhere to its API contract
Date: 2014-05-09 16:03:36
Message-ID: CA+TgmobGGpP-pvT=G3riQavwqjGnQ7Gn-LE8+NiZH=M4nJsUBQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, May 8, 2014 at 5:21 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Perhaps the text should be like this:
>
> 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 PQputCopyEnd call again.) If a hard error occurs, -1 is returned; you
> can use <function>PQerrorMessage</function> to retrieve details.

That looks pretty good. However, I'm realizing this isn't the only
place where we probably need to clarify the language. Just to take
one example near at hand, PQputCopyData may also return 1 when it's
only queued the data; it seems to try even less hard than PQputCopyEnd
to ensure that the data is actually sent.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2014-05-09 16:59:09 Re: PQputCopyEnd doesn't adhere to its API contract
Previous Message Robert Haas 2014-05-09 15:50:11 Re: Sending out a request for more buildfarm animals?