Loading mysql-test/r/innodb.result +28 −0 Original line number Diff line number Diff line Loading @@ -2644,3 +2644,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; mysql-test/t/innodb.test +39 −0 Original line number Diff line number Diff line Loading @@ -1605,3 +1605,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; sql/ha_innodb.cc +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
mysql-test/r/innodb.result +28 −0 Original line number Diff line number Diff line Loading @@ -2644,3 +2644,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;
mysql-test/t/innodb.test +39 −0 Original line number Diff line number Diff line Loading @@ -1605,3 +1605,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;
sql/ha_innodb.cc +1 −3 Original line number Diff line number Diff line Loading @@ -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; Loading