On Tue, 2011-08-30 at 19:29 +0100, Dave Page wrote:
> On Tue, Aug 30, 2011 at 6:15 PM, Guillaume Lelarge
> <guillaume@lelarge.info> wrote:
> >>
> >> libpq doesn't support multiple resultsets in a single query unfortunately.
> >>
> >
> > As a matter of fact, it does (see
> > http://pgolub.wordpress.com/2009/11/17/script-slicing-by-pgmdd/), and I
> > really want pgAdmin to use this. Still need to find a good UI and some
> > time to work on it :)
>
> Err, no it doesn't. The blog you've referenced describes how PgMDD
> takes the PostgreSQL 8.3 parser and uses it to pre-parse scripts into
> individual statements on the client, which it then executes
> individually. That's similar to what's being asked for here, but has
> the rather nasty limitation of not understanding PG 8.4+'s grammar.
>
> Libpq itself only supports a single resultset for multi-part
> statements. Even in 9.1, the docs say:
>
> The command string can include multiple SQL commands (separated by
> semicolons). Multiple queries sent in a single PQexec call are
> processed in a single transaction, unless there are explicit
> BEGIN/COMMIT commands included in the query string to divide it into
> multiple transactions. Note however that the returned PGresult
> structure describes only the result of the last command executed from
> the string. Should one of the commands fail, processing of the string
> stops with it and the returned PGresult describes the error condition.
>
> (http://www.postgresql.org/docs/9.1/static/libpq-exec.html#LIBPQ-EXEC-MAIN)
>
> In other words, only the last resultset is accessible.
>
You're right for PQexec. And wrong for PQsendQuery, which is the one we
use on the query tool.
And to quote the fine manual :)
(http://www.postgresql.org/docs/9.1/static/libpq-async.html#LIBPQ-PQSENDQUERY):
After successfully calling PQsendQuery, call PQgetResult one or more
times to obtain the results. PQsendQuery cannot be called again (on the
same connection) until PQgetResult has returned a null pointer,
indicating that the command is done.
--
Guillaume http://blog.guillaume.lelarge.info http://www.dalibo.com