aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-01-28 00:05:25 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-01-28 00:05:25 +0000
commit9f017115f598ad3e900f383dac17ff8463075d1e (patch)
tree48ea68d042b80182d14431fbd066700feaf358ff
parent03ef7ebafae4ceeb23e6c3651d07a1c39b8b8648 (diff)
downloadpostgresql-9f017115f598ad3e900f383dac17ff8463075d1e.tar.gz
postgresql-9f017115f598ad3e900f383dac17ff8463075d1e.zip
simplify_function() mustn't try to evaluate functions that return
composite types, because TupleTableSlots aren't Datums and can't be stored in Const nodes. We can remove this restriction if we ever adopt a cleaner runtime representation for whole-tuple results, but at the moment it's broken. Per example from Thomas Hallgren.
-rw-r--r--src/backend/optimizer/util/clauses.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 688e106f4eb..d8809a5252d 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.154.2.1 2003/12/09 01:56:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.154.2.2 2004/01/28 00:05:25 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -1655,6 +1655,7 @@ evaluate_function(Oid funcid, Oid result_type, List *args,
bool has_null_input = false;
List *arg;
FuncExpr *newexpr;
+ char result_typtype;
/*
* Can't simplify if it returns a set.
@@ -1692,6 +1693,15 @@ evaluate_function(Oid funcid, Oid result_type, List *args,
return NULL;
/*
+ * Can't simplify functions returning composite types (mainly because
+ * datumCopy() doesn't cope; FIXME someday when we have a saner
+ * representation for whole-tuple results).
+ */
+ result_typtype = get_typtype(funcform->prorettype);
+ if (result_typtype == 'c')
+ return NULL;
+
+ /*
* OK, looks like we can simplify this operator/function.
*
* Build a new FuncExpr node containing the already-simplified arguments.