mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
handler::check_duplicate_long_entry_key() reads all rows with the same long unique hash. Each read (ha_index_read_map() and every ha_index_next_same() hit) runs TABLE::update_virtual_fields() with VCOL_UPDATE_FOR_READ, which swaps Field_blob::value and read_value of virtual blob columns. The swap was undone only after the first read. Every further read swapped again, so the buffer that record[1] (the old row of UPDATE) points to ended up in value: the next read stored the lookup row into it, or restore_blob_values() freed it. InnoDB then built the old secondary index key from overwritten or freed memory and did not find the record to update. The fix undoes the swap after each read.
269 KiB
269 KiB