Re: Add new for_each macros for iterating over a List that do not require ListCell pointer

Поиск
Список
Период
Сортировка
От David Rowley
Тема Re: Add new for_each macros for iterating over a List that do not require ListCell pointer
Дата
Msg-id CAApHDvoHsA4B5MKC5RXw8z+_7jM39zXOLr1S0jVit_gx0BxKDQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Add new for_each macros for iterating over a List that do not require ListCell pointer  (Jelte Fennema <postgres@jeltef.nl>)
Ответы Re: Add new for_each macros for iterating over a List that do not require ListCell pointer
Список pgsql-hackers
On Wed, 25 Oct 2023 at 06:00, Jelte Fennema <postgres@jeltef.nl> wrote:
> Attached is a fixed version.

With foreach(), we commonly do "if (lc == NULL)" at the end of loops
as a way of checking if we did "break" to terminate the loop early.
Doing the equivalent with the new macros won't be safe as the list
element's value we broke on may be set to NULL. I think it might be a
good idea to document the fact that this wouldn't be safe with the new
macros, or better yet, document the correct way to determine if we
broke out the loop early.  I imagine someone will want to do some
conversion work at some future date and it would be good if we could
avoid introducing bugs during that process.

I wonder if we should even bother setting the variable to NULL at the
end of the loop.  It feels like someone might just end up mistakenly
checking for NULLs even if we document that it's not safe.  If we left
the variable pointing to the last list element then the user of the
macro is more likely to notice their broken code. It'd also save a bit
of instruction space.

David



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

Предыдущее
От: Tatsuo Ishii
Дата:
Сообщение: Re: Row pattern recognition
Следующее
От: shveta malik
Дата:
Сообщение: Re: Synchronizing slots from primary to standby