• Michael Widenius's avatar
    Fix for Bug#40311 Assert in MARIA_RECORD_POS during pushbuild 2 test: · 86fcfb15
    Michael Widenius authored
    Fixed bug when removing a newly inserted record (in case of duplicate key).
    The bug caused a crash for rows with several blobs and the first blob was small enough to fit into the head page.
    Don't change state_history if nothing changed (speed optimization that also simplifies logic).
    Reset state_history if we added/deleted or updated rows without versioning.
    Fixed wrong test in trnman_exists_active_transactions() if state is visible or not.
    
    Other bugs fixed:
    Fixed wrong argument to (lock->get_status) when we had to wait for TL_WRITE_CONCURRENT_INSERT.
    Item_equal::update_used_tables() didn't calculate const_item_cache properly.
    Added assert's to detect if join_read_const_table() was called under wrong assumptions..
    Fixed that _ma_setup_live_state() is called from thr_lock() instead of handler::external_lock().
    This was needed to get versioning information to be setup correctly.
    Fixed error in debug binaries during a call to _ma_check_table_is_closed() when another thread was opening/closing a table.
    Fixed wrong test when finding right history_state to use.
    
    mysql-test/suite/maria/r/maria.result:
      Added test for Bug#40311 Assert in MARIA_RECORD_POS during pushbuild 2 test
    mysql-test/suite/maria/t/maria.test:
      Added test for Bug#40311 Assert in MARIA_RECORD_POS during pushbuild 2 test
    mysys/thr_lock.c:
      Fixed wrong argument to (lock->get_status) when we had to wait for TL_WRITE_CONCURRENT_INSERT
    sql/item_cmpfunc.cc:
      Item_equal::update_used_tables() didn't calculate const_item_cache properly, which later caused a wrong result for item->const_item()
    sql/sql_base.cc:
      In debug mode, Initilize record buffer with unexpected data to catch usage of uninitialized memory
    sql/sql_select.cc:
      Fixed indentation
      Added assert's to detect if join_read_const_table() was called under wrong assumptions.
      One assert() is disabled for now as Item_equal() doesn't behave as expected.
    storage/maria/ha_maria.cc:
      Move calling to _ma_setup_live_state() to ma_state.c::_ma_block_get_status()
      This was needed as _ma_setup_live_state() needed to know if the table will be used concurrently or not
    storage/maria/ma_blockrec.c:
      Fixed bug when removing a newly inserted record (in case of duplicate key).
      The bug caused a crash for rows with several blobs and the first blob was small enough to fit into the head page.
    storage/maria/ma_dbug.c:
      Added mutex to protect the open table list during _ma_check_table_is_closed().
      Without the protection we could get a error in debug binaries during a call to _ma_check_table_is_closed()
    storage/maria/ma_delete_table.c:
      Removed not used code
    storage/maria/ma_rename.c:
      Removed not used code
    storage/maria/ma_state.c:
      Fixed wrong test when finding right history_state to use
      Mark in tables->state_current.no_transid if we are using transid's or not.
      Don't change state_history if nothing changed (speed optimization that also simplifies logic)
      Reset state_history if we added/deleted or updated rows without versioning.
      More DBUG_ASSERT's and more DBUG
      Updated maria_versioning() to initialize environment before calling _ma_blok_get_status(). This was needed because of the new logic in _ma_block_get_status()
    storage/maria/ma_state.h:
      Added flags to detect if table changed and/or if we changed table without versioning
    storage/maria/ma_write.c:
      Simple cleanups (No logic changes)
    storage/maria/trnman.c:
      Fixed wrong test in trnman_exists_active_transactions() if state is visible or not.
    86fcfb15
ma_blockrec.c 233 KB