diff --git a/doc/src/sgml/spi.sgml b/doc/src/sgml/spi.sgml index e25c2a259c..403baea4e3 100644 --- a/doc/src/sgml/spi.sgml +++ b/doc/src/sgml/spi.sgml @@ -1,5 +1,5 @@ @@ -348,7 +348,7 @@ SPI_exec(query, -char *query +const char * query @@ -597,7 +597,7 @@ SPI_prepare(query, -query +const char * query @@ -607,7 +607,7 @@ Query string -nargs +int nargs @@ -617,7 +617,7 @@ Number of input parameters ($1 ... $nargs - as in SQL-functions) -argtypes +Oid * argtypes @@ -780,7 +780,7 @@ Actual parameter values -char *nulls +const char *nulls @@ -948,7 +948,7 @@ SPI_cursor_open(name, -char *name +const char *name @@ -978,7 +978,7 @@ Actual parameter values -char *nulls +const char *nulls @@ -1089,7 +1089,7 @@ SPI_cursor_find(name) -char *name +const char *name @@ -1699,7 +1699,7 @@ Input tuple description -char * fname +const char * fname @@ -3068,7 +3068,7 @@ New values for the attributes specified -char * Nulls +const char * Nulls diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index dba491e3d0..abca504f2a 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.82 2002/12/17 15:51:59 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.83 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -32,11 +32,11 @@ static _SPI_connection *_SPI_current = NULL; static int _SPI_connected = -1; static int _SPI_curid = -1; -static int _SPI_execute(char *src, int tcount, _SPI_plan *plan); +static int _SPI_execute(const char *src, int tcount, _SPI_plan *plan); static int _SPI_pquery(QueryDesc *queryDesc, bool runit, int tcount); static int _SPI_execute_plan(_SPI_plan *plan, - Datum *Values, char *Nulls, int tcount); + Datum *Values, const char *Nulls, int tcount); static void _SPI_cursor_operation(Portal portal, bool forward, int count, CommandDest dest); @@ -187,7 +187,7 @@ SPI_pop(void) } int -SPI_exec(char *src, int tcount) +SPI_exec(const char *src, int tcount) { int res; @@ -205,7 +205,7 @@ SPI_exec(char *src, int tcount) } int -SPI_execp(void *plan, Datum *Values, char *Nulls, int tcount) +SPI_execp(void *plan, Datum *Values, const char *Nulls, int tcount) { int res; @@ -226,7 +226,7 @@ SPI_execp(void *plan, Datum *Values, char *Nulls, int tcount) } void * -SPI_prepare(char *src, int nargs, Oid *argtypes) +SPI_prepare(const char *src, int nargs, Oid *argtypes) { _SPI_plan *plan; @@ -382,7 +382,7 @@ SPI_copytupleintoslot(HeapTuple tuple, TupleDesc tupdesc) HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum, - Datum *Values, char *Nulls) + Datum *Values, const char *Nulls) { MemoryContext oldcxt = NULL; HeapTuple mtuple; @@ -455,7 +455,7 @@ SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum, } int -SPI_fnumber(TupleDesc tupdesc, char *fname) +SPI_fnumber(TupleDesc tupdesc, const char *fname) { int res; Form_pg_attribute sysatt; @@ -693,7 +693,7 @@ SPI_freetuptable(SPITupleTable *tuptable) * Open a prepared SPI plan as a portal */ Portal -SPI_cursor_open(char *name, void *plan, Datum *Values, char *Nulls) +SPI_cursor_open(const char *name, void *plan, Datum *Values, const char *Nulls) { static int unnamed_portal_count = 0; @@ -827,7 +827,7 @@ SPI_cursor_open(char *name, void *plan, Datum *Values, char *Nulls) * Find the portal of an existing open cursor */ Portal -SPI_cursor_find(char *name) +SPI_cursor_find(const char *name) { return GetPortalByName(name); } @@ -944,7 +944,7 @@ spi_printtup(HeapTuple tuple, TupleDesc tupdesc, DestReceiver *self) * If plan != NULL, just prepare plan tree, else execute immediately. */ static int -_SPI_execute(char *src, int tcount, _SPI_plan *plan) +_SPI_execute(const char *src, int tcount, _SPI_plan *plan) { StringInfoData stri; List *raw_parsetree_list; @@ -1110,7 +1110,8 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) } static int -_SPI_execute_plan(_SPI_plan *plan, Datum *Values, char *Nulls, int tcount) +_SPI_execute_plan(_SPI_plan *plan, Datum *Values, const char *Nulls, + int tcount) { List *query_list_list = plan->qtlist; List *plan_list = plan->ptlist; diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index eaead7dffc..520a55d64a 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.50 2002/12/05 15:50:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.51 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -134,7 +134,7 @@ EnablePortalManager(void) * Returns a portal given a portal name, or NULL if name not found. */ Portal -GetPortalByName(char *name) +GetPortalByName(const char *name) { Portal portal; @@ -173,7 +173,7 @@ PortalSetQuery(Portal portal, * "WARNING" if portal name is in use (existing portal is returned!) */ Portal -CreatePortal(char *name) +CreatePortal(const char *name) { Portal portal; diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h index 263661492d..85a987b14b 100644 --- a/src/include/executor/spi.h +++ b/src/include/executor/spi.h @@ -2,7 +2,7 @@ * * spi.h * - * $Id: spi.h,v 1.34 2002/12/13 19:45:56 tgl Exp $ + * $Id: spi.h,v 1.35 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -80,9 +80,10 @@ extern int SPI_connect(void); extern int SPI_finish(void); extern void SPI_push(void); extern void SPI_pop(void); -extern int SPI_exec(char *src, int tcount); -extern int SPI_execp(void *plan, Datum *values, char *Nulls, int tcount); -extern void *SPI_prepare(char *src, int nargs, Oid *argtypes); +extern int SPI_exec(const char *src, int tcount); +extern int SPI_execp(void *plan, Datum *values, const char *Nulls, + int tcount); +extern void *SPI_prepare(const char *src, int nargs, Oid *argtypes); extern void *SPI_saveplan(void *plan); extern int SPI_freeplan(void *plan); @@ -91,8 +92,8 @@ extern TupleDesc SPI_copytupledesc(TupleDesc tupdesc); extern TupleTableSlot *SPI_copytupleintoslot(HeapTuple tuple, TupleDesc tupdesc); extern HeapTuple SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, - int *attnum, Datum *Values, char *Nulls); -extern int SPI_fnumber(TupleDesc tupdesc, char *fname); + int *attnum, Datum *Values, const char *Nulls); +extern int SPI_fnumber(TupleDesc tupdesc, const char *fname); extern char *SPI_fname(TupleDesc tupdesc, int fnumber); extern char *SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber); extern Datum SPI_getbinval(HeapTuple tuple, TupleDesc tupdesc, int fnumber, bool *isnull); @@ -105,9 +106,9 @@ extern void SPI_pfree(void *pointer); extern void SPI_freetuple(HeapTuple pointer); extern void SPI_freetuptable(SPITupleTable *tuptable); -extern Portal SPI_cursor_open(char *name, void *plan, - Datum *Values, char *Nulls); -extern Portal SPI_cursor_find(char *name); +extern Portal SPI_cursor_open(const char *name, void *plan, + Datum *Values, const char *Nulls); +extern Portal SPI_cursor_find(const char *name); extern void SPI_cursor_fetch(Portal portal, bool forward, int count); extern void SPI_cursor_move(Portal portal, bool forward, int count); extern void SPI_cursor_close(Portal portal); diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index 40258acc32..41fa2f735c 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: portal.h,v 1.36 2002/12/05 15:50:39 tgl Exp $ + * $Id: portal.h,v 1.37 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -53,9 +53,9 @@ typedef struct PortalData extern void EnablePortalManager(void); extern void AtEOXact_portals(void); -extern Portal CreatePortal(char *name); +extern Portal CreatePortal(const char *name); extern void PortalDrop(Portal portal); -extern Portal GetPortalByName(char *name); +extern Portal GetPortalByName(const char *name); extern void PortalSetQuery(Portal portal, QueryDesc *queryDesc, void (*cleanup) (Portal portal)); diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c index ff57d2c365..97deada373 100644 --- a/src/interfaces/libpgtcl/pgtclCmds.c +++ b/src/interfaces/libpgtcl/pgtclCmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.70 2002/11/26 21:38:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.71 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -23,7 +23,7 @@ /* * Local function forward declarations */ -static int execute_put_values(Tcl_Interp *interp, char *array_varname, +static int execute_put_values(Tcl_Interp *interp, CONST84 char *array_varname, PGresult *result, int tupno); @@ -241,7 +241,7 @@ tcl_value(char *value) **********************************/ int -Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, char **argv) +Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PQconninfoOption *options = PQconndefaults(); PQconninfoOption *option; @@ -287,13 +287,13 @@ Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int argc, char **argv) **********************************/ int -Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { - char *pghost = NULL; - char *pgtty = NULL; - char *pgport = NULL; - char *pgoptions = NULL; - char *dbName; + const char *pghost = NULL; + const char *pgtty = NULL; + const char *pgport = NULL; + const char *pgoptions = NULL; + const char *dbName; int i; PGconn *conn; @@ -397,7 +397,7 @@ Pg_connect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) **********************************/ int -Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; Tcl_Channel conn_chan; @@ -436,7 +436,7 @@ Pg_disconnect(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) **********************************/ int -Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { Pg_ConnectionId *connid; PGconn *conn; @@ -538,13 +538,13 @@ Pg_exec(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) **********************************/ int -Pg_result(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_result(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGresult *result; - char *opt; + const char *opt; int i; int tupno; - char *arrVar; + CONST84 char *arrVar; char nameBuffer[256]; const char *appendstr; @@ -804,7 +804,7 @@ Pg_result_errReturn: **********************************/ int -Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { Pg_ConnectionId *connid; PGconn *conn; @@ -813,8 +813,8 @@ Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) int tupno; int ntup; int loop_rc; - char *oid_varname = NULL; - char *array_varname = NULL; + CONST84 char *oid_varname = NULL; + CONST84 char *array_varname = NULL; char buf[64]; char *usage = "Wrong # of arguments\n" @@ -1025,7 +1025,7 @@ Pg_execute(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) column names, or into an array indexed by the column names. **********************************/ static int -execute_put_values(Tcl_Interp *interp, char *array_varname, +execute_put_values(Tcl_Interp *interp, CONST84 char *array_varname, PGresult *result, int tupno) { int i; @@ -1071,7 +1071,7 @@ execute_put_values(Tcl_Interp *interp, char *array_varname, **********************/ int -Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int lobjId; @@ -1141,7 +1141,7 @@ Pg_lo_open(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) **********************/ int -Pg_lo_close(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_close(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int fd; @@ -1230,7 +1230,7 @@ Pg_lo_read(ClientData cData, Tcl_Interp *interp, int objc, #else int -Pg_lo_read(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_read(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int fd; @@ -1328,7 +1328,7 @@ Pg_lo_write(ClientData cData, Tcl_Interp *interp, int objc, #else int -Pg_lo_write(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_write(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; char *buf; @@ -1376,11 +1376,11 @@ whence can be either "SEEK_CUR", "SEEK_END", or "SEEK_SET" ***********************************/ int -Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int fd; - char *whenceStr; + const char *whenceStr; int offset, whence; @@ -1429,7 +1429,7 @@ for now, we don't support any additional storage managers. ***********************************/ int -Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; char *modeStr; @@ -1447,7 +1447,7 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) if (conn == (PGconn *) NULL) return TCL_ERROR; - modeStr = argv[2]; + modeStr = strdup(argv[2]); modeWord = strtok(modeStr, "|"); if (strcmp(modeWord, "INV_READ") == 0) @@ -1459,6 +1459,7 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) Tcl_AppendResult(interp, "invalid mode argument to Pg_lo_creat\nmode argument must be some OR'd combination of INV_READ, and INV_WRITE", 0); + free(modeStr); return TCL_ERROR; } @@ -1473,10 +1474,12 @@ Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) Tcl_AppendResult(interp, "invalid mode argument to Pg_lo_creat\nmode argument must be some OR'd combination of INV_READ, INV_WRITE", 0); + free(modeStr); return TCL_ERROR; } } sprintf(interp->result, "%d", lo_creat(conn, mode)); + free(modeStr); return TCL_OK; } @@ -1489,7 +1492,7 @@ Pg_lo_tell ***********************************/ int -Pg_lo_tell(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_tell(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int fd; @@ -1522,7 +1525,7 @@ Pg_lo_unlink ***********************************/ int -Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; int lobjId; @@ -1564,10 +1567,10 @@ Pg_lo_import ***********************************/ int -Pg_lo_import(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_import(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; - char *filename; + const char *filename; Oid lobjId; if (argc != 3) @@ -1607,10 +1610,10 @@ Pg_lo_export ***********************************/ int -Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { PGconn *conn; - char *filename; + const char *filename; Oid lobjId; int retval; @@ -1659,7 +1662,7 @@ Pg_lo_export(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) **********************************/ int -Pg_select(ClientData cData, Tcl_Interp *interp, int argc, char **argv) +Pg_select(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { Pg_ConnectionId *connid; PGconn *conn; @@ -1816,9 +1819,9 @@ Pg_listen vwait or update can be used to enter the Tcl event loop. ***********************************/ int -Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { - char *origrelname; + const char *origrelname; char *caserelname; char *callback = NULL; Pg_TclNotifies *notifies; @@ -1860,7 +1863,7 @@ Pg_listen(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) else { /* Downcase it */ - char *rels = origrelname; + const char *rels = origrelname; char *reld = caserelname; while (*rels) @@ -1997,7 +2000,7 @@ Pg_on_connection_loss vwait or update can be used to enter the Tcl event loop. ***********************************/ int -Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, int argc, char *argv[]) +Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, int argc, CONST84 char *argv[]) { char *callback = NULL; Pg_TclNotifies *notifies; diff --git a/src/interfaces/libpgtcl/pgtclCmds.h b/src/interfaces/libpgtcl/pgtclCmds.h index 5cc802a696..1e50cdcd94 100644 --- a/src/interfaces/libpgtcl/pgtclCmds.h +++ b/src/interfaces/libpgtcl/pgtclCmds.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pgtclCmds.h,v 1.28 2002/09/04 20:31:46 momjian Exp $ + * $Id: pgtclCmds.h,v 1.29 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -15,8 +15,14 @@ #define PGTCLCMDS_H #include + #include "libpq-fe.h" +/* Hack to deal with Tcl 8.4 const-ification without losing compatibility */ +#ifndef CONST84 +#define CONST84 +#endif + #define RES_HARD_MAX 128 #define RES_START 16 @@ -86,54 +92,52 @@ typedef struct Pg_ConnectionId_s /* **************************/ /* registered Tcl functions */ /* **************************/ -extern int Pg_conndefaults( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_connect( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_disconnect( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_exec( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_execute( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_select( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_result( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_open( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_close( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); +extern int Pg_conndefaults(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_connect(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_disconnect(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_exec(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_execute(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_select(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_result(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_open(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_close(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); #ifdef PGTCL_USE_TCLOBJ -extern int Pg_lo_read( - ClientData cData, Tcl_Interp *interp, int objc, +extern int Pg_lo_read(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); -extern int Pg_lo_write( - ClientData cData, Tcl_Interp *interp, int objc, +extern int Pg_lo_write(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); #else -extern int Pg_lo_read( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_write( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); +extern int Pg_lo_read(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_write(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); #endif -extern int Pg_lo_lseek( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_creat( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_tell( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_unlink( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_import( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_lo_export( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_listen( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); -extern int Pg_on_connection_loss( - ClientData cData, Tcl_Interp *interp, int argc, char *argv[]); +extern int Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_creat(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_tell(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_import(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_lo_export(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_listen(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); +extern int Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); #endif /* PGTCLCMDS_H */ diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c index cc79339c6b..ecf1e362e8 100644 --- a/src/interfaces/libpgtcl/pgtclId.c +++ b/src/interfaces/libpgtcl/pgtclId.c @@ -13,7 +13,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.37 2002/10/17 14:53:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.38 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -218,7 +218,8 @@ PgSetConnectionId(Tcl_Interp *interp, PGconn *conn) * Get back the connection from the Id */ PGconn * -PgGetConnectionId(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p) +PgGetConnectionId(Tcl_Interp *interp, CONST84 char *id, + Pg_ConnectionId ** connid_p) { Tcl_Channel conn_chan; Pg_ConnectionId *connid; @@ -326,7 +327,7 @@ PgDelConnectionId(DRIVER_DEL_PROTO) * is probably just not clearing result handles like they should. */ int -PgSetResultId(Tcl_Interp *interp, char *connid_c, PGresult *res) +PgSetResultId(Tcl_Interp *interp, CONST84 char *connid_c, PGresult *res) { Tcl_Channel conn_chan; Pg_ConnectionId *connid; @@ -384,7 +385,7 @@ PgSetResultId(Tcl_Interp *interp, char *connid_c, PGresult *res) } static int -getresid(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p) +getresid(Tcl_Interp *interp, CONST84 char *id, Pg_ConnectionId ** connid_p) { Tcl_Channel conn_chan; char *mark; @@ -426,7 +427,7 @@ getresid(Tcl_Interp *interp, char *id, Pg_ConnectionId ** connid_p) * Get back the result pointer from the Id */ PGresult * -PgGetResultId(Tcl_Interp *interp, char *id) +PgGetResultId(Tcl_Interp *interp, CONST84 char *id) { Pg_ConnectionId *connid; int resid; @@ -444,7 +445,7 @@ PgGetResultId(Tcl_Interp *interp, char *id) * Remove a result Id from the hash tables */ void -PgDelResultId(Tcl_Interp *interp, char *id) +PgDelResultId(Tcl_Interp *interp, CONST84 char *id) { Pg_ConnectionId *connid; int resid; @@ -460,7 +461,7 @@ PgDelResultId(Tcl_Interp *interp, char *id) * Get the connection Id from the result Id */ int -PgGetConnByResultId(Tcl_Interp *interp, char *resid_c) +PgGetConnByResultId(Tcl_Interp *interp, CONST84 char *resid_c) { char *mark; Tcl_Channel conn_chan; @@ -472,7 +473,8 @@ PgGetConnByResultId(Tcl_Interp *interp, char *resid_c) *mark = '.'; if (conn_chan && Tcl_GetChannelType(conn_chan) == &Pg_ConnType) { - Tcl_SetResult(interp, Tcl_GetChannelName(conn_chan), TCL_VOLATILE); + Tcl_SetResult(interp, (char *) Tcl_GetChannelName(conn_chan), + TCL_VOLATILE); return TCL_OK; } diff --git a/src/interfaces/libpgtcl/pgtclId.h b/src/interfaces/libpgtcl/pgtclId.h index 4f5558561b..102324f01d 100644 --- a/src/interfaces/libpgtcl/pgtclId.h +++ b/src/interfaces/libpgtcl/pgtclId.h @@ -10,7 +10,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pgtclId.h,v 1.21 2002/09/02 21:51:47 tgl Exp $ + * $Id: pgtclId.h,v 1.22 2002/12/30 22:10:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -27,22 +27,23 @@ extern void PgSetConnectionId(Tcl_Interp *interp, PGconn *conn); int bufSize, int *errorCodePtr #else /* Tcl 7.6 and beyond use this signature */ -#define DRIVER_OUTPUT_PROTO ClientData cData, char *buf, int bufSize, \ +#define DRIVER_OUTPUT_PROTO ClientData cData, CONST84 char *buf, int bufSize, \ int *errorCodePtr #define DRIVER_INPUT_PROTO ClientData cData, char *buf, int bufSize, \ int *errorCodePtr #define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp #endif -extern PGconn *PgGetConnectionId(Tcl_Interp *interp, char *id, +extern PGconn *PgGetConnectionId(Tcl_Interp *interp, CONST84 char *id, Pg_ConnectionId **); extern int PgDelConnectionId(DRIVER_DEL_PROTO); extern int PgOutputProc(DRIVER_OUTPUT_PROTO); extern int PgInputProc(DRIVER_INPUT_PROTO); -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 int PgSetResultId(Tcl_Interp *interp, CONST84 char *connid, + PGresult *res); +extern PGresult *PgGetResultId(Tcl_Interp *interp, CONST84 char *id); +extern void PgDelResultId(Tcl_Interp *interp, CONST84 char *id); +extern int PgGetConnByResultId(Tcl_Interp *interp, CONST84 char *resid); extern void PgStartNotifyEventSource(Pg_ConnectionId * connid); extern void PgStopNotifyEventSource(Pg_ConnectionId * connid, bool allevents); extern void PgNotifyTransferEvents(Pg_ConnectionId * connid); diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index bebb82ebdf..ac8d6046c3 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -31,7 +31,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.67 2002/11/22 16:25:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.68 2002/12/30 22:10:54 tgl Exp $ * **********************************************************************/ @@ -43,6 +43,11 @@ #include #include +/* Hack to deal with Tcl 8.4 const-ification without losing compatibility */ +#ifndef CONST84 +#define CONST84 +#endif + #include "access/heapam.h" #include "catalog/pg_language.h" #include "catalog/pg_proc.h" @@ -152,27 +157,28 @@ static HeapTuple pltcl_trigger_handler(PG_FUNCTION_ARGS); static pltcl_proc_desc *compile_pltcl_function(Oid fn_oid, bool is_trigger); static int pltcl_elog(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_quote(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_argisnull(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_returnnull(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); static int pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + int argc, CONST84 char *argv[]); +static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, + int argc, CONST84 char *argv[]); -static void pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname, +static void pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname, int tupno, HeapTuple tuple, TupleDesc tupdesc); static void pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc, Tcl_DString *retval); -static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]); + /* * This routine is a crock, and so is everyplace that calls it. The problem @@ -191,6 +197,7 @@ perm_fmgr_info(Oid functionId, FmgrInfo *finfo) fmgr_info_cxt(functionId, finfo, TopMemoryContext); } + /********************************************************************** * pltcl_init_all() - Initialize all **********************************************************************/ @@ -625,7 +632,7 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS) char *modnulls; int ret_numvals; - char **ret_values; + CONST84 char **ret_values; sigjmp_buf save_restart; @@ -1246,7 +1253,7 @@ compile_pltcl_function(Oid fn_oid, bool is_trigger) **********************************************************************/ static int pltcl_elog(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { int level; sigjmp_buf save_restart; @@ -1316,10 +1323,10 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_quote(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { char *tmp; - char *cp1; + const char *cp1; char *cp2; /************************************************************ @@ -1369,7 +1376,7 @@ pltcl_quote(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_argisnull(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { int argno; FunctionCallInfo fcinfo = pltcl_current_fcinfo; @@ -1426,7 +1433,7 @@ pltcl_argisnull(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_returnnull(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { FunctionCallInfo fcinfo = pltcl_current_fcinfo; @@ -1465,12 +1472,12 @@ pltcl_returnnull(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { int spi_rc; char buf[64]; int count = 0; - char *volatile arrayname = NULL; + CONST84 char *volatile arrayname = NULL; volatile int query_idx; int i; int loop_rc; @@ -1709,10 +1716,10 @@ pltcl_SPI_exec(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { int nargs; - char **args; + CONST84 char **args; pltcl_query_desc *qdesc; void *plan; int i; @@ -1778,7 +1785,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, for (i = 0; i < nargs; i++) { /* XXX should extend this to allow qualified type names */ - typeTup = typenameType(makeTypeName(args[i])); + typeTup = typenameType(makeTypeName((char *) args[i])); qdesc->argtypes[i] = HeapTupleGetOid(typeTup); perm_fmgr_info(((Form_pg_type) GETSTRUCT(typeTup))->typinput, &(qdesc->arginfuncs[i])); @@ -1880,9 +1887,12 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, query_hash = pltcl_safe_query_hash; memcpy(&Warn_restart, &save_restart, sizeof(Warn_restart)); + hashent = Tcl_CreateHashEntry(query_hash, qdesc->qname, &hashnew); Tcl_SetHashValue(hashent, (ClientData) qdesc); + ckfree((char *) args); + Tcl_SetResult(interp, qdesc->qname, TCL_VOLATILE); return TCL_OK; } @@ -1893,7 +1903,7 @@ pltcl_SPI_prepare(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { int spi_rc; char buf[64]; @@ -1903,11 +1913,11 @@ pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp, Tcl_HashEntry *hashent; pltcl_query_desc *qdesc; Datum *volatile argvalues = NULL; - char *volatile nulls = NULL; - char *volatile arrayname = NULL; + const char *volatile nulls = NULL; + CONST84 char *volatile arrayname = NULL; int count = 0; int callnargs; - static char **callargs = NULL; + static CONST84 char **callargs = NULL; int loop_rc; int ntuples; HeapTuple *volatile tuples = NULL; @@ -2279,7 +2289,7 @@ pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp, **********************************************************************/ static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, - int argc, char *argv[]) + int argc, CONST84 char *argv[]) { char buf[64]; @@ -2294,7 +2304,7 @@ pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, * of a given tuple **********************************************************************/ static void -pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname, +pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname, int tupno, HeapTuple tuple, TupleDesc tupdesc) { int i; @@ -2303,14 +2313,14 @@ pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname, Datum attr; bool isnull; - char *attname; + CONST84 char *attname; HeapTuple typeTup; Oid typoutput; Oid typelem; - char **arrptr; - char **nameptr; - char *nullname = NULL; + CONST84 char **arrptr; + CONST84 char **nameptr; + CONST84 char *nullname = NULL; /************************************************************ * Prepare pointers for Tcl_SetVar2() below and in array