1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-02 09:02:37 +03:00

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.
This commit is contained in:
Tom Lane
2007-05-01 18:54:02 +00:00
parent 9c35b136f1
commit 1430b51761
3 changed files with 55 additions and 4 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.223.2.2 2007/03/06 22:45:23 tgl Exp $
* $PostgreSQL: pgsql/src/backend/optimizer/util/clauses.c,v 1.223.2.3 2007/05/01 18:54:01 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@ -2888,11 +2888,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);
}