aboutsummaryrefslogtreecommitdiff
path: root/src/include/executor/tuptable.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/executor/tuptable.h')
-rw-r--r--src/include/executor/tuptable.h26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/include/executor/tuptable.h b/src/include/executor/tuptable.h
index 47018666a78..7def0be4b69 100644
--- a/src/include/executor/tuptable.h
+++ b/src/include/executor/tuptable.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: tuptable.h,v 1.17 2001/01/24 19:43:23 momjian Exp $
+ * $Id: tuptable.h,v 1.18 2001/01/29 00:39:20 tgl Exp $
*
* NOTES
* The tuple table interface is getting pretty ugly.
@@ -22,27 +22,36 @@
/* ----------------
* The executor tuple table is managed and manipulated by special
- * code in executor/execTuples.c and tupTable.h
+ * code in executor/execTuples.c.
*
* TupleTableSlot information
*
- * shouldFree boolean - should we call pfree() on tuple
+ * val current tuple, or NULL if no tuple
+ * shouldFree boolean - should we pfree() tuple
* descIsNew boolean - true when tupleDescriptor changes
- * tupleDescriptor type information kept regarding the tuple data
+ * tupleDescriptor type information for the tuple data
+ * shouldFreeDesc boolean - should we free tupleDescriptor
* buffer the buffer for tuples pointing to disk pages
*
* The executor stores pointers to tuples in a ``tuple table''
- * which is composed of TupleTableSlot's. Some of the tuples
- * are pointers to buffer pages and others are pointers to
- * palloc'ed memory and the shouldFree variable tells us when
+ * which is composed of TupleTableSlots. Sometimes the tuples
+ * are pointers to buffer pages, while others are pointers to
+ * palloc'ed memory; the shouldFree variable tells us when
* we may call pfree() on a tuple. -cim 9/23/90
*
+ * If buffer is not InvalidBuffer, then the slot is holding a pin
+ * on the indicated buffer page; drop the pin when we release the
+ * slot's reference to that buffer.
+ *
* In the implementation of nested-dot queries such as
* "retrieve (EMP.hobbies.all)", a single scan may return tuples
* of many types, so now we return pointers to tuple descriptors
* along with tuples returned via the tuple table. -cim 1/18/90
*
- * Tuple table macros are all excised from the system now.
+ * shouldFreeDesc is similar to shouldFree: if it's true, then the
+ * tupleDescriptor is "owned" by the TupleTableSlot and should be
+ * freed when the slot's reference to the descriptor is dropped.
+ *
* See executor.h for decls of functions defined in execTuples.c
* -jolly
*
@@ -54,6 +63,7 @@ typedef struct TupleTableSlot
HeapTuple val;
bool ttc_shouldFree;
bool ttc_descIsNew;
+ bool ttc_shouldFreeDesc;
TupleDesc ttc_tupleDescriptor;
Buffer ttc_buffer;
} TupleTableSlot;