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