• Tom Lane's avatar
    Change rewriter/planner/executor/plancache to depend on RTE rellockmode. · 6e35939f
    Tom Lane authored
    Instead of recomputing the required lock levels in all these places,
    just use what commit fdba460a made the parser store in the RTE fields.
    This already simplifies the code measurably in these places, and
    follow-on changes will remove a bunch of no-longer-needed infrastructure.
    
    In a few cases, this change causes us to acquire a higher lock level
    than we did before.  This is OK primarily because said higher lock level
    should've been acquired already at query parse time; thus, we're saving
    a useless extra trip through the shared lock manager to acquire a lesser
    lock alongside the original lock.  The only known exception to this is
    that re-execution of a previously planned SELECT FOR UPDATE/SHARE query,
    for a table that uses ROW_MARK_REFERENCE or ROW_MARK_COPY methods, might
    have gotten only AccessShareLock before.  Now it will get RowShareLock
    like the first execution did, which seems fine.
    
    While there's more to do, push it in this state anyway, to let the
    buildfarm help verify that nothing bad happened.
    
    Amit Langote, reviewed by David Rowley and Jesper Pedersen,
    and whacked around a bit more by me
    
    Discussion: https://postgr.es/m/468c85d9-540e-66a2-1dde-fec2b741e688@lab.ntt.co.jp
    6e35939f
execUtils.c 28.3 KB