aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_coerce.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-01-17 17:33:23 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-01-17 17:33:23 +0000
commit7b3d9367b449f160fd4597094b0e18054d555b09 (patch)
treef109232720b413474b59d94070d1f8c860be39df /src/backend/parser/parse_coerce.c
parentafe91cae6c45f5f06881651e6cea35972a0d4586 (diff)
downloadpostgresql-7b3d9367b449f160fd4597094b0e18054d555b09.tar.gz
postgresql-7b3d9367b449f160fd4597094b0e18054d555b09.zip
Repair problems with the result of lookup_rowtype_tupdesc() possibly being
discarded by cache flush while still in use. This is a minimal patch that just copies the tupdesc anywhere it could be needed across a flush. Applied to back branches only; Neil Conway is working on a better long-term solution for HEAD.
Diffstat (limited to 'src/backend/parser/parse_coerce.c')
-rw-r--r--src/backend/parser/parse_coerce.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index 407744005fe..56229fd8c92 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.132.2.2 2006/01/12 22:29:11 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.132.2.3 2006/01/17 17:33:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -705,7 +705,7 @@ coerce_record_to_complex(ParseState *pstate, Node *node,
format_type_be(RECORDOID),
format_type_be(targetTypeId))));
- tupdesc = lookup_rowtype_tupdesc(targetTypeId, -1);
+ tupdesc = CreateTupleDescCopy(lookup_rowtype_tupdesc(targetTypeId, -1));
newargs = NIL;
ucolno = 1;
arg = list_head(args);
@@ -763,6 +763,8 @@ coerce_record_to_complex(ParseState *pstate, Node *node,
format_type_be(targetTypeId)),
errdetail("Input has too many columns.")));
+ FreeTupleDesc(tupdesc);
+
rowexpr = makeNode(RowExpr);
rowexpr->args = newargs;
rowexpr->row_typeid = targetTypeId;