aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/common/indextuple.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/common/indextuple.c')
-rw-r--r--src/backend/access/common/indextuple.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c
index 3065730bae0..c0bad3cd957 100644
--- a/src/backend/access/common/indextuple.c
+++ b/src/backend/access/common/indextuple.c
@@ -33,20 +33,39 @@
* ----------------------------------------------------------------
*/
+ /* ----------------
+ * index_form_tuple
+ *
+ * As index_form_tuple_context, but allocates the returned tuple in the
+ * CurrentMemoryContext.
+ * ----------------
+ */
+IndexTuple
+index_form_tuple(TupleDesc tupleDescriptor,
+ Datum *values,
+ bool *isnull)
+{
+ return index_form_tuple_context(tupleDescriptor, values, isnull,
+ CurrentMemoryContext);
+}
+
/* ----------------
- * index_form_tuple
+ * index_form_tuple_context
*
* This shouldn't leak any memory; otherwise, callers such as
* tuplesort_putindextuplevalues() will be very unhappy.
*
* This shouldn't perform external table access provided caller
* does not pass values that are stored EXTERNAL.
+ *
+ * Allocates returned tuple in provided 'context'.
* ----------------
*/
IndexTuple
-index_form_tuple(TupleDesc tupleDescriptor,
- Datum *values,
- bool *isnull)
+index_form_tuple_context(TupleDesc tupleDescriptor,
+ Datum *values,
+ bool *isnull,
+ MemoryContext context)
{
char *tp; /* tuple pointer */
IndexTuple tuple; /* return tuple */
@@ -143,7 +162,7 @@ index_form_tuple(TupleDesc tupleDescriptor,
size = hoff + data_size;
size = MAXALIGN(size); /* be conservative */
- tp = (char *) palloc0(size);
+ tp = (char *) MemoryContextAllocZero(context, size);
tuple = (IndexTuple) tp;
heap_fill_tuple(tupleDescriptor,