MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
read_many_rows.inc
1 # include/read_many_rows.inc
2 #
3 # Test how filesort and buffered-record-reads works
4 # This test needs a lot of time.
5 #
6 # The variables
7 # $engine_type -- storage engine to be tested
8 # $other_engine_type -- storage engine <> $engine_type, if possible
9 # 1. $other_engine_type must allow to store many rows
10 # without using non standard server options
11 # (does not need a t/read_many_rows_*-master.opt file)
12 # 2. $other_engine_type must point to an all time
13 # available storage engine
14 # 2006-08 MySQL 5.1 MyISAM and MEMORY only
15 # have to be set before sourcing this script.
16 #
17 # Last update:
18 # 2006-08-03 ML test refactored (MySQL 5.1)
19 # main code t/innodb-big.test --> include/read_many_rows.inc
20 #
21 
22 eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type;
23 
24 --disable_warnings
25 DROP TABLE IF EXISTS t1, t2, t3, t4;
26 --enable_warnings
27 
28 eval CREATE TABLE t1 (id INTEGER) ENGINE=$other_engine_type;
29 CREATE TABLE t2 (id INTEGER PRIMARY KEY);
30 CREATE TABLE t3 (a CHAR(32) PRIMARY KEY,id INTEGER);
31 eval CREATE TABLE t4 (a CHAR(32) PRIMARY KEY,id INTEGER) ENGINE=$other_engine_type;
32 
33 INSERT INTO t1 (id) VALUES (1);
34 INSERT INTO t1 SELECT id+1 FROM t1;
35 INSERT INTO t1 SELECT id+2 FROM t1;
36 INSERT INTO t1 SELECT id+4 FROM t1;
37 INSERT INTO t1 SELECT id+8 FROM t1;
38 INSERT INTO t1 SELECT id+16 FROM t1;
39 INSERT INTO t1 SELECT id+32 FROM t1;
40 INSERT INTO t1 SELECT id+64 FROM t1;
41 INSERT INTO t1 SELECT id+128 FROM t1;
42 INSERT INTO t1 SELECT id+256 FROM t1;
43 INSERT INTO t1 SELECT id+512 FROM t1;
44 INSERT INTO t1 SELECT id+1024 FROM t1;
45 INSERT INTO t1 SELECT id+2048 FROM t1;
46 INSERT INTO t1 SELECT id+4096 FROM t1;
47 INSERT INTO t1 SELECT id+8192 FROM t1;
48 INSERT INTO t1 SELECT id+16384 FROM t1;
49 INSERT INTO t1 SELECT id+32768 FROM t1;
50 INSERT INTO t1 SELECT id+65536 FROM t1;
51 INSERT INTO t1 SELECT id+131072 FROM t1;
52 INSERT INTO t1 SELECT id+262144 FROM t1;
53 INSERT INTO t1 SELECT id+524288 FROM t1;
54 INSERT INTO t1 SELECT id+1048576 FROM t1;
55 
56 INSERT INTO t2 SELECT * FROM t1;
57 INSERT INTO t3 SELECT CONCAT(id),id FROM t2 ORDER BY -id;
58 INSERT INTO t4 SELECT * FROM t3 ORDER BY CONCAT(a);
59 SELECT SUM(id) FROM t3;
60 
61 DROP TABLE t1,t2,t3,t4;
62 
63 #
64 # Bug#24989: The DEADLOCK error is improperly handled by InnoDB.
65 #
66 CREATE TABLE t1 (f1 int NOT NULL) ENGINE=InnoDB;
67 CREATE TABLE t2 (f2 int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
68 DELIMITER |;
69 CREATE TRIGGER t1_bi before INSERT
70  ON t1 FOR EACH ROW
71 BEGIN
72  DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @a:= 'deadlock';
73  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
74  INSERT INTO t2 (f2) VALUES (1);
75  DELETE FROM t2 WHERE f2 = 1;
76 END;|
77 
78 CREATE PROCEDURE proc24989()
79 BEGIN
80  DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @b:= 'deadlock';
81  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
82  INSERT INTO t2 (f2) VALUES (1);
83  DELETE FROM t2 WHERE f2 = 1;
84 END;|
85 
86 create procedure proc24989_2()
87  deterministic
88 begin
89  declare continue handler for sqlexception
90  select 'Outer handler' as 'exception';
91 
92  insert into t1 values(1);
93  select "continued";
94 end|
95 
96 DELIMITER ;|
97 
98 connect (con1,localhost,root,,);
99 connect (con2,localhost,root,,);
100 
101 connection con1;
102 start transaction;
103 insert into t1 values(1);
104 
105 connection con2;
106 start transaction;
107 insert into t2 values(123);
108 send insert into t1 values(1);
109 
110 connection con1;
111 --sleep 1
112 insert into t1 values(1);
113 
114 connection con2;
115 --error 1213
116 reap;
117 select @a;
118 # check that the whole transaction was rolled back
119 select * from t2;
120 
121 connection con1;
122 commit;
123 start transaction;
124 insert into t1 values(1);
125 
126 connection con2;
127 start transaction;
128 insert into t2 values(123);
129 send call proc24989();
130 
131 connection con1;
132 --sleep 1
133 insert into t1 values(1);
134 
135 connection con2;
136 reap;
137 select @a,@b;
138 # check that the whole transaction was rolled back
139 select * from t2;
140 
141 connection con1;
142 commit;
143 start transaction;
144 insert into t1 values(1);
145 
146 connection con2;
147 start transaction;
148 insert into t2 values(123);
149 send call proc24989_2();
150 
151 connection con1;
152 --sleep 1
153 insert into t1 values(1);
154 commit;
155 
156 connection con2;
157 reap;
158 # check that the whole transaction was rolled back
159 select * from t2;
160 
161 disconnect con1;
162 disconnect con2;
163 connection default;
164 drop procedure proc24989;
165 drop procedure proc24989_2;
166 drop table t1,t2;
167