diff options
Diffstat (limited to 'src/backend/parser/parse_func.c')
-rw-r--r-- | src/backend/parser/parse_func.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 6c194f06c5b..9bd0e2f814b 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.138 2002/10/19 21:23:20 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.139 2002/10/24 22:09:00 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -770,6 +770,11 @@ func_get_detail(List *funcname, * and ones that are coercing a previously-unknown-type literal * constant to a specific type. * + * The reason we can restrict our check to binary-compatible + * coercions here is that we expect non-binary-compatible coercions + * to have an implementation function named after the target type. + * That function will be found by normal lookup if appropriate. + * * NB: it's important that this code stays in sync with what * coerce_type can do, because the caller will try to apply * coerce_type if we return FUNCDETAIL_COERCION. If we return @@ -791,7 +796,9 @@ func_get_detail(List *funcname, Node *arg1 = lfirst(fargs); if ((sourceType == UNKNOWNOID && IsA(arg1, Const)) || - IsBinaryCoercible(sourceType, targetType)) + (find_coercion_pathway(targetType, sourceType, + COERCION_EXPLICIT, funcid) && + *funcid == InvalidOid)) { /* Yup, it's a type coercion */ *funcid = InvalidOid; |