1 /*------------------------------------------------------------------------- 2 * 3 * libpq-events.h 4 * This file contains definitions that are useful to applications 5 * that invoke the libpq "events" API, but are not interesting to 6 * ordinary users of libpq. 7 * 8 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group 9 * Portions Copyright (c) 1994, Regents of the University of California 10 * 11 * src/interfaces/libpq/libpq-events.h 12 * 13 *------------------------------------------------------------------------- 14 */ 15 16 #ifndef LIBPQ_EVENTS_H 17 #define LIBPQ_EVENTS_H 18 19 #include "libpq-fe.h" 20 21 #ifdef __cplusplus 22 extern "C" 23 { 24 #endif 25 26 /* Callback Event Ids */ 27 typedef enum 28 { 29 PGEVT_REGISTER, 30 PGEVT_CONNRESET, 31 PGEVT_CONNDESTROY, 32 PGEVT_RESULTCREATE, 33 PGEVT_RESULTCOPY, 34 PGEVT_RESULTDESTROY 35 } PGEventId; 36 37 typedef struct 38 { 39 PGconn *conn; 40 } PGEventRegister; 41 42 typedef struct 43 { 44 PGconn *conn; 45 } PGEventConnReset; 46 47 typedef struct 48 { 49 PGconn *conn; 50 } PGEventConnDestroy; 51 52 typedef struct 53 { 54 PGconn *conn; 55 PGresult *result; 56 } PGEventResultCreate; 57 58 typedef struct 59 { 60 const PGresult *src; 61 PGresult *dest; 62 } PGEventResultCopy; 63 64 typedef struct 65 { 66 PGresult *result; 67 } PGEventResultDestroy; 68 69 typedef int (*PGEventProc) (PGEventId evtId, void *evtInfo, void *passThrough); 70 71 /* Registers an event proc with the given PGconn. */ 72 extern int PQregisterEventProc(PGconn *conn, PGEventProc proc, 73 const char *name, void *passThrough); 74 75 /* Sets the PGconn instance data for the provided proc to data. */ 76 extern int PQsetInstanceData(PGconn *conn, PGEventProc proc, void *data); 77 78 /* Gets the PGconn instance data for the provided proc. */ 79 extern void *PQinstanceData(const PGconn *conn, PGEventProc proc); 80 81 /* Sets the PGresult instance data for the provided proc to data. */ 82 extern int PQresultSetInstanceData(PGresult *result, PGEventProc proc, void *data); 83 84 /* Gets the PGresult instance data for the provided proc. */ 85 extern void *PQresultInstanceData(const PGresult *result, PGEventProc proc); 86 87 /* Fires RESULTCREATE events for an application-created PGresult. */ 88 extern int PQfireResultCreateEvents(PGconn *conn, PGresult *res); 89 90 #ifdef __cplusplus 91 } 92 #endif 93 94 #endif /* LIBPQ_EVENTS_H */ 95