]> granicus.if.org Git - postgresql/commitdiff
simplify_function() mustn't try to evaluate functions that return
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jan 2004 00:05:04 +0000 (00:05 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 28 Jan 2004 00:05:04 +0000 (00:05 +0000)
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.

src/backend/optimizer/util/clauses.c

index a5faff26cfdaa762bc5d300a9c9b11e41351999a..a767eda803cfd34a33c3f5092752e178a5285afc 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.162 2004/01/12 20:48:15 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.163 2004/01/28 00:05:04 tgl Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -1711,6 +1711,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.
@@ -1747,6 +1748,15 @@ evaluate_function(Oid funcid, Oid result_type, List *args,
                has_nonconst_input)
                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.
         *