diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/optimizer/util/clauses.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 926162d469c..c5288657528 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -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" @@ -2104,6 +2105,16 @@ evaluate_function(Oid funcid, Oid result_type, List *args, 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. */ foreach(arg, args) |