pgsql: Rearrange validity checks for plpgsql "simple" expressions.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Rearrange validity checks for plpgsql "simple" expressions.
Date: 2020-03-27 18:47:40
Message-ID: E1jHu16-0001SJ-E1@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Rearrange validity checks for plpgsql "simple" expressions.

Buildfarm experience shows what probably should've occurred to me before:
if a cache flush occurs partway through building a generic plan, then
the plansource may have is_valid = false even though the plan is valid.
We need to accept this case, use the generated plan, and then try to
replan the next time. We can't try to replan immediately, because that
would produce an infinite loop in CLOBBER_CACHE_ALWAYS builds; moreover
it's really overkill. (We can assume that the plan is valid, it's just
possibly a bit stale. Note that the pre-existing code behaved this way,
and the non-simple-expression code paths do too.) Conversely, not using
the generated plan would drop us into the not-a-simple-expression code
path, which is bad for performance and would also cause regression-test
failures due to visibly different error-reporting behavior.

Hence, refactor the validity-check functions so that the initial check
and recheck cases can react differently to plansource->is_valid.
This makes their usage a bit simpler, too.

Discussion: https://postgr.es/m/7072.1585332104@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/fbc7a716084ebccd2a996cc415187c269ea54b3e

Modified Files
--------------
src/backend/utils/cache/plancache.c | 31 +++++++++++++++++++++++++++----
src/include/utils/plancache.h | 3 ++-
src/pl/plpgsql/src/pl_exec.c | 34 +++++++++++++---------------------
3 files changed, 42 insertions(+), 26 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2020-03-27 19:24:59 pgsql: Set wal_receiver_create_temp_slot PGC_POSTMASTER
Previous Message Tom Lane 2020-03-27 15:09:23 Re: pgsql: Provide a TLS init hook