• Tom Lane's avatar
    Fix unsafe event-trigger coding in ProcessUtility(). · 5525e6c4
    Tom Lane authored
    We mustn't run any of the event-trigger support code when handling
    utility statements like START TRANSACTION or ABORT, because that code
    may need to refresh event-trigger cache data, which requires being
    inside a valid transaction.  (This mistake explains the consistent
    build failures exhibited by the CLOBBER_CACHE_ALWAYS buildfarm members,
    as well as some irreproducible failures on other members.)
    
    The least messy fix seems to be to break standard_ProcessUtility into two
    functions, one that handles all the statements not supported by event
    triggers, and one that contains the event-trigger support code and handles
    the statements that are supported by event triggers.
    
    This change also fixes several inconsistencies, such as four cases where
    support had been installed for "ddl_event_start" but not "ddl_event_end"
    triggers, plus the fact that InvokeDDLCommandEventTriggersIfSupported()
    paid no mind to isCompleteQuery.
    
    Dimitri Fontaine and Tom Lane
    5525e6c4
utility.c 64.1 KB