summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-01-22 00:50:07 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-01-22 00:50:07 +0000
commitc9fe12831632efc437354cb0482fd6cb5f246a4a (patch)
treeb9b19b88a07ebfd51915b60bc492bfe68c6cd732 /src/include
parent59a3a401497cd72c550fdfcaa782162d91335bba (diff)
downloadpostgresql-c9fe12831632efc437354cb0482fd6cb5f246a4a.tar.gz
Clean up per-tuple memory leaks in trigger firing and plpgsql
expression evaluation.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/commands/trigger.h15
-rw-r--r--src/include/executor/executor.h20
-rw-r--r--src/include/nodes/execnodes.h4
3 files changed, 30 insertions, 9 deletions
diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h
index c9fbcae54a..a9b689ba17 100644
--- a/src/include/commands/trigger.h
+++ b/src/include/commands/trigger.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: trigger.h,v 1.22 2000/12/18 00:44:48 tgl Exp $
+ * $Id: trigger.h,v 1.23 2001/01/22 00:50:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -89,13 +89,16 @@ extern void FreeTriggerDesc(TriggerDesc *trigdesc);
extern bool equalTriggerDescs(TriggerDesc *trigdesc1, TriggerDesc *trigdesc2);
-extern HeapTuple ExecBRInsertTriggers(Relation rel, HeapTuple tuple);
-extern void ExecARInsertTriggers(Relation rel, HeapTuple tuple);
+extern HeapTuple ExecBRInsertTriggers(EState *estate,
+ Relation rel, HeapTuple tuple);
+extern void ExecARInsertTriggers(EState *estate,
+ Relation rel, HeapTuple tuple);
extern bool ExecBRDeleteTriggers(EState *estate, ItemPointer tupleid);
extern void ExecARDeleteTriggers(EState *estate, ItemPointer tupleid);
-extern HeapTuple ExecBRUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple tuple);
-extern void ExecARUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple tuple);
-
+extern HeapTuple ExecBRUpdateTriggers(EState *estate, ItemPointer tupleid,
+ HeapTuple tuple);
+extern void ExecARUpdateTriggers(EState *estate, ItemPointer tupleid,
+ HeapTuple tuple);
/* ----------
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 2197af567f..8e7f4a4863 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: executor.h,v 1.53 2000/11/12 00:37:01 tgl Exp $
+ * $Id: executor.h,v 1.54 2001/01/22 00:50:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -153,6 +153,24 @@ extern void FreeExprContext(ExprContext *econtext);
#define ResetExprContext(econtext) \
MemoryContextReset((econtext)->ecxt_per_tuple_memory)
+extern ExprContext *MakePerTupleExprContext(EState *estate);
+
+/* Get an EState's per-output-tuple exprcontext, making it if first use */
+#define GetPerTupleExprContext(estate) \
+ ((estate)->es_per_tuple_exprcontext ? \
+ (estate)->es_per_tuple_exprcontext : \
+ MakePerTupleExprContext(estate))
+
+#define GetPerTupleMemoryContext(estate) \
+ (GetPerTupleExprContext(estate)->ecxt_per_tuple_memory)
+
+/* Reset an EState's per-output-tuple exprcontext, if one's been created */
+#define ResetPerTupleExprContext(estate) \
+ do { \
+ if ((estate)->es_per_tuple_exprcontext) \
+ ResetExprContext((estate)->es_per_tuple_exprcontext); \
+ } while (0)
+
extern void ExecOpenIndices(ResultRelInfo *resultRelInfo);
extern void ExecCloseIndices(ResultRelInfo *resultRelInfo);
extern void ExecInsertIndexTuples(TupleTableSlot *slot, ItemPointer tupleid,
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h
index 4ba3a70c1b..e4d29178c4 100644
--- a/src/include/nodes/execnodes.h
+++ b/src/include/nodes/execnodes.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: execnodes.h,v 1.53 2000/11/12 00:37:01 tgl Exp $
+ * $Id: execnodes.h,v 1.54 2001/01/22 00:50:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -251,7 +251,7 @@ typedef struct EState
MemoryContext es_query_cxt; /* per-query context in which EState lives */
/*
* this ExprContext is for per-output-tuple operations, such as
- * constraint checks and index-value computations. It can be reset
+ * constraint checks and index-value computations. It will be reset
* for each output tuple. Note that it will be created only if needed.
*/
ExprContext *es_per_tuple_exprcontext;