• Marko Mäkelä's avatar
    MDEV-30882 Crash on ROLLBACK in a ROW_FORMAT=COMPRESSED table · 701399ad
    Marko Mäkelä authored
    btr_cur_upd_rec_in_place(): Avoid calling page_zip_write_rec() if we
    are not modifying any fields that are stored in compressed format.
    
    btr_cur_update_in_place_zip_check(): New function to check if a
    ROW_FORMAT=COMPRESSED record can actually be updated in place.
    
    btr_cur_pessimistic_update(): If the BTR_KEEP_POS_FLAG is not set
    (we are in a ROLLBACK and cannot write any BLOBs), ignore the potential
    overflow and let page_zip_reorganize() or page_zip_compress() handle it.
    This avoids a failure when an attempted UPDATE of an NULL column to 0 is
    rolled back. During the ROLLBACK, we would try to move a non-updated
    long column to off-page storage in order to avoid a compression failure
    of the ROW_FORMAT=COMPRESSED page.
    
    page_zip_write_trx_id_and_roll_ptr(): Remove an assertion that would fail
    in row_upd_rec_in_place() because the uncompressed page would already
    have been modified there.
    
    This is a 10.5 version of commit ff3d4395
    (different because of commit 08ba3887).
    701399ad
page0zip.cc 139 KB