diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-01-28 00:05:25 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-01-28 00:05:25 +0000 |
commit | 9f017115f598ad3e900f383dac17ff8463075d1e (patch) | |
tree | 48ea68d042b80182d14431fbd066700feaf358ff | |
parent | 03ef7ebafae4ceeb23e6c3651d07a1c39b8b8648 (diff) | |
download | postgresql-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.c | 12 |
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. |