aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/util/clauses.c13
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)