Adjust Tcl-related code to compile cleanly with Tcl 8.4 (add const modifiers as
authorTom Lane
Mon, 30 Dec 2002 22:10:54 +0000 (22:10 +0000)
committerTom Lane
Mon, 30 Dec 2002 22:10:54 +0000 (22:10 +0000)
needed).  Some desultory const-ification of SPI interface to support this.

doc/src/sgml/spi.sgml
src/backend/executor/spi.c
src/backend/utils/mmgr/portalmem.c
src/include/executor/spi.h
src/include/utils/portal.h
src/interfaces/libpgtcl/pgtclCmds.c
src/interfaces/libpgtcl/pgtclCmds.h
src/interfaces/libpgtcl/pgtclId.c
src/interfaces/libpgtcl/pgtclId.h
src/pl/tcl/pltcl.c

index e25c2a259cc0250f2b7cd3aca77f43559acce994..403baea4e38bc960b45f0fb8381295c4d4a1ae65 100644 (file)
@@ -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
 
 
 
index dba491e3d030b3c566fdd2f559a188639f7f18f7..abca504f2ae46c56667981a3b97b9e290bd01407 100644 (file)
@@ -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;
index eaead7dffc95fe0e54d2ad41985b1efe6830381b..520a55d64ae504cd45b975f1ed7df77ff0677b28 100644 (file)
@@ -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;
 
index 263661492da8de1341193283f95fb89b49544feb..85a987b14b23bccfdd53820849af37ad0fd6647a 100644 (file)
@@ -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);
index 40258acc32a34113804457127bb9b0f2339ff9af..41fa2f735c2b15b19504ecb3621658a5f2c50487 100644 (file)
@@ -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));
 
index ff57d2c365367fb13786bb38e401a2d96d5cba2a..97deada373457f950bada6e9876db33acf9fb5d4 100644 (file)
@@ -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;
index 5cc802a6964829baa87b2a24b411475bbde80f25..1e50cdcd94ff76d92e5229dadb0a2644d2a66d17 100644 (file)
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
 #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 */
index cc79339c6bee8d2e7133ec8d30d6d09ed7c6d856..ecf1e362e80e0e7660da17ff988f83b53f4a6a88 100644 (file)
@@ -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;
    }
 
index 4f5558561bfb17c6b73adfaa33c5292156aa34fb..102324f01d5c6f74794fdda27b6dfef51d941237 100644 (file)
@@ -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);
index bebb82ebdf0b731d927c332623b6ec31de572f1f..ac8d6046c3157bdb4b7297569d362bbfeb9b0a47 100644 (file)
@@ -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 $
  *
  **********************************************************************/
 
 #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