pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Igor Shevchenko <igor@carcass.ath.cx>
To: pgsql-interfaces@postgresql.org
Subject: libpq: how to get a sequence of partial PGresult-s
Date: Wed, 24 Sep 2003 01:09:17 +0300
Message-ID: <200309240109.17024.igor@carcass.ath.cx> (raw)

Hi,

I use PostgreSQL as a database for my gui app.
Some queries can take alot of time (e.g. app's search function), and I'd like 
to show recieved data as soon as it arrives. I've played with non-blocking 
mode and PQconsumeInput and as far as I can see, backend sends data (almost?) 
as soon as it's found. The libpq library (protocol v3) reads incoming data 
(DataRow messages) but returns PGresult only when the CommandComplete message 
is recieved. Is there any way to get/process this partial PGresult in my 
app ? I haven't found any API function for this, so I thought about an 
additional function for the libpq's API -

PGresult* PQgetNextResult ( PGconn* conn );

It'd make a tupleless copy of conn->result (PGresult), assign it to conn-
>result and return the old conn->result object, i.e. something like this :

PGresult* PQgetNextResult ( PGconn* conn ) {
	if ( !conn->result )
		return NULL;
	
	PGresult* res = conn->result;
	conn->result = pgMakeTuplelessCopy ( res );
	return res;
}

It's ok to return an empty PGresult (PQntuples(res) == 0);
NULL return value would still indicate the end of the query.
Libpq would still be able to recieve/process remaining DataRow results.
This would be a better counterpart to mysql's mysql_fetch_row(...) api 
function.

Does this makes sence ?

Btw I know about sql cursors but I'd have to repeat "fetch next from mycursor" 
for all resulting tuples, which is a big processing/network overhead.

-- 
Best regards,
Igor Shevchenko




view thread (4+ messages)  latest in thread

Message-ID: <200309240109.17024.igor@carcass.ath.cx>
Permalink:  ../200309240109.17024.igor@carcass.ath.cx/
Also on:    postgresql.org/message-id/200309240109.17024.igor@carcass.ath.cx

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: igor@carcass.ath.cx
  Subject: Re: libpq: how to get a sequence of partial PGresult-s
  In-Reply-To: <200309240109.17024.igor@carcass.ath.cx>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox