Re: libpq object hooks - Mailing list pgsql-patches

From Andrew Chernow
Subject Re: libpq object hooks
Date
Msg-id 482E2007.6050502@esilo.com
Whole thread Raw
In response to Re: libpq object hooks  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
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/

pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: [HACKERS] TRUNCATE TABLE with IDENTITY
Next
From: Neil Conway
Date:
Subject: Re: [HACKERS] TRUNCATE TABLE with IDENTITY