aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r--src/backend/utils/adt/rowtypes.c10
-rw-r--r--src/backend/utils/adt/ruleutils.c3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c
index 603072886e2..6f9c8aca0ce 100644
--- a/src/backend/utils/adt/rowtypes.c
+++ b/src/backend/utils/adt/rowtypes.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.8.4.2 2005/04/30 20:04:46 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.8.4.3 2006/01/17 17:33:34 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -79,6 +79,7 @@ record_in(PG_FUNCTION_ARGS)
errmsg("input of anonymous composite types is not implemented")));
tupTypmod = -1; /* for all non-anonymous types */
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
+ tupdesc = CreateTupleDescCopy(tupdesc);
ncolumns = tupdesc->natts;
/*
@@ -257,6 +258,7 @@ record_in(PG_FUNCTION_ARGS)
pfree(buf.data);
pfree(values);
pfree(nulls);
+ FreeTupleDesc(tupdesc);
PG_RETURN_HEAPTUPLEHEADER(result);
}
@@ -284,6 +286,7 @@ record_out(PG_FUNCTION_ARGS)
tupType = HeapTupleHeaderGetTypeId(rec);
tupTypmod = HeapTupleHeaderGetTypMod(rec);
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
+ tupdesc = CreateTupleDescCopy(tupdesc);
ncolumns = tupdesc->natts;
/* Build a temporary HeapTuple control structure */
@@ -408,6 +411,7 @@ record_out(PG_FUNCTION_ARGS)
pfree(values);
pfree(nulls);
+ FreeTupleDesc(tupdesc);
PG_RETURN_CSTRING(buf.data);
}
@@ -444,6 +448,7 @@ record_recv(PG_FUNCTION_ARGS)
errmsg("input of anonymous composite types is not implemented")));
tupTypmod = -1; /* for all non-anonymous types */
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
+ tupdesc = CreateTupleDescCopy(tupdesc);
ncolumns = tupdesc->natts;
/*
@@ -593,6 +598,7 @@ record_recv(PG_FUNCTION_ARGS)
heap_freetuple(tuple);
pfree(values);
pfree(nulls);
+ FreeTupleDesc(tupdesc);
PG_RETURN_HEAPTUPLEHEADER(result);
}
@@ -620,6 +626,7 @@ record_send(PG_FUNCTION_ARGS)
tupType = HeapTupleHeaderGetTypeId(rec);
tupTypmod = HeapTupleHeaderGetTypMod(rec);
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
+ tupdesc = CreateTupleDescCopy(tupdesc);
ncolumns = tupdesc->natts;
/* Build a temporary HeapTuple control structure */
@@ -722,6 +729,7 @@ record_send(PG_FUNCTION_ARGS)
pfree(values);
pfree(nulls);
+ FreeTupleDesc(tupdesc);
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
}
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 63ec591edfb..a2552f4722a 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3,7 +3,7 @@
* back to source text
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.188.4.2 2005/07/15 18:40:20 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.188.4.3 2006/01/17 17:33:34 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -3245,6 +3245,7 @@ get_rule_expr(Node *node, deparse_context *context,
if (rowexpr->row_typeid != RECORDOID)
{
tupdesc = lookup_rowtype_tupdesc(rowexpr->row_typeid, -1);
+ tupdesc = CreateTupleDescCopy(tupdesc);
Assert(list_length(rowexpr->args) <= tupdesc->natts);
}