• Tom Lane's avatar
    Rearrange validity checks for plpgsql "simple" expressions. · fbc7a716
    Tom Lane authored
    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
    fbc7a716
plancache.c 69.6 KB