Commit 939712ee authored by Tom Lane's avatar Tom Lane

Don't try to constant-fold functions returning RECORD, since the optimizer

isn't presently set up to pass them an expected tuple descriptor.  Bug has
been there since 7.3 but was just recently reported by Thomas Hallgren.
parent b79a718f
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.194 2005/04/10 20:57:32 tgl Exp $
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.195 2005/04/14 21:44:09 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
......@@ -19,6 +19,7 @@
#include "postgres.h"
#include "access/heapam.h"
#include "catalog/pg_aggregate.h"
#include "catalog/pg_language.h"
#include "catalog/pg_operator.h"
......@@ -2103,6 +2104,16 @@ evaluate_function(Oid funcid, Oid result_type, List *args,
if (funcform->proretset)
return NULL;
/*
* Can't simplify if it returns RECORD, except in the case where it has
* OUT parameters, since it will be needing an expected tupdesc which we
* can't supply here.
*/
if (funcform->prorettype == RECORDOID &&
(heap_attisnull(func_tuple, Anum_pg_proc_proallargtypes) ||
heap_attisnull(func_tuple, Anum_pg_proc_proargmodes)))
return NULL;
/*
* Check for constant inputs and especially constant-NULL inputs.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment