• Alvaro Herrera's avatar
    Fix ENABLE/DISABLE TRIGGER to handle recursion correctly · 731d514a
    Alvaro Herrera authored
    Using ATSimpleRecursion() in ATPrepCmd() to do so as bbb927b4 did is
    not correct, because ATPrepCmd() can't distinguish between triggers that
    may be cloned and those that may not, so would wrongly try to recurse
    for the latter category of triggers.
    
    So this commit restores the code in EnableDisableTrigger() that
    86f57594 had added to do the recursion, which would do it only for
    triggers that may be cloned, that is, row-level triggers.  This also
    changes tablecmds.c such that ATExecCmd() is able to pass the value of
    ONLY flag down to EnableDisableTrigger() using its new 'recurse'
    parameter.
    
    This also fixes what seems like an oversight of 86f57594 that the
    recursion to partition triggers would only occur if EnableDisableTrigger()
    had actually changed the trigger.  It is more apt to recurse to inspect
    partition triggers even if the parent's trigger didn't need to be
    changed: only then can we be certain that all descendants share the same
    state afterwards.
    
    Backpatch all the way back to 11, like bbb927b4.  Care is taken not
    to break ABI compatibility (and that no catversion bump is needed.)
    Co-authored-by: default avatarAmit Langote <amitlangote09@gmail.com>
    Reviewed-by: default avatarDmitry Koval <d.koval@postgrespro.ru>
    Discussion: https://postgr.es/m/CA+HiwqG-cZT3XzGAnEgZQLoQbyfJApVwOTQaCaas1mhpf+4V5A@mail.gmail.com
    731d514a
equalfuncs.c 86.7 KB