76 lines
2.1 KiB
Text
76 lines
2.1 KiB
Text
source include/have_debug.inc;
|
|
|
|
# Test for BUG #34982949: dirty reads with repeatable read isolation when "Using index for skip scan"
|
|
|
|
--echo # Test setup.
|
|
|
|
CREATE TABLE `demo` (
|
|
`id` varchar(40) NOT NULL,
|
|
`col_1` varchar(40) NOT NULL,
|
|
`col_2` varchar(40) DEFAULT NULL,
|
|
`col_3` varchar(45) DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_sec` (`col_2`,`col_3`,`col_1`)
|
|
) ENGINE=InnoDB;
|
|
|
|
INSERT INTO demo (id, col_1, col_2, col_3) VALUES (1, 'same_value_col1', 'same_value_col2', 'different_value');
|
|
|
|
DELIMITER |;
|
|
CREATE PROCEDURE insert_demo_data()
|
|
BEGIN
|
|
DECLARE i INT DEFAULT 2;
|
|
DECLARE col_1 VARCHAR(40);
|
|
DECLARE col_2 VARCHAR(40);
|
|
DECLARE col_3 VARCHAR(45);
|
|
WHILE i <= 500 DO
|
|
IF i % 7 = 0 THEN
|
|
SET col_1 = 'another_value_col1';
|
|
SET col_2 = 'another_value_col1';
|
|
SET col_3 = 'another_value_col1';
|
|
ELSE
|
|
SET col_1 = 'same_value_col1';
|
|
SET col_2 = 'same_value_col2';
|
|
SET col_3 = 'same_value_col3';
|
|
END IF;
|
|
INSERT INTO demo (id, col_1, col_2, col_3) VALUES
|
|
(i, col_1, col_2, col_3);
|
|
SET i = i + 1;
|
|
END WHILE;
|
|
END |
|
|
DELIMITER ;|
|
|
CALL insert_demo_data();
|
|
|
|
connect (conn1, localhost, root,'', );
|
|
connect (conn2, localhost, root,'', );
|
|
|
|
connection conn1;
|
|
SET @@autocommit=0;
|
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
|
|
connection conn2;
|
|
SET @@autocommit=0;
|
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
|
|
--echo # Start transaction in conn1
|
|
connection conn1;
|
|
SELECT COUNT(*) FROM demo WHERE col_1='same_value_col1' AND col_3 IS NOT NULL;
|
|
|
|
|
|
--echo # Start transaction in conn2 which makes many uncommited rows, and should come before the readable rows with same key prefix.
|
|
connection conn2;
|
|
BEGIN;
|
|
UPDATE demo SET col_3 = NULL WHERE col_1='same_value_col1' AND col_3='same_value_col3';
|
|
|
|
--echo # In conn1 try repeating the previous query. The result should be same for REPEATABLE READ
|
|
connection conn1;
|
|
SELECT COUNT(*) FROM demo WHERE col_1='same_value_col1' AND col_3 IS NOT NULL;
|
|
|
|
connection conn2;
|
|
ROLLBACK;
|
|
|
|
connection conn1;
|
|
ROLLBACK;
|
|
|
|
--echo # Test cleanup
|
|
DROP PROCEDURE IF EXISTS insert_demo_data;
|
|
DROP TABLE demo;
|