Re: Eval expression R/O once time (src/backend/executor/execExpr.c)
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Ranier Vilela <ranier.vf@gmail.com>
Cc: Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2021-09-21T20:19:32Z
Lists: 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
Commits
-
Fix variable lifespan in ExecInitCoerceToDomain().
- ada667b45496 13.5 landed
- 16a56774fade 14.1 landed
- 01fc6527034a 15.0 landed
-
expression eval, jit: Minor code cleanups.
- 1ec7679f1b67 13.0 cited
-
Faster expression evaluation and targetlist projection.
- b8d7f053c5c2 10.0 cited