Re: Commitfest patches mostly assigned ... status - Mailing list pgsql-hackers

From Andrew Chernow
Subject Re: Commitfest patches mostly assigned ... status
Date
Msg-id 48C9A9FB.9090500@esilo.com
Whole thread Raw
In response to Re: Commitfest patches mostly assigned ... status  (Josh Berkus <josh@agliodbs.com>)
List pgsql-hackers
Josh Berkus wrote:
>> Josh is probably basing that on the long history of
>> discussion/revision cycles. 
> 
> Yep, and that *I* don't understand what the patch does, so I'm not going to 
> turn a newbie reviewer loose on it.
> 

Here is a quick overview, there are two parts to the patch:

1. event system
This allows one to register "PQregisterEventProc" a per-conn callback function 
with libpq that gets called when particular events occur.  Currently, the events 
tell you when a conn or result is created, reset, destroyed and copied.  It is 
generic enough to add more events in the future.

By receiving events about libpq objects, you can properly allocate and free 
userland memory (PQfinish, PQexec, PQclear, etc... trigger events) and associate 
it with the libpq object: thus PQsetInstanceData(conn...) or 
PQsetResultInstanceData(res....).  This is basically adding members to the 
opaque PGconn or PGresult during runtime.  This "instance data" can be retreived 
via PQinstanceData and PQresultInstanceData.  To shine a different light on it, 
apps normally wrap a PGconn or PGresult within their own structures, but now you 
can wrap the app structures inside a PGconn or PGresult.

This may help, its the libpqtypes PGEventProc implementation.
http://libpqtypes.esilo.com/browse_source.html?file=events.c

Also check out the patches sgml docs if you get a chance.


2. result management
There are also four functions that provide more control over PGresult.  If you 
need to create a result from scratch, expands on the PQmakeEmptyPGResult idea.

PQcopyResult - copy a given source result, flags argument determines what 
portions of the result are copied.

PQsetResultAttrs - sets the attributes of the reuslt (its columns).

PQsetvalue - sets a tuple value in a result

PQresultAlloc - thin wrapper around the internal pqResultAlloc.  Uses the 
result's block allocater, which allows PQclear to properly free all memory 
assocaited with a PGresult.

-- 
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/


pgsql-hackers by date:

Previous
From: Ron Mayer
Date:
Subject: Re: Proposed patch: make SQL interval-literal syntax work per spec
Next
From: Tom Lane
Date:
Subject: Re: Proposed patch: make SQL interval-literal syntax work per spec