Re: libpq object hooks

Andrew Chernow <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.patches
Message-ID <[email protected]>
Tom Lane wrote:
> Where
> exactly does the hook hand off the storage pointer to libpq?  What
> are you going to do if the hook fails to create the storage
> (ie, out of memory during PGresult creation)?

The current submitted patch has 3 of its function callbacks returning a 
void*, initHookData after the creation of a conn, resultCreate, and 
resultCopy.  We have recently changed this design so all hooks, now 
called events, go through a single callback ... PGEventProc.  The old 
function callbacks are just eventIds now.

/////////////////////////////////
// The libpq side (looping registered event procs)
PGEventResultCreate info;
info.stateData = NULL; /* our event data ptr */
info.conn = conn;
info.result = result;

if(!result->evtState[i].proc(PGEVT_RESULTCREATE,
   (void *)&info, result->evtState[i].passThrough)
{
   PQclear(result); // destroy result? ... not sure
   return error;    // previously, we ignored it
}

// assign event data created by event proc.
result->evtState[i].data = info.stateData;


///////////////////////////////////////
// example of what the event proc does
int my_evtproc(PGEventId evtId, void *evtInfo, void *passThrough)
{
   switch(eventId)
   {
     case PGEVT_RESULTCREATE:
     {
       void *data = makeresultdata(....)
       if(!data)
         return FALSE;
       ((PGEventResultCreate *)evtInfo)->stateData = data;
       break;
     }
   }

   return TRUE;
}


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

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

-- 
Sent via pgsql-patches mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.