-
+
conn is not null and
status>
indicates an error, the current error message of the specified
connection is copied into the PGresult.
- Also, if
conn is not null, any event
handlers
+ Also, if
conn is not null, any event
procedures
registered in the connection are copied into the
- PGresult (but they don't get
- PGEVT_RESULTCREATE> calls).
+ PGresult. (They do not get
+ PGEVT_RESULTCREATE> calls, but see
+ PQfireResultCreateEvents.)
Note that PQclear should eventually be called
on the object, just as with a PGresult
returned by
libpq itself.
+
+
+ PQfireResultCreateEvents
+
+
PQfireResultCreateEvents
+
+
+
+ Fires a
PGEVT_RESULTCREATE event (see
+ linkend="libpq-events">) for each event procedure registered in the
+ PGresult object. Returns non-zero for success,
+ zero if any event procedure fails.
+
+
+ int PQfireResultCreateEvents(PGconn *conn, PGresult *res);
+
+
+
+ The conn> argument is passed through to event procedures
+ but not used directly. It can be NULL> if the event
+ procedures won't use it.
+
+
+ Event procedures that have already received a
+ PGEVT_RESULTCREATE> or PGEVT_RESULTCOPY> event
+ for this object are not fired again.
+
+
+ The main reason that this function is separate from
+ PQmakeEmptyPGResult is that it is often appropriate
+ to create a PGresult and fill it with data
+ before invoking the event procedures.
+
+
+
+
PQcopyResult
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventRegister;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventConnReset;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventConnDestroy;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
PGresult *result;
} PGEventResultCreate;
typedef struct
{
- const PGresult *result;
+ PGresult *result;
} PGEventResultDestroy;
-# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.20 2008/09/17 04:31:08 tgl Exp $
+# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.21 2008/09/19 20:06:13 tgl Exp $
# Functions to be exported by libpq DLLs
PQconnectdb 1
PQsetdbLogin 2
PQsetInstanceData 148
PQresultInstanceData 149
PQresultSetInstanceData 150
+PQfireResultCreateEvents 151
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-events.c,v 1.2 2008/09/19 16:40:40 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-events.c,v 1.3 2008/09/19 20:06:13 tgl Exp $
*
*-------------------------------------------------------------------------
*/
return NULL;
}
+
+/*
+ * Fire RESULTCREATE events for an application-created PGresult.
+ *
+ * The conn argument can be NULL if event procedures won't use it.
+ */
+int
+PQfireResultCreateEvents(PGconn *conn, PGresult *res)
+{
+ int i;
+
+ if (!res)
+ return FALSE;
+
+ for (i = 0; i < res->nEvents; i++)
+ {
+ if (!res->events[i].resultInitialized)
+ {
+ PGEventResultCreate evt;
+
+ evt.conn = conn;
+ evt.result = res;
+ if (!res->events[i].proc(PGEVT_RESULTCREATE, &evt,
+ res->events[i].passThrough))
+ return FALSE;
+
+ res->events[i].resultInitialized = TRUE;
+ }
+ }
+
+ return TRUE;
+}
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-events.h,v 1.1 2008/09/17 04:31:08 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-events.h,v 1.2 2008/09/19 20:06:13 tgl Exp $
*
*-------------------------------------------------------------------------
*/
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventRegister;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventConnReset;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
} PGEventConnDestroy;
typedef struct
{
- const PGconn *conn;
+ PGconn *conn;
PGresult *result;
} PGEventResultCreate;
typedef struct
{
- const PGresult *result;
+ PGresult *result;
} PGEventResultDestroy;
typedef int (*PGEventProc) (PGEventId evtId, void *evtInfo, void *passThrough);
/* Gets the PGresult instance data for the provided proc. */
extern void *PQresultInstanceData(const PGresult *result, PGEventProc proc);
+/* Fires RESULTCREATE events for an application-created PGresult. */
+extern int PQfireResultCreateEvents(PGconn *conn, PGresult *res);
+
#ifdef __cplusplus
}
#endif