Thread: Inaccurate comment, for family-1 polymorphic iso-8859-1 type arguments

Inaccurate comment, for family-1 polymorphic iso-8859-1 type arguments

From
Himanshu Upadhyaya
Date:
Hi Hackers,

I observed that we have inaccurate comment in enforce_generic_type_consistency.

 if (!OidIsValid(elem_typeid))
                {
                        if (allow_poly)
                        {
                                elem_typeid = ANYELEMENTOID;
                                array_typeid = ANYARRAYOID;
                                range_typeid = ANYRANGEOID;
                        }
                        else
                        {
                                /*
                                 * Only way to get here is if all the polymorphic args have
                                 * UNKNOWN inputs
                                 */
                                ereport(ERROR,
                              ...............
                         }
........
}
We reach the error condition even if there is any "anycompatible" parameter is present (and that is of some known type say int32).
I think developer intend to report error if "we have all the family-1 polymorphic arguments as UNKNOWN".

Thoughts?

Please find attached the patch to fix this typo.

Thanks,
Himanshu
Attachment

Re: Inaccurate comment, for family-1 polymorphic iso-8859-1 type arguments

From
Tom Lane
Date:
Himanshu Upadhyaya <upadhyaya.himanshu@gmail.com> writes:
> I observed that we have inaccurate comment in
> enforce_generic_type_consistency.

Fair point, but that's not the only old comment that's not being careful
about it.  I applied the attached.

            regards, tom lane

diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index 1b11cf731c..2ffe47026b 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -2155,8 +2155,8 @@ enforce_generic_type_consistency(const Oid *actual_arg_types,
             else
             {
                 /*
-                 * Only way to get here is if all the polymorphic args have
-                 * UNKNOWN inputs
+                 * Only way to get here is if all the family-1 polymorphic
+                 * arguments have UNKNOWN inputs.
                  */
                 ereport(ERROR,
                         (errcode(ERRCODE_DATATYPE_MISMATCH),
@@ -2254,10 +2254,10 @@ enforce_generic_type_consistency(const Oid *actual_arg_types,
             else
             {
                 /*
-                 * Only way to get here is if all the ANYCOMPATIBLE args have
-                 * UNKNOWN inputs.  Resolve to TEXT as select_common_type()
-                 * would do.  That doesn't license us to use TEXTRANGE,
-                 * though.
+                 * Only way to get here is if all the family-2 polymorphic
+                 * arguments have UNKNOWN inputs.  Resolve to TEXT as
+                 * select_common_type() would do.  That doesn't license us to
+                 * use TEXTRANGE, though.
                  */
                 anycompatible_typeid = TEXTOID;
                 anycompatible_array_typeid = TEXTARRAYOID;
@@ -2269,7 +2269,7 @@ enforce_generic_type_consistency(const Oid *actual_arg_types,
             }
         }

-        /* replace polymorphic types by selected types */
+        /* replace family-2 polymorphic types by selected types */
         for (int j = 0; j < nargs; j++)
         {
             Oid            decl_type = declared_arg_types[j];
@@ -2285,11 +2285,11 @@ enforce_generic_type_consistency(const Oid *actual_arg_types,
     }

     /*
-     * If we had any UNKNOWN inputs for polymorphic arguments, re-scan to
-     * assign correct types to them.
+     * If we had any UNKNOWN inputs for family-1 polymorphic arguments,
+     * re-scan to assign correct types to them.
      *
      * Note: we don't have to consider unknown inputs that were matched to
-     * ANYCOMPATIBLE-family arguments, because we forcibly updated their
+     * family-2 polymorphic arguments, because we forcibly updated their
      * declared_arg_types[] positions just above.
      */
     if (have_poly_unknowns)