From 3afb834ab6eb8157b5f694791a43994473f97b45 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 1 May 2007 18:54:17 +0000 Subject: Fix a thinko in my patch of a couple months ago for bug #3116: it did the wrong thing when inlining polymorphic SQL functions, because it was using the function's declared return type where it should have used the actual result type of the current call. In 8.1 and 8.2 this causes obvious failures even if you don't have assertions turned on; in 8.0 and 7.4 it would only be a problem if the inlined expression were used as an input to a function that did run-time type determination on its inputs. Add a regression test, since this is evidently an under-tested area. --- src/backend/optimizer/util/clauses.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/backend/optimizer/util/clauses.c') diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 7e49287fd56..4e63baf3026 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.186.4.6 2007/03/06 22:45:35 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.186.4.7 2007/05/01 18:54:16 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -2354,11 +2354,11 @@ inline_function(Oid funcid, Oid result_type, List *args, * compatible with the original expression result type. To avoid * confusing matters, insert a RelabelType in such cases. */ - if (exprType(newexpr) != funcform->prorettype) + if (exprType(newexpr) != result_type) { - Assert(IsBinaryCoercible(exprType(newexpr), funcform->prorettype)); + Assert(IsBinaryCoercible(exprType(newexpr), result_type)); newexpr = (Node *) makeRelabelType((Expr *) newexpr, - funcform->prorettype, + result_type, -1, COERCE_IMPLICIT_CAST); } -- cgit v1.2.3