168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								# include/read_many_rows.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test how filesort and buffered-record-reads works
							 | 
						||
| 
								 | 
							
								# This test needs a lot of time.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# The variables
							 | 
						||
| 
								 | 
							
								#     $engine_type       -- storage engine to be tested
							 | 
						||
| 
								 | 
							
								#     $other_engine_type -- storage engine <> $engine_type, if possible
							 | 
						||
| 
								 | 
							
								#                           1. $other_engine_type must allow to store many rows
							 | 
						||
| 
								 | 
							
								#                              without using non standard server options
							 | 
						||
| 
								 | 
							
								#                              (does not need a t/read_many_rows_*-master.opt file)
							 | 
						||
| 
								 | 
							
								#                           2. $other_engine_type must point to an all time
							 | 
						||
| 
								 | 
							
								#                              available storage engine
							 | 
						||
| 
								 | 
							
								#                              2006-08 MySQL 5.1 MyISAM and MEMORY only
							 | 
						||
| 
								 | 
							
								# have to be set before sourcing this script.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Last update:
							 | 
						||
| 
								 | 
							
								# 2006-08-03 ML test refactored (MySQL 5.1)
							 | 
						||
| 
								 | 
							
								#               main code t/innodb-big.test --> include/read_many_rows.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eval SET SESSION STORAGE_ENGINE = $engine_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2, t3, t4;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eval CREATE TABLE t1 (id INTEGER) ENGINE=$other_engine_type;
							 | 
						||
| 
								 | 
							
								CREATE TABLE t2 (id INTEGER PRIMARY KEY);
							 | 
						||
| 
								 | 
							
								CREATE TABLE t3 (a CHAR(32) PRIMARY KEY,id INTEGER);
							 | 
						||
| 
								 | 
							
								eval CREATE TABLE t4 (a CHAR(32) PRIMARY KEY,id INTEGER) ENGINE=$other_engine_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (id) VALUES (1);
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+1 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+2 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+4 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+8 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+16 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+32 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+64 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+128 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+256 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+512 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+1024 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+2048 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+4096 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+8192 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+16384 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+32768 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+65536 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+131072 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+262144 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+524288 FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 SELECT id+1048576 FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSERT INTO t2 SELECT * FROM t1;
							 | 
						||
| 
								 | 
							
								INSERT INTO t3 SELECT CONCAT(id),id FROM t2 ORDER BY -id;
							 | 
						||
| 
								 | 
							
								INSERT INTO t4 SELECT * FROM t3 ORDER BY CONCAT(a);
							 | 
						||
| 
								 | 
							
								SELECT SUM(id) FROM t3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DROP TABLE t1,t2,t3,t4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Bug#24989: The DEADLOCK error is improperly handled by InnoDB.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								CREATE TABLE t1 (f1 int NOT NULL) ENGINE=InnoDB;
							 | 
						||
| 
								 | 
							
								CREATE TABLE t2 (f2 int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
							 | 
						||
| 
								 | 
							
								DELIMITER |;
							 | 
						||
| 
								 | 
							
								CREATE TRIGGER t1_bi before INSERT
							 | 
						||
| 
								 | 
							
								    ON t1 FOR EACH ROW
							 | 
						||
| 
								 | 
							
								BEGIN
							 | 
						||
| 
								 | 
							
								  DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @a:= 'deadlock';
							 | 
						||
| 
								 | 
							
								  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
							 | 
						||
| 
								 | 
							
								  INSERT INTO t2 (f2) VALUES (1);
							 | 
						||
| 
								 | 
							
								  DELETE FROM t2 WHERE f2 = 1;
							 | 
						||
| 
								 | 
							
								END;|
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								CREATE PROCEDURE proc24989()
							 | 
						||
| 
								 | 
							
								BEGIN
							 | 
						||
| 
								 | 
							
								  DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @b:= 'deadlock';
							 | 
						||
| 
								 | 
							
								  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
							 | 
						||
| 
								 | 
							
								  INSERT INTO t2 (f2) VALUES (1);
							 | 
						||
| 
								 | 
							
								  DELETE FROM t2 WHERE f2 = 1;
							 | 
						||
| 
								 | 
							
								END;|
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create procedure proc24989_2()
							 | 
						||
| 
								 | 
							
								    deterministic
							 | 
						||
| 
								 | 
							
								begin
							 | 
						||
| 
								 | 
							
								  declare continue handler for sqlexception
							 | 
						||
| 
								 | 
							
								    select 'Outer handler' as 'exception';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								  select "continued";
							 | 
						||
| 
								 | 
							
								end|
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DELIMITER ;|
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,root,,);
							 | 
						||
| 
								 | 
							
								connect (con2,localhost,root,,);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t2 values(123);
							 | 
						||
| 
								 | 
							
								send insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								--sleep 1
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								--error 1213
							 | 
						||
| 
								 | 
							
								reap;
							 | 
						||
| 
								 | 
							
								select @a;
							 | 
						||
| 
								 | 
							
								# check that the whole transaction was rolled back
							 | 
						||
| 
								 | 
							
								select * from t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								commit;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t2 values(123);
							 | 
						||
| 
								 | 
							
								send call proc24989();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								--sleep 1
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								reap;
							 | 
						||
| 
								 | 
							
								select @a,@b;
							 | 
						||
| 
								 | 
							
								# check that the whole transaction was rolled back
							 | 
						||
| 
								 | 
							
								select * from t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								commit;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								start transaction;
							 | 
						||
| 
								 | 
							
								insert into t2 values(123);
							 | 
						||
| 
								 | 
							
								send call proc24989_2();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								--sleep 1
							 | 
						||
| 
								 | 
							
								insert into t1 values(1);
							 | 
						||
| 
								 | 
							
								commit;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								reap;
							 | 
						||
| 
								 | 
							
								# check that the whole transaction was rolled back
							 | 
						||
| 
								 | 
							
								select * from t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								disconnect con2;
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								drop procedure proc24989;
							 | 
						||
| 
								 | 
							
								drop procedure proc24989_2;
							 | 
						||
| 
								 | 
							
								drop table t1,t2;
							 | 
						||
| 
								 | 
							
								
							 |