Re: CASE WHEN idiomatic for functions with side-effect?

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: CASE WHEN idiomatic for functions with side-effect?
Дата
Msg-id CAKFQuwYFMetu-nb2gzSAco07+xcv8ZKA8ZTziS7ZU=aLRywwYw@mail.gmail.com
обсуждение исходный текст
Ответ на CASE WHEN idiomatic for functions with side-effect?  ("Joel Jacobson" <joel@compiler.org>)
Список pgsql-general
On Tue, Jan 12, 2021 at 1:14 AM Joel Jacobson <joel@compiler.org> wrote:
Is it idiomatic and safe to use

SELECT
  CASE boolean_expression WHEN TRUE THEN function_with_side_effects() END

As long as function_with_side_effects() is defined volatile it is forced to be executed at runtime, once per row.  That situation is always protected by the case expression.


"related cases that don't obviously involve constants can occur in queries executed within functions, since the values of function arguments and local variables can be inserted into queries as constants for planning purposes. Within PL/pgSQL functions, for example, using an IF-THEN-ELSE statement to protect a risky computation is much safer than just nesting it in a CASE expression."


The relevant function takes in a column argument - it is thus impossible for the planner to evaluate the expression.  And, as above, the planner respects the "volatile" attribute of functions.

David J.

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

Предыдущее
От: "Joel Jacobson"
Дата:
Сообщение: CASE WHEN idiomatic for functions with side-effect?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: CASE WHEN idiomatic for functions with side-effect?