• Sergei Golubchik's avatar
    MDEV-17070 Table corruption or Assertion `table->file->stats.records > 0 ||... · 69abd437
    Sergei Golubchik authored
    MDEV-17070 Table corruption or Assertion `table->file->stats.records > 0 || error' or Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed upon actions on temporary table
    
    This was caused by a combination of factors:
    * MyISAM/Aria temporary tables historically never saved the state
      to disk (MYI/MAI), because the state never needed to persist
    * certain ALTER TABLE operations modify the original TABLE structure
      and if they fail, the original table has to be reopened to
      revert all changes (m_needs_reopen=1)
    
    as a result, when ALTER fails and MyISAM/Aria temp table gets reopened,
    it reads the stale state from the disk.
    
    As a fix, MyISAM/Aria tables now *always* write the state to disk
    on close, *unless* HA_EXTRA_PREPARE_FOR_DROP was done first. And
    the server now always does HA_EXTRA_PREPARE_FOR_DROP before dropping
    a temporary table.
    69abd437
ma_close.c 8.54 KB