aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pl/tcl/pltcl.c95
1 files changed, 40 insertions, 55 deletions
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 6b2004d34c6..9df63b103c4 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -13,16 +13,6 @@
#include <unistd.h>
#include <fcntl.h>
-/* Hack to deal with Tcl 8.4 const-ification without losing compatibility */
-#ifndef CONST84
-#define CONST84
-#endif
-
-/* ... and for Tcl 8.6. */
-#ifndef CONST86
-#define CONST86
-#endif
-
#include "access/htup_details.h"
#include "access/xact.h"
#include "catalog/pg_proc.h"
@@ -47,16 +37,21 @@
((TCL_MAJOR_VERSION > maj) || \
(TCL_MAJOR_VERSION == maj && TCL_MINOR_VERSION >= min))
-/* Insist on Tcl >= 8.0 */
-#if !HAVE_TCL_VERSION(8,0)
-#error PostgreSQL only supports Tcl 8.0 or later.
+/* Insist on Tcl >= 8.4 */
+#if !HAVE_TCL_VERSION(8,4)
+#error PostgreSQL only supports Tcl 8.4 or later.
+#endif
+
+/* Hack to deal with Tcl 8.6 const-ification without losing compatibility */
+#ifndef CONST86
+#define CONST86
#endif
/* define our text domain for translations */
#undef TEXTDOMAIN
#define TEXTDOMAIN PG_TEXTDOMAIN("pltcl")
-#if defined(UNICODE_CONVERSION) && HAVE_TCL_VERSION(8,1)
+#if defined(UNICODE_CONVERSION)
#include "mb/pg_wchar.h"
@@ -223,7 +218,7 @@ static int pltcl_returnnull(ClientData cdata, Tcl_Interp *interp,
static int pltcl_SPI_execute(ClientData cdata, Tcl_Interp *interp,
int objc, Tcl_Obj *const objv[]);
static int pltcl_process_SPI_result(Tcl_Interp *interp,
- CONST84 char *arrayname,
+ const char *arrayname,
Tcl_Obj *loop_body,
int spi_rc,
SPITupleTable *tuptable,
@@ -235,7 +230,7 @@ static int pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
int objc, Tcl_Obj *const objv[]);
-static void pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname,
+static void pltcl_set_tuple_values(Tcl_Interp *interp, const char *arrayname,
int tupno, HeapTuple tuple, TupleDesc tupdesc);
static Tcl_Obj *pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc);
@@ -250,10 +245,7 @@ static Tcl_Obj *pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc);
* from Postgres, so the notifier capabilities are initialized, but never
* used. Only InitNotifier and DeleteFileHandler ever seem to get called
* within Postgres, but we implement all the functions for completeness.
- * We can only fix this with Tcl >= 8.4, when Tcl_SetNotifier() appeared.
*/
-#if HAVE_TCL_VERSION(8,4)
-
static ClientData
pltcl_InitNotifier(void)
{
@@ -298,7 +290,6 @@ pltcl_WaitForEvent(CONST86 Tcl_Time *timePtr)
{
return 0;
}
-#endif /* HAVE_TCL_VERSION(8,4) */
/*
@@ -329,6 +320,7 @@ perm_fmgr_info(Oid functionId, FmgrInfo *finfo)
void
_PG_init(void)
{
+ Tcl_NotifierProcs notifier;
HASHCTL hash_ctl;
/* Be sure we do initialization only once (should be redundant now) */
@@ -342,25 +334,18 @@ _PG_init(void)
Tcl_FindExecutable("");
#endif
-#if HAVE_TCL_VERSION(8,4)
-
/*
* Override the functions in the Notifier subsystem. See comments above.
*/
- {
- Tcl_NotifierProcs notifier;
-
- notifier.setTimerProc = pltcl_SetTimer;
- notifier.waitForEventProc = pltcl_WaitForEvent;
- notifier.createFileHandlerProc = pltcl_CreateFileHandler;
- notifier.deleteFileHandlerProc = pltcl_DeleteFileHandler;
- notifier.initNotifierProc = pltcl_InitNotifier;
- notifier.finalizeNotifierProc = pltcl_FinalizeNotifier;
- notifier.alertNotifierProc = pltcl_AlertNotifier;
- notifier.serviceModeHookProc = pltcl_ServiceModeHook;
- Tcl_SetNotifier(&notifier);
- }
-#endif
+ notifier.setTimerProc = pltcl_SetTimer;
+ notifier.waitForEventProc = pltcl_WaitForEvent;
+ notifier.createFileHandlerProc = pltcl_CreateFileHandler;
+ notifier.deleteFileHandlerProc = pltcl_DeleteFileHandler;
+ notifier.initNotifierProc = pltcl_InitNotifier;
+ notifier.finalizeNotifierProc = pltcl_FinalizeNotifier;
+ notifier.alertNotifierProc = pltcl_AlertNotifier;
+ notifier.serviceModeHookProc = pltcl_ServiceModeHook;
+ Tcl_SetNotifier(&notifier);
/************************************************************
* Create the dummy hold interpreter to prevent close of
@@ -853,8 +838,8 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, bool pltrusted)
Datum *modvalues;
char *modnulls;
int ret_numvals;
- CONST84 char *result;
- CONST84 char **ret_values;
+ const char *result;
+ const char **ret_values;
/* Connect to SPI manager */
if (SPI_connect() != SPI_OK_CONNECT)
@@ -1093,8 +1078,8 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, bool pltrusted)
for (i = 0; i < ret_numvals; i += 2)
{
- CONST84 char *ret_name = ret_values[i];
- CONST84 char *ret_value = ret_values[i + 1];
+ const char *ret_name = ret_values[i];
+ const char *ret_value = ret_values[i + 1];
int attnum;
Oid typinput;
Oid typioparam;
@@ -1620,12 +1605,12 @@ pltcl_elog(ClientData cdata, Tcl_Interp *interp,
MemoryContext oldcontext;
int priIndex;
- static CONST84 char *logpriorities[] = {
+ static const char *logpriorities[] = {
"DEBUG", "LOG", "INFO", "NOTICE",
- "WARNING", "ERROR", "FATAL", (char *) NULL
+ "WARNING", "ERROR", "FATAL", (const char *) NULL
};
- static CONST84 int loglevels[] = {
+ static const int loglevels[] = {
DEBUG2, LOG, INFO, NOTICE,
WARNING, ERROR, FATAL
};
@@ -1934,7 +1919,7 @@ pltcl_SPI_execute(ClientData cdata, Tcl_Interp *interp,
int i;
int optIndex;
int count = 0;
- CONST84 char *volatile arrayname = NULL;
+ const char *volatile arrayname = NULL;
Tcl_Obj *volatile loop_body = NULL;
MemoryContext oldcontext = CurrentMemoryContext;
ResourceOwner oldowner = CurrentResourceOwner;
@@ -1944,8 +1929,8 @@ pltcl_SPI_execute(ClientData cdata, Tcl_Interp *interp,
OPT_ARRAY, OPT_COUNT
};
- static CONST84 char *options[] = {
- "-array", "-count", (char *) NULL
+ static const char *options[] = {
+ "-array", "-count", (const char *) NULL
};
/************************************************************
@@ -2035,7 +2020,7 @@ pltcl_SPI_execute(ClientData cdata, Tcl_Interp *interp,
*/
static int
pltcl_process_SPI_result(Tcl_Interp *interp,
- CONST84 char *arrayname,
+ const char *arrayname,
Tcl_Obj *loop_body,
int spi_rc,
SPITupleTable *tuptable,
@@ -2282,7 +2267,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
Tcl_HashEntry *hashent;
pltcl_query_desc *qdesc;
const char *nulls = NULL;
- CONST84 char *arrayname = NULL;
+ const char *arrayname = NULL;
Tcl_Obj *loop_body = NULL;
int count = 0;
int callObjc;
@@ -2297,8 +2282,8 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
OPT_ARRAY, OPT_COUNT, OPT_NULLS
};
- static CONST84 char *options[] = {
- "-array", "-count", "-nulls", (char *) NULL
+ static const char *options[] = {
+ "-array", "-count", "-nulls", (const char *) NULL
};
/************************************************************
@@ -2500,19 +2485,19 @@ pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
* of a given tuple
**********************************************************************/
static void
-pltcl_set_tuple_values(Tcl_Interp *interp, CONST84 char *arrayname,
+pltcl_set_tuple_values(Tcl_Interp *interp, const char *arrayname,
int tupno, HeapTuple tuple, TupleDesc tupdesc)
{
int i;
char *outputstr;
Datum attr;
bool isnull;
- CONST84 char *attname;
+ const char *attname;
Oid typoutput;
bool typisvarlena;
- CONST84 char **arrptr;
- CONST84 char **nameptr;
- CONST84 char *nullname = NULL;
+ const char **arrptr;
+ const char **nameptr;
+ const char *nullname = NULL;
/************************************************************
* Prepare pointers for Tcl_SetVar2() below and in array