merge to mysql-5.1-bugteam

This commit is contained in:
Satya B 2009-11-30 19:31:09 +05:30
commit 43f7cd0172
3 changed files with 65 additions and 2 deletions

View file

@ -2273,4 +2273,35 @@ END|
DROP PROCEDURE p1;
DROP VIEW v1;
DROP TABLE t1,t2;
#
# Bug #20837 Apparent change of isolation
# level during transaction
#
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
CREATE TABLE t1 (s1 INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2);
COMMIT;
SET @@autocommit = 0;
COMMIT;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
SELECT * FROM t1;
s1
1
2
Should be READ UNCOMMITTED
SELECT @@tx_isolation;
@@tx_isolation
READ-UNCOMMITTED
INSERT INTO t1 VALUES (-1);
Should be READ UNCOMMITTED
SELECT @@tx_isolation;
@@tx_isolation
READ-UNCOMMITTED
COMMIT;
Should now be REPEATABLE READ
SELECT @@tx_isolation;
@@tx_isolation
REPEATABLE-READ
DROP TABLE t1;
End of 5.1 tests

View file

@ -536,4 +536,30 @@ DROP PROCEDURE p1;
DROP VIEW v1;
DROP TABLE t1,t2;
--echo #
--echo # Bug #20837 Apparent change of isolation
--echo # level during transaction
--echo #
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
CREATE TABLE t1 (s1 INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2);
COMMIT;
SET @@autocommit = 0;
COMMIT;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
SELECT * FROM t1;
--echo Should be READ UNCOMMITTED
SELECT @@tx_isolation;
INSERT INTO t1 VALUES (-1);
--echo Should be READ UNCOMMITTED
SELECT @@tx_isolation;
COMMIT;
--echo Should now be REPEATABLE READ
SELECT @@tx_isolation;
DROP TABLE t1;
--echo End of 5.1 tests

View file

@ -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);