Re: libpq - PQsendQuery wait for complete result

Поиск
Список
Период
Сортировка
От Albe Laurenz
Тема Re: libpq - PQsendQuery wait for complete result
Дата
Msg-id D960CB61B694CF459DCFB4B0128514C208C0C9AD@exadv11.host.magwien.gv.at
обсуждение исходный текст
Ответ на libpq - PQsendQuery wait for complete result  (icholy <ilia.choly@gmail.com>)
Ответы Re: libpq - PQsendQuery wait for complete result  (icholy <ilia.choly@gmail.com>)
Список pgsql-general
icholy wrote:
> I'm having problem with libpq's *PQexec* function hanging on
intermittent
> connections.
> After searching around, the solution seems to be to use the
asynchronous
> functions *PQsendQuery*/*PQgetResult* and implement your own timeout.
>
> Now the issue I'm facing is that *PQgetResult* needs to be called
multiple
> times until it returns *null* and then you know it's done.
> However, the rest of my application expects a single *PQresult* object
per
> query.
>
> So my question is:
>
> *A.* Is there a way to concatenate/join the multiple *PQresults*?

If you have a single SQL statement, you will get only one
PQresult.  You get more than one if you send a query string
with more than one statement, e.g.

PQsendQuery(conn, "SELECT 42; SELECT 'Hello'");

would result in two PQresults.

You can get multiple PQresults only using asynchronous
command processing; the corresponding PQexec would return
only the PQresult of the *last* statement executed.

So you can get the same behaviour as PQexec by discarding
all PQresults except for the last one.

> *B. *Can I somehow use *PQisBusy* & *PQconsumeInput* to wait until all
the
> results are ready before calling *PQgetResult*?

That is not necessary, as it will not influence the
number of PQresults you get (as described above).

These functions are only necessary if you want to avoid
blocking when you call PQgetResult.

Yours,
Laurenz Albe


В списке pgsql-general по дате отправления:

Предыдущее
От: "Albe Laurenz"
Дата:
Сообщение: Re: UPDATE syntax
Следующее
От: "Albe Laurenz"
Дата:
Сообщение: Re: About aggregates...