]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Remove premature attempt to constant-fold type coercion expressions.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 10 Apr 2003 02:47:46 +0000 (02:47 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 10 Apr 2003 02:47:46 +0000 (02:47 +0000)
While usually safe, this fails if the coercion function needs the
query snapshot to be set already.  Per example from Nigel Andrews.

src/backend/parser/parse_coerce.c

index 0ad67b884c85d72a578094ca5d4407ec301ab36f..a4b739b0f7e8a77db2ac1da07fd6982d30832742 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.94 2003/04/08 23:20:02 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.95 2003/04/10 02:47:46 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -219,20 +219,6 @@ coerce_type(Node *node, Oid inputTypeId, Oid targetTypeId,
                        if (targetTypeId != baseTypeId)
                                result = coerce_to_domain(result, baseTypeId, targetTypeId,
                                                                                  cformat);
-
-                       /*
-                        * If the input is a constant, apply the type conversion
-                        * function now instead of delaying to runtime.  (We could, of
-                        * course, just leave this to be done during
-                        * planning/optimization; but it's a very frequent special
-                        * case, and we save cycles in the rewriter if we fold the
-                        * expression now.)
-                        *
-                        * Note that no folding will occur if the conversion function is
-                        * not marked 'immutable'.
-                        */
-                       if (IsA(node, Const))
-                               result = eval_const_expressions(result);
                }
                else
                {
@@ -464,7 +450,6 @@ coerce_type_typmod(Node *node, Oid targetTypeId, int32 targetTypMod,
        {
                List       *args;
                Const      *cons;
-               Node       *fcall;
 
                /* Pass given value, plus target typmod as an int4 constant */
                cons = makeConst(INT4OID,
@@ -487,18 +472,7 @@ coerce_type_typmod(Node *node, Oid targetTypeId, int32 targetTypMod,
                        args = lappend(args, cons);
                }
 
-               fcall = build_func_call(funcId, targetTypeId, args, cformat);
-
-               /*
-                * If the input is a constant, apply the length coercion
-                * function now instead of delaying to runtime.
-                *
-                * See the comments for the similar case in coerce_type.
-                */
-               if (node && IsA(node, Const))
-                       node = eval_const_expressions(fcall);
-               else
-                       node = fcall;
+               node = build_func_call(funcId, targetTypeId, args, cformat);
        }
 
        return node;