]> granicus.if.org Git - postgresql/commitdiff
Allow binary-coercible cases in ri_HashCompareOp; there are some such cases
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 5 Nov 2009 04:38:35 +0000 (04:38 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 5 Nov 2009 04:38:35 +0000 (04:38 +0000)
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.

src/backend/utils/adt/ri_triggers.c

index 5bcbd633043b191346733609d6cc80e8783b56c2..05e840dae5f9e0c52b24204730e4be8edcc687ad 100644 (file)
@@ -15,7 +15,7 @@
  *
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.113 2009/06/11 14:49:04 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.113.2.1 2009/11/05 04:38:35 tgl Exp $
  *
  * ----------
  */
@@ -3971,10 +3971,12 @@ ri_HashCompareOp(Oid eq_opr, Oid typeid)
                        {
                                /*
                                 * The declared input type of the eq_opr might be a
-                                * polymorphic type such as ANYARRAY or ANYENUM.  If so,
-                                * assume the coercion is valid; otherwise complain.
+                                * polymorphic type such as ANYARRAY or ANYENUM, or other
+                                * 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",
                                                 format_type_be(typeid),
                                                 format_type_be(lefttype));