Re: strange code in array_in

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: strange code in array_in
Дата
Msg-id 18898.1319915580@sss.pgh.pa.us
обсуждение исходный текст
Ответ на strange code in array_in  (Jeff Davis <pgsql@j-davis.com>)
Ответы Re: strange code in array_in
Список pgsql-hackers
Jeff Davis <pgsql@j-davis.com> writes:
> In array_in(), I see the following code:
>   my_extra->element_type = ~element_type;

> It seems like it was explicitly changed from InvalidOid to
> ~element_type. At first I thought it was a mistake, but then I thought
> maybe it was to ensure that the next branch was taken even if
> element_type == InvalidOid.

Exactly.

> But the rest of the lookups will surely fail
> on InvalidOid, and it seems like it would be easy to test for InvalidOid
> at the beginning if we wanted to fail.

What other lookups?  We do need to protect ourselves against
element_type being InvalidOid, and the problem is that if we just set
my_extra->element_type to InvalidOid and press on, the lookup won't be
made and we'll do something bizarre (possibly even crash) using bogus
cached information.  On the other hand, element_type *shouldn't* be
InvalidOid here, so adding an explicit test for that seemed like a waste
of code.  It's sufficient to let get_type_io_data complain about the
case.

array_out, and I believe a bunch of other places, use the same trick.
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Erik Rijkers"
Дата:
Сообщение:
Следующее
От: Tom Lane
Дата:
Сообщение: Re: [v9.2] make_greater_string() does not return a string in some cases