Allow binary-coercible cases in ri_HashCompareOp; there are some such cases

that are not handled by find_coercion_pathway, notably composite->RECORD.
Now that 8.4 supports composites as primary keys, it's worth dealing with
this case.
This commit is contained in:
Tom Lane 2009-11-05 04:38:29 +00:00
parent 6bef82b38a
commit 8e79277699

View File

@ -15,7 +15,7 @@
* *
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.114 2009/08/01 19:59:41 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.115 2009/11/05 04:38:29 tgl Exp $
* *
* ---------- * ----------
*/ */
@ -3963,10 +3963,12 @@ ri_HashCompareOp(Oid eq_opr, Oid typeid)
{ {
/* /*
* The declared input type of the eq_opr might be a * The declared input type of the eq_opr might be a
* polymorphic type such as ANYARRAY or ANYENUM. If so, * polymorphic type such as ANYARRAY or ANYENUM, or other
* assume the coercion is valid; otherwise complain. * special cases such as RECORD; find_coercion_pathway
* currently doesn't subsume these special cases.
*/ */
if (!IsPolymorphicType(lefttype)) if (!IsPolymorphicType(lefttype) &&
!IsBinaryCoercible(typeid, lefttype))
elog(ERROR, "no conversion function from %s to %s", elog(ERROR, "no conversion function from %s to %s",
format_type_be(typeid), format_type_be(typeid),
format_type_be(lefttype)); format_type_be(lefttype));