mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
The attached patch modifies libpgtcl per previous discussion: the
pg_notifies statement is eliminated, and callbacks defined by pg_listen are instead invoked automatically from the Tcl idle loop whenever a NOTIFY message is received. I have done only cursory testing, so there may be problems still lurking (particularly on non-Unix machines?). But it seems to work. Patch is against today's cvs sources. Note that this will not work with the 6.3.2 release since it depends on the new libpq. The diffs are a bit large so I've gzipped them. A patch to update libpgtcl.sgml is included too. regards, tom lane
This commit is contained in:
@@ -8,14 +8,15 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: pgtclId.h,v 1.6 1998/03/15 08:03:00 scrappy Exp $
|
||||
* $Id: pgtclId.h,v 1.7 1998/06/16 04:10:17 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
extern void PgSetConnectionId(Tcl_Interp *interp, PGconn *conn);
|
||||
|
||||
#if (TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5)
|
||||
#if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
|
||||
/* Only Tcl 7.5 had drivers with this signature */
|
||||
# define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp, \
|
||||
Tcl_File inFile, Tcl_File outFile
|
||||
# define DRIVER_OUTPUT_PROTO ClientData cData, Tcl_File outFile, char *buf, \
|
||||
@@ -23,6 +24,7 @@ extern void PgSetConnectionId(Tcl_Interp *interp, PGconn *conn);
|
||||
# define DRIVER_INPUT_PROTO ClientData cData, Tcl_File inFile, char *buf, \
|
||||
int bufSize, int *errorCodePtr
|
||||
#else
|
||||
/* Tcl 7.6 and beyond use this signature */
|
||||
# define DRIVER_OUTPUT_PROTO ClientData cData, char *buf, int bufSize, \
|
||||
int *errorCodePtr
|
||||
# define DRIVER_INPUT_PROTO ClientData cData, char *buf, int bufSize, \
|
||||
@@ -39,8 +41,19 @@ extern int PgSetResultId(Tcl_Interp *interp, char *connid, PGresult *res);
|
||||
extern PGresult *PgGetResultId(Tcl_Interp *interp, char *id);
|
||||
extern void PgDelResultId(Tcl_Interp *interp, char *id);
|
||||
extern int PgGetConnByResultId(Tcl_Interp *interp, char *resid);
|
||||
extern void PgStartNotifyEventSource(Pg_ConnectionId *connid);
|
||||
extern void PgStopNotifyEventSource(Pg_ConnectionId *connid);
|
||||
extern void PgNotifyTransferEvents(Pg_ConnectionId *connid);
|
||||
extern void PgNotifyInterpDelete(ClientData clientData, Tcl_Interp *interp);
|
||||
|
||||
#if (TCL_MAJOR_VERSION < 8)
|
||||
/* GetFileProc is needed in Tcl 7.6 and later */
|
||||
#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 706
|
||||
#define HAVE_TCL_GETFILEPROC 1
|
||||
#else
|
||||
#define HAVE_TCL_GETFILEPROC 0
|
||||
#endif
|
||||
|
||||
#if HAVE_TCL_GETFILEPROC
|
||||
extern Tcl_File PgGetFileProc(ClientData cData, int direction);
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user