Tatsuo Ishii <[EMAIL PROTECTED]> writes:
> *** parse_coerce.c.orig       Sat Feb  3 20:07:53 2001
> --- parse_coerce.c    Tue Feb 27 11:33:01 2001
> ***************
> *** 190,195 ****
> --- 190,201 ----
>               Oid                     inputTypeId = input_typeids[i];
>               Oid                     targetTypeId = func_typeids[i];
  
> +             if (typeidIsValid(inputTypeId) == false)
> +                 return(false);
> + 
> +             if (typeidIsValid(targetTypeId) == false)
> +                 return(false);
> + 
>               /* no problem if same type */
>               if (inputTypeId == targetTypeId)
>                       continue;

I'd suggest not arbitrarily erroring out when there is no need for
a conversion, and not doing the cache lookup implied by typeidIsValid
when it's not necessary to touch the type at all.  Hence, I'd recommend
moving this down a few lines.  Also, conform to the surrounding coding
style and add a comment:

                /* don't know what to do for the input type? then quit... */
                if (inputTypeId == InvalidOid)
                        return false;

+               /* don't choke on references to no-longer-existing types */
+               if (!typeidIsValid(inputTypeId))
+                   return false;
+ 
+               if (!typeidIsValid(targetTypeId))
+                   return false;

                /*
                 * If input is an untyped string constant, assume we can convert
                 * it to anything except a class type.
                 */


BTW, is this sufficient to prevent the VACUUM failure, or are there more
problems downstream?

                        regards, tom lane

Reply via email to