Re: libpq object hooks
От | Andrew Chernow |
---|---|
Тема | Re: libpq object hooks |
Дата | |
Msg-id | 482E2007.6050502@esilo.com обсуждение исходный текст |
Ответ на | Re: libpq object hooks (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | 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 по дате отправления: