• Magne Mahre's avatar
    Bug #20837 Apparent change of isolation level during transaction · 732e5a26
    Magne Mahre authored
          
    SET TRANSACTION ISOLATION LEVEL is used to temporarily set
    the trans.iso.level for the next transaction.  After the
    transaction, the iso.level is (re-)set to value of the 
    session variable 'tx_isolation'.
    
    The bug is caused by setting the thd->variables.tx_isolation 
    field to the value of the session variable upon each
    statement commit.  It should only be set at the end of the
    full transaction.
    
    The fix has been to remove the setting of the variable in
    ha_autocommit_or_rollback if we're in a transaction, as it 
    will be correctly set in  either ha_rollback or 
    ha_commit_one_phase.  
    
    If, on the other hand, we're in  autocommit mode, tx_isolation 
    will be explicitly set here.
    
    
    
    mysql-test/t/innodb_mysql.test:
      "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" sets
      the trans.isolation for the next transaction.  We test
      that @@tx_isolation keeps this value during the transaction,
      and is only reset back to the session value at the end
      of the transaction.
    732e5a26
handler.cc 141 KB