mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #20837 Apparent change of isolation level during transaction
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.
This commit is contained in:
@ -1369,8 +1369,14 @@ int ha_autocommit_or_rollback(THD *thd, int error)
|
||||
if (thd->transaction_rollback_request && !thd->in_sub_stmt)
|
||||
(void) ha_rollback(thd);
|
||||
}
|
||||
|
||||
thd->variables.tx_isolation=thd->session_tx_isolation;
|
||||
}
|
||||
else if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
|
||||
{
|
||||
/*
|
||||
If we're in autocommit mode, reset tx_isolation
|
||||
to the default value
|
||||
*/
|
||||
thd->variables.tx_isolation= thd->session_tx_isolation;
|
||||
}
|
||||
#endif
|
||||
DBUG_RETURN(error);
|
||||
|
Reference in New Issue
Block a user