summaryrefslogtreecommitdiff
path: root/src/pl/tcl
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-10-09 16:57:10 +0000
committerBruce Momjian <bruce@momjian.us>1998-10-09 16:57:10 +0000
commit40703f282afdfe8bb319f2bd914bba031db7b0f2 (patch)
tree213f911d4fd631e01545fc309224649c8de7035b /src/pl/tcl
parent148345641803054552435e2ac3490736703a12a4 (diff)
downloadpostgresql-40703f282afdfe8bb319f2bd914bba031db7b0f2.tar.gz
There where a few more problems fixed by the patch below.
o configure.in Jan.
Diffstat (limited to 'src/pl/tcl')
-rw-r--r--src/pl/tcl/mkMakefile.tcldefs.sh.in5
-rw-r--r--src/pl/tcl/pltcl.c25
2 files changed, 20 insertions, 10 deletions
diff --git a/src/pl/tcl/mkMakefile.tcldefs.sh.in b/src/pl/tcl/mkMakefile.tcldefs.sh.in
index 95491d7279..c3981dd310 100644
--- a/src/pl/tcl/mkMakefile.tcldefs.sh.in
+++ b/src/pl/tcl/mkMakefile.tcldefs.sh.in
@@ -8,5 +8,8 @@ else
exit 1
fi
-set | grep '^TCL' > Makefile.tcldefs
+for v in `set | grep '^TCL' | sed -e 's/=.*//'` ; do
+ echo $v = `eval "echo \\$$v"`
+done >Makefile.tcldefs
+
exit 0
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index c6f418d331..3ce921b037 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -3,7 +3,7 @@
* procedural language (PL)
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.6 1998/09/01 04:40:28 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.7 1998/10/09 16:57:10 momjian Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -417,12 +417,6 @@ pltcl_call_handler(FmgrInfo *proinfo,
pltcl_call_level--;
- /************************************************************
- * Disconnect from SPI manager
- ************************************************************/
- if (SPI_finish() != SPI_OK_FINISH)
- elog(ERROR, "pltcl: SPI_finish() failed");
-
return retval;
}
@@ -731,6 +725,15 @@ pltcl_func_handler(FmgrInfo *proinfo,
siglongjmp(Warn_restart, 1);
}
+ /************************************************************
+ * Disconnect from SPI manager and then create the return
+ * values datum (if the input function does a palloc for it
+ * this must not be allocated in the SPI memory context
+ * because SPI_finish would free it).
+ ************************************************************/
+ if (SPI_finish() != SPI_OK_FINISH)
+ elog(ERROR, "pltcl: SPI_finish() failed");
+
retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
(pltcl_safe_interp->result,
prodesc->result_in_elem,
@@ -1051,8 +1054,12 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
* The return value from the procedure might be one of
* the magic strings OK or SKIP or a list from array get
************************************************************/
- if (strcmp(pltcl_safe_interp->result, "OK") == 0)
+ if (SPI_finish() != SPI_OK_FINISH)
+ elog(ERROR, "pltcl: SPI_finish() failed");
+
+ if (strcmp(pltcl_safe_interp->result, "OK") == 0) {
return rettup;
+ }
if (strcmp(pltcl_safe_interp->result, "SKIP") == 0)
{
return (HeapTuple) NULL;;
@@ -1309,7 +1316,7 @@ pltcl_SPI_exec(ClientData cdata, Tcl_Interp * interp,
int loop_rc;
int ntuples;
HeapTuple *tuples;
- TupleDesc tupdesc;
+ TupleDesc tupdesc = NULL;
sigjmp_buf save_restart;
char *usage = "syntax error - 'SPI_exec "