• Nikita Malyavin's avatar
    MDEV-22714 Assertion failed upon multi-update on table WITHOUT OVERLAPS · d543363f
    Nikita Malyavin authored
    The problem here was that ha_check_overlaps internally uses ha_index_read,
    which in case of fail overwrites table->status. Even though the handlers
    are different, they share a common table, so the value is anyway spoiled.
    This is bad, and table->status is badly designed and overweighted by
    functionality, but nothing can be done with it, since the code related to
    this logic is ancient and it's impossible to extract it with normal effort.
    
    So let's just save and restore the value in ha_update_row before and after
    the checks.
    
    Other operations like INSERT and simple UPDATE are not in risk, since they
    don't use this table->status approach.
    DELETE does not do any unique checks, so it's also safe.
    d543363f
handler.cc 246 KB