* Greg Stark ([EMAIL PROTECTED]) wrote: > Martijn van Oosterhout <kleptog@svana.org> writes: > > Hmm, the simplest improvement I can think of is one where you > > register a callback that libpq calls whenever it has received a new > > tuple. > > That could be useful for applications but I think a driver really wants to > retain control of the flow of control. To make use of a callback it would have > to have an awkward dance of calling whatever function gives libpq license to > call the callback, having the callback stuff the data in a temporary space, > then checking for new data in the temporary space, and returning it to the > user.
I doubt the callback would be called at some inopportune time... Probably the callback would be passed into a libpq call which then directly calls the callback and is done with it when it returns. The libpq function would certainly need a parameter which is just passed to the callback to allow the system to maintain state (such as how many tuples the callback has processed so far) to avoid ugly global variables but otherwise I don't really see that this is changing the flow of control all that much... I can see how having a callback would be useful though I think for a good number of cases it's just going to be populating a memory region with it and we could cover that common case by providing an API for exactly that. The other issue with a callback is that libpq would have to either call the callback for each value (not my preference) or have some way to pass a whole variable-length tuple to the callback, which would require libpq to allocate memory for the tuple (hopefully only once and not per-tuple) and then build up whatever structure it's going to give to the callback in memory (copy once) and then call the callback which would be required to copy the tuple somewhere else (copy again). Of course, all of this is after an initial copy from read() into the read buffer, but I doubt that could be helped (and read()'ing small enough amounts to make it happen wouldn't really improve things). Thanks, Stephen
signature.asc
Description: Digital signature