diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 198d1cf2d14..8579d94595f 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1739,34 +1739,6 @@ select min(b) from t1 where a='8'; min(b) 6 drop table t1; -create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; -insert into test_checksum values (1),(2); -set autocommit=0; -checksum table test_checksum; -Table Checksum -test.test_checksum 1531596814 -insert into test_checksum values(3); -checksum table test_checksum; -Table Checksum -test.test_checksum 1531596814 -commit; -checksum table test_checksum; -Table Checksum -test.test_checksum 2050879373 -commit; -drop table test_checksum; -create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; -insert into test_checksum values (1),(2); -set autocommit=1; -checksum table test_checksum; -Table Checksum -test.test_checksum 1531596814 -set autocommit=1; -insert into test_checksum values(3); -checksum table test_checksum; -Table Checksum -test.test_checksum 2050879373 -drop table test_checksum; create table t1 (x bigint unsigned not null primary key) engine=innodb; insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1); select * from t1; @@ -2644,3 +2616,31 @@ SET FOREIGN_KEY_CHECKS=1; INSERT INTO t2 VALUES(3); ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c1` FOREIGN KEY (`v`) REFERENCES `t1` (`id`)) DROP TABLE t2; +create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; +insert into test_checksum values (1),(2); +set autocommit=0; +checksum table test_checksum; +Table Checksum +test.test_checksum 1531596814 +insert into test_checksum values(3); +checksum table test_checksum; +Table Checksum +test.test_checksum 1531596814 +commit; +checksum table test_checksum; +Table Checksum +test.test_checksum 2050879373 +commit; +drop table test_checksum; +create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; +insert into test_checksum values (1),(2); +set autocommit=1; +checksum table test_checksum; +Table Checksum +test.test_checksum 1531596814 +set autocommit=1; +insert into test_checksum values(3); +checksum table test_checksum; +Table Checksum +test.test_checksum 2050879373 +drop table test_checksum; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index c9a8c2c4f0d..7d4e15163ef 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -1269,46 +1269,6 @@ select min(a) from t1; select min(b) from t1 where a='8'; drop table t1; -# -# Test that checksum table uses a consistent read Bug #12669 -# -connect (a,localhost,root,,); -connect (b,localhost,root,,); -connection a; -create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; -insert into test_checksum values (1),(2); -set autocommit=0; -checksum table test_checksum; -connection b; -insert into test_checksum values(3); -connection a; -# -# Here checksum should not see insert -# -checksum table test_checksum; -connection a; -commit; -checksum table test_checksum; -commit; -drop table test_checksum; -# -# autocommit = 1 -# -connection a; -create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; -insert into test_checksum values (1),(2); -set autocommit=1; -checksum table test_checksum; -connection b; -set autocommit=1; -insert into test_checksum values(3); -connection a; -# -# Here checksum sees insert -# -checksum table test_checksum; -drop table test_checksum; - # End of 4.1 tests # @@ -1605,3 +1565,42 @@ SET FOREIGN_KEY_CHECKS=1; INSERT INTO t2 VALUES(3); DROP TABLE t2; +# +# Test that checksum table uses a consistent read Bug #12669 +# +connect (a,localhost,root,,); +connect (b,localhost,root,,); +connection a; +create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; +insert into test_checksum values (1),(2); +set autocommit=0; +checksum table test_checksum; +connection b; +insert into test_checksum values(3); +connection a; +# +# Here checksum should not see insert +# +checksum table test_checksum; +connection a; +commit; +checksum table test_checksum; +commit; +drop table test_checksum; +# +# autocommit = 1 +# +connection a; +create table test_checksum(a int not null) engine=innodb DEFAULT CHARSET=latin1; +insert into test_checksum values (1),(2); +set autocommit=1; +checksum table test_checksum; +connection b; +set autocommit=1; +insert into test_checksum values(3); +connection a; +# +# Here checksum sees insert +# +checksum table test_checksum; +drop table test_checksum; diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 8abde6980cc..de458785534 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -6689,12 +6689,10 @@ ha_innobase::store_lock( prebuilt->select_lock_type = LOCK_NONE; prebuilt->stored_select_lock_type = LOCK_NONE; } else if (thd->lex->sql_command == SQLCOM_CHECKSUM) { - /* Use consistent read for checksum table and - convert lock type to the TL_READ */ + /* Use consistent read for checksum table */ prebuilt->select_lock_type = LOCK_NONE; prebuilt->stored_select_lock_type = LOCK_NONE; - lock.type = TL_READ; } else { prebuilt->select_lock_type = LOCK_S; prebuilt->stored_select_lock_type = LOCK_S;