From da2060e5fde1352e10a96d38a8c82f72e37ada77 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 10 Apr 2003 02:47:46 +0000 Subject: [PATCH] Remove premature attempt to constant-fold type coercion expressions. 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 | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index 0ad67b884c..a4b739b0f7 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -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;