1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Adjust Tcl-related code to compile cleanly with Tcl 8.4 (add const modifiers as

needed).  Some desultory const-ification of SPI interface to support this.
This commit is contained in:
Tom Lane
2002-12-30 22:10:54 +00:00
parent d82794ee33
commit 699782b695
10 changed files with 187 additions and 165 deletions

View 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 $
*
**********************************************************************/
@ -43,6 +43,11 @@
#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"
@ -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