needed). Some desultory const-ification of SPI interface to support this.
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/spi.sgml,v 1.23 2002/09/02 06:11:42 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/spi.sgml,v 1.24 2002/12/30 22:10:53 tgl Exp $
-->
<Chapter id="spi">
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
-char *<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
-<REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">query</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-<REPLACEABLE CLASS="PARAMETER">nargs</REPLACEABLE>
+int <REPLACEABLE CLASS="PARAMETER">nargs</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-<REPLACEABLE CLASS="PARAMETER">argtypes</REPLACEABLE>
+Oid * <REPLACEABLE CLASS="PARAMETER">argtypes</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
-char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">nulls</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
<VARIABLELIST>
<VARLISTENTRY>
<TERM>
-char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
+const char *<REPLACEABLE CLASS="PARAMETER">name</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-char * <REPLACEABLE CLASS="PARAMETER">fname</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">fname</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
</VARLISTENTRY>
<VARLISTENTRY>
<TERM>
-char * <REPLACEABLE CLASS="PARAMETER">Nulls</REPLACEABLE>
+const char * <REPLACEABLE CLASS="PARAMETER">Nulls</REPLACEABLE>
</TERM>
<LISTITEM>
<PARA>
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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);
}
int
-SPI_exec(char *src, int tcount)
+SPI_exec(const char *src, int tcount)
{
int res;
}
int
-SPI_execp(void *plan, Datum *Values, char *Nulls, int tcount)
+SPI_execp(void *plan, Datum *Values, const char *Nulls, int tcount)
{
int res;
}
void *
-SPI_prepare(char *src, int nargs, Oid *argtypes)
+SPI_prepare(const char *src, int nargs, Oid *argtypes)
{
_SPI_plan *plan;
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;
}
int
-SPI_fnumber(TupleDesc tupdesc, char *fname)
+SPI_fnumber(TupleDesc tupdesc, const char *fname)
{
int res;
Form_pg_attribute sysatt;
* 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;
* Find the portal of an existing open cursor
*/
Portal
-SPI_cursor_find(char *name)
+SPI_cursor_find(const char *name)
{
return GetPortalByName(name);
}
* 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;
}
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;
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
* Returns a portal given a portal name, or NULL if name not found.
*/
Portal
-GetPortalByName(char *name)
+GetPortalByName(const char *name)
{
Portal portal;
* "WARNING" if portal name is in use (existing portal is returned!)
*/
Portal
-CreatePortal(char *name)
+CreatePortal(const char *name)
{
Portal portal;
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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);
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);
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);
* 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 $
*
*-------------------------------------------------------------------------
*/
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));
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
/*
* 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);
**********************************/
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;
**********************************/
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;
**********************************/
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;
**********************************/
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;
**********************************/
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;
**********************************/
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;
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"
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;
**********************/
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;
**********************/
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;
#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;
#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;
"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;
***********************************/
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;
if (conn == (PGconn *) NULL)
return TCL_ERROR;
- modeStr = argv[2];
+ modeStr = strdup(argv[2]);
modeWord = strtok(modeStr, "|");
if (strcmp(modeWord, "INV_READ") == 0)
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;
}
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;
}
***********************************/
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;
***********************************/
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;
***********************************/
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)
***********************************/
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;
**********************************/
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;
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;
else
{
/* Downcase it */
- char *rels = origrelname;
+ const char *rels = origrelname;
char *reld = caserelname;
while (*rels)
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;
* 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 <tcl.h>
+
#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
/* **************************/
/* 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 */
* 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 $
*
*-------------------------------------------------------------------------
*/
* 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;
* 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;
}
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;
* 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;
* 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;
* 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;
*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;
}
* 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 $
*
*-------------------------------------------------------------------------
*/
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);
* 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 <fcntl.h>
#include <setjmp.h>
+/* 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"
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
fmgr_info_cxt(functionId, finfo, TopMemoryContext);
}
+
/**********************************************************************
* pltcl_init_all() - Initialize all
**********************************************************************/
char *modnulls;
int ret_numvals;
- char **ret_values;
+ CONST84 char **ret_values;
sigjmp_buf save_restart;
**********************************************************************/
static int
pltcl_elog(ClientData cdata, Tcl_Interp *interp,
- int argc, char *argv[])
+ int argc, CONST84 char *argv[])
{
int level;
sigjmp_buf save_restart;
**********************************************************************/
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;
/************************************************************
**********************************************************************/
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;
**********************************************************************/
static int
pltcl_returnnull(ClientData cdata, Tcl_Interp *interp,
- int argc, char *argv[])
+ int argc, CONST84 char *argv[])
{
FunctionCallInfo fcinfo = pltcl_current_fcinfo;
**********************************************************************/
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;
**********************************************************************/
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;
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]));
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;
}
**********************************************************************/
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];
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;
**********************************************************************/
static int
pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
- int argc, char *argv[])
+ int argc, CONST84 char *argv[])
{
char buf[64];
* 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;
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