Re: Eval expression R/O once time (src/backend/executor/execExpr.c)
От | Andres Freund |
---|---|
Тема | Re: Eval expression R/O once time (src/backend/executor/execExpr.c) |
Дата | |
Msg-id | 20210921201932.ou2rnz6yikpwgpbg@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Eval expression R/O once time (src/backend/executor/execExpr.c) (Ranier Vilela <ranier.vf@gmail.com>) |
Ответы |
Re: Eval expression R/O once time (src/backend/executor/execExpr.c)
|
Список | pgsql-hackers |
Hi, On 2021-09-21 15:09:11 -0300, Ranier Vilela wrote: > Currently when determining where CoerceToDomainValue can be read, > it evaluates every step in a loop. > But, I think that the expression is immutable and should be solved only > once. What is immutable here? > Otherwise the logic is wrong since by the rules of C, even though the > variable is > being initialized in the declaration, it still receives initialization at > each repetition. > What causes palloc running multiple times. > > In other words: > Datum *domainval = NULL; > > is the same: > Datum *domainval; > domainval = NULL; Obviously? > Thoughts? I don't see what this is supposed to achieve. The allocation of domainval/domainnull happens on every loop iteration with/without your patch. And it has to, the allocation intentionally is separate for each constraint. As the comment even explicitly says: /* * Since value might be read multiple times, force to R/O * - but only if it could be an expanded datum. */ Greetings, Andres Freund
В списке pgsql-hackers по дате отправления: