mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / suite / parts / r / partition_alter2_2_innodb.result
blobcb9ea4ed60a5506f23d0cce78278376f8263a35b
1 SET @max_row = 20;
2 SET @@session.storage_engine = 'InnoDB';
4 #------------------------------------------------------------------------
5 #  0. Setting of auxiliary variables + Creation of an auxiliary tables
6 #     needed in many testcases
7 #------------------------------------------------------------------------
8 SELECT @max_row DIV 2 INTO @max_row_div2;
9 SELECT @max_row DIV 3 INTO @max_row_div3;
10 SELECT @max_row DIV 4 INTO @max_row_div4;
11 SET @max_int_4 = 2147483647;
12 DROP TABLE IF EXISTS t0_template;
13 CREATE TABLE t0_template (
14 f_int1 INTEGER,
15 f_int2 INTEGER,
16 f_char1 CHAR(20),
17 f_char2 CHAR(20),
18 f_charbig VARCHAR(1000) ,
19 PRIMARY KEY(f_int1))
20 ENGINE = MEMORY;
21 #     Logging of <max_row> INSERTs into t0_template suppressed
22 DROP TABLE IF EXISTS t0_definition;
23 CREATE TABLE t0_definition (
24 state CHAR(3),
25 create_command VARBINARY(5000),
26 file_list      VARBINARY(10000),
27 PRIMARY KEY (state)
28 ) ENGINE = MEMORY;
29 DROP TABLE IF EXISTS t0_aux;
30 CREATE TABLE t0_aux ( f_int1 INTEGER,
31 f_int2 INTEGER,
32 f_char1 CHAR(20),
33 f_char2 CHAR(20),
34 f_charbig VARCHAR(1000) )
35 ENGINE = MEMORY;
36 SET AUTOCOMMIT= 1;
37 SET @@session.sql_mode= '';
38 # End of basic preparations needed for all tests
39 #-----------------------------------------------
41 #========================================================================
42 #  2     Decrease the size of the column used in the partitioning
43 #        function and/or PRIMARY KEY and/or UNIQUE INDEX
44 #========================================================================
45 #------------------------------------------------------------------------
46 #  2.1   ALTER column f_int2 not used in partitioning function
47 #------------------------------------------------------------------------
48 #  2.1.1 no PRIMARY KEY or UNIQUE INDEX exists
49 DROP TABLE IF EXISTS t1;
50 CREATE TABLE t1 (
51 f_int1 INTEGER,
52 f_int2 INTEGER,
53 f_char1 CHAR(20),
54 f_char2 CHAR(20),
55 f_charbig VARCHAR(1000)
58 PARTITION BY HASH(f_int1) PARTITIONS 2;
59 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
60 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
61 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
62 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
63 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
64 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
65 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
66 # Start usability test (inc/partition_check.inc)
67 create_command
68 SHOW CREATE TABLE t1;
69 Table   Create Table
70 t1      CREATE TABLE `t1` (
71   `f_int1` int(11) DEFAULT NULL,
72   `f_int2` mediumint(9) DEFAULT NULL,
73   `f_char1` char(20) DEFAULT NULL,
74   `f_char2` char(20) DEFAULT NULL,
75   `f_charbig` varchar(1000) DEFAULT NULL
76 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
77 /*!50100 PARTITION BY HASH (f_int1)
78 PARTITIONS 2 */
80 # check prerequisites-1 success:    1
81 # check COUNT(*) success:    1
82 # check MIN/MAX(f_int1) success:    1
83 # check MIN/MAX(f_int2) success:    1
84 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
85 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
86 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
87 WHERE f_int1 IN (2,3);
88 # check prerequisites-3 success:    1
89 DELETE FROM t1 WHERE f_charbig = 'delete me';
90 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
91 # check read via f_int1 success: 1
92 # check read via f_int2 success: 1
93         
94 # check multiple-1 success:     1
95 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
96         
97 # check multiple-2 success:     1
98 INSERT INTO t1 SELECT * FROM t0_template
99 WHERE MOD(f_int1,3) = 0;
100         
101 # check multiple-3 success:     1
102 UPDATE t1 SET f_int1 = f_int1 + @max_row
103 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
104 AND @max_row_div2 + @max_row_div4;
105         
106 # check multiple-4 success:     1
107 DELETE FROM t1
108 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
109 AND @max_row_div2 + @max_row_div4 + @max_row;
110         
111 # check multiple-5 success:     1
112 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
113 INSERT INTO t1
114 SET f_int1 = @cur_value , f_int2 = @cur_value,
115 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
116 f_charbig = '#SINGLE#';
117         
118 # check single-1 success:       1
119 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
120 INSERT INTO t1
121 SET f_int1 = @cur_value , f_int2 = @cur_value,
122 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
123 f_charbig = '#SINGLE#';
124         
125 # check single-2 success:       1
126 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
127 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
128 UPDATE t1 SET f_int1 = @cur_value2
129 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
130         
131 # check single-3 success:       1
132 SET @cur_value1= -1;
133 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
134 UPDATE t1 SET f_int1 = @cur_value1
135 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
136         
137 # check single-4 success:       1
138 SELECT MAX(f_int1) INTO @cur_value FROM t1;
139 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
140         
141 # check single-5 success:       1
142 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
143         
144 # check single-6 success:       1
145 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
146 Warnings:
147 Warning 1264    Out of range value for column 'f_int2' at row 1
148         
149 # check single-7 success:       1
150 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
151 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
152 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
153 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
154 f_charbig = '#NULL#';
155 INSERT INTO t1
156 SET f_int1 = NULL , f_int2 = -@max_row,
157 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
158 f_charbig = '#NULL#';
159 # check null success:    1
160         
161 # check null-1 success:         1
162 UPDATE t1 SET f_int1 = -@max_row
163 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
164 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
165         
166 # check null-2 success:         1
167 UPDATE t1 SET f_int1 = NULL
168 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
169 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
170         
171 # check null-3 success:         1
172 DELETE FROM t1
173 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
174 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
175         
176 # check null-4 success:         1
177 DELETE FROM t1
178 WHERE f_int1 = 0 AND f_int2 = 0
179 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
180 AND f_charbig = '#NULL#';
181 SET AUTOCOMMIT= 0;
182 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
183 SELECT f_int1, f_int1, '', '', 'was inserted'
184 FROM t0_template source_tab
185 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
186         
187 # check transactions-1 success:         1
188 COMMIT WORK;
189         
190 # check transactions-2 success:         1
191 ROLLBACK WORK;
192         
193 # check transactions-3 success:         1
194 DELETE FROM t1 WHERE f_charbig = 'was inserted';
195 COMMIT WORK;
196 ROLLBACK WORK;
197         
198 # check transactions-4 success:         1
199 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
200 SELECT f_int1, f_int1, '', '', 'was inserted'
201 FROM t0_template source_tab
202 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
203         
204 # check transactions-5 success:         1
205 ROLLBACK WORK;
206         
207 # check transactions-6 success:         1
208 # INFO: Storage engine used for t1 seems to be transactional.
209 COMMIT;
210         
211 # check transactions-7 success:         1
212 DELETE FROM t1 WHERE f_charbig = 'was inserted';
213 COMMIT WORK;
214 SET @@session.sql_mode = 'traditional';
215 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
216 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
217 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
218 '', '', 'was inserted' FROM t0_template
219 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
220 ERROR 22012: Division by 0
221 COMMIT;
222         
223 # check transactions-8 success:         1
224 # INFO: Storage engine used for t1 seems to be able to revert
225 #       changes made by the failing statement.
226 SET @@session.sql_mode = '';
227 SET AUTOCOMMIT= 1;
228 DELETE FROM t1 WHERE f_charbig = 'was inserted';
229 COMMIT WORK;
230 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
231         
232 # check special-1 success:      1
233 UPDATE t1 SET f_charbig = '';
234         
235 # check special-2 success:      1
236 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
237 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
238 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
239 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
240 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
241 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
242 'just inserted' FROM t0_template
243 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
244 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
245 BEGIN
246 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
247 f_charbig = 'updated by trigger'
248       WHERE f_int1 = new.f_int1;
249 END|
250 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
251 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
252 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
253         
254 # check trigger-1 success:      1
255 DROP TRIGGER trg_1;
256 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
257 f_int2 = CAST(f_char1 AS SIGNED INT),
258 f_charbig = 'just inserted'
259    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
260 DELETE FROM t0_aux
261 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
262 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
263 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
264 'just inserted' FROM t0_template
265 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
266 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
267 BEGIN
268 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
269 f_charbig = 'updated by trigger'
270       WHERE f_int1 = new.f_int1;
271 END|
272 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
273 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
274 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
275         
276 # check trigger-2 success:      1
277 DROP TRIGGER trg_1;
278 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
279 f_int2 = CAST(f_char1 AS SIGNED INT),
280 f_charbig = 'just inserted'
281    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
282 DELETE FROM t0_aux
283 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
284 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
285 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
286 'just inserted' FROM t0_template
287 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
288 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
289 BEGIN
290 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
291 f_charbig = 'updated by trigger'
292       WHERE f_int1 = new.f_int1;
293 END|
294 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
295 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
296         
297 # check trigger-3 success:      1
298 DROP TRIGGER trg_1;
299 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
300 f_int2 = CAST(f_char1 AS SIGNED INT),
301 f_charbig = 'just inserted'
302    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
303 DELETE FROM t0_aux
304 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
305 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
306 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
307 'just inserted' FROM t0_template
308 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
309 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
310 BEGIN
311 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
312 f_charbig = 'updated by trigger'
313       WHERE f_int1 = - old.f_int1;
314 END|
315 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
316 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
317         
318 # check trigger-4 success:      1
319 DROP TRIGGER trg_1;
320 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
321 f_int2 = CAST(f_char1 AS SIGNED INT),
322 f_charbig = 'just inserted'
323    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
324 DELETE FROM t0_aux
325 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
326 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
327 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
328 'just inserted' FROM t0_template
329 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
330 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
331 BEGIN
332 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
333 f_charbig = 'updated by trigger'
334       WHERE f_int1 = new.f_int1;
335 END|
336 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
337 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
338         
339 # check trigger-5 success:      1
340 DROP TRIGGER trg_1;
341 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
342 f_int2 = CAST(f_char1 AS SIGNED INT),
343 f_charbig = 'just inserted'
344    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
345 DELETE FROM t0_aux
346 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
347 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
348 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
349 'just inserted' FROM t0_template
350 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
351 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
352 BEGIN
353 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
354 f_charbig = 'updated by trigger'
355       WHERE f_int1 = - old.f_int1;
356 END|
357 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
358 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
359         
360 # check trigger-6 success:      1
361 DROP TRIGGER trg_1;
362 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
363 f_int2 = CAST(f_char1 AS SIGNED INT),
364 f_charbig = 'just inserted'
365    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
366 DELETE FROM t0_aux
367 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
368 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
369 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
370 'just inserted' FROM t0_template
371 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
372 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
373 BEGIN
374 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
375 f_charbig = 'updated by trigger'
376       WHERE f_int1 = - old.f_int1;
377 END|
378 DELETE FROM t0_aux
379 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
380         
381 # check trigger-7 success:      1
382 DROP TRIGGER trg_1;
383 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
384 f_int2 = CAST(f_char1 AS SIGNED INT),
385 f_charbig = 'just inserted'
386    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
387 DELETE FROM t0_aux
388 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
389 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
390 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
391 'just inserted' FROM t0_template
392 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
393 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
394 BEGIN
395 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
396 f_charbig = 'updated by trigger'
397       WHERE f_int1 = - old.f_int1;
398 END|
399 DELETE FROM t0_aux
400 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
401         
402 # check trigger-8 success:      1
403 DROP TRIGGER trg_1;
404 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
405 f_int2 = CAST(f_char1 AS SIGNED INT),
406 f_charbig = 'just inserted'
407    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
408 DELETE FROM t0_aux
409 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
410 DELETE FROM t1
411 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
412 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
413 BEGIN
414 SET new.f_int1 = old.f_int1 + @max_row,
415 new.f_int2 = old.f_int2 - @max_row,
416 new.f_charbig = '####updated per update trigger####';
417 END|
418 UPDATE t1
419 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
420 f_charbig = '####updated per update statement itself####';
421         
422 # check trigger-9 success:      1
423 DROP TRIGGER trg_2;
424 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
425 f_int2 = CAST(f_char1 AS SIGNED INT),
426 f_charbig = CONCAT('===',f_char1,'===');
427 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
428 BEGIN
429 SET new.f_int1 = new.f_int1 + @max_row,
430 new.f_int2 = new.f_int2 - @max_row,
431 new.f_charbig = '####updated per update trigger####';
432 END|
433 UPDATE t1
434 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
435 f_charbig = '####updated per update statement itself####';
436         
437 # check trigger-10 success:     1
438 DROP TRIGGER trg_2;
439 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
440 f_int2 = CAST(f_char1 AS SIGNED INT),
441 f_charbig = CONCAT('===',f_char1,'===');
442 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
443 BEGIN
444 SET new.f_int1 = @my_max1 + @counter,
445 new.f_int2 = @my_min2 - @counter,
446 new.f_charbig = '####updated per insert trigger####';
447 SET @counter = @counter + 1;
448 END|
449 SET @counter = 1;
450 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
451 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
452 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
453 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
454 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
455 ORDER BY f_int1;
456 DROP TRIGGER trg_3;
457         
458 # check trigger-11 success:     1
459 DELETE FROM t1
460 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
461 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
462 AND f_charbig = '####updated per insert trigger####';
463 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
464 BEGIN
465 SET new.f_int1 = @my_max1 + @counter,
466 new.f_int2 = @my_min2 - @counter,
467 new.f_charbig = '####updated per insert trigger####';
468 SET @counter = @counter + 1;
469 END|
470 SET @counter = 1;
471 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
472 INSERT INTO t1 (f_char1, f_char2, f_charbig)
473 SELECT CAST(f_int1 AS CHAR),
474 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
475 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
476 ORDER BY f_int1;
477 DROP TRIGGER trg_3;
478         
479 # check trigger-12 success:     1
480 DELETE FROM t1
481 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
482 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
483 AND f_charbig = '####updated per insert trigger####';
484 ANALYZE  TABLE t1;
485 Table   Op      Msg_type        Msg_text
486 test.t1 analyze status  OK
487 CHECK    TABLE t1 EXTENDED;
488 Table   Op      Msg_type        Msg_text
489 test.t1 check   status  OK
490 CHECKSUM TABLE t1 EXTENDED;
491 Table   Checksum
492 test.t1 <some_value>
493 OPTIMIZE TABLE t1;
494 Table   Op      Msg_type        Msg_text
495 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
496 test.t1 optimize        status  OK
497 # check layout success:    1
498 REPAIR   TABLE t1 EXTENDED;
499 Table   Op      Msg_type        Msg_text
500 test.t1 repair  note    The storage engine for the table doesn't support repair
501 # check layout success:    1
502 TRUNCATE t1;
503         
504 # check TRUNCATE success:       1
505 # check layout success:    1
506 # End usability test (inc/partition_check.inc)
507 DROP TABLE t1;
508 CREATE TABLE t1 (
509 f_int1 INTEGER,
510 f_int2 INTEGER,
511 f_char1 CHAR(20),
512 f_char2 CHAR(20),
513 f_charbig VARCHAR(1000)
516 PARTITION BY KEY(f_int1) PARTITIONS 5;
517 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
518 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
519 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
520 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
521 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
522 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
523 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
524 # Start usability test (inc/partition_check.inc)
525 create_command
526 SHOW CREATE TABLE t1;
527 Table   Create Table
528 t1      CREATE TABLE `t1` (
529   `f_int1` int(11) DEFAULT NULL,
530   `f_int2` mediumint(9) DEFAULT NULL,
531   `f_char1` char(20) DEFAULT NULL,
532   `f_char2` char(20) DEFAULT NULL,
533   `f_charbig` varchar(1000) DEFAULT NULL
534 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
535 /*!50100 PARTITION BY KEY (f_int1)
536 PARTITIONS 5 */
538 # check prerequisites-1 success:    1
539 # check COUNT(*) success:    1
540 # check MIN/MAX(f_int1) success:    1
541 # check MIN/MAX(f_int2) success:    1
542 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
543 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
544 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
545 WHERE f_int1 IN (2,3);
546 # check prerequisites-3 success:    1
547 DELETE FROM t1 WHERE f_charbig = 'delete me';
548 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
549 # check read via f_int1 success: 1
550 # check read via f_int2 success: 1
551         
552 # check multiple-1 success:     1
553 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
554         
555 # check multiple-2 success:     1
556 INSERT INTO t1 SELECT * FROM t0_template
557 WHERE MOD(f_int1,3) = 0;
558         
559 # check multiple-3 success:     1
560 UPDATE t1 SET f_int1 = f_int1 + @max_row
561 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
562 AND @max_row_div2 + @max_row_div4;
563         
564 # check multiple-4 success:     1
565 DELETE FROM t1
566 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
567 AND @max_row_div2 + @max_row_div4 + @max_row;
568         
569 # check multiple-5 success:     1
570 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
571 INSERT INTO t1
572 SET f_int1 = @cur_value , f_int2 = @cur_value,
573 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
574 f_charbig = '#SINGLE#';
575         
576 # check single-1 success:       1
577 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
578 INSERT INTO t1
579 SET f_int1 = @cur_value , f_int2 = @cur_value,
580 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
581 f_charbig = '#SINGLE#';
582         
583 # check single-2 success:       1
584 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
585 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
586 UPDATE t1 SET f_int1 = @cur_value2
587 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
588         
589 # check single-3 success:       1
590 SET @cur_value1= -1;
591 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
592 UPDATE t1 SET f_int1 = @cur_value1
593 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
594         
595 # check single-4 success:       1
596 SELECT MAX(f_int1) INTO @cur_value FROM t1;
597 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
598         
599 # check single-5 success:       1
600 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
601         
602 # check single-6 success:       1
603 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
604 Warnings:
605 Warning 1264    Out of range value for column 'f_int2' at row 1
606         
607 # check single-7 success:       1
608 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
609 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
610 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
611 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
612 f_charbig = '#NULL#';
613 INSERT INTO t1
614 SET f_int1 = NULL , f_int2 = -@max_row,
615 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
616 f_charbig = '#NULL#';
617 # check null success:    1
618         
619 # check null-1 success:         1
620 UPDATE t1 SET f_int1 = -@max_row
621 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
622 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
623         
624 # check null-2 success:         1
625 UPDATE t1 SET f_int1 = NULL
626 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
627 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
628         
629 # check null-3 success:         1
630 DELETE FROM t1
631 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
632 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
633         
634 # check null-4 success:         1
635 DELETE FROM t1
636 WHERE f_int1 = 0 AND f_int2 = 0
637 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
638 AND f_charbig = '#NULL#';
639 SET AUTOCOMMIT= 0;
640 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
641 SELECT f_int1, f_int1, '', '', 'was inserted'
642 FROM t0_template source_tab
643 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
644         
645 # check transactions-1 success:         1
646 COMMIT WORK;
647         
648 # check transactions-2 success:         1
649 ROLLBACK WORK;
650         
651 # check transactions-3 success:         1
652 DELETE FROM t1 WHERE f_charbig = 'was inserted';
653 COMMIT WORK;
654 ROLLBACK WORK;
655         
656 # check transactions-4 success:         1
657 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
658 SELECT f_int1, f_int1, '', '', 'was inserted'
659 FROM t0_template source_tab
660 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
661         
662 # check transactions-5 success:         1
663 ROLLBACK WORK;
664         
665 # check transactions-6 success:         1
666 # INFO: Storage engine used for t1 seems to be transactional.
667 COMMIT;
668         
669 # check transactions-7 success:         1
670 DELETE FROM t1 WHERE f_charbig = 'was inserted';
671 COMMIT WORK;
672 SET @@session.sql_mode = 'traditional';
673 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
674 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
675 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
676 '', '', 'was inserted' FROM t0_template
677 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
678 ERROR 22012: Division by 0
679 COMMIT;
680         
681 # check transactions-8 success:         1
682 # INFO: Storage engine used for t1 seems to be able to revert
683 #       changes made by the failing statement.
684 SET @@session.sql_mode = '';
685 SET AUTOCOMMIT= 1;
686 DELETE FROM t1 WHERE f_charbig = 'was inserted';
687 COMMIT WORK;
688 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
689         
690 # check special-1 success:      1
691 UPDATE t1 SET f_charbig = '';
692         
693 # check special-2 success:      1
694 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
695 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
696 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
697 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
698 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
699 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
700 'just inserted' FROM t0_template
701 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
702 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
703 BEGIN
704 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
705 f_charbig = 'updated by trigger'
706       WHERE f_int1 = new.f_int1;
707 END|
708 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
709 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
710 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
711         
712 # check trigger-1 success:      1
713 DROP TRIGGER trg_1;
714 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
715 f_int2 = CAST(f_char1 AS SIGNED INT),
716 f_charbig = 'just inserted'
717    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
718 DELETE FROM t0_aux
719 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
720 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
721 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
722 'just inserted' FROM t0_template
723 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
724 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
725 BEGIN
726 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
727 f_charbig = 'updated by trigger'
728       WHERE f_int1 = new.f_int1;
729 END|
730 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
731 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
732 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
733         
734 # check trigger-2 success:      1
735 DROP TRIGGER trg_1;
736 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
737 f_int2 = CAST(f_char1 AS SIGNED INT),
738 f_charbig = 'just inserted'
739    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
740 DELETE FROM t0_aux
741 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
742 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
743 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
744 'just inserted' FROM t0_template
745 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
746 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
747 BEGIN
748 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
749 f_charbig = 'updated by trigger'
750       WHERE f_int1 = new.f_int1;
751 END|
752 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
753 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
754         
755 # check trigger-3 success:      1
756 DROP TRIGGER trg_1;
757 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
758 f_int2 = CAST(f_char1 AS SIGNED INT),
759 f_charbig = 'just inserted'
760    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
761 DELETE FROM t0_aux
762 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
763 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
764 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
765 'just inserted' FROM t0_template
766 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
767 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
768 BEGIN
769 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
770 f_charbig = 'updated by trigger'
771       WHERE f_int1 = - old.f_int1;
772 END|
773 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
774 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
775         
776 # check trigger-4 success:      1
777 DROP TRIGGER trg_1;
778 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
779 f_int2 = CAST(f_char1 AS SIGNED INT),
780 f_charbig = 'just inserted'
781    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
782 DELETE FROM t0_aux
783 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
784 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
785 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
786 'just inserted' FROM t0_template
787 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
788 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
789 BEGIN
790 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
791 f_charbig = 'updated by trigger'
792       WHERE f_int1 = new.f_int1;
793 END|
794 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
795 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
796         
797 # check trigger-5 success:      1
798 DROP TRIGGER trg_1;
799 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
800 f_int2 = CAST(f_char1 AS SIGNED INT),
801 f_charbig = 'just inserted'
802    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
803 DELETE FROM t0_aux
804 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
805 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
806 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
807 'just inserted' FROM t0_template
808 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
809 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
810 BEGIN
811 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
812 f_charbig = 'updated by trigger'
813       WHERE f_int1 = - old.f_int1;
814 END|
815 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
816 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
817         
818 # check trigger-6 success:      1
819 DROP TRIGGER trg_1;
820 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
821 f_int2 = CAST(f_char1 AS SIGNED INT),
822 f_charbig = 'just inserted'
823    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
824 DELETE FROM t0_aux
825 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
826 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
827 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
828 'just inserted' FROM t0_template
829 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
830 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
831 BEGIN
832 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
833 f_charbig = 'updated by trigger'
834       WHERE f_int1 = - old.f_int1;
835 END|
836 DELETE FROM t0_aux
837 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
838         
839 # check trigger-7 success:      1
840 DROP TRIGGER trg_1;
841 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
842 f_int2 = CAST(f_char1 AS SIGNED INT),
843 f_charbig = 'just inserted'
844    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
845 DELETE FROM t0_aux
846 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
847 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
848 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
849 'just inserted' FROM t0_template
850 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
851 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
852 BEGIN
853 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
854 f_charbig = 'updated by trigger'
855       WHERE f_int1 = - old.f_int1;
856 END|
857 DELETE FROM t0_aux
858 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
859         
860 # check trigger-8 success:      1
861 DROP TRIGGER trg_1;
862 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
863 f_int2 = CAST(f_char1 AS SIGNED INT),
864 f_charbig = 'just inserted'
865    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
866 DELETE FROM t0_aux
867 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
868 DELETE FROM t1
869 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
870 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
871 BEGIN
872 SET new.f_int1 = old.f_int1 + @max_row,
873 new.f_int2 = old.f_int2 - @max_row,
874 new.f_charbig = '####updated per update trigger####';
875 END|
876 UPDATE t1
877 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
878 f_charbig = '####updated per update statement itself####';
879         
880 # check trigger-9 success:      1
881 DROP TRIGGER trg_2;
882 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
883 f_int2 = CAST(f_char1 AS SIGNED INT),
884 f_charbig = CONCAT('===',f_char1,'===');
885 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
886 BEGIN
887 SET new.f_int1 = new.f_int1 + @max_row,
888 new.f_int2 = new.f_int2 - @max_row,
889 new.f_charbig = '####updated per update trigger####';
890 END|
891 UPDATE t1
892 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
893 f_charbig = '####updated per update statement itself####';
894         
895 # check trigger-10 success:     1
896 DROP TRIGGER trg_2;
897 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
898 f_int2 = CAST(f_char1 AS SIGNED INT),
899 f_charbig = CONCAT('===',f_char1,'===');
900 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
901 BEGIN
902 SET new.f_int1 = @my_max1 + @counter,
903 new.f_int2 = @my_min2 - @counter,
904 new.f_charbig = '####updated per insert trigger####';
905 SET @counter = @counter + 1;
906 END|
907 SET @counter = 1;
908 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
909 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
910 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
911 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
912 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
913 ORDER BY f_int1;
914 DROP TRIGGER trg_3;
915         
916 # check trigger-11 success:     1
917 DELETE FROM t1
918 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
919 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
920 AND f_charbig = '####updated per insert trigger####';
921 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
922 BEGIN
923 SET new.f_int1 = @my_max1 + @counter,
924 new.f_int2 = @my_min2 - @counter,
925 new.f_charbig = '####updated per insert trigger####';
926 SET @counter = @counter + 1;
927 END|
928 SET @counter = 1;
929 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
930 INSERT INTO t1 (f_char1, f_char2, f_charbig)
931 SELECT CAST(f_int1 AS CHAR),
932 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
933 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
934 ORDER BY f_int1;
935 DROP TRIGGER trg_3;
936         
937 # check trigger-12 success:     1
938 DELETE FROM t1
939 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
940 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
941 AND f_charbig = '####updated per insert trigger####';
942 ANALYZE  TABLE t1;
943 Table   Op      Msg_type        Msg_text
944 test.t1 analyze status  OK
945 CHECK    TABLE t1 EXTENDED;
946 Table   Op      Msg_type        Msg_text
947 test.t1 check   status  OK
948 CHECKSUM TABLE t1 EXTENDED;
949 Table   Checksum
950 test.t1 <some_value>
951 OPTIMIZE TABLE t1;
952 Table   Op      Msg_type        Msg_text
953 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
954 test.t1 optimize        status  OK
955 # check layout success:    1
956 REPAIR   TABLE t1 EXTENDED;
957 Table   Op      Msg_type        Msg_text
958 test.t1 repair  note    The storage engine for the table doesn't support repair
959 # check layout success:    1
960 TRUNCATE t1;
961         
962 # check TRUNCATE success:       1
963 # check layout success:    1
964 # End usability test (inc/partition_check.inc)
965 DROP TABLE t1;
966 CREATE TABLE t1 (
967 f_int1 INTEGER,
968 f_int2 INTEGER,
969 f_char1 CHAR(20),
970 f_char2 CHAR(20),
971 f_charbig VARCHAR(1000)
974 PARTITION BY LIST(MOD(f_int1,4))
975 (PARTITION part_3 VALUES IN (-3),
976 PARTITION part_2 VALUES IN (-2),
977 PARTITION part_1 VALUES IN (-1),
978 PARTITION part_N VALUES IN (NULL),
979 PARTITION part0 VALUES IN (0),
980 PARTITION part1 VALUES IN (1),
981 PARTITION part2 VALUES IN (2),
982 PARTITION part3 VALUES IN (3));
983 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
984 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
985 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
986 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
987 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
988 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
989 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
990 # Start usability test (inc/partition_check.inc)
991 create_command
992 SHOW CREATE TABLE t1;
993 Table   Create Table
994 t1      CREATE TABLE `t1` (
995   `f_int1` int(11) DEFAULT NULL,
996   `f_int2` mediumint(9) DEFAULT NULL,
997   `f_char1` char(20) DEFAULT NULL,
998   `f_char2` char(20) DEFAULT NULL,
999   `f_charbig` varchar(1000) DEFAULT NULL
1000 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1001 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
1002 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
1003  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
1004  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
1005  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
1006  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
1007  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
1008  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
1009  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
1011 # check prerequisites-1 success:    1
1012 # check COUNT(*) success:    1
1013 # check MIN/MAX(f_int1) success:    1
1014 # check MIN/MAX(f_int2) success:    1
1015 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1016 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1017 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1018 WHERE f_int1 IN (2,3);
1019 # check prerequisites-3 success:    1
1020 DELETE FROM t1 WHERE f_charbig = 'delete me';
1021 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1022 # check read via f_int1 success: 1
1023 # check read via f_int2 success: 1
1024         
1025 # check multiple-1 success:     1
1026 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1027         
1028 # check multiple-2 success:     1
1029 INSERT INTO t1 SELECT * FROM t0_template
1030 WHERE MOD(f_int1,3) = 0;
1031         
1032 # check multiple-3 success:     1
1033 UPDATE t1 SET f_int1 = f_int1 + @max_row
1034 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1035 AND @max_row_div2 + @max_row_div4;
1036         
1037 # check multiple-4 success:     1
1038 DELETE FROM t1
1039 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1040 AND @max_row_div2 + @max_row_div4 + @max_row;
1041         
1042 # check multiple-5 success:     1
1043 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1044 INSERT INTO t1
1045 SET f_int1 = @cur_value , f_int2 = @cur_value,
1046 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1047 f_charbig = '#SINGLE#';
1048         
1049 # check single-1 success:       1
1050 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1051 INSERT INTO t1
1052 SET f_int1 = @cur_value , f_int2 = @cur_value,
1053 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1054 f_charbig = '#SINGLE#';
1055         
1056 # check single-2 success:       1
1057 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1058 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1059 UPDATE t1 SET f_int1 = @cur_value2
1060 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1061         
1062 # check single-3 success:       1
1063 SET @cur_value1= -1;
1064 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1065 UPDATE t1 SET f_int1 = @cur_value1
1066 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1067         
1068 # check single-4 success:       1
1069 SELECT MAX(f_int1) INTO @cur_value FROM t1;
1070 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1071         
1072 # check single-5 success:       1
1073 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1074         
1075 # check single-6 success:       1
1076 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1077 Warnings:
1078 Warning 1264    Out of range value for column 'f_int2' at row 1
1079         
1080 # check single-7 success:       1
1081 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1082 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1083 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1084 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1085 f_charbig = '#NULL#';
1086 INSERT INTO t1
1087 SET f_int1 = NULL , f_int2 = -@max_row,
1088 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1089 f_charbig = '#NULL#';
1090 # check null success:    1
1091         
1092 # check null-1 success:         1
1093 UPDATE t1 SET f_int1 = -@max_row
1094 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1095 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1096         
1097 # check null-2 success:         1
1098 UPDATE t1 SET f_int1 = NULL
1099 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1100 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1101         
1102 # check null-3 success:         1
1103 DELETE FROM t1
1104 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1105 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1106         
1107 # check null-4 success:         1
1108 DELETE FROM t1
1109 WHERE f_int1 = 0 AND f_int2 = 0
1110 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1111 AND f_charbig = '#NULL#';
1112 SET AUTOCOMMIT= 0;
1113 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1114 SELECT f_int1, f_int1, '', '', 'was inserted'
1115 FROM t0_template source_tab
1116 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1117         
1118 # check transactions-1 success:         1
1119 COMMIT WORK;
1120         
1121 # check transactions-2 success:         1
1122 ROLLBACK WORK;
1123         
1124 # check transactions-3 success:         1
1125 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1126 COMMIT WORK;
1127 ROLLBACK WORK;
1128         
1129 # check transactions-4 success:         1
1130 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1131 SELECT f_int1, f_int1, '', '', 'was inserted'
1132 FROM t0_template source_tab
1133 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1134         
1135 # check transactions-5 success:         1
1136 ROLLBACK WORK;
1137         
1138 # check transactions-6 success:         1
1139 # INFO: Storage engine used for t1 seems to be transactional.
1140 COMMIT;
1141         
1142 # check transactions-7 success:         1
1143 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1144 COMMIT WORK;
1145 SET @@session.sql_mode = 'traditional';
1146 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1147 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1148 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1149 '', '', 'was inserted' FROM t0_template
1150 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1151 ERROR 22012: Division by 0
1152 COMMIT;
1153         
1154 # check transactions-8 success:         1
1155 # INFO: Storage engine used for t1 seems to be able to revert
1156 #       changes made by the failing statement.
1157 SET @@session.sql_mode = '';
1158 SET AUTOCOMMIT= 1;
1159 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1160 COMMIT WORK;
1161 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1162         
1163 # check special-1 success:      1
1164 UPDATE t1 SET f_charbig = '';
1165         
1166 # check special-2 success:      1
1167 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1168 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1169 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1170 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1171 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1172 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1173 'just inserted' FROM t0_template
1174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1175 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1176 BEGIN
1177 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1178 f_charbig = 'updated by trigger'
1179       WHERE f_int1 = new.f_int1;
1180 END|
1181 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1182 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1183 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1184         
1185 # check trigger-1 success:      1
1186 DROP TRIGGER trg_1;
1187 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1188 f_int2 = CAST(f_char1 AS SIGNED INT),
1189 f_charbig = 'just inserted'
1190    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1191 DELETE FROM t0_aux
1192 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1193 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1194 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1195 'just inserted' FROM t0_template
1196 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1197 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1198 BEGIN
1199 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1200 f_charbig = 'updated by trigger'
1201       WHERE f_int1 = new.f_int1;
1202 END|
1203 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1204 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1205 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1206         
1207 # check trigger-2 success:      1
1208 DROP TRIGGER trg_1;
1209 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1210 f_int2 = CAST(f_char1 AS SIGNED INT),
1211 f_charbig = 'just inserted'
1212    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1213 DELETE FROM t0_aux
1214 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1215 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1216 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1217 'just inserted' FROM t0_template
1218 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1219 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1220 BEGIN
1221 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1222 f_charbig = 'updated by trigger'
1223       WHERE f_int1 = new.f_int1;
1224 END|
1225 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1226 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1227         
1228 # check trigger-3 success:      1
1229 DROP TRIGGER trg_1;
1230 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1231 f_int2 = CAST(f_char1 AS SIGNED INT),
1232 f_charbig = 'just inserted'
1233    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1234 DELETE FROM t0_aux
1235 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1236 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1237 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1238 'just inserted' FROM t0_template
1239 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1240 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1241 BEGIN
1242 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1243 f_charbig = 'updated by trigger'
1244       WHERE f_int1 = - old.f_int1;
1245 END|
1246 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1247 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1248         
1249 # check trigger-4 success:      1
1250 DROP TRIGGER trg_1;
1251 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1252 f_int2 = CAST(f_char1 AS SIGNED INT),
1253 f_charbig = 'just inserted'
1254    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1255 DELETE FROM t0_aux
1256 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1257 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1258 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1259 'just inserted' FROM t0_template
1260 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1261 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1262 BEGIN
1263 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1264 f_charbig = 'updated by trigger'
1265       WHERE f_int1 = new.f_int1;
1266 END|
1267 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1268 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1269         
1270 # check trigger-5 success:      1
1271 DROP TRIGGER trg_1;
1272 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1273 f_int2 = CAST(f_char1 AS SIGNED INT),
1274 f_charbig = 'just inserted'
1275    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1276 DELETE FROM t0_aux
1277 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1278 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1279 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1280 'just inserted' FROM t0_template
1281 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1282 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1283 BEGIN
1284 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1285 f_charbig = 'updated by trigger'
1286       WHERE f_int1 = - old.f_int1;
1287 END|
1288 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1289 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1290         
1291 # check trigger-6 success:      1
1292 DROP TRIGGER trg_1;
1293 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1294 f_int2 = CAST(f_char1 AS SIGNED INT),
1295 f_charbig = 'just inserted'
1296    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1297 DELETE FROM t0_aux
1298 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1299 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1300 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1301 'just inserted' FROM t0_template
1302 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1303 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1304 BEGIN
1305 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1306 f_charbig = 'updated by trigger'
1307       WHERE f_int1 = - old.f_int1;
1308 END|
1309 DELETE FROM t0_aux
1310 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1311         
1312 # check trigger-7 success:      1
1313 DROP TRIGGER trg_1;
1314 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1315 f_int2 = CAST(f_char1 AS SIGNED INT),
1316 f_charbig = 'just inserted'
1317    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1318 DELETE FROM t0_aux
1319 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1320 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1321 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1322 'just inserted' FROM t0_template
1323 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1324 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1325 BEGIN
1326 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1327 f_charbig = 'updated by trigger'
1328       WHERE f_int1 = - old.f_int1;
1329 END|
1330 DELETE FROM t0_aux
1331 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1332         
1333 # check trigger-8 success:      1
1334 DROP TRIGGER trg_1;
1335 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1336 f_int2 = CAST(f_char1 AS SIGNED INT),
1337 f_charbig = 'just inserted'
1338    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1339 DELETE FROM t0_aux
1340 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1341 DELETE FROM t1
1342 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1343 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1344 BEGIN
1345 SET new.f_int1 = old.f_int1 + @max_row,
1346 new.f_int2 = old.f_int2 - @max_row,
1347 new.f_charbig = '####updated per update trigger####';
1348 END|
1349 UPDATE t1
1350 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1351 f_charbig = '####updated per update statement itself####';
1352         
1353 # check trigger-9 success:      1
1354 DROP TRIGGER trg_2;
1355 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1356 f_int2 = CAST(f_char1 AS SIGNED INT),
1357 f_charbig = CONCAT('===',f_char1,'===');
1358 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1359 BEGIN
1360 SET new.f_int1 = new.f_int1 + @max_row,
1361 new.f_int2 = new.f_int2 - @max_row,
1362 new.f_charbig = '####updated per update trigger####';
1363 END|
1364 UPDATE t1
1365 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1366 f_charbig = '####updated per update statement itself####';
1367         
1368 # check trigger-10 success:     1
1369 DROP TRIGGER trg_2;
1370 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1371 f_int2 = CAST(f_char1 AS SIGNED INT),
1372 f_charbig = CONCAT('===',f_char1,'===');
1373 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1374 BEGIN
1375 SET new.f_int1 = @my_max1 + @counter,
1376 new.f_int2 = @my_min2 - @counter,
1377 new.f_charbig = '####updated per insert trigger####';
1378 SET @counter = @counter + 1;
1379 END|
1380 SET @counter = 1;
1381 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1382 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1383 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1384 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1385 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1386 ORDER BY f_int1;
1387 DROP TRIGGER trg_3;
1388         
1389 # check trigger-11 success:     1
1390 DELETE FROM t1
1391 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1392 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1393 AND f_charbig = '####updated per insert trigger####';
1394 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1395 BEGIN
1396 SET new.f_int1 = @my_max1 + @counter,
1397 new.f_int2 = @my_min2 - @counter,
1398 new.f_charbig = '####updated per insert trigger####';
1399 SET @counter = @counter + 1;
1400 END|
1401 SET @counter = 1;
1402 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1403 INSERT INTO t1 (f_char1, f_char2, f_charbig)
1404 SELECT CAST(f_int1 AS CHAR),
1405 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1406 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1407 ORDER BY f_int1;
1408 DROP TRIGGER trg_3;
1409         
1410 # check trigger-12 success:     1
1411 DELETE FROM t1
1412 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1413 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1414 AND f_charbig = '####updated per insert trigger####';
1415 ANALYZE  TABLE t1;
1416 Table   Op      Msg_type        Msg_text
1417 test.t1 analyze status  OK
1418 CHECK    TABLE t1 EXTENDED;
1419 Table   Op      Msg_type        Msg_text
1420 test.t1 check   status  OK
1421 CHECKSUM TABLE t1 EXTENDED;
1422 Table   Checksum
1423 test.t1 <some_value>
1424 OPTIMIZE TABLE t1;
1425 Table   Op      Msg_type        Msg_text
1426 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
1427 test.t1 optimize        status  OK
1428 # check layout success:    1
1429 REPAIR   TABLE t1 EXTENDED;
1430 Table   Op      Msg_type        Msg_text
1431 test.t1 repair  note    The storage engine for the table doesn't support repair
1432 # check layout success:    1
1433 TRUNCATE t1;
1434         
1435 # check TRUNCATE success:       1
1436 # check layout success:    1
1437 # End usability test (inc/partition_check.inc)
1438 DROP TABLE t1;
1439 CREATE TABLE t1 (
1440 f_int1 INTEGER,
1441 f_int2 INTEGER,
1442 f_char1 CHAR(20),
1443 f_char2 CHAR(20),
1444 f_charbig VARCHAR(1000)
1447 PARTITION BY RANGE(f_int1)
1448 (PARTITION parta VALUES LESS THAN (0),
1449 PARTITION partb VALUES LESS THAN (5),
1450 PARTITION partc VALUES LESS THAN (10),
1451 PARTITION partd VALUES LESS THAN (10 + 5),
1452 PARTITION parte VALUES LESS THAN (20),
1453 PARTITION partf VALUES LESS THAN (2147483646));
1454 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1455 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1456 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1457 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
1458 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1459 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1460 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1461 # Start usability test (inc/partition_check.inc)
1462 create_command
1463 SHOW CREATE TABLE t1;
1464 Table   Create Table
1465 t1      CREATE TABLE `t1` (
1466   `f_int1` int(11) DEFAULT NULL,
1467   `f_int2` mediumint(9) DEFAULT NULL,
1468   `f_char1` char(20) DEFAULT NULL,
1469   `f_char2` char(20) DEFAULT NULL,
1470   `f_charbig` varchar(1000) DEFAULT NULL
1471 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1472 /*!50100 PARTITION BY RANGE (f_int1)
1473 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1474  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1475  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1476  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
1477  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
1478  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1480 # check prerequisites-1 success:    1
1481 # check COUNT(*) success:    1
1482 # check MIN/MAX(f_int1) success:    1
1483 # check MIN/MAX(f_int2) success:    1
1484 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1485 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1486 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1487 WHERE f_int1 IN (2,3);
1488 # check prerequisites-3 success:    1
1489 DELETE FROM t1 WHERE f_charbig = 'delete me';
1490 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1491 # check read via f_int1 success: 1
1492 # check read via f_int2 success: 1
1493         
1494 # check multiple-1 success:     1
1495 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1496         
1497 # check multiple-2 success:     1
1498 INSERT INTO t1 SELECT * FROM t0_template
1499 WHERE MOD(f_int1,3) = 0;
1500         
1501 # check multiple-3 success:     1
1502 UPDATE t1 SET f_int1 = f_int1 + @max_row
1503 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1504 AND @max_row_div2 + @max_row_div4;
1505         
1506 # check multiple-4 success:     1
1507 DELETE FROM t1
1508 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1509 AND @max_row_div2 + @max_row_div4 + @max_row;
1510         
1511 # check multiple-5 success:     1
1512 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1513 INSERT INTO t1
1514 SET f_int1 = @cur_value , f_int2 = @cur_value,
1515 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1516 f_charbig = '#SINGLE#';
1517         
1518 # check single-1 success:       1
1519 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1520 INSERT INTO t1
1521 SET f_int1 = @cur_value , f_int2 = @cur_value,
1522 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1523 f_charbig = '#SINGLE#';
1524         
1525 # check single-2 success:       1
1526 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1527 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1528 UPDATE t1 SET f_int1 = @cur_value2
1529 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1530         
1531 # check single-3 success:       1
1532 SET @cur_value1= -1;
1533 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1534 UPDATE t1 SET f_int1 = @cur_value1
1535 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1536         
1537 # check single-4 success:       1
1538 SELECT MAX(f_int1) INTO @cur_value FROM t1;
1539 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1540         
1541 # check single-5 success:       1
1542 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1543         
1544 # check single-6 success:       1
1545 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1546 ERROR HY000: Table has no partition for value 2147483647
1547 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1548 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1549 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1550 f_charbig = '#NULL#';
1551 INSERT INTO t1
1552 SET f_int1 = NULL , f_int2 = -@max_row,
1553 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1554 f_charbig = '#NULL#';
1555 # check null success:    1
1556         
1557 # check null-1 success:         1
1558 UPDATE t1 SET f_int1 = -@max_row
1559 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1560 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1561         
1562 # check null-2 success:         1
1563 UPDATE t1 SET f_int1 = NULL
1564 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1565 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1566         
1567 # check null-3 success:         1
1568 DELETE FROM t1
1569 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1570 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1571         
1572 # check null-4 success:         1
1573 DELETE FROM t1
1574 WHERE f_int1 = 0 AND f_int2 = 0
1575 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1576 AND f_charbig = '#NULL#';
1577 SET AUTOCOMMIT= 0;
1578 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1579 SELECT f_int1, f_int1, '', '', 'was inserted'
1580 FROM t0_template source_tab
1581 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1582         
1583 # check transactions-1 success:         1
1584 COMMIT WORK;
1585         
1586 # check transactions-2 success:         1
1587 ROLLBACK WORK;
1588         
1589 # check transactions-3 success:         1
1590 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1591 COMMIT WORK;
1592 ROLLBACK WORK;
1593         
1594 # check transactions-4 success:         1
1595 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1596 SELECT f_int1, f_int1, '', '', 'was inserted'
1597 FROM t0_template source_tab
1598 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1599         
1600 # check transactions-5 success:         1
1601 ROLLBACK WORK;
1602         
1603 # check transactions-6 success:         1
1604 # INFO: Storage engine used for t1 seems to be transactional.
1605 COMMIT;
1606         
1607 # check transactions-7 success:         1
1608 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1609 COMMIT WORK;
1610 SET @@session.sql_mode = 'traditional';
1611 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1612 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1613 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1614 '', '', 'was inserted' FROM t0_template
1615 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1616 ERROR 22012: Division by 0
1617 COMMIT;
1618         
1619 # check transactions-8 success:         1
1620 # INFO: Storage engine used for t1 seems to be able to revert
1621 #       changes made by the failing statement.
1622 SET @@session.sql_mode = '';
1623 SET AUTOCOMMIT= 1;
1624 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1625 COMMIT WORK;
1626 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1627         
1628 # check special-1 success:      1
1629 UPDATE t1 SET f_charbig = '';
1630         
1631 # check special-2 success:      1
1632 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1633 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1634 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1635 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1636 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1637 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1638 'just inserted' FROM t0_template
1639 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1640 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1641 BEGIN
1642 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1643 f_charbig = 'updated by trigger'
1644       WHERE f_int1 = new.f_int1;
1645 END|
1646 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1647 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1648 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1649         
1650 # check trigger-1 success:      1
1651 DROP TRIGGER trg_1;
1652 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1653 f_int2 = CAST(f_char1 AS SIGNED INT),
1654 f_charbig = 'just inserted'
1655    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1656 DELETE FROM t0_aux
1657 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1658 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1659 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1660 'just inserted' FROM t0_template
1661 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1662 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1663 BEGIN
1664 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1665 f_charbig = 'updated by trigger'
1666       WHERE f_int1 = new.f_int1;
1667 END|
1668 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1669 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1670 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1671         
1672 # check trigger-2 success:      1
1673 DROP TRIGGER trg_1;
1674 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1675 f_int2 = CAST(f_char1 AS SIGNED INT),
1676 f_charbig = 'just inserted'
1677    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1678 DELETE FROM t0_aux
1679 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1680 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1681 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1682 'just inserted' FROM t0_template
1683 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1684 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1685 BEGIN
1686 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1687 f_charbig = 'updated by trigger'
1688       WHERE f_int1 = new.f_int1;
1689 END|
1690 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1691 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1692         
1693 # check trigger-3 success:      1
1694 DROP TRIGGER trg_1;
1695 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1696 f_int2 = CAST(f_char1 AS SIGNED INT),
1697 f_charbig = 'just inserted'
1698    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1699 DELETE FROM t0_aux
1700 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1701 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1702 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1703 'just inserted' FROM t0_template
1704 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1705 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1706 BEGIN
1707 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1708 f_charbig = 'updated by trigger'
1709       WHERE f_int1 = - old.f_int1;
1710 END|
1711 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1712 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1713         
1714 # check trigger-4 success:      1
1715 DROP TRIGGER trg_1;
1716 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1717 f_int2 = CAST(f_char1 AS SIGNED INT),
1718 f_charbig = 'just inserted'
1719    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1720 DELETE FROM t0_aux
1721 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1722 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1723 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1724 'just inserted' FROM t0_template
1725 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1726 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1727 BEGIN
1728 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1729 f_charbig = 'updated by trigger'
1730       WHERE f_int1 = new.f_int1;
1731 END|
1732 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1733 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1734         
1735 # check trigger-5 success:      1
1736 DROP TRIGGER trg_1;
1737 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1738 f_int2 = CAST(f_char1 AS SIGNED INT),
1739 f_charbig = 'just inserted'
1740    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1741 DELETE FROM t0_aux
1742 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1743 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1744 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1745 'just inserted' FROM t0_template
1746 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1747 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1748 BEGIN
1749 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1750 f_charbig = 'updated by trigger'
1751       WHERE f_int1 = - old.f_int1;
1752 END|
1753 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1754 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1755         
1756 # check trigger-6 success:      1
1757 DROP TRIGGER trg_1;
1758 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1759 f_int2 = CAST(f_char1 AS SIGNED INT),
1760 f_charbig = 'just inserted'
1761    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1762 DELETE FROM t0_aux
1763 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1764 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1765 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1766 'just inserted' FROM t0_template
1767 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1768 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1769 BEGIN
1770 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1771 f_charbig = 'updated by trigger'
1772       WHERE f_int1 = - old.f_int1;
1773 END|
1774 DELETE FROM t0_aux
1775 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1776         
1777 # check trigger-7 success:      1
1778 DROP TRIGGER trg_1;
1779 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1780 f_int2 = CAST(f_char1 AS SIGNED INT),
1781 f_charbig = 'just inserted'
1782    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1783 DELETE FROM t0_aux
1784 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1785 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1786 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1787 'just inserted' FROM t0_template
1788 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1789 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1790 BEGIN
1791 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1792 f_charbig = 'updated by trigger'
1793       WHERE f_int1 = - old.f_int1;
1794 END|
1795 DELETE FROM t0_aux
1796 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1797         
1798 # check trigger-8 success:      1
1799 DROP TRIGGER trg_1;
1800 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1801 f_int2 = CAST(f_char1 AS SIGNED INT),
1802 f_charbig = 'just inserted'
1803    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1804 DELETE FROM t0_aux
1805 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1806 DELETE FROM t1
1807 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1808 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1809 BEGIN
1810 SET new.f_int1 = old.f_int1 + @max_row,
1811 new.f_int2 = old.f_int2 - @max_row,
1812 new.f_charbig = '####updated per update trigger####';
1813 END|
1814 UPDATE t1
1815 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1816 f_charbig = '####updated per update statement itself####';
1817         
1818 # check trigger-9 success:      1
1819 DROP TRIGGER trg_2;
1820 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1821 f_int2 = CAST(f_char1 AS SIGNED INT),
1822 f_charbig = CONCAT('===',f_char1,'===');
1823 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1824 BEGIN
1825 SET new.f_int1 = new.f_int1 + @max_row,
1826 new.f_int2 = new.f_int2 - @max_row,
1827 new.f_charbig = '####updated per update trigger####';
1828 END|
1829 UPDATE t1
1830 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1831 f_charbig = '####updated per update statement itself####';
1832         
1833 # check trigger-10 success:     1
1834 DROP TRIGGER trg_2;
1835 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1836 f_int2 = CAST(f_char1 AS SIGNED INT),
1837 f_charbig = CONCAT('===',f_char1,'===');
1838 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1839 BEGIN
1840 SET new.f_int1 = @my_max1 + @counter,
1841 new.f_int2 = @my_min2 - @counter,
1842 new.f_charbig = '####updated per insert trigger####';
1843 SET @counter = @counter + 1;
1844 END|
1845 SET @counter = 1;
1846 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1847 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1848 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1849 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1850 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1851 ORDER BY f_int1;
1852 DROP TRIGGER trg_3;
1853         
1854 # check trigger-11 success:     1
1855 DELETE FROM t1
1856 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1857 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1858 AND f_charbig = '####updated per insert trigger####';
1859 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1860 BEGIN
1861 SET new.f_int1 = @my_max1 + @counter,
1862 new.f_int2 = @my_min2 - @counter,
1863 new.f_charbig = '####updated per insert trigger####';
1864 SET @counter = @counter + 1;
1865 END|
1866 SET @counter = 1;
1867 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1868 INSERT INTO t1 (f_char1, f_char2, f_charbig)
1869 SELECT CAST(f_int1 AS CHAR),
1870 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1871 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1872 ORDER BY f_int1;
1873 DROP TRIGGER trg_3;
1874         
1875 # check trigger-12 success:     1
1876 DELETE FROM t1
1877 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1878 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1879 AND f_charbig = '####updated per insert trigger####';
1880 ANALYZE  TABLE t1;
1881 Table   Op      Msg_type        Msg_text
1882 test.t1 analyze status  OK
1883 CHECK    TABLE t1 EXTENDED;
1884 Table   Op      Msg_type        Msg_text
1885 test.t1 check   status  OK
1886 CHECKSUM TABLE t1 EXTENDED;
1887 Table   Checksum
1888 test.t1 <some_value>
1889 OPTIMIZE TABLE t1;
1890 Table   Op      Msg_type        Msg_text
1891 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
1892 test.t1 optimize        status  OK
1893 # check layout success:    1
1894 REPAIR   TABLE t1 EXTENDED;
1895 Table   Op      Msg_type        Msg_text
1896 test.t1 repair  note    The storage engine for the table doesn't support repair
1897 # check layout success:    1
1898 TRUNCATE t1;
1899         
1900 # check TRUNCATE success:       1
1901 # check layout success:    1
1902 # End usability test (inc/partition_check.inc)
1903 DROP TABLE t1;
1904 CREATE TABLE t1 (
1905 f_int1 INTEGER,
1906 f_int2 INTEGER,
1907 f_char1 CHAR(20),
1908 f_char2 CHAR(20),
1909 f_charbig VARCHAR(1000)
1912 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
1913 (PARTITION parta VALUES LESS THAN (0),
1914 PARTITION partb VALUES LESS THAN (5),
1915 PARTITION partc VALUES LESS THAN (10),
1916 PARTITION partd VALUES LESS THAN (2147483646));
1917 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1918 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1919 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1920 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
1921 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1922 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1923 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1924 # Start usability test (inc/partition_check.inc)
1925 create_command
1926 SHOW CREATE TABLE t1;
1927 Table   Create Table
1928 t1      CREATE TABLE `t1` (
1929   `f_int1` int(11) DEFAULT NULL,
1930   `f_int2` mediumint(9) DEFAULT NULL,
1931   `f_char1` char(20) DEFAULT NULL,
1932   `f_char2` char(20) DEFAULT NULL,
1933   `f_charbig` varchar(1000) DEFAULT NULL
1934 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1935 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
1936 SUBPARTITION BY HASH (f_int1)
1937 SUBPARTITIONS 2
1938 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1939  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1940  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1941  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1943 # check prerequisites-1 success:    1
1944 # check COUNT(*) success:    1
1945 # check MIN/MAX(f_int1) success:    1
1946 # check MIN/MAX(f_int2) success:    1
1947 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1948 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1949 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1950 WHERE f_int1 IN (2,3);
1951 # check prerequisites-3 success:    1
1952 DELETE FROM t1 WHERE f_charbig = 'delete me';
1953 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1954 # check read via f_int1 success: 1
1955 # check read via f_int2 success: 1
1956         
1957 # check multiple-1 success:     1
1958 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1959         
1960 # check multiple-2 success:     1
1961 INSERT INTO t1 SELECT * FROM t0_template
1962 WHERE MOD(f_int1,3) = 0;
1963         
1964 # check multiple-3 success:     1
1965 UPDATE t1 SET f_int1 = f_int1 + @max_row
1966 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1967 AND @max_row_div2 + @max_row_div4;
1968         
1969 # check multiple-4 success:     1
1970 DELETE FROM t1
1971 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1972 AND @max_row_div2 + @max_row_div4 + @max_row;
1973         
1974 # check multiple-5 success:     1
1975 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1976 INSERT INTO t1
1977 SET f_int1 = @cur_value , f_int2 = @cur_value,
1978 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1979 f_charbig = '#SINGLE#';
1980         
1981 # check single-1 success:       1
1982 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1983 INSERT INTO t1
1984 SET f_int1 = @cur_value , f_int2 = @cur_value,
1985 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1986 f_charbig = '#SINGLE#';
1987         
1988 # check single-2 success:       1
1989 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1990 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1991 UPDATE t1 SET f_int1 = @cur_value2
1992 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1993         
1994 # check single-3 success:       1
1995 SET @cur_value1= -1;
1996 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1997 UPDATE t1 SET f_int1 = @cur_value1
1998 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1999         
2000 # check single-4 success:       1
2001 SELECT MAX(f_int1) INTO @cur_value FROM t1;
2002 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2003         
2004 # check single-5 success:       1
2005 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2006         
2007 # check single-6 success:       1
2008 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2009 Warnings:
2010 Warning 1264    Out of range value for column 'f_int2' at row 1
2011         
2012 # check single-7 success:       1
2013 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2014 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2015 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2016 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2017 f_charbig = '#NULL#';
2018 INSERT INTO t1
2019 SET f_int1 = NULL , f_int2 = -@max_row,
2020 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2021 f_charbig = '#NULL#';
2022 # check null success:    1
2023         
2024 # check null-1 success:         1
2025 UPDATE t1 SET f_int1 = -@max_row
2026 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2027 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2028         
2029 # check null-2 success:         1
2030 UPDATE t1 SET f_int1 = NULL
2031 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2032 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2033         
2034 # check null-3 success:         1
2035 DELETE FROM t1
2036 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2037 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2038         
2039 # check null-4 success:         1
2040 DELETE FROM t1
2041 WHERE f_int1 = 0 AND f_int2 = 0
2042 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2043 AND f_charbig = '#NULL#';
2044 SET AUTOCOMMIT= 0;
2045 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2046 SELECT f_int1, f_int1, '', '', 'was inserted'
2047 FROM t0_template source_tab
2048 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2049         
2050 # check transactions-1 success:         1
2051 COMMIT WORK;
2052         
2053 # check transactions-2 success:         1
2054 ROLLBACK WORK;
2055         
2056 # check transactions-3 success:         1
2057 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2058 COMMIT WORK;
2059 ROLLBACK WORK;
2060         
2061 # check transactions-4 success:         1
2062 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2063 SELECT f_int1, f_int1, '', '', 'was inserted'
2064 FROM t0_template source_tab
2065 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2066         
2067 # check transactions-5 success:         1
2068 ROLLBACK WORK;
2069         
2070 # check transactions-6 success:         1
2071 # INFO: Storage engine used for t1 seems to be transactional.
2072 COMMIT;
2073         
2074 # check transactions-7 success:         1
2075 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2076 COMMIT WORK;
2077 SET @@session.sql_mode = 'traditional';
2078 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2079 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2080 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2081 '', '', 'was inserted' FROM t0_template
2082 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2083 ERROR 22012: Division by 0
2084 COMMIT;
2085         
2086 # check transactions-8 success:         1
2087 # INFO: Storage engine used for t1 seems to be able to revert
2088 #       changes made by the failing statement.
2089 SET @@session.sql_mode = '';
2090 SET AUTOCOMMIT= 1;
2091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2092 COMMIT WORK;
2093 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2094         
2095 # check special-1 success:      1
2096 UPDATE t1 SET f_charbig = '';
2097         
2098 # check special-2 success:      1
2099 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2100 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2101 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2102 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2103 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2104 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2105 'just inserted' FROM t0_template
2106 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2107 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2108 BEGIN
2109 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2110 f_charbig = 'updated by trigger'
2111       WHERE f_int1 = new.f_int1;
2112 END|
2113 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2114 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2115 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2116         
2117 # check trigger-1 success:      1
2118 DROP TRIGGER trg_1;
2119 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2120 f_int2 = CAST(f_char1 AS SIGNED INT),
2121 f_charbig = 'just inserted'
2122    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2123 DELETE FROM t0_aux
2124 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2125 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2126 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2127 'just inserted' FROM t0_template
2128 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2129 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2130 BEGIN
2131 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2132 f_charbig = 'updated by trigger'
2133       WHERE f_int1 = new.f_int1;
2134 END|
2135 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2136 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2137 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2138         
2139 # check trigger-2 success:      1
2140 DROP TRIGGER trg_1;
2141 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2142 f_int2 = CAST(f_char1 AS SIGNED INT),
2143 f_charbig = 'just inserted'
2144    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2145 DELETE FROM t0_aux
2146 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2147 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2148 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2149 'just inserted' FROM t0_template
2150 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2151 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2152 BEGIN
2153 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2154 f_charbig = 'updated by trigger'
2155       WHERE f_int1 = new.f_int1;
2156 END|
2157 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2158 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2159         
2160 # check trigger-3 success:      1
2161 DROP TRIGGER trg_1;
2162 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2163 f_int2 = CAST(f_char1 AS SIGNED INT),
2164 f_charbig = 'just inserted'
2165    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2166 DELETE FROM t0_aux
2167 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2168 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2169 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2170 'just inserted' FROM t0_template
2171 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2172 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2173 BEGIN
2174 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2175 f_charbig = 'updated by trigger'
2176       WHERE f_int1 = - old.f_int1;
2177 END|
2178 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2179 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2180         
2181 # check trigger-4 success:      1
2182 DROP TRIGGER trg_1;
2183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2184 f_int2 = CAST(f_char1 AS SIGNED INT),
2185 f_charbig = 'just inserted'
2186    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2187 DELETE FROM t0_aux
2188 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2189 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2190 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2191 'just inserted' FROM t0_template
2192 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2193 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2194 BEGIN
2195 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2196 f_charbig = 'updated by trigger'
2197       WHERE f_int1 = new.f_int1;
2198 END|
2199 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2200 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2201         
2202 # check trigger-5 success:      1
2203 DROP TRIGGER trg_1;
2204 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2205 f_int2 = CAST(f_char1 AS SIGNED INT),
2206 f_charbig = 'just inserted'
2207    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2208 DELETE FROM t0_aux
2209 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2210 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2211 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2212 'just inserted' FROM t0_template
2213 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2214 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2215 BEGIN
2216 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2217 f_charbig = 'updated by trigger'
2218       WHERE f_int1 = - old.f_int1;
2219 END|
2220 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2221 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2222         
2223 # check trigger-6 success:      1
2224 DROP TRIGGER trg_1;
2225 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2226 f_int2 = CAST(f_char1 AS SIGNED INT),
2227 f_charbig = 'just inserted'
2228    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2229 DELETE FROM t0_aux
2230 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2231 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2232 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2233 'just inserted' FROM t0_template
2234 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2235 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2236 BEGIN
2237 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2238 f_charbig = 'updated by trigger'
2239       WHERE f_int1 = - old.f_int1;
2240 END|
2241 DELETE FROM t0_aux
2242 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2243         
2244 # check trigger-7 success:      1
2245 DROP TRIGGER trg_1;
2246 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2247 f_int2 = CAST(f_char1 AS SIGNED INT),
2248 f_charbig = 'just inserted'
2249    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2250 DELETE FROM t0_aux
2251 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2252 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2253 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2254 'just inserted' FROM t0_template
2255 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2256 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2257 BEGIN
2258 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2259 f_charbig = 'updated by trigger'
2260       WHERE f_int1 = - old.f_int1;
2261 END|
2262 DELETE FROM t0_aux
2263 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2264         
2265 # check trigger-8 success:      1
2266 DROP TRIGGER trg_1;
2267 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2268 f_int2 = CAST(f_char1 AS SIGNED INT),
2269 f_charbig = 'just inserted'
2270    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2271 DELETE FROM t0_aux
2272 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2273 DELETE FROM t1
2274 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2275 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2276 BEGIN
2277 SET new.f_int1 = old.f_int1 + @max_row,
2278 new.f_int2 = old.f_int2 - @max_row,
2279 new.f_charbig = '####updated per update trigger####';
2280 END|
2281 UPDATE t1
2282 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2283 f_charbig = '####updated per update statement itself####';
2284         
2285 # check trigger-9 success:      1
2286 DROP TRIGGER trg_2;
2287 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2288 f_int2 = CAST(f_char1 AS SIGNED INT),
2289 f_charbig = CONCAT('===',f_char1,'===');
2290 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2291 BEGIN
2292 SET new.f_int1 = new.f_int1 + @max_row,
2293 new.f_int2 = new.f_int2 - @max_row,
2294 new.f_charbig = '####updated per update trigger####';
2295 END|
2296 UPDATE t1
2297 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2298 f_charbig = '####updated per update statement itself####';
2299         
2300 # check trigger-10 success:     1
2301 DROP TRIGGER trg_2;
2302 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2303 f_int2 = CAST(f_char1 AS SIGNED INT),
2304 f_charbig = CONCAT('===',f_char1,'===');
2305 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2306 BEGIN
2307 SET new.f_int1 = @my_max1 + @counter,
2308 new.f_int2 = @my_min2 - @counter,
2309 new.f_charbig = '####updated per insert trigger####';
2310 SET @counter = @counter + 1;
2311 END|
2312 SET @counter = 1;
2313 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2314 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2315 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2316 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2317 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2318 ORDER BY f_int1;
2319 DROP TRIGGER trg_3;
2320         
2321 # check trigger-11 success:     1
2322 DELETE FROM t1
2323 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2324 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2325 AND f_charbig = '####updated per insert trigger####';
2326 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2327 BEGIN
2328 SET new.f_int1 = @my_max1 + @counter,
2329 new.f_int2 = @my_min2 - @counter,
2330 new.f_charbig = '####updated per insert trigger####';
2331 SET @counter = @counter + 1;
2332 END|
2333 SET @counter = 1;
2334 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2335 INSERT INTO t1 (f_char1, f_char2, f_charbig)
2336 SELECT CAST(f_int1 AS CHAR),
2337 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2338 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2339 ORDER BY f_int1;
2340 DROP TRIGGER trg_3;
2341         
2342 # check trigger-12 success:     1
2343 DELETE FROM t1
2344 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2345 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2346 AND f_charbig = '####updated per insert trigger####';
2347 ANALYZE  TABLE t1;
2348 Table   Op      Msg_type        Msg_text
2349 test.t1 analyze status  OK
2350 CHECK    TABLE t1 EXTENDED;
2351 Table   Op      Msg_type        Msg_text
2352 test.t1 check   status  OK
2353 CHECKSUM TABLE t1 EXTENDED;
2354 Table   Checksum
2355 test.t1 <some_value>
2356 OPTIMIZE TABLE t1;
2357 Table   Op      Msg_type        Msg_text
2358 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
2359 test.t1 optimize        status  OK
2360 # check layout success:    1
2361 REPAIR   TABLE t1 EXTENDED;
2362 Table   Op      Msg_type        Msg_text
2363 test.t1 repair  note    The storage engine for the table doesn't support repair
2364 # check layout success:    1
2365 TRUNCATE t1;
2366         
2367 # check TRUNCATE success:       1
2368 # check layout success:    1
2369 # End usability test (inc/partition_check.inc)
2370 DROP TABLE t1;
2371 CREATE TABLE t1 (
2372 f_int1 INTEGER,
2373 f_int2 INTEGER,
2374 f_char1 CHAR(20),
2375 f_char2 CHAR(20),
2376 f_charbig VARCHAR(1000)
2379 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
2380 (PARTITION part1 VALUES LESS THAN (0)
2381 (SUBPARTITION subpart11, SUBPARTITION subpart12),
2382 PARTITION part2 VALUES LESS THAN (5)
2383 (SUBPARTITION subpart21, SUBPARTITION subpart22),
2384 PARTITION part3 VALUES LESS THAN (10)
2385 (SUBPARTITION subpart31, SUBPARTITION subpart32),
2386 PARTITION part4 VALUES LESS THAN (2147483646)
2387 (SUBPARTITION subpart41, SUBPARTITION subpart42));
2388 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2389 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2390 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2391 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
2392 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2393 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2394 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2395 # Start usability test (inc/partition_check.inc)
2396 create_command
2397 SHOW CREATE TABLE t1;
2398 Table   Create Table
2399 t1      CREATE TABLE `t1` (
2400   `f_int1` int(11) DEFAULT NULL,
2401   `f_int2` mediumint(9) DEFAULT NULL,
2402   `f_char1` char(20) DEFAULT NULL,
2403   `f_char2` char(20) DEFAULT NULL,
2404   `f_charbig` varchar(1000) DEFAULT NULL
2405 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
2406 /*!50100 PARTITION BY RANGE (f_int1)
2407 SUBPARTITION BY KEY (f_int1)
2408 (PARTITION part1 VALUES LESS THAN (0)
2409  (SUBPARTITION subpart11 ENGINE = InnoDB,
2410   SUBPARTITION subpart12 ENGINE = InnoDB),
2411  PARTITION part2 VALUES LESS THAN (5)
2412  (SUBPARTITION subpart21 ENGINE = InnoDB,
2413   SUBPARTITION subpart22 ENGINE = InnoDB),
2414  PARTITION part3 VALUES LESS THAN (10)
2415  (SUBPARTITION subpart31 ENGINE = InnoDB,
2416   SUBPARTITION subpart32 ENGINE = InnoDB),
2417  PARTITION part4 VALUES LESS THAN (2147483646)
2418  (SUBPARTITION subpart41 ENGINE = InnoDB,
2419   SUBPARTITION subpart42 ENGINE = InnoDB)) */
2421 # check prerequisites-1 success:    1
2422 # check COUNT(*) success:    1
2423 # check MIN/MAX(f_int1) success:    1
2424 # check MIN/MAX(f_int2) success:    1
2425 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2426 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2427 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2428 WHERE f_int1 IN (2,3);
2429 # check prerequisites-3 success:    1
2430 DELETE FROM t1 WHERE f_charbig = 'delete me';
2431 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2432 # check read via f_int1 success: 1
2433 # check read via f_int2 success: 1
2434         
2435 # check multiple-1 success:     1
2436 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2437         
2438 # check multiple-2 success:     1
2439 INSERT INTO t1 SELECT * FROM t0_template
2440 WHERE MOD(f_int1,3) = 0;
2441         
2442 # check multiple-3 success:     1
2443 UPDATE t1 SET f_int1 = f_int1 + @max_row
2444 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2445 AND @max_row_div2 + @max_row_div4;
2446         
2447 # check multiple-4 success:     1
2448 DELETE FROM t1
2449 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2450 AND @max_row_div2 + @max_row_div4 + @max_row;
2451         
2452 # check multiple-5 success:     1
2453 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2454 INSERT INTO t1
2455 SET f_int1 = @cur_value , f_int2 = @cur_value,
2456 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2457 f_charbig = '#SINGLE#';
2458         
2459 # check single-1 success:       1
2460 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2461 INSERT INTO t1
2462 SET f_int1 = @cur_value , f_int2 = @cur_value,
2463 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2464 f_charbig = '#SINGLE#';
2465         
2466 # check single-2 success:       1
2467 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2468 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2469 UPDATE t1 SET f_int1 = @cur_value2
2470 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2471         
2472 # check single-3 success:       1
2473 SET @cur_value1= -1;
2474 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2475 UPDATE t1 SET f_int1 = @cur_value1
2476 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2477         
2478 # check single-4 success:       1
2479 SELECT MAX(f_int1) INTO @cur_value FROM t1;
2480 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2481         
2482 # check single-5 success:       1
2483 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2484         
2485 # check single-6 success:       1
2486 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2487 ERROR HY000: Table has no partition for value 2147483647
2488 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2489 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2490 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2491 f_charbig = '#NULL#';
2492 INSERT INTO t1
2493 SET f_int1 = NULL , f_int2 = -@max_row,
2494 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2495 f_charbig = '#NULL#';
2496 # check null success:    1
2497         
2498 # check null-1 success:         1
2499 UPDATE t1 SET f_int1 = -@max_row
2500 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2501 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2502         
2503 # check null-2 success:         1
2504 UPDATE t1 SET f_int1 = NULL
2505 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2506 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2507         
2508 # check null-3 success:         1
2509 DELETE FROM t1
2510 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2511 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2512         
2513 # check null-4 success:         1
2514 DELETE FROM t1
2515 WHERE f_int1 = 0 AND f_int2 = 0
2516 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2517 AND f_charbig = '#NULL#';
2518 SET AUTOCOMMIT= 0;
2519 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2520 SELECT f_int1, f_int1, '', '', 'was inserted'
2521 FROM t0_template source_tab
2522 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2523         
2524 # check transactions-1 success:         1
2525 COMMIT WORK;
2526         
2527 # check transactions-2 success:         1
2528 ROLLBACK WORK;
2529         
2530 # check transactions-3 success:         1
2531 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2532 COMMIT WORK;
2533 ROLLBACK WORK;
2534         
2535 # check transactions-4 success:         1
2536 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2537 SELECT f_int1, f_int1, '', '', 'was inserted'
2538 FROM t0_template source_tab
2539 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2540         
2541 # check transactions-5 success:         1
2542 ROLLBACK WORK;
2543         
2544 # check transactions-6 success:         1
2545 # INFO: Storage engine used for t1 seems to be transactional.
2546 COMMIT;
2547         
2548 # check transactions-7 success:         1
2549 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2550 COMMIT WORK;
2551 SET @@session.sql_mode = 'traditional';
2552 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2553 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2554 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2555 '', '', 'was inserted' FROM t0_template
2556 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2557 ERROR 22012: Division by 0
2558 COMMIT;
2559         
2560 # check transactions-8 success:         1
2561 # INFO: Storage engine used for t1 seems to be able to revert
2562 #       changes made by the failing statement.
2563 SET @@session.sql_mode = '';
2564 SET AUTOCOMMIT= 1;
2565 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2566 COMMIT WORK;
2567 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2568         
2569 # check special-1 success:      1
2570 UPDATE t1 SET f_charbig = '';
2571         
2572 # check special-2 success:      1
2573 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2574 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2575 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2576 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2577 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2578 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2579 'just inserted' FROM t0_template
2580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2581 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2582 BEGIN
2583 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2584 f_charbig = 'updated by trigger'
2585       WHERE f_int1 = new.f_int1;
2586 END|
2587 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2588 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2590         
2591 # check trigger-1 success:      1
2592 DROP TRIGGER trg_1;
2593 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2594 f_int2 = CAST(f_char1 AS SIGNED INT),
2595 f_charbig = 'just inserted'
2596    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2597 DELETE FROM t0_aux
2598 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2599 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2600 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2601 'just inserted' FROM t0_template
2602 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2603 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2604 BEGIN
2605 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2606 f_charbig = 'updated by trigger'
2607       WHERE f_int1 = new.f_int1;
2608 END|
2609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2610 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2612         
2613 # check trigger-2 success:      1
2614 DROP TRIGGER trg_1;
2615 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2616 f_int2 = CAST(f_char1 AS SIGNED INT),
2617 f_charbig = 'just inserted'
2618    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2619 DELETE FROM t0_aux
2620 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2621 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2622 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2623 'just inserted' FROM t0_template
2624 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2625 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2626 BEGIN
2627 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2628 f_charbig = 'updated by trigger'
2629       WHERE f_int1 = new.f_int1;
2630 END|
2631 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2632 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2633         
2634 # check trigger-3 success:      1
2635 DROP TRIGGER trg_1;
2636 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2637 f_int2 = CAST(f_char1 AS SIGNED INT),
2638 f_charbig = 'just inserted'
2639    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2640 DELETE FROM t0_aux
2641 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2642 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2643 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2644 'just inserted' FROM t0_template
2645 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2646 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2647 BEGIN
2648 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2649 f_charbig = 'updated by trigger'
2650       WHERE f_int1 = - old.f_int1;
2651 END|
2652 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2653 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2654         
2655 # check trigger-4 success:      1
2656 DROP TRIGGER trg_1;
2657 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2658 f_int2 = CAST(f_char1 AS SIGNED INT),
2659 f_charbig = 'just inserted'
2660    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2661 DELETE FROM t0_aux
2662 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2663 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2664 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2665 'just inserted' FROM t0_template
2666 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2667 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2668 BEGIN
2669 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2670 f_charbig = 'updated by trigger'
2671       WHERE f_int1 = new.f_int1;
2672 END|
2673 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2674 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2675         
2676 # check trigger-5 success:      1
2677 DROP TRIGGER trg_1;
2678 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2679 f_int2 = CAST(f_char1 AS SIGNED INT),
2680 f_charbig = 'just inserted'
2681    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2682 DELETE FROM t0_aux
2683 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2684 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2685 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2686 'just inserted' FROM t0_template
2687 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2688 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2689 BEGIN
2690 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2691 f_charbig = 'updated by trigger'
2692       WHERE f_int1 = - old.f_int1;
2693 END|
2694 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2695 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2696         
2697 # check trigger-6 success:      1
2698 DROP TRIGGER trg_1;
2699 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2700 f_int2 = CAST(f_char1 AS SIGNED INT),
2701 f_charbig = 'just inserted'
2702    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2703 DELETE FROM t0_aux
2704 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2705 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2706 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2707 'just inserted' FROM t0_template
2708 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2709 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2710 BEGIN
2711 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2712 f_charbig = 'updated by trigger'
2713       WHERE f_int1 = - old.f_int1;
2714 END|
2715 DELETE FROM t0_aux
2716 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2717         
2718 # check trigger-7 success:      1
2719 DROP TRIGGER trg_1;
2720 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2721 f_int2 = CAST(f_char1 AS SIGNED INT),
2722 f_charbig = 'just inserted'
2723    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2724 DELETE FROM t0_aux
2725 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2726 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2727 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2728 'just inserted' FROM t0_template
2729 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2730 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2731 BEGIN
2732 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2733 f_charbig = 'updated by trigger'
2734       WHERE f_int1 = - old.f_int1;
2735 END|
2736 DELETE FROM t0_aux
2737 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2738         
2739 # check trigger-8 success:      1
2740 DROP TRIGGER trg_1;
2741 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2742 f_int2 = CAST(f_char1 AS SIGNED INT),
2743 f_charbig = 'just inserted'
2744    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2745 DELETE FROM t0_aux
2746 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2747 DELETE FROM t1
2748 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2749 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2750 BEGIN
2751 SET new.f_int1 = old.f_int1 + @max_row,
2752 new.f_int2 = old.f_int2 - @max_row,
2753 new.f_charbig = '####updated per update trigger####';
2754 END|
2755 UPDATE t1
2756 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2757 f_charbig = '####updated per update statement itself####';
2758         
2759 # check trigger-9 success:      1
2760 DROP TRIGGER trg_2;
2761 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2762 f_int2 = CAST(f_char1 AS SIGNED INT),
2763 f_charbig = CONCAT('===',f_char1,'===');
2764 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2765 BEGIN
2766 SET new.f_int1 = new.f_int1 + @max_row,
2767 new.f_int2 = new.f_int2 - @max_row,
2768 new.f_charbig = '####updated per update trigger####';
2769 END|
2770 UPDATE t1
2771 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2772 f_charbig = '####updated per update statement itself####';
2773         
2774 # check trigger-10 success:     1
2775 DROP TRIGGER trg_2;
2776 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2777 f_int2 = CAST(f_char1 AS SIGNED INT),
2778 f_charbig = CONCAT('===',f_char1,'===');
2779 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2780 BEGIN
2781 SET new.f_int1 = @my_max1 + @counter,
2782 new.f_int2 = @my_min2 - @counter,
2783 new.f_charbig = '####updated per insert trigger####';
2784 SET @counter = @counter + 1;
2785 END|
2786 SET @counter = 1;
2787 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2788 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2789 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2790 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2791 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2792 ORDER BY f_int1;
2793 DROP TRIGGER trg_3;
2794         
2795 # check trigger-11 success:     1
2796 DELETE FROM t1
2797 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2798 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2799 AND f_charbig = '####updated per insert trigger####';
2800 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2801 BEGIN
2802 SET new.f_int1 = @my_max1 + @counter,
2803 new.f_int2 = @my_min2 - @counter,
2804 new.f_charbig = '####updated per insert trigger####';
2805 SET @counter = @counter + 1;
2806 END|
2807 SET @counter = 1;
2808 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2809 INSERT INTO t1 (f_char1, f_char2, f_charbig)
2810 SELECT CAST(f_int1 AS CHAR),
2811 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2812 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2813 ORDER BY f_int1;
2814 DROP TRIGGER trg_3;
2815         
2816 # check trigger-12 success:     1
2817 DELETE FROM t1
2818 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2819 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2820 AND f_charbig = '####updated per insert trigger####';
2821 ANALYZE  TABLE t1;
2822 Table   Op      Msg_type        Msg_text
2823 test.t1 analyze status  OK
2824 CHECK    TABLE t1 EXTENDED;
2825 Table   Op      Msg_type        Msg_text
2826 test.t1 check   status  OK
2827 CHECKSUM TABLE t1 EXTENDED;
2828 Table   Checksum
2829 test.t1 <some_value>
2830 OPTIMIZE TABLE t1;
2831 Table   Op      Msg_type        Msg_text
2832 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
2833 test.t1 optimize        status  OK
2834 # check layout success:    1
2835 REPAIR   TABLE t1 EXTENDED;
2836 Table   Op      Msg_type        Msg_text
2837 test.t1 repair  note    The storage engine for the table doesn't support repair
2838 # check layout success:    1
2839 TRUNCATE t1;
2840         
2841 # check TRUNCATE success:       1
2842 # check layout success:    1
2843 # End usability test (inc/partition_check.inc)
2844 DROP TABLE t1;
2845 CREATE TABLE t1 (
2846 f_int1 INTEGER,
2847 f_int2 INTEGER,
2848 f_char1 CHAR(20),
2849 f_char2 CHAR(20),
2850 f_charbig VARCHAR(1000)
2853 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
2854 (PARTITION part1 VALUES IN (0)
2855 (SUBPARTITION sp11, SUBPARTITION sp12),
2856 PARTITION part2 VALUES IN (1)
2857 (SUBPARTITION sp21, SUBPARTITION sp22),
2858 PARTITION part3 VALUES IN (2)
2859 (SUBPARTITION sp31, SUBPARTITION sp32),
2860 PARTITION part4 VALUES IN (NULL)
2861 (SUBPARTITION sp41, SUBPARTITION sp42));
2862 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2863 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2864 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2865 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
2866 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2867 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2868 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2869 # Start usability test (inc/partition_check.inc)
2870 create_command
2871 SHOW CREATE TABLE t1;
2872 Table   Create Table
2873 t1      CREATE TABLE `t1` (
2874   `f_int1` int(11) DEFAULT NULL,
2875   `f_int2` mediumint(9) DEFAULT NULL,
2876   `f_char1` char(20) DEFAULT NULL,
2877   `f_char2` char(20) DEFAULT NULL,
2878   `f_charbig` varchar(1000) DEFAULT NULL
2879 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
2880 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
2881 SUBPARTITION BY HASH (f_int1 + 1)
2882 (PARTITION part1 VALUES IN (0)
2883  (SUBPARTITION sp11 ENGINE = InnoDB,
2884   SUBPARTITION sp12 ENGINE = InnoDB),
2885  PARTITION part2 VALUES IN (1)
2886  (SUBPARTITION sp21 ENGINE = InnoDB,
2887   SUBPARTITION sp22 ENGINE = InnoDB),
2888  PARTITION part3 VALUES IN (2)
2889  (SUBPARTITION sp31 ENGINE = InnoDB,
2890   SUBPARTITION sp32 ENGINE = InnoDB),
2891  PARTITION part4 VALUES IN (NULL)
2892  (SUBPARTITION sp41 ENGINE = InnoDB,
2893   SUBPARTITION sp42 ENGINE = InnoDB)) */
2895 # check prerequisites-1 success:    1
2896 # check COUNT(*) success:    1
2897 # check MIN/MAX(f_int1) success:    1
2898 # check MIN/MAX(f_int2) success:    1
2899 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2900 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2901 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2902 WHERE f_int1 IN (2,3);
2903 # check prerequisites-3 success:    1
2904 DELETE FROM t1 WHERE f_charbig = 'delete me';
2905 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2906 # check read via f_int1 success: 1
2907 # check read via f_int2 success: 1
2908         
2909 # check multiple-1 success:     1
2910 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2911         
2912 # check multiple-2 success:     1
2913 INSERT INTO t1 SELECT * FROM t0_template
2914 WHERE MOD(f_int1,3) = 0;
2915         
2916 # check multiple-3 success:     1
2917 UPDATE t1 SET f_int1 = f_int1 + @max_row
2918 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2919 AND @max_row_div2 + @max_row_div4;
2920         
2921 # check multiple-4 success:     1
2922 DELETE FROM t1
2923 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2924 AND @max_row_div2 + @max_row_div4 + @max_row;
2925         
2926 # check multiple-5 success:     1
2927 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2928 INSERT INTO t1
2929 SET f_int1 = @cur_value , f_int2 = @cur_value,
2930 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2931 f_charbig = '#SINGLE#';
2932         
2933 # check single-1 success:       1
2934 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2935 INSERT INTO t1
2936 SET f_int1 = @cur_value , f_int2 = @cur_value,
2937 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2938 f_charbig = '#SINGLE#';
2939         
2940 # check single-2 success:       1
2941 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2942 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2943 UPDATE t1 SET f_int1 = @cur_value2
2944 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2945         
2946 # check single-3 success:       1
2947 SET @cur_value1= -1;
2948 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2949 UPDATE t1 SET f_int1 = @cur_value1
2950 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2951         
2952 # check single-4 success:       1
2953 SELECT MAX(f_int1) INTO @cur_value FROM t1;
2954 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2955         
2956 # check single-5 success:       1
2957 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2958         
2959 # check single-6 success:       1
2960 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2961 Warnings:
2962 Warning 1264    Out of range value for column 'f_int2' at row 1
2963         
2964 # check single-7 success:       1
2965 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2966 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2967 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2968 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2969 f_charbig = '#NULL#';
2970 INSERT INTO t1
2971 SET f_int1 = NULL , f_int2 = -@max_row,
2972 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2973 f_charbig = '#NULL#';
2974 # check null success:    1
2975         
2976 # check null-1 success:         1
2977 UPDATE t1 SET f_int1 = -@max_row
2978 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2979 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2980         
2981 # check null-2 success:         1
2982 UPDATE t1 SET f_int1 = NULL
2983 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2984 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2985         
2986 # check null-3 success:         1
2987 DELETE FROM t1
2988 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2989 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2990         
2991 # check null-4 success:         1
2992 DELETE FROM t1
2993 WHERE f_int1 = 0 AND f_int2 = 0
2994 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2995 AND f_charbig = '#NULL#';
2996 SET AUTOCOMMIT= 0;
2997 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2998 SELECT f_int1, f_int1, '', '', 'was inserted'
2999 FROM t0_template source_tab
3000 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3001         
3002 # check transactions-1 success:         1
3003 COMMIT WORK;
3004         
3005 # check transactions-2 success:         1
3006 ROLLBACK WORK;
3007         
3008 # check transactions-3 success:         1
3009 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3010 COMMIT WORK;
3011 ROLLBACK WORK;
3012         
3013 # check transactions-4 success:         1
3014 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3015 SELECT f_int1, f_int1, '', '', 'was inserted'
3016 FROM t0_template source_tab
3017 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3018         
3019 # check transactions-5 success:         1
3020 ROLLBACK WORK;
3021         
3022 # check transactions-6 success:         1
3023 # INFO: Storage engine used for t1 seems to be transactional.
3024 COMMIT;
3025         
3026 # check transactions-7 success:         1
3027 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3028 COMMIT WORK;
3029 SET @@session.sql_mode = 'traditional';
3030 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3031 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3032 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3033 '', '', 'was inserted' FROM t0_template
3034 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3035 ERROR 22012: Division by 0
3036 COMMIT;
3037         
3038 # check transactions-8 success:         1
3039 # INFO: Storage engine used for t1 seems to be able to revert
3040 #       changes made by the failing statement.
3041 SET @@session.sql_mode = '';
3042 SET AUTOCOMMIT= 1;
3043 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3044 COMMIT WORK;
3045 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3046         
3047 # check special-1 success:      1
3048 UPDATE t1 SET f_charbig = '';
3049         
3050 # check special-2 success:      1
3051 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3052 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3053 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3054 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3055 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3056 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3057 'just inserted' FROM t0_template
3058 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3059 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3060 BEGIN
3061 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3062 f_charbig = 'updated by trigger'
3063       WHERE f_int1 = new.f_int1;
3064 END|
3065 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3066 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3067 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3068         
3069 # check trigger-1 success:      1
3070 DROP TRIGGER trg_1;
3071 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3072 f_int2 = CAST(f_char1 AS SIGNED INT),
3073 f_charbig = 'just inserted'
3074    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3075 DELETE FROM t0_aux
3076 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3077 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3078 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3079 'just inserted' FROM t0_template
3080 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3081 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3082 BEGIN
3083 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3084 f_charbig = 'updated by trigger'
3085       WHERE f_int1 = new.f_int1;
3086 END|
3087 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3088 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3089 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3090         
3091 # check trigger-2 success:      1
3092 DROP TRIGGER trg_1;
3093 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3094 f_int2 = CAST(f_char1 AS SIGNED INT),
3095 f_charbig = 'just inserted'
3096    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3097 DELETE FROM t0_aux
3098 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3099 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3100 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3101 'just inserted' FROM t0_template
3102 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3103 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3104 BEGIN
3105 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3106 f_charbig = 'updated by trigger'
3107       WHERE f_int1 = new.f_int1;
3108 END|
3109 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3110 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3111         
3112 # check trigger-3 success:      1
3113 DROP TRIGGER trg_1;
3114 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3115 f_int2 = CAST(f_char1 AS SIGNED INT),
3116 f_charbig = 'just inserted'
3117    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3118 DELETE FROM t0_aux
3119 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3120 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3121 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3122 'just inserted' FROM t0_template
3123 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3124 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3125 BEGIN
3126 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3127 f_charbig = 'updated by trigger'
3128       WHERE f_int1 = - old.f_int1;
3129 END|
3130 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3131 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3132         
3133 # check trigger-4 success:      1
3134 DROP TRIGGER trg_1;
3135 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3136 f_int2 = CAST(f_char1 AS SIGNED INT),
3137 f_charbig = 'just inserted'
3138    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3139 DELETE FROM t0_aux
3140 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3141 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3142 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3143 'just inserted' FROM t0_template
3144 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3145 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3146 BEGIN
3147 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3148 f_charbig = 'updated by trigger'
3149       WHERE f_int1 = new.f_int1;
3150 END|
3151 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3152 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3153         
3154 # check trigger-5 success:      1
3155 DROP TRIGGER trg_1;
3156 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3157 f_int2 = CAST(f_char1 AS SIGNED INT),
3158 f_charbig = 'just inserted'
3159    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3160 DELETE FROM t0_aux
3161 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3162 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3163 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3164 'just inserted' FROM t0_template
3165 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3166 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3167 BEGIN
3168 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3169 f_charbig = 'updated by trigger'
3170       WHERE f_int1 = - old.f_int1;
3171 END|
3172 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3173 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3174         
3175 # check trigger-6 success:      1
3176 DROP TRIGGER trg_1;
3177 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3178 f_int2 = CAST(f_char1 AS SIGNED INT),
3179 f_charbig = 'just inserted'
3180    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3181 DELETE FROM t0_aux
3182 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3183 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3184 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3185 'just inserted' FROM t0_template
3186 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3187 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3188 BEGIN
3189 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3190 f_charbig = 'updated by trigger'
3191       WHERE f_int1 = - old.f_int1;
3192 END|
3193 DELETE FROM t0_aux
3194 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3195         
3196 # check trigger-7 success:      1
3197 DROP TRIGGER trg_1;
3198 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3199 f_int2 = CAST(f_char1 AS SIGNED INT),
3200 f_charbig = 'just inserted'
3201    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3202 DELETE FROM t0_aux
3203 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3204 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3205 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3206 'just inserted' FROM t0_template
3207 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3208 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3209 BEGIN
3210 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3211 f_charbig = 'updated by trigger'
3212       WHERE f_int1 = - old.f_int1;
3213 END|
3214 DELETE FROM t0_aux
3215 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3216         
3217 # check trigger-8 success:      1
3218 DROP TRIGGER trg_1;
3219 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3220 f_int2 = CAST(f_char1 AS SIGNED INT),
3221 f_charbig = 'just inserted'
3222    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3223 DELETE FROM t0_aux
3224 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3225 DELETE FROM t1
3226 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3227 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3228 BEGIN
3229 SET new.f_int1 = old.f_int1 + @max_row,
3230 new.f_int2 = old.f_int2 - @max_row,
3231 new.f_charbig = '####updated per update trigger####';
3232 END|
3233 UPDATE t1
3234 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3235 f_charbig = '####updated per update statement itself####';
3236         
3237 # check trigger-9 success:      1
3238 DROP TRIGGER trg_2;
3239 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3240 f_int2 = CAST(f_char1 AS SIGNED INT),
3241 f_charbig = CONCAT('===',f_char1,'===');
3242 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3243 BEGIN
3244 SET new.f_int1 = new.f_int1 + @max_row,
3245 new.f_int2 = new.f_int2 - @max_row,
3246 new.f_charbig = '####updated per update trigger####';
3247 END|
3248 UPDATE t1
3249 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3250 f_charbig = '####updated per update statement itself####';
3251         
3252 # check trigger-10 success:     1
3253 DROP TRIGGER trg_2;
3254 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3255 f_int2 = CAST(f_char1 AS SIGNED INT),
3256 f_charbig = CONCAT('===',f_char1,'===');
3257 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3258 BEGIN
3259 SET new.f_int1 = @my_max1 + @counter,
3260 new.f_int2 = @my_min2 - @counter,
3261 new.f_charbig = '####updated per insert trigger####';
3262 SET @counter = @counter + 1;
3263 END|
3264 SET @counter = 1;
3265 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3266 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3267 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3268 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3269 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3270 ORDER BY f_int1;
3271 DROP TRIGGER trg_3;
3272         
3273 # check trigger-11 success:     1
3274 DELETE FROM t1
3275 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3276 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3277 AND f_charbig = '####updated per insert trigger####';
3278 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3279 BEGIN
3280 SET new.f_int1 = @my_max1 + @counter,
3281 new.f_int2 = @my_min2 - @counter,
3282 new.f_charbig = '####updated per insert trigger####';
3283 SET @counter = @counter + 1;
3284 END|
3285 SET @counter = 1;
3286 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3287 INSERT INTO t1 (f_char1, f_char2, f_charbig)
3288 SELECT CAST(f_int1 AS CHAR),
3289 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3290 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3291 ORDER BY f_int1;
3292 DROP TRIGGER trg_3;
3293         
3294 # check trigger-12 success:     1
3295 DELETE FROM t1
3296 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3297 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3298 AND f_charbig = '####updated per insert trigger####';
3299 ANALYZE  TABLE t1;
3300 Table   Op      Msg_type        Msg_text
3301 test.t1 analyze status  OK
3302 CHECK    TABLE t1 EXTENDED;
3303 Table   Op      Msg_type        Msg_text
3304 test.t1 check   status  OK
3305 CHECKSUM TABLE t1 EXTENDED;
3306 Table   Checksum
3307 test.t1 <some_value>
3308 OPTIMIZE TABLE t1;
3309 Table   Op      Msg_type        Msg_text
3310 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
3311 test.t1 optimize        status  OK
3312 # check layout success:    1
3313 REPAIR   TABLE t1 EXTENDED;
3314 Table   Op      Msg_type        Msg_text
3315 test.t1 repair  note    The storage engine for the table doesn't support repair
3316 # check layout success:    1
3317 TRUNCATE t1;
3318         
3319 # check TRUNCATE success:       1
3320 # check layout success:    1
3321 # End usability test (inc/partition_check.inc)
3322 DROP TABLE t1;
3323 CREATE TABLE t1 (
3324 f_int1 INTEGER,
3325 f_int2 INTEGER,
3326 f_char1 CHAR(20),
3327 f_char2 CHAR(20),
3328 f_charbig VARCHAR(1000)
3331 PARTITION BY LIST(ABS(MOD(f_int1,2)))
3332 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
3333 (PARTITION part1 VALUES IN (0),
3334 PARTITION part2 VALUES IN (1),
3335 PARTITION part3 VALUES IN (NULL));
3336 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3337 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3338 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3339 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
3340 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3341 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3342 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3343 # Start usability test (inc/partition_check.inc)
3344 create_command
3345 SHOW CREATE TABLE t1;
3346 Table   Create Table
3347 t1      CREATE TABLE `t1` (
3348   `f_int1` int(11) DEFAULT NULL,
3349   `f_int2` mediumint(9) DEFAULT NULL,
3350   `f_char1` char(20) DEFAULT NULL,
3351   `f_char2` char(20) DEFAULT NULL,
3352   `f_charbig` varchar(1000) DEFAULT NULL
3353 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
3354 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3355 SUBPARTITION BY KEY (f_int1)
3356 SUBPARTITIONS 3
3357 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
3358  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
3359  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
3361 # check prerequisites-1 success:    1
3362 # check COUNT(*) success:    1
3363 # check MIN/MAX(f_int1) success:    1
3364 # check MIN/MAX(f_int2) success:    1
3365 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3366 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3367 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3368 WHERE f_int1 IN (2,3);
3369 # check prerequisites-3 success:    1
3370 DELETE FROM t1 WHERE f_charbig = 'delete me';
3371 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
3372 # check read via f_int1 success: 1
3373 # check read via f_int2 success: 1
3374         
3375 # check multiple-1 success:     1
3376 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3377         
3378 # check multiple-2 success:     1
3379 INSERT INTO t1 SELECT * FROM t0_template
3380 WHERE MOD(f_int1,3) = 0;
3381         
3382 # check multiple-3 success:     1
3383 UPDATE t1 SET f_int1 = f_int1 + @max_row
3384 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3385 AND @max_row_div2 + @max_row_div4;
3386         
3387 # check multiple-4 success:     1
3388 DELETE FROM t1
3389 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3390 AND @max_row_div2 + @max_row_div4 + @max_row;
3391         
3392 # check multiple-5 success:     1
3393 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3394 INSERT INTO t1
3395 SET f_int1 = @cur_value , f_int2 = @cur_value,
3396 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3397 f_charbig = '#SINGLE#';
3398         
3399 # check single-1 success:       1
3400 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3401 INSERT INTO t1
3402 SET f_int1 = @cur_value , f_int2 = @cur_value,
3403 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3404 f_charbig = '#SINGLE#';
3405         
3406 # check single-2 success:       1
3407 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3408 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3409 UPDATE t1 SET f_int1 = @cur_value2
3410 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3411         
3412 # check single-3 success:       1
3413 SET @cur_value1= -1;
3414 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3415 UPDATE t1 SET f_int1 = @cur_value1
3416 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3417         
3418 # check single-4 success:       1
3419 SELECT MAX(f_int1) INTO @cur_value FROM t1;
3420 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3421         
3422 # check single-5 success:       1
3423 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3424         
3425 # check single-6 success:       1
3426 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3427 Warnings:
3428 Warning 1264    Out of range value for column 'f_int2' at row 1
3429         
3430 # check single-7 success:       1
3431 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3432 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3433 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3434 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3435 f_charbig = '#NULL#';
3436 INSERT INTO t1
3437 SET f_int1 = NULL , f_int2 = -@max_row,
3438 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3439 f_charbig = '#NULL#';
3440 # check null success:    1
3441         
3442 # check null-1 success:         1
3443 UPDATE t1 SET f_int1 = -@max_row
3444 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3445 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3446         
3447 # check null-2 success:         1
3448 UPDATE t1 SET f_int1 = NULL
3449 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3450 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3451         
3452 # check null-3 success:         1
3453 DELETE FROM t1
3454 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3455 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3456         
3457 # check null-4 success:         1
3458 DELETE FROM t1
3459 WHERE f_int1 = 0 AND f_int2 = 0
3460 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3461 AND f_charbig = '#NULL#';
3462 SET AUTOCOMMIT= 0;
3463 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3464 SELECT f_int1, f_int1, '', '', 'was inserted'
3465 FROM t0_template source_tab
3466 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3467         
3468 # check transactions-1 success:         1
3469 COMMIT WORK;
3470         
3471 # check transactions-2 success:         1
3472 ROLLBACK WORK;
3473         
3474 # check transactions-3 success:         1
3475 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3476 COMMIT WORK;
3477 ROLLBACK WORK;
3478         
3479 # check transactions-4 success:         1
3480 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3481 SELECT f_int1, f_int1, '', '', 'was inserted'
3482 FROM t0_template source_tab
3483 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3484         
3485 # check transactions-5 success:         1
3486 ROLLBACK WORK;
3487         
3488 # check transactions-6 success:         1
3489 # INFO: Storage engine used for t1 seems to be transactional.
3490 COMMIT;
3491         
3492 # check transactions-7 success:         1
3493 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3494 COMMIT WORK;
3495 SET @@session.sql_mode = 'traditional';
3496 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3497 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3498 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3499 '', '', 'was inserted' FROM t0_template
3500 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3501 ERROR 22012: Division by 0
3502 COMMIT;
3503         
3504 # check transactions-8 success:         1
3505 # INFO: Storage engine used for t1 seems to be able to revert
3506 #       changes made by the failing statement.
3507 SET @@session.sql_mode = '';
3508 SET AUTOCOMMIT= 1;
3509 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3510 COMMIT WORK;
3511 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3512         
3513 # check special-1 success:      1
3514 UPDATE t1 SET f_charbig = '';
3515         
3516 # check special-2 success:      1
3517 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3518 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3519 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3520 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3523 'just inserted' FROM t0_template
3524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3525 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3526 BEGIN
3527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3528 f_charbig = 'updated by trigger'
3529       WHERE f_int1 = new.f_int1;
3530 END|
3531 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3532 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3533 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3534         
3535 # check trigger-1 success:      1
3536 DROP TRIGGER trg_1;
3537 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3538 f_int2 = CAST(f_char1 AS SIGNED INT),
3539 f_charbig = 'just inserted'
3540    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3541 DELETE FROM t0_aux
3542 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3543 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3544 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3545 'just inserted' FROM t0_template
3546 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3547 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3548 BEGIN
3549 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3550 f_charbig = 'updated by trigger'
3551       WHERE f_int1 = new.f_int1;
3552 END|
3553 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3554 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3555 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3556         
3557 # check trigger-2 success:      1
3558 DROP TRIGGER trg_1;
3559 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3560 f_int2 = CAST(f_char1 AS SIGNED INT),
3561 f_charbig = 'just inserted'
3562    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3563 DELETE FROM t0_aux
3564 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3565 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3566 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3567 'just inserted' FROM t0_template
3568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3569 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3570 BEGIN
3571 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3572 f_charbig = 'updated by trigger'
3573       WHERE f_int1 = new.f_int1;
3574 END|
3575 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3576 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3577         
3578 # check trigger-3 success:      1
3579 DROP TRIGGER trg_1;
3580 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3581 f_int2 = CAST(f_char1 AS SIGNED INT),
3582 f_charbig = 'just inserted'
3583    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3584 DELETE FROM t0_aux
3585 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3586 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3587 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3588 'just inserted' FROM t0_template
3589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3590 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3591 BEGIN
3592 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3593 f_charbig = 'updated by trigger'
3594       WHERE f_int1 = - old.f_int1;
3595 END|
3596 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3597 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3598         
3599 # check trigger-4 success:      1
3600 DROP TRIGGER trg_1;
3601 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3602 f_int2 = CAST(f_char1 AS SIGNED INT),
3603 f_charbig = 'just inserted'
3604    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3605 DELETE FROM t0_aux
3606 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3607 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3608 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3609 'just inserted' FROM t0_template
3610 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3611 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3612 BEGIN
3613 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3614 f_charbig = 'updated by trigger'
3615       WHERE f_int1 = new.f_int1;
3616 END|
3617 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3618 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3619         
3620 # check trigger-5 success:      1
3621 DROP TRIGGER trg_1;
3622 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3623 f_int2 = CAST(f_char1 AS SIGNED INT),
3624 f_charbig = 'just inserted'
3625    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3626 DELETE FROM t0_aux
3627 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3628 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3629 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3630 'just inserted' FROM t0_template
3631 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3632 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3633 BEGIN
3634 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3635 f_charbig = 'updated by trigger'
3636       WHERE f_int1 = - old.f_int1;
3637 END|
3638 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3639 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3640         
3641 # check trigger-6 success:      1
3642 DROP TRIGGER trg_1;
3643 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3644 f_int2 = CAST(f_char1 AS SIGNED INT),
3645 f_charbig = 'just inserted'
3646    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3647 DELETE FROM t0_aux
3648 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3649 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3650 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3651 'just inserted' FROM t0_template
3652 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3653 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3654 BEGIN
3655 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3656 f_charbig = 'updated by trigger'
3657       WHERE f_int1 = - old.f_int1;
3658 END|
3659 DELETE FROM t0_aux
3660 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3661         
3662 # check trigger-7 success:      1
3663 DROP TRIGGER trg_1;
3664 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3665 f_int2 = CAST(f_char1 AS SIGNED INT),
3666 f_charbig = 'just inserted'
3667    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3668 DELETE FROM t0_aux
3669 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3670 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3671 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3672 'just inserted' FROM t0_template
3673 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3674 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3675 BEGIN
3676 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3677 f_charbig = 'updated by trigger'
3678       WHERE f_int1 = - old.f_int1;
3679 END|
3680 DELETE FROM t0_aux
3681 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3682         
3683 # check trigger-8 success:      1
3684 DROP TRIGGER trg_1;
3685 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3686 f_int2 = CAST(f_char1 AS SIGNED INT),
3687 f_charbig = 'just inserted'
3688    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3689 DELETE FROM t0_aux
3690 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3691 DELETE FROM t1
3692 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3693 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3694 BEGIN
3695 SET new.f_int1 = old.f_int1 + @max_row,
3696 new.f_int2 = old.f_int2 - @max_row,
3697 new.f_charbig = '####updated per update trigger####';
3698 END|
3699 UPDATE t1
3700 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3701 f_charbig = '####updated per update statement itself####';
3702         
3703 # check trigger-9 success:      1
3704 DROP TRIGGER trg_2;
3705 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3706 f_int2 = CAST(f_char1 AS SIGNED INT),
3707 f_charbig = CONCAT('===',f_char1,'===');
3708 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3709 BEGIN
3710 SET new.f_int1 = new.f_int1 + @max_row,
3711 new.f_int2 = new.f_int2 - @max_row,
3712 new.f_charbig = '####updated per update trigger####';
3713 END|
3714 UPDATE t1
3715 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3716 f_charbig = '####updated per update statement itself####';
3717         
3718 # check trigger-10 success:     1
3719 DROP TRIGGER trg_2;
3720 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3721 f_int2 = CAST(f_char1 AS SIGNED INT),
3722 f_charbig = CONCAT('===',f_char1,'===');
3723 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3724 BEGIN
3725 SET new.f_int1 = @my_max1 + @counter,
3726 new.f_int2 = @my_min2 - @counter,
3727 new.f_charbig = '####updated per insert trigger####';
3728 SET @counter = @counter + 1;
3729 END|
3730 SET @counter = 1;
3731 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3732 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3733 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3734 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3735 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3736 ORDER BY f_int1;
3737 DROP TRIGGER trg_3;
3738         
3739 # check trigger-11 success:     1
3740 DELETE FROM t1
3741 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3742 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3743 AND f_charbig = '####updated per insert trigger####';
3744 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3745 BEGIN
3746 SET new.f_int1 = @my_max1 + @counter,
3747 new.f_int2 = @my_min2 - @counter,
3748 new.f_charbig = '####updated per insert trigger####';
3749 SET @counter = @counter + 1;
3750 END|
3751 SET @counter = 1;
3752 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3753 INSERT INTO t1 (f_char1, f_char2, f_charbig)
3754 SELECT CAST(f_int1 AS CHAR),
3755 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3756 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3757 ORDER BY f_int1;
3758 DROP TRIGGER trg_3;
3759         
3760 # check trigger-12 success:     1
3761 DELETE FROM t1
3762 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3763 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3764 AND f_charbig = '####updated per insert trigger####';
3765 ANALYZE  TABLE t1;
3766 Table   Op      Msg_type        Msg_text
3767 test.t1 analyze status  OK
3768 CHECK    TABLE t1 EXTENDED;
3769 Table   Op      Msg_type        Msg_text
3770 test.t1 check   status  OK
3771 CHECKSUM TABLE t1 EXTENDED;
3772 Table   Checksum
3773 test.t1 <some_value>
3774 OPTIMIZE TABLE t1;
3775 Table   Op      Msg_type        Msg_text
3776 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
3777 test.t1 optimize        status  OK
3778 # check layout success:    1
3779 REPAIR   TABLE t1 EXTENDED;
3780 Table   Op      Msg_type        Msg_text
3781 test.t1 repair  note    The storage engine for the table doesn't support repair
3782 # check layout success:    1
3783 TRUNCATE t1;
3784         
3785 # check TRUNCATE success:       1
3786 # check layout success:    1
3787 # End usability test (inc/partition_check.inc)
3788 DROP TABLE t1;
3789 DROP TABLE IF EXISTS t1;
3790 CREATE TABLE t1 (
3791 f_int1 INTEGER,
3792 f_int2 INTEGER,
3793 f_char1 CHAR(20),
3794 f_char2 CHAR(20),
3795 f_charbig VARCHAR(1000)
3796 , PRIMARY KEY (f_int1,f_int2)
3798 PARTITION BY HASH(f_int1) PARTITIONS 2;
3799 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3800 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3801 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3802 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
3803 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3804 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3805 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3806 # Start usability test (inc/partition_check.inc)
3807 create_command
3808 SHOW CREATE TABLE t1;
3809 Table   Create Table
3810 t1      CREATE TABLE `t1` (
3811   `f_int1` int(11) NOT NULL DEFAULT '0',
3812   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
3813   `f_char1` char(20) DEFAULT NULL,
3814   `f_char2` char(20) DEFAULT NULL,
3815   `f_charbig` varchar(1000) DEFAULT NULL,
3816   PRIMARY KEY (`f_int1`,`f_int2`)
3817 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
3818 /*!50100 PARTITION BY HASH (f_int1)
3819 PARTITIONS 2 */
3821 # check prerequisites-1 success:    1
3822 # check COUNT(*) success:    1
3823 # check MIN/MAX(f_int1) success:    1
3824 # check MIN/MAX(f_int2) success:    1
3825 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3826 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3827 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3828 WHERE f_int1 IN (2,3);
3829 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3830 # check prerequisites-3 success:    1
3831 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3832 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3833 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3834 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3835 WHERE f_int1 IN (2,3);
3836 DELETE FROM t1 WHERE f_charbig = 'delete me';
3837 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3838 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3839 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3840 WHERE f_int1 IN (2,3);
3841 DELETE FROM t1 WHERE f_charbig = 'delete me';
3842 # check read via f_int1 success: 1
3843 # check read via f_int2 success: 1
3844         
3845 # check multiple-1 success:     1
3846 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3847         
3848 # check multiple-2 success:     1
3849 INSERT INTO t1 SELECT * FROM t0_template
3850 WHERE MOD(f_int1,3) = 0;
3851         
3852 # check multiple-3 success:     1
3853 UPDATE t1 SET f_int1 = f_int1 + @max_row
3854 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3855 AND @max_row_div2 + @max_row_div4;
3856         
3857 # check multiple-4 success:     1
3858 DELETE FROM t1
3859 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3860 AND @max_row_div2 + @max_row_div4 + @max_row;
3861         
3862 # check multiple-5 success:     1
3863 SELECT COUNT(*) INTO @try_count FROM t0_template
3864 WHERE MOD(f_int1,3) = 0
3865 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3866 SELECT COUNT(*) INTO @clash_count
3867 FROM t1 INNER JOIN t0_template USING(f_int1)
3868 WHERE MOD(f_int1,3) = 0
3869 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3870 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3871 INSERT INTO t1
3872 SET f_int1 = @cur_value , f_int2 = @cur_value,
3873 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3874 f_charbig = '#SINGLE#';
3875         
3876 # check single-1 success:       1
3877 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3878 INSERT INTO t1
3879 SET f_int1 = @cur_value , f_int2 = @cur_value,
3880 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3881 f_charbig = '#SINGLE#';
3882         
3883 # check single-2 success:       1
3884 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3885 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3886 UPDATE t1 SET f_int1 = @cur_value2
3887 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3888         
3889 # check single-3 success:       1
3890 SET @cur_value1= -1;
3891 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3892 UPDATE t1 SET f_int1 = @cur_value1
3893 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3894         
3895 # check single-4 success:       1
3896 SELECT MAX(f_int1) INTO @cur_value FROM t1;
3897 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3898         
3899 # check single-5 success:       1
3900 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3901         
3902 # check single-6 success:       1
3903 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3904 Warnings:
3905 Warning 1264    Out of range value for column 'f_int2' at row 1
3906         
3907 # check single-7 success:       1
3908 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3909 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3910 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3911 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3912 f_charbig = '#NULL#';
3913 INSERT INTO t1
3914 SET f_int1 = NULL , f_int2 = -@max_row,
3915 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3916 f_charbig = '#NULL#';
3917 ERROR 23000: Column 'f_int1' cannot be null
3918 # check null success:    1
3919 DELETE FROM t1
3920 WHERE f_int1 = 0 AND f_int2 = 0
3921 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3922 AND f_charbig = '#NULL#';
3923 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3924 SELECT f_int1, f_int1, '', '', 'was inserted'
3925    FROM t0_template source_tab
3926 WHERE MOD(f_int1,3) = 0
3927 AND f_int1 BETWEEN @max_row_div2 AND @max_row
3928 ON DUPLICATE KEY
3929 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3930 f_int2 = 2 * @max_row + source_tab.f_int1,
3931 f_charbig = 'was updated';
3932         
3933 # check unique-1-a success:     1
3934         
3935 # check unique-1-b success:     1
3936 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3937 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3938 f_int2 = CAST(f_char1 AS SIGNED INT),
3939 f_charbig = CONCAT('===',f_char1,'===')
3940 WHERE f_charbig = 'was updated';
3941 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3942 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3943    FROM t0_template source_tab
3944 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3945         
3946 # check replace success:        1
3947 DELETE FROM t1
3948 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3949 DELETE FROM t1
3950 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3951 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3952 UPDATE t1 SET f_int2 = f_int1,
3953 f_char1 = CAST(f_int1 AS CHAR),
3954 f_char2 = CAST(f_int1 AS CHAR),
3955 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3956 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3957 SET AUTOCOMMIT= 0;
3958 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3959 SELECT f_int1, f_int1, '', '', 'was inserted'
3960 FROM t0_template source_tab
3961 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3962         
3963 # check transactions-1 success:         1
3964 COMMIT WORK;
3965         
3966 # check transactions-2 success:         1
3967 ROLLBACK WORK;
3968         
3969 # check transactions-3 success:         1
3970 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3971 COMMIT WORK;
3972 ROLLBACK WORK;
3973         
3974 # check transactions-4 success:         1
3975 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3976 SELECT f_int1, f_int1, '', '', 'was inserted'
3977 FROM t0_template source_tab
3978 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3979         
3980 # check transactions-5 success:         1
3981 ROLLBACK WORK;
3982         
3983 # check transactions-6 success:         1
3984 # INFO: Storage engine used for t1 seems to be transactional.
3985 COMMIT;
3986         
3987 # check transactions-7 success:         1
3988 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3989 COMMIT WORK;
3990 SET @@session.sql_mode = 'traditional';
3991 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3992 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3993 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3994 '', '', 'was inserted' FROM t0_template
3995 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3996 ERROR 22012: Division by 0
3997 COMMIT;
3998         
3999 # check transactions-8 success:         1
4000 # INFO: Storage engine used for t1 seems to be able to revert
4001 #       changes made by the failing statement.
4002 SET @@session.sql_mode = '';
4003 SET AUTOCOMMIT= 1;
4004 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4005 COMMIT WORK;
4006 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4007         
4008 # check special-1 success:      1
4009 UPDATE t1 SET f_charbig = '';
4010         
4011 # check special-2 success:      1
4012 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4013 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4014 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4015 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4016 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4017 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4018 'just inserted' FROM t0_template
4019 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4020 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4021 BEGIN
4022 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4023 f_charbig = 'updated by trigger'
4024       WHERE f_int1 = new.f_int1;
4025 END|
4026 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4027 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4028 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4029         
4030 # check trigger-1 success:      1
4031 DROP TRIGGER trg_1;
4032 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4033 f_int2 = CAST(f_char1 AS SIGNED INT),
4034 f_charbig = 'just inserted'
4035    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4036 DELETE FROM t0_aux
4037 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4038 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4039 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4040 'just inserted' FROM t0_template
4041 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4042 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4043 BEGIN
4044 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4045 f_charbig = 'updated by trigger'
4046       WHERE f_int1 = new.f_int1;
4047 END|
4048 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4049 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4050 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4051         
4052 # check trigger-2 success:      1
4053 DROP TRIGGER trg_1;
4054 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4055 f_int2 = CAST(f_char1 AS SIGNED INT),
4056 f_charbig = 'just inserted'
4057    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4058 DELETE FROM t0_aux
4059 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4060 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4061 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4062 'just inserted' FROM t0_template
4063 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4064 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4065 BEGIN
4066 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4067 f_charbig = 'updated by trigger'
4068       WHERE f_int1 = new.f_int1;
4069 END|
4070 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4071 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4072         
4073 # check trigger-3 success:      1
4074 DROP TRIGGER trg_1;
4075 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4076 f_int2 = CAST(f_char1 AS SIGNED INT),
4077 f_charbig = 'just inserted'
4078    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4079 DELETE FROM t0_aux
4080 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4081 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4082 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4083 'just inserted' FROM t0_template
4084 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4085 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4086 BEGIN
4087 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4088 f_charbig = 'updated by trigger'
4089       WHERE f_int1 = - old.f_int1;
4090 END|
4091 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4092 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4093         
4094 # check trigger-4 success:      1
4095 DROP TRIGGER trg_1;
4096 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4097 f_int2 = CAST(f_char1 AS SIGNED INT),
4098 f_charbig = 'just inserted'
4099    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4100 DELETE FROM t0_aux
4101 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4102 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4103 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4104 'just inserted' FROM t0_template
4105 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4106 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4107 BEGIN
4108 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4109 f_charbig = 'updated by trigger'
4110       WHERE f_int1 = new.f_int1;
4111 END|
4112 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4113 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4114         
4115 # check trigger-5 success:      1
4116 DROP TRIGGER trg_1;
4117 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4118 f_int2 = CAST(f_char1 AS SIGNED INT),
4119 f_charbig = 'just inserted'
4120    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4121 DELETE FROM t0_aux
4122 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4123 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4124 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4125 'just inserted' FROM t0_template
4126 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4127 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4128 BEGIN
4129 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4130 f_charbig = 'updated by trigger'
4131       WHERE f_int1 = - old.f_int1;
4132 END|
4133 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4134 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4135         
4136 # check trigger-6 success:      1
4137 DROP TRIGGER trg_1;
4138 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4139 f_int2 = CAST(f_char1 AS SIGNED INT),
4140 f_charbig = 'just inserted'
4141    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4142 DELETE FROM t0_aux
4143 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4144 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4145 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4146 'just inserted' FROM t0_template
4147 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4148 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4149 BEGIN
4150 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4151 f_charbig = 'updated by trigger'
4152       WHERE f_int1 = - old.f_int1;
4153 END|
4154 DELETE FROM t0_aux
4155 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4156         
4157 # check trigger-7 success:      1
4158 DROP TRIGGER trg_1;
4159 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4160 f_int2 = CAST(f_char1 AS SIGNED INT),
4161 f_charbig = 'just inserted'
4162    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4163 DELETE FROM t0_aux
4164 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4165 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4166 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4167 'just inserted' FROM t0_template
4168 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4169 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4170 BEGIN
4171 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4172 f_charbig = 'updated by trigger'
4173       WHERE f_int1 = - old.f_int1;
4174 END|
4175 DELETE FROM t0_aux
4176 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4177         
4178 # check trigger-8 success:      1
4179 DROP TRIGGER trg_1;
4180 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4181 f_int2 = CAST(f_char1 AS SIGNED INT),
4182 f_charbig = 'just inserted'
4183    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4184 DELETE FROM t0_aux
4185 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4186 DELETE FROM t1
4187 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4188 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4189 BEGIN
4190 SET new.f_int1 = old.f_int1 + @max_row,
4191 new.f_int2 = old.f_int2 - @max_row,
4192 new.f_charbig = '####updated per update trigger####';
4193 END|
4194 UPDATE t1
4195 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4196 f_charbig = '####updated per update statement itself####';
4197         
4198 # check trigger-9 success:      1
4199 DROP TRIGGER trg_2;
4200 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4201 f_int2 = CAST(f_char1 AS SIGNED INT),
4202 f_charbig = CONCAT('===',f_char1,'===');
4203 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4204 BEGIN
4205 SET new.f_int1 = new.f_int1 + @max_row,
4206 new.f_int2 = new.f_int2 - @max_row,
4207 new.f_charbig = '####updated per update trigger####';
4208 END|
4209 UPDATE t1
4210 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4211 f_charbig = '####updated per update statement itself####';
4212         
4213 # check trigger-10 success:     1
4214 DROP TRIGGER trg_2;
4215 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4216 f_int2 = CAST(f_char1 AS SIGNED INT),
4217 f_charbig = CONCAT('===',f_char1,'===');
4218 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4219 BEGIN
4220 SET new.f_int1 = @my_max1 + @counter,
4221 new.f_int2 = @my_min2 - @counter,
4222 new.f_charbig = '####updated per insert trigger####';
4223 SET @counter = @counter + 1;
4224 END|
4225 SET @counter = 1;
4226 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4227 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4228 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4229 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4230 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4231 ORDER BY f_int1;
4232 DROP TRIGGER trg_3;
4233         
4234 # check trigger-11 success:     1
4235 DELETE FROM t1
4236 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4237 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4238 AND f_charbig = '####updated per insert trigger####';
4239 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4240 BEGIN
4241 SET new.f_int1 = @my_max1 + @counter,
4242 new.f_int2 = @my_min2 - @counter,
4243 new.f_charbig = '####updated per insert trigger####';
4244 SET @counter = @counter + 1;
4245 END|
4246 SET @counter = 1;
4247 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4248 INSERT INTO t1 (f_char1, f_char2, f_charbig)
4249 SELECT CAST(f_int1 AS CHAR),
4250 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4251 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4252 ORDER BY f_int1;
4253 DROP TRIGGER trg_3;
4254         
4255 # check trigger-12 success:     1
4256 DELETE FROM t1
4257 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4258 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4259 AND f_charbig = '####updated per insert trigger####';
4260 ANALYZE  TABLE t1;
4261 Table   Op      Msg_type        Msg_text
4262 test.t1 analyze status  OK
4263 CHECK    TABLE t1 EXTENDED;
4264 Table   Op      Msg_type        Msg_text
4265 test.t1 check   status  OK
4266 CHECKSUM TABLE t1 EXTENDED;
4267 Table   Checksum
4268 test.t1 <some_value>
4269 OPTIMIZE TABLE t1;
4270 Table   Op      Msg_type        Msg_text
4271 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
4272 test.t1 optimize        status  OK
4273 # check layout success:    1
4274 REPAIR   TABLE t1 EXTENDED;
4275 Table   Op      Msg_type        Msg_text
4276 test.t1 repair  note    The storage engine for the table doesn't support repair
4277 # check layout success:    1
4278 TRUNCATE t1;
4279         
4280 # check TRUNCATE success:       1
4281 # check layout success:    1
4282 # End usability test (inc/partition_check.inc)
4283 DROP TABLE t1;
4284 CREATE TABLE t1 (
4285 f_int1 INTEGER,
4286 f_int2 INTEGER,
4287 f_char1 CHAR(20),
4288 f_char2 CHAR(20),
4289 f_charbig VARCHAR(1000)
4290 , PRIMARY KEY (f_int1,f_int2)
4292 PARTITION BY KEY(f_int1) PARTITIONS 5;
4293 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4294 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4295 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4296 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
4297 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4298 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4299 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4300 # Start usability test (inc/partition_check.inc)
4301 create_command
4302 SHOW CREATE TABLE t1;
4303 Table   Create Table
4304 t1      CREATE TABLE `t1` (
4305   `f_int1` int(11) NOT NULL DEFAULT '0',
4306   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
4307   `f_char1` char(20) DEFAULT NULL,
4308   `f_char2` char(20) DEFAULT NULL,
4309   `f_charbig` varchar(1000) DEFAULT NULL,
4310   PRIMARY KEY (`f_int1`,`f_int2`)
4311 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
4312 /*!50100 PARTITION BY KEY (f_int1)
4313 PARTITIONS 5 */
4315 # check prerequisites-1 success:    1
4316 # check COUNT(*) success:    1
4317 # check MIN/MAX(f_int1) success:    1
4318 # check MIN/MAX(f_int2) success:    1
4319 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4320 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4321 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4322 WHERE f_int1 IN (2,3);
4323 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4324 # check prerequisites-3 success:    1
4325 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4326 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4327 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4328 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4329 WHERE f_int1 IN (2,3);
4330 DELETE FROM t1 WHERE f_charbig = 'delete me';
4331 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4332 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4333 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4334 WHERE f_int1 IN (2,3);
4335 DELETE FROM t1 WHERE f_charbig = 'delete me';
4336 # check read via f_int1 success: 1
4337 # check read via f_int2 success: 1
4338         
4339 # check multiple-1 success:     1
4340 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4341         
4342 # check multiple-2 success:     1
4343 INSERT INTO t1 SELECT * FROM t0_template
4344 WHERE MOD(f_int1,3) = 0;
4345         
4346 # check multiple-3 success:     1
4347 UPDATE t1 SET f_int1 = f_int1 + @max_row
4348 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4349 AND @max_row_div2 + @max_row_div4;
4350         
4351 # check multiple-4 success:     1
4352 DELETE FROM t1
4353 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4354 AND @max_row_div2 + @max_row_div4 + @max_row;
4355         
4356 # check multiple-5 success:     1
4357 SELECT COUNT(*) INTO @try_count FROM t0_template
4358 WHERE MOD(f_int1,3) = 0
4359 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4360 SELECT COUNT(*) INTO @clash_count
4361 FROM t1 INNER JOIN t0_template USING(f_int1)
4362 WHERE MOD(f_int1,3) = 0
4363 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4364 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4365 INSERT INTO t1
4366 SET f_int1 = @cur_value , f_int2 = @cur_value,
4367 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4368 f_charbig = '#SINGLE#';
4369         
4370 # check single-1 success:       1
4371 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4372 INSERT INTO t1
4373 SET f_int1 = @cur_value , f_int2 = @cur_value,
4374 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4375 f_charbig = '#SINGLE#';
4376         
4377 # check single-2 success:       1
4378 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4379 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4380 UPDATE t1 SET f_int1 = @cur_value2
4381 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4382         
4383 # check single-3 success:       1
4384 SET @cur_value1= -1;
4385 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4386 UPDATE t1 SET f_int1 = @cur_value1
4387 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4388         
4389 # check single-4 success:       1
4390 SELECT MAX(f_int1) INTO @cur_value FROM t1;
4391 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4392         
4393 # check single-5 success:       1
4394 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4395         
4396 # check single-6 success:       1
4397 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4398 Warnings:
4399 Warning 1264    Out of range value for column 'f_int2' at row 1
4400         
4401 # check single-7 success:       1
4402 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4403 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4404 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4405 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4406 f_charbig = '#NULL#';
4407 INSERT INTO t1
4408 SET f_int1 = NULL , f_int2 = -@max_row,
4409 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4410 f_charbig = '#NULL#';
4411 ERROR 23000: Column 'f_int1' cannot be null
4412 # check null success:    1
4413 DELETE FROM t1
4414 WHERE f_int1 = 0 AND f_int2 = 0
4415 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4416 AND f_charbig = '#NULL#';
4417 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4418 SELECT f_int1, f_int1, '', '', 'was inserted'
4419    FROM t0_template source_tab
4420 WHERE MOD(f_int1,3) = 0
4421 AND f_int1 BETWEEN @max_row_div2 AND @max_row
4422 ON DUPLICATE KEY
4423 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4424 f_int2 = 2 * @max_row + source_tab.f_int1,
4425 f_charbig = 'was updated';
4426         
4427 # check unique-1-a success:     1
4428         
4429 # check unique-1-b success:     1
4430 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4431 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4432 f_int2 = CAST(f_char1 AS SIGNED INT),
4433 f_charbig = CONCAT('===',f_char1,'===')
4434 WHERE f_charbig = 'was updated';
4435 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4436 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4437    FROM t0_template source_tab
4438 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4439         
4440 # check replace success:        1
4441 DELETE FROM t1
4442 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4443 DELETE FROM t1
4444 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4445 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4446 UPDATE t1 SET f_int2 = f_int1,
4447 f_char1 = CAST(f_int1 AS CHAR),
4448 f_char2 = CAST(f_int1 AS CHAR),
4449 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4450 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4451 SET AUTOCOMMIT= 0;
4452 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4453 SELECT f_int1, f_int1, '', '', 'was inserted'
4454 FROM t0_template source_tab
4455 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4456         
4457 # check transactions-1 success:         1
4458 COMMIT WORK;
4459         
4460 # check transactions-2 success:         1
4461 ROLLBACK WORK;
4462         
4463 # check transactions-3 success:         1
4464 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4465 COMMIT WORK;
4466 ROLLBACK WORK;
4467         
4468 # check transactions-4 success:         1
4469 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4470 SELECT f_int1, f_int1, '', '', 'was inserted'
4471 FROM t0_template source_tab
4472 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4473         
4474 # check transactions-5 success:         1
4475 ROLLBACK WORK;
4476         
4477 # check transactions-6 success:         1
4478 # INFO: Storage engine used for t1 seems to be transactional.
4479 COMMIT;
4480         
4481 # check transactions-7 success:         1
4482 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4483 COMMIT WORK;
4484 SET @@session.sql_mode = 'traditional';
4485 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4486 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4487 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4488 '', '', 'was inserted' FROM t0_template
4489 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4490 ERROR 22012: Division by 0
4491 COMMIT;
4492         
4493 # check transactions-8 success:         1
4494 # INFO: Storage engine used for t1 seems to be able to revert
4495 #       changes made by the failing statement.
4496 SET @@session.sql_mode = '';
4497 SET AUTOCOMMIT= 1;
4498 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4499 COMMIT WORK;
4500 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4501         
4502 # check special-1 success:      1
4503 UPDATE t1 SET f_charbig = '';
4504         
4505 # check special-2 success:      1
4506 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4507 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4508 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4509 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4510 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4511 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4512 'just inserted' FROM t0_template
4513 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4514 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4515 BEGIN
4516 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4517 f_charbig = 'updated by trigger'
4518       WHERE f_int1 = new.f_int1;
4519 END|
4520 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4521 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4522 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4523         
4524 # check trigger-1 success:      1
4525 DROP TRIGGER trg_1;
4526 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4527 f_int2 = CAST(f_char1 AS SIGNED INT),
4528 f_charbig = 'just inserted'
4529    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4530 DELETE FROM t0_aux
4531 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4532 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4533 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4534 'just inserted' FROM t0_template
4535 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4536 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4537 BEGIN
4538 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4539 f_charbig = 'updated by trigger'
4540       WHERE f_int1 = new.f_int1;
4541 END|
4542 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4543 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4544 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4545         
4546 # check trigger-2 success:      1
4547 DROP TRIGGER trg_1;
4548 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4549 f_int2 = CAST(f_char1 AS SIGNED INT),
4550 f_charbig = 'just inserted'
4551    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4552 DELETE FROM t0_aux
4553 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4554 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4555 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4556 'just inserted' FROM t0_template
4557 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4558 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4559 BEGIN
4560 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4561 f_charbig = 'updated by trigger'
4562       WHERE f_int1 = new.f_int1;
4563 END|
4564 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4565 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4566         
4567 # check trigger-3 success:      1
4568 DROP TRIGGER trg_1;
4569 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4570 f_int2 = CAST(f_char1 AS SIGNED INT),
4571 f_charbig = 'just inserted'
4572    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4573 DELETE FROM t0_aux
4574 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4575 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4576 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4577 'just inserted' FROM t0_template
4578 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4579 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4580 BEGIN
4581 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4582 f_charbig = 'updated by trigger'
4583       WHERE f_int1 = - old.f_int1;
4584 END|
4585 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4586 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4587         
4588 # check trigger-4 success:      1
4589 DROP TRIGGER trg_1;
4590 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4591 f_int2 = CAST(f_char1 AS SIGNED INT),
4592 f_charbig = 'just inserted'
4593    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4594 DELETE FROM t0_aux
4595 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4596 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4597 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4598 'just inserted' FROM t0_template
4599 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4600 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4601 BEGIN
4602 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4603 f_charbig = 'updated by trigger'
4604       WHERE f_int1 = new.f_int1;
4605 END|
4606 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4607 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4608         
4609 # check trigger-5 success:      1
4610 DROP TRIGGER trg_1;
4611 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4612 f_int2 = CAST(f_char1 AS SIGNED INT),
4613 f_charbig = 'just inserted'
4614    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4615 DELETE FROM t0_aux
4616 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4617 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4618 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4619 'just inserted' FROM t0_template
4620 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4621 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4622 BEGIN
4623 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4624 f_charbig = 'updated by trigger'
4625       WHERE f_int1 = - old.f_int1;
4626 END|
4627 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4628 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4629         
4630 # check trigger-6 success:      1
4631 DROP TRIGGER trg_1;
4632 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4633 f_int2 = CAST(f_char1 AS SIGNED INT),
4634 f_charbig = 'just inserted'
4635    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4636 DELETE FROM t0_aux
4637 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4638 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4639 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4640 'just inserted' FROM t0_template
4641 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4642 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4643 BEGIN
4644 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4645 f_charbig = 'updated by trigger'
4646       WHERE f_int1 = - old.f_int1;
4647 END|
4648 DELETE FROM t0_aux
4649 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4650         
4651 # check trigger-7 success:      1
4652 DROP TRIGGER trg_1;
4653 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4654 f_int2 = CAST(f_char1 AS SIGNED INT),
4655 f_charbig = 'just inserted'
4656    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4657 DELETE FROM t0_aux
4658 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4659 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4660 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4661 'just inserted' FROM t0_template
4662 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4663 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4664 BEGIN
4665 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4666 f_charbig = 'updated by trigger'
4667       WHERE f_int1 = - old.f_int1;
4668 END|
4669 DELETE FROM t0_aux
4670 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4671         
4672 # check trigger-8 success:      1
4673 DROP TRIGGER trg_1;
4674 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4675 f_int2 = CAST(f_char1 AS SIGNED INT),
4676 f_charbig = 'just inserted'
4677    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4678 DELETE FROM t0_aux
4679 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4680 DELETE FROM t1
4681 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4682 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4683 BEGIN
4684 SET new.f_int1 = old.f_int1 + @max_row,
4685 new.f_int2 = old.f_int2 - @max_row,
4686 new.f_charbig = '####updated per update trigger####';
4687 END|
4688 UPDATE t1
4689 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4690 f_charbig = '####updated per update statement itself####';
4691         
4692 # check trigger-9 success:      1
4693 DROP TRIGGER trg_2;
4694 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4695 f_int2 = CAST(f_char1 AS SIGNED INT),
4696 f_charbig = CONCAT('===',f_char1,'===');
4697 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4698 BEGIN
4699 SET new.f_int1 = new.f_int1 + @max_row,
4700 new.f_int2 = new.f_int2 - @max_row,
4701 new.f_charbig = '####updated per update trigger####';
4702 END|
4703 UPDATE t1
4704 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4705 f_charbig = '####updated per update statement itself####';
4706         
4707 # check trigger-10 success:     1
4708 DROP TRIGGER trg_2;
4709 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4710 f_int2 = CAST(f_char1 AS SIGNED INT),
4711 f_charbig = CONCAT('===',f_char1,'===');
4712 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4713 BEGIN
4714 SET new.f_int1 = @my_max1 + @counter,
4715 new.f_int2 = @my_min2 - @counter,
4716 new.f_charbig = '####updated per insert trigger####';
4717 SET @counter = @counter + 1;
4718 END|
4719 SET @counter = 1;
4720 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4721 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4722 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4723 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4724 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4725 ORDER BY f_int1;
4726 DROP TRIGGER trg_3;
4727         
4728 # check trigger-11 success:     1
4729 DELETE FROM t1
4730 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4731 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4732 AND f_charbig = '####updated per insert trigger####';
4733 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4734 BEGIN
4735 SET new.f_int1 = @my_max1 + @counter,
4736 new.f_int2 = @my_min2 - @counter,
4737 new.f_charbig = '####updated per insert trigger####';
4738 SET @counter = @counter + 1;
4739 END|
4740 SET @counter = 1;
4741 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4742 INSERT INTO t1 (f_char1, f_char2, f_charbig)
4743 SELECT CAST(f_int1 AS CHAR),
4744 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4745 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4746 ORDER BY f_int1;
4747 DROP TRIGGER trg_3;
4748         
4749 # check trigger-12 success:     1
4750 DELETE FROM t1
4751 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4752 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4753 AND f_charbig = '####updated per insert trigger####';
4754 ANALYZE  TABLE t1;
4755 Table   Op      Msg_type        Msg_text
4756 test.t1 analyze status  OK
4757 CHECK    TABLE t1 EXTENDED;
4758 Table   Op      Msg_type        Msg_text
4759 test.t1 check   status  OK
4760 CHECKSUM TABLE t1 EXTENDED;
4761 Table   Checksum
4762 test.t1 <some_value>
4763 OPTIMIZE TABLE t1;
4764 Table   Op      Msg_type        Msg_text
4765 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
4766 test.t1 optimize        status  OK
4767 # check layout success:    1
4768 REPAIR   TABLE t1 EXTENDED;
4769 Table   Op      Msg_type        Msg_text
4770 test.t1 repair  note    The storage engine for the table doesn't support repair
4771 # check layout success:    1
4772 TRUNCATE t1;
4773         
4774 # check TRUNCATE success:       1
4775 # check layout success:    1
4776 # End usability test (inc/partition_check.inc)
4777 DROP TABLE t1;
4778 CREATE TABLE t1 (
4779 f_int1 INTEGER,
4780 f_int2 INTEGER,
4781 f_char1 CHAR(20),
4782 f_char2 CHAR(20),
4783 f_charbig VARCHAR(1000)
4784 , PRIMARY KEY (f_int1,f_int2)
4786 PARTITION BY LIST(MOD(f_int1,4))
4787 (PARTITION part_3 VALUES IN (-3),
4788 PARTITION part_2 VALUES IN (-2),
4789 PARTITION part_1 VALUES IN (-1),
4790 PARTITION part_N VALUES IN (NULL),
4791 PARTITION part0 VALUES IN (0),
4792 PARTITION part1 VALUES IN (1),
4793 PARTITION part2 VALUES IN (2),
4794 PARTITION part3 VALUES IN (3));
4795 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4796 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4797 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4798 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
4799 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4800 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4801 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4802 # Start usability test (inc/partition_check.inc)
4803 create_command
4804 SHOW CREATE TABLE t1;
4805 Table   Create Table
4806 t1      CREATE TABLE `t1` (
4807   `f_int1` int(11) NOT NULL DEFAULT '0',
4808   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
4809   `f_char1` char(20) DEFAULT NULL,
4810   `f_char2` char(20) DEFAULT NULL,
4811   `f_charbig` varchar(1000) DEFAULT NULL,
4812   PRIMARY KEY (`f_int1`,`f_int2`)
4813 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
4814 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
4815 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
4816  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
4817  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
4818  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
4819  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
4820  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
4821  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
4822  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
4824 # check prerequisites-1 success:    1
4825 # check COUNT(*) success:    1
4826 # check MIN/MAX(f_int1) success:    1
4827 # check MIN/MAX(f_int2) success:    1
4828 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4829 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4830 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4831 WHERE f_int1 IN (2,3);
4832 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4833 # check prerequisites-3 success:    1
4834 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4835 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4836 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4837 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4838 WHERE f_int1 IN (2,3);
4839 DELETE FROM t1 WHERE f_charbig = 'delete me';
4840 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4841 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4842 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4843 WHERE f_int1 IN (2,3);
4844 DELETE FROM t1 WHERE f_charbig = 'delete me';
4845 # check read via f_int1 success: 1
4846 # check read via f_int2 success: 1
4847         
4848 # check multiple-1 success:     1
4849 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4850         
4851 # check multiple-2 success:     1
4852 INSERT INTO t1 SELECT * FROM t0_template
4853 WHERE MOD(f_int1,3) = 0;
4854         
4855 # check multiple-3 success:     1
4856 UPDATE t1 SET f_int1 = f_int1 + @max_row
4857 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4858 AND @max_row_div2 + @max_row_div4;
4859         
4860 # check multiple-4 success:     1
4861 DELETE FROM t1
4862 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4863 AND @max_row_div2 + @max_row_div4 + @max_row;
4864         
4865 # check multiple-5 success:     1
4866 SELECT COUNT(*) INTO @try_count FROM t0_template
4867 WHERE MOD(f_int1,3) = 0
4868 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4869 SELECT COUNT(*) INTO @clash_count
4870 FROM t1 INNER JOIN t0_template USING(f_int1)
4871 WHERE MOD(f_int1,3) = 0
4872 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4873 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4874 INSERT INTO t1
4875 SET f_int1 = @cur_value , f_int2 = @cur_value,
4876 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4877 f_charbig = '#SINGLE#';
4878         
4879 # check single-1 success:       1
4880 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4881 INSERT INTO t1
4882 SET f_int1 = @cur_value , f_int2 = @cur_value,
4883 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4884 f_charbig = '#SINGLE#';
4885         
4886 # check single-2 success:       1
4887 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4888 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4889 UPDATE t1 SET f_int1 = @cur_value2
4890 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4891         
4892 # check single-3 success:       1
4893 SET @cur_value1= -1;
4894 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4895 UPDATE t1 SET f_int1 = @cur_value1
4896 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4897         
4898 # check single-4 success:       1
4899 SELECT MAX(f_int1) INTO @cur_value FROM t1;
4900 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4901         
4902 # check single-5 success:       1
4903 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4904         
4905 # check single-6 success:       1
4906 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4907 Warnings:
4908 Warning 1264    Out of range value for column 'f_int2' at row 1
4909         
4910 # check single-7 success:       1
4911 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4912 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4913 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4914 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4915 f_charbig = '#NULL#';
4916 INSERT INTO t1
4917 SET f_int1 = NULL , f_int2 = -@max_row,
4918 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4919 f_charbig = '#NULL#';
4920 ERROR 23000: Column 'f_int1' cannot be null
4921 # check null success:    1
4922 DELETE FROM t1
4923 WHERE f_int1 = 0 AND f_int2 = 0
4924 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4925 AND f_charbig = '#NULL#';
4926 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4927 SELECT f_int1, f_int1, '', '', 'was inserted'
4928    FROM t0_template source_tab
4929 WHERE MOD(f_int1,3) = 0
4930 AND f_int1 BETWEEN @max_row_div2 AND @max_row
4931 ON DUPLICATE KEY
4932 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4933 f_int2 = 2 * @max_row + source_tab.f_int1,
4934 f_charbig = 'was updated';
4935         
4936 # check unique-1-a success:     1
4937         
4938 # check unique-1-b success:     1
4939 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4940 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4941 f_int2 = CAST(f_char1 AS SIGNED INT),
4942 f_charbig = CONCAT('===',f_char1,'===')
4943 WHERE f_charbig = 'was updated';
4944 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4945 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4946    FROM t0_template source_tab
4947 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4948         
4949 # check replace success:        1
4950 DELETE FROM t1
4951 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4952 DELETE FROM t1
4953 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4954 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4955 UPDATE t1 SET f_int2 = f_int1,
4956 f_char1 = CAST(f_int1 AS CHAR),
4957 f_char2 = CAST(f_int1 AS CHAR),
4958 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4959 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4960 SET AUTOCOMMIT= 0;
4961 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4962 SELECT f_int1, f_int1, '', '', 'was inserted'
4963 FROM t0_template source_tab
4964 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4965         
4966 # check transactions-1 success:         1
4967 COMMIT WORK;
4968         
4969 # check transactions-2 success:         1
4970 ROLLBACK WORK;
4971         
4972 # check transactions-3 success:         1
4973 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4974 COMMIT WORK;
4975 ROLLBACK WORK;
4976         
4977 # check transactions-4 success:         1
4978 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4979 SELECT f_int1, f_int1, '', '', 'was inserted'
4980 FROM t0_template source_tab
4981 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4982         
4983 # check transactions-5 success:         1
4984 ROLLBACK WORK;
4985         
4986 # check transactions-6 success:         1
4987 # INFO: Storage engine used for t1 seems to be transactional.
4988 COMMIT;
4989         
4990 # check transactions-7 success:         1
4991 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4992 COMMIT WORK;
4993 SET @@session.sql_mode = 'traditional';
4994 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4995 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4996 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4997 '', '', 'was inserted' FROM t0_template
4998 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4999 ERROR 22012: Division by 0
5000 COMMIT;
5001         
5002 # check transactions-8 success:         1
5003 # INFO: Storage engine used for t1 seems to be able to revert
5004 #       changes made by the failing statement.
5005 SET @@session.sql_mode = '';
5006 SET AUTOCOMMIT= 1;
5007 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5008 COMMIT WORK;
5009 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5010         
5011 # check special-1 success:      1
5012 UPDATE t1 SET f_charbig = '';
5013         
5014 # check special-2 success:      1
5015 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5016 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5017 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5018 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5019 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5020 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5021 'just inserted' FROM t0_template
5022 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5023 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5024 BEGIN
5025 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5026 f_charbig = 'updated by trigger'
5027       WHERE f_int1 = new.f_int1;
5028 END|
5029 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5030 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5031 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5032         
5033 # check trigger-1 success:      1
5034 DROP TRIGGER trg_1;
5035 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5036 f_int2 = CAST(f_char1 AS SIGNED INT),
5037 f_charbig = 'just inserted'
5038    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5039 DELETE FROM t0_aux
5040 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5041 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5042 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5043 'just inserted' FROM t0_template
5044 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5045 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5046 BEGIN
5047 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5048 f_charbig = 'updated by trigger'
5049       WHERE f_int1 = new.f_int1;
5050 END|
5051 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5052 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5053 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5054         
5055 # check trigger-2 success:      1
5056 DROP TRIGGER trg_1;
5057 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5058 f_int2 = CAST(f_char1 AS SIGNED INT),
5059 f_charbig = 'just inserted'
5060    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5061 DELETE FROM t0_aux
5062 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5063 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5064 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5065 'just inserted' FROM t0_template
5066 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5067 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5068 BEGIN
5069 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5070 f_charbig = 'updated by trigger'
5071       WHERE f_int1 = new.f_int1;
5072 END|
5073 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5074 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5075         
5076 # check trigger-3 success:      1
5077 DROP TRIGGER trg_1;
5078 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5079 f_int2 = CAST(f_char1 AS SIGNED INT),
5080 f_charbig = 'just inserted'
5081    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5082 DELETE FROM t0_aux
5083 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5084 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5085 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5086 'just inserted' FROM t0_template
5087 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5088 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5089 BEGIN
5090 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5091 f_charbig = 'updated by trigger'
5092       WHERE f_int1 = - old.f_int1;
5093 END|
5094 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5095 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5096         
5097 # check trigger-4 success:      1
5098 DROP TRIGGER trg_1;
5099 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5100 f_int2 = CAST(f_char1 AS SIGNED INT),
5101 f_charbig = 'just inserted'
5102    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5103 DELETE FROM t0_aux
5104 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5105 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5106 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5107 'just inserted' FROM t0_template
5108 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5109 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5110 BEGIN
5111 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5112 f_charbig = 'updated by trigger'
5113       WHERE f_int1 = new.f_int1;
5114 END|
5115 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5116 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5117         
5118 # check trigger-5 success:      1
5119 DROP TRIGGER trg_1;
5120 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5121 f_int2 = CAST(f_char1 AS SIGNED INT),
5122 f_charbig = 'just inserted'
5123    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5124 DELETE FROM t0_aux
5125 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5126 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5127 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5128 'just inserted' FROM t0_template
5129 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5130 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5131 BEGIN
5132 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5133 f_charbig = 'updated by trigger'
5134       WHERE f_int1 = - old.f_int1;
5135 END|
5136 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5137 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5138         
5139 # check trigger-6 success:      1
5140 DROP TRIGGER trg_1;
5141 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5142 f_int2 = CAST(f_char1 AS SIGNED INT),
5143 f_charbig = 'just inserted'
5144    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5145 DELETE FROM t0_aux
5146 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5147 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5148 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5149 'just inserted' FROM t0_template
5150 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5151 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5152 BEGIN
5153 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5154 f_charbig = 'updated by trigger'
5155       WHERE f_int1 = - old.f_int1;
5156 END|
5157 DELETE FROM t0_aux
5158 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5159         
5160 # check trigger-7 success:      1
5161 DROP TRIGGER trg_1;
5162 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5163 f_int2 = CAST(f_char1 AS SIGNED INT),
5164 f_charbig = 'just inserted'
5165    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5166 DELETE FROM t0_aux
5167 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5168 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5169 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5170 'just inserted' FROM t0_template
5171 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5172 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5173 BEGIN
5174 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5175 f_charbig = 'updated by trigger'
5176       WHERE f_int1 = - old.f_int1;
5177 END|
5178 DELETE FROM t0_aux
5179 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5180         
5181 # check trigger-8 success:      1
5182 DROP TRIGGER trg_1;
5183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5184 f_int2 = CAST(f_char1 AS SIGNED INT),
5185 f_charbig = 'just inserted'
5186    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5187 DELETE FROM t0_aux
5188 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5189 DELETE FROM t1
5190 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5191 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5192 BEGIN
5193 SET new.f_int1 = old.f_int1 + @max_row,
5194 new.f_int2 = old.f_int2 - @max_row,
5195 new.f_charbig = '####updated per update trigger####';
5196 END|
5197 UPDATE t1
5198 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5199 f_charbig = '####updated per update statement itself####';
5200         
5201 # check trigger-9 success:      1
5202 DROP TRIGGER trg_2;
5203 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5204 f_int2 = CAST(f_char1 AS SIGNED INT),
5205 f_charbig = CONCAT('===',f_char1,'===');
5206 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5207 BEGIN
5208 SET new.f_int1 = new.f_int1 + @max_row,
5209 new.f_int2 = new.f_int2 - @max_row,
5210 new.f_charbig = '####updated per update trigger####';
5211 END|
5212 UPDATE t1
5213 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5214 f_charbig = '####updated per update statement itself####';
5215         
5216 # check trigger-10 success:     1
5217 DROP TRIGGER trg_2;
5218 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5219 f_int2 = CAST(f_char1 AS SIGNED INT),
5220 f_charbig = CONCAT('===',f_char1,'===');
5221 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5222 BEGIN
5223 SET new.f_int1 = @my_max1 + @counter,
5224 new.f_int2 = @my_min2 - @counter,
5225 new.f_charbig = '####updated per insert trigger####';
5226 SET @counter = @counter + 1;
5227 END|
5228 SET @counter = 1;
5229 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5230 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5231 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5232 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5233 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5234 ORDER BY f_int1;
5235 DROP TRIGGER trg_3;
5236         
5237 # check trigger-11 success:     1
5238 DELETE FROM t1
5239 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5240 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5241 AND f_charbig = '####updated per insert trigger####';
5242 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5243 BEGIN
5244 SET new.f_int1 = @my_max1 + @counter,
5245 new.f_int2 = @my_min2 - @counter,
5246 new.f_charbig = '####updated per insert trigger####';
5247 SET @counter = @counter + 1;
5248 END|
5249 SET @counter = 1;
5250 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5251 INSERT INTO t1 (f_char1, f_char2, f_charbig)
5252 SELECT CAST(f_int1 AS CHAR),
5253 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5254 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5255 ORDER BY f_int1;
5256 DROP TRIGGER trg_3;
5257         
5258 # check trigger-12 success:     1
5259 DELETE FROM t1
5260 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5261 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5262 AND f_charbig = '####updated per insert trigger####';
5263 ANALYZE  TABLE t1;
5264 Table   Op      Msg_type        Msg_text
5265 test.t1 analyze status  OK
5266 CHECK    TABLE t1 EXTENDED;
5267 Table   Op      Msg_type        Msg_text
5268 test.t1 check   status  OK
5269 CHECKSUM TABLE t1 EXTENDED;
5270 Table   Checksum
5271 test.t1 <some_value>
5272 OPTIMIZE TABLE t1;
5273 Table   Op      Msg_type        Msg_text
5274 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
5275 test.t1 optimize        status  OK
5276 # check layout success:    1
5277 REPAIR   TABLE t1 EXTENDED;
5278 Table   Op      Msg_type        Msg_text
5279 test.t1 repair  note    The storage engine for the table doesn't support repair
5280 # check layout success:    1
5281 TRUNCATE t1;
5282         
5283 # check TRUNCATE success:       1
5284 # check layout success:    1
5285 # End usability test (inc/partition_check.inc)
5286 DROP TABLE t1;
5287 CREATE TABLE t1 (
5288 f_int1 INTEGER,
5289 f_int2 INTEGER,
5290 f_char1 CHAR(20),
5291 f_char2 CHAR(20),
5292 f_charbig VARCHAR(1000)
5293 , PRIMARY KEY (f_int1,f_int2)
5295 PARTITION BY RANGE(f_int1)
5296 (PARTITION parta VALUES LESS THAN (0),
5297 PARTITION partb VALUES LESS THAN (5),
5298 PARTITION partc VALUES LESS THAN (10),
5299 PARTITION partd VALUES LESS THAN (10 + 5),
5300 PARTITION parte VALUES LESS THAN (20),
5301 PARTITION partf VALUES LESS THAN (2147483646));
5302 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5303 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5304 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5305 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
5306 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5307 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5308 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5309 # Start usability test (inc/partition_check.inc)
5310 create_command
5311 SHOW CREATE TABLE t1;
5312 Table   Create Table
5313 t1      CREATE TABLE `t1` (
5314   `f_int1` int(11) NOT NULL DEFAULT '0',
5315   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
5316   `f_char1` char(20) DEFAULT NULL,
5317   `f_char2` char(20) DEFAULT NULL,
5318   `f_charbig` varchar(1000) DEFAULT NULL,
5319   PRIMARY KEY (`f_int1`,`f_int2`)
5320 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
5321 /*!50100 PARTITION BY RANGE (f_int1)
5322 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5323  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5324  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5325  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
5326  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
5327  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5329 # check prerequisites-1 success:    1
5330 # check COUNT(*) success:    1
5331 # check MIN/MAX(f_int1) success:    1
5332 # check MIN/MAX(f_int2) success:    1
5333 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5334 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5335 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5336 WHERE f_int1 IN (2,3);
5337 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5338 # check prerequisites-3 success:    1
5339 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5340 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5341 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5342 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5343 WHERE f_int1 IN (2,3);
5344 DELETE FROM t1 WHERE f_charbig = 'delete me';
5345 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5346 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5347 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5348 WHERE f_int1 IN (2,3);
5349 DELETE FROM t1 WHERE f_charbig = 'delete me';
5350 # check read via f_int1 success: 1
5351 # check read via f_int2 success: 1
5352         
5353 # check multiple-1 success:     1
5354 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5355         
5356 # check multiple-2 success:     1
5357 INSERT INTO t1 SELECT * FROM t0_template
5358 WHERE MOD(f_int1,3) = 0;
5359         
5360 # check multiple-3 success:     1
5361 UPDATE t1 SET f_int1 = f_int1 + @max_row
5362 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5363 AND @max_row_div2 + @max_row_div4;
5364         
5365 # check multiple-4 success:     1
5366 DELETE FROM t1
5367 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5368 AND @max_row_div2 + @max_row_div4 + @max_row;
5369         
5370 # check multiple-5 success:     1
5371 SELECT COUNT(*) INTO @try_count FROM t0_template
5372 WHERE MOD(f_int1,3) = 0
5373 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5374 SELECT COUNT(*) INTO @clash_count
5375 FROM t1 INNER JOIN t0_template USING(f_int1)
5376 WHERE MOD(f_int1,3) = 0
5377 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5378 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5379 INSERT INTO t1
5380 SET f_int1 = @cur_value , f_int2 = @cur_value,
5381 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5382 f_charbig = '#SINGLE#';
5383         
5384 # check single-1 success:       1
5385 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5386 INSERT INTO t1
5387 SET f_int1 = @cur_value , f_int2 = @cur_value,
5388 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5389 f_charbig = '#SINGLE#';
5390         
5391 # check single-2 success:       1
5392 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5393 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5394 UPDATE t1 SET f_int1 = @cur_value2
5395 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5396         
5397 # check single-3 success:       1
5398 SET @cur_value1= -1;
5399 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5400 UPDATE t1 SET f_int1 = @cur_value1
5401 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5402         
5403 # check single-4 success:       1
5404 SELECT MAX(f_int1) INTO @cur_value FROM t1;
5405 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5406         
5407 # check single-5 success:       1
5408 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5409         
5410 # check single-6 success:       1
5411 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5412 ERROR HY000: Table has no partition for value 2147483647
5413 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5414 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5415 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5416 f_charbig = '#NULL#';
5417 INSERT INTO t1
5418 SET f_int1 = NULL , f_int2 = -@max_row,
5419 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5420 f_charbig = '#NULL#';
5421 ERROR 23000: Column 'f_int1' cannot be null
5422 # check null success:    1
5423 DELETE FROM t1
5424 WHERE f_int1 = 0 AND f_int2 = 0
5425 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5426 AND f_charbig = '#NULL#';
5427 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5428 SELECT f_int1, f_int1, '', '', 'was inserted'
5429    FROM t0_template source_tab
5430 WHERE MOD(f_int1,3) = 0
5431 AND f_int1 BETWEEN @max_row_div2 AND @max_row
5432 ON DUPLICATE KEY
5433 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5434 f_int2 = 2 * @max_row + source_tab.f_int1,
5435 f_charbig = 'was updated';
5436         
5437 # check unique-1-a success:     1
5438         
5439 # check unique-1-b success:     1
5440 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5441 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5442 f_int2 = CAST(f_char1 AS SIGNED INT),
5443 f_charbig = CONCAT('===',f_char1,'===')
5444 WHERE f_charbig = 'was updated';
5445 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5446 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5447    FROM t0_template source_tab
5448 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5449         
5450 # check replace success:        1
5451 DELETE FROM t1
5452 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5453 DELETE FROM t1
5454 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5455 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5456 UPDATE t1 SET f_int2 = f_int1,
5457 f_char1 = CAST(f_int1 AS CHAR),
5458 f_char2 = CAST(f_int1 AS CHAR),
5459 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5460 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5461 SET AUTOCOMMIT= 0;
5462 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5463 SELECT f_int1, f_int1, '', '', 'was inserted'
5464 FROM t0_template source_tab
5465 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5466         
5467 # check transactions-1 success:         1
5468 COMMIT WORK;
5469         
5470 # check transactions-2 success:         1
5471 ROLLBACK WORK;
5472         
5473 # check transactions-3 success:         1
5474 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5475 COMMIT WORK;
5476 ROLLBACK WORK;
5477         
5478 # check transactions-4 success:         1
5479 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5480 SELECT f_int1, f_int1, '', '', 'was inserted'
5481 FROM t0_template source_tab
5482 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5483         
5484 # check transactions-5 success:         1
5485 ROLLBACK WORK;
5486         
5487 # check transactions-6 success:         1
5488 # INFO: Storage engine used for t1 seems to be transactional.
5489 COMMIT;
5490         
5491 # check transactions-7 success:         1
5492 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5493 COMMIT WORK;
5494 SET @@session.sql_mode = 'traditional';
5495 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5496 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5497 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5498 '', '', 'was inserted' FROM t0_template
5499 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5500 ERROR 22012: Division by 0
5501 COMMIT;
5502         
5503 # check transactions-8 success:         1
5504 # INFO: Storage engine used for t1 seems to be able to revert
5505 #       changes made by the failing statement.
5506 SET @@session.sql_mode = '';
5507 SET AUTOCOMMIT= 1;
5508 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5509 COMMIT WORK;
5510 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5511         
5512 # check special-1 success:      1
5513 UPDATE t1 SET f_charbig = '';
5514         
5515 # check special-2 success:      1
5516 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5517 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5518 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5519 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5520 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5521 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5522 'just inserted' FROM t0_template
5523 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5524 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5525 BEGIN
5526 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5527 f_charbig = 'updated by trigger'
5528       WHERE f_int1 = new.f_int1;
5529 END|
5530 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5531 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5532 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5533         
5534 # check trigger-1 success:      1
5535 DROP TRIGGER trg_1;
5536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5537 f_int2 = CAST(f_char1 AS SIGNED INT),
5538 f_charbig = 'just inserted'
5539    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5540 DELETE FROM t0_aux
5541 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5542 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5543 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5544 'just inserted' FROM t0_template
5545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5546 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5547 BEGIN
5548 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5549 f_charbig = 'updated by trigger'
5550       WHERE f_int1 = new.f_int1;
5551 END|
5552 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5553 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5554 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5555         
5556 # check trigger-2 success:      1
5557 DROP TRIGGER trg_1;
5558 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5559 f_int2 = CAST(f_char1 AS SIGNED INT),
5560 f_charbig = 'just inserted'
5561    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5562 DELETE FROM t0_aux
5563 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5564 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5565 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5566 'just inserted' FROM t0_template
5567 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5568 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5569 BEGIN
5570 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5571 f_charbig = 'updated by trigger'
5572       WHERE f_int1 = new.f_int1;
5573 END|
5574 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5575 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5576         
5577 # check trigger-3 success:      1
5578 DROP TRIGGER trg_1;
5579 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5580 f_int2 = CAST(f_char1 AS SIGNED INT),
5581 f_charbig = 'just inserted'
5582    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5583 DELETE FROM t0_aux
5584 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5585 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5586 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5587 'just inserted' FROM t0_template
5588 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5589 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5590 BEGIN
5591 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5592 f_charbig = 'updated by trigger'
5593       WHERE f_int1 = - old.f_int1;
5594 END|
5595 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5596 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5597         
5598 # check trigger-4 success:      1
5599 DROP TRIGGER trg_1;
5600 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5601 f_int2 = CAST(f_char1 AS SIGNED INT),
5602 f_charbig = 'just inserted'
5603    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5604 DELETE FROM t0_aux
5605 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5606 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5607 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5608 'just inserted' FROM t0_template
5609 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5610 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5611 BEGIN
5612 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5613 f_charbig = 'updated by trigger'
5614       WHERE f_int1 = new.f_int1;
5615 END|
5616 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5617 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5618         
5619 # check trigger-5 success:      1
5620 DROP TRIGGER trg_1;
5621 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5622 f_int2 = CAST(f_char1 AS SIGNED INT),
5623 f_charbig = 'just inserted'
5624    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5625 DELETE FROM t0_aux
5626 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5627 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5628 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5629 'just inserted' FROM t0_template
5630 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5631 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5632 BEGIN
5633 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5634 f_charbig = 'updated by trigger'
5635       WHERE f_int1 = - old.f_int1;
5636 END|
5637 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5638 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5639         
5640 # check trigger-6 success:      1
5641 DROP TRIGGER trg_1;
5642 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5643 f_int2 = CAST(f_char1 AS SIGNED INT),
5644 f_charbig = 'just inserted'
5645    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5646 DELETE FROM t0_aux
5647 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5648 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5649 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5650 'just inserted' FROM t0_template
5651 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5652 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5653 BEGIN
5654 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5655 f_charbig = 'updated by trigger'
5656       WHERE f_int1 = - old.f_int1;
5657 END|
5658 DELETE FROM t0_aux
5659 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5660         
5661 # check trigger-7 success:      1
5662 DROP TRIGGER trg_1;
5663 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5664 f_int2 = CAST(f_char1 AS SIGNED INT),
5665 f_charbig = 'just inserted'
5666    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5667 DELETE FROM t0_aux
5668 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5669 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5670 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5671 'just inserted' FROM t0_template
5672 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5673 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5674 BEGIN
5675 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5676 f_charbig = 'updated by trigger'
5677       WHERE f_int1 = - old.f_int1;
5678 END|
5679 DELETE FROM t0_aux
5680 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5681         
5682 # check trigger-8 success:      1
5683 DROP TRIGGER trg_1;
5684 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5685 f_int2 = CAST(f_char1 AS SIGNED INT),
5686 f_charbig = 'just inserted'
5687    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5688 DELETE FROM t0_aux
5689 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5690 DELETE FROM t1
5691 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5692 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5693 BEGIN
5694 SET new.f_int1 = old.f_int1 + @max_row,
5695 new.f_int2 = old.f_int2 - @max_row,
5696 new.f_charbig = '####updated per update trigger####';
5697 END|
5698 UPDATE t1
5699 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5700 f_charbig = '####updated per update statement itself####';
5701         
5702 # check trigger-9 success:      1
5703 DROP TRIGGER trg_2;
5704 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5705 f_int2 = CAST(f_char1 AS SIGNED INT),
5706 f_charbig = CONCAT('===',f_char1,'===');
5707 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5708 BEGIN
5709 SET new.f_int1 = new.f_int1 + @max_row,
5710 new.f_int2 = new.f_int2 - @max_row,
5711 new.f_charbig = '####updated per update trigger####';
5712 END|
5713 UPDATE t1
5714 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5715 f_charbig = '####updated per update statement itself####';
5716         
5717 # check trigger-10 success:     1
5718 DROP TRIGGER trg_2;
5719 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5720 f_int2 = CAST(f_char1 AS SIGNED INT),
5721 f_charbig = CONCAT('===',f_char1,'===');
5722 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5723 BEGIN
5724 SET new.f_int1 = @my_max1 + @counter,
5725 new.f_int2 = @my_min2 - @counter,
5726 new.f_charbig = '####updated per insert trigger####';
5727 SET @counter = @counter + 1;
5728 END|
5729 SET @counter = 1;
5730 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5731 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5732 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5733 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5734 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5735 ORDER BY f_int1;
5736 DROP TRIGGER trg_3;
5737         
5738 # check trigger-11 success:     1
5739 DELETE FROM t1
5740 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5741 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5742 AND f_charbig = '####updated per insert trigger####';
5743 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5744 BEGIN
5745 SET new.f_int1 = @my_max1 + @counter,
5746 new.f_int2 = @my_min2 - @counter,
5747 new.f_charbig = '####updated per insert trigger####';
5748 SET @counter = @counter + 1;
5749 END|
5750 SET @counter = 1;
5751 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5752 INSERT INTO t1 (f_char1, f_char2, f_charbig)
5753 SELECT CAST(f_int1 AS CHAR),
5754 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5755 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5756 ORDER BY f_int1;
5757 DROP TRIGGER trg_3;
5758         
5759 # check trigger-12 success:     1
5760 DELETE FROM t1
5761 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5762 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5763 AND f_charbig = '####updated per insert trigger####';
5764 ANALYZE  TABLE t1;
5765 Table   Op      Msg_type        Msg_text
5766 test.t1 analyze status  OK
5767 CHECK    TABLE t1 EXTENDED;
5768 Table   Op      Msg_type        Msg_text
5769 test.t1 check   status  OK
5770 CHECKSUM TABLE t1 EXTENDED;
5771 Table   Checksum
5772 test.t1 <some_value>
5773 OPTIMIZE TABLE t1;
5774 Table   Op      Msg_type        Msg_text
5775 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
5776 test.t1 optimize        status  OK
5777 # check layout success:    1
5778 REPAIR   TABLE t1 EXTENDED;
5779 Table   Op      Msg_type        Msg_text
5780 test.t1 repair  note    The storage engine for the table doesn't support repair
5781 # check layout success:    1
5782 TRUNCATE t1;
5783         
5784 # check TRUNCATE success:       1
5785 # check layout success:    1
5786 # End usability test (inc/partition_check.inc)
5787 DROP TABLE t1;
5788 CREATE TABLE t1 (
5789 f_int1 INTEGER,
5790 f_int2 INTEGER,
5791 f_char1 CHAR(20),
5792 f_char2 CHAR(20),
5793 f_charbig VARCHAR(1000)
5794 , PRIMARY KEY (f_int1,f_int2)
5796 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
5797 (PARTITION parta VALUES LESS THAN (0),
5798 PARTITION partb VALUES LESS THAN (5),
5799 PARTITION partc VALUES LESS THAN (10),
5800 PARTITION partd VALUES LESS THAN (2147483646));
5801 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5802 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5803 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5804 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
5805 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5806 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5807 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5808 # Start usability test (inc/partition_check.inc)
5809 create_command
5810 SHOW CREATE TABLE t1;
5811 Table   Create Table
5812 t1      CREATE TABLE `t1` (
5813   `f_int1` int(11) NOT NULL DEFAULT '0',
5814   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
5815   `f_char1` char(20) DEFAULT NULL,
5816   `f_char2` char(20) DEFAULT NULL,
5817   `f_charbig` varchar(1000) DEFAULT NULL,
5818   PRIMARY KEY (`f_int1`,`f_int2`)
5819 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
5820 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
5821 SUBPARTITION BY HASH (f_int1)
5822 SUBPARTITIONS 2
5823 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5824  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5825  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5826  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5828 # check prerequisites-1 success:    1
5829 # check COUNT(*) success:    1
5830 # check MIN/MAX(f_int1) success:    1
5831 # check MIN/MAX(f_int2) success:    1
5832 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5833 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5834 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5835 WHERE f_int1 IN (2,3);
5836 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5837 # check prerequisites-3 success:    1
5838 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5839 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5840 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5841 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5842 WHERE f_int1 IN (2,3);
5843 DELETE FROM t1 WHERE f_charbig = 'delete me';
5844 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5845 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5846 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5847 WHERE f_int1 IN (2,3);
5848 DELETE FROM t1 WHERE f_charbig = 'delete me';
5849 # check read via f_int1 success: 1
5850 # check read via f_int2 success: 1
5851         
5852 # check multiple-1 success:     1
5853 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5854         
5855 # check multiple-2 success:     1
5856 INSERT INTO t1 SELECT * FROM t0_template
5857 WHERE MOD(f_int1,3) = 0;
5858         
5859 # check multiple-3 success:     1
5860 UPDATE t1 SET f_int1 = f_int1 + @max_row
5861 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5862 AND @max_row_div2 + @max_row_div4;
5863         
5864 # check multiple-4 success:     1
5865 DELETE FROM t1
5866 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5867 AND @max_row_div2 + @max_row_div4 + @max_row;
5868         
5869 # check multiple-5 success:     1
5870 SELECT COUNT(*) INTO @try_count FROM t0_template
5871 WHERE MOD(f_int1,3) = 0
5872 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5873 SELECT COUNT(*) INTO @clash_count
5874 FROM t1 INNER JOIN t0_template USING(f_int1)
5875 WHERE MOD(f_int1,3) = 0
5876 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5877 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5878 INSERT INTO t1
5879 SET f_int1 = @cur_value , f_int2 = @cur_value,
5880 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5881 f_charbig = '#SINGLE#';
5882         
5883 # check single-1 success:       1
5884 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5885 INSERT INTO t1
5886 SET f_int1 = @cur_value , f_int2 = @cur_value,
5887 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5888 f_charbig = '#SINGLE#';
5889         
5890 # check single-2 success:       1
5891 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5892 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5893 UPDATE t1 SET f_int1 = @cur_value2
5894 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5895         
5896 # check single-3 success:       1
5897 SET @cur_value1= -1;
5898 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5899 UPDATE t1 SET f_int1 = @cur_value1
5900 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5901         
5902 # check single-4 success:       1
5903 SELECT MAX(f_int1) INTO @cur_value FROM t1;
5904 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5905         
5906 # check single-5 success:       1
5907 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5908         
5909 # check single-6 success:       1
5910 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5911 Warnings:
5912 Warning 1264    Out of range value for column 'f_int2' at row 1
5913         
5914 # check single-7 success:       1
5915 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
5916 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5917 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5918 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5919 f_charbig = '#NULL#';
5920 INSERT INTO t1
5921 SET f_int1 = NULL , f_int2 = -@max_row,
5922 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5923 f_charbig = '#NULL#';
5924 ERROR 23000: Column 'f_int1' cannot be null
5925 # check null success:    1
5926 DELETE FROM t1
5927 WHERE f_int1 = 0 AND f_int2 = 0
5928 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5929 AND f_charbig = '#NULL#';
5930 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5931 SELECT f_int1, f_int1, '', '', 'was inserted'
5932    FROM t0_template source_tab
5933 WHERE MOD(f_int1,3) = 0
5934 AND f_int1 BETWEEN @max_row_div2 AND @max_row
5935 ON DUPLICATE KEY
5936 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5937 f_int2 = 2 * @max_row + source_tab.f_int1,
5938 f_charbig = 'was updated';
5939         
5940 # check unique-1-a success:     1
5941         
5942 # check unique-1-b success:     1
5943 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5944 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5945 f_int2 = CAST(f_char1 AS SIGNED INT),
5946 f_charbig = CONCAT('===',f_char1,'===')
5947 WHERE f_charbig = 'was updated';
5948 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5949 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5950    FROM t0_template source_tab
5951 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5952         
5953 # check replace success:        1
5954 DELETE FROM t1
5955 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5956 DELETE FROM t1
5957 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5958 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5959 UPDATE t1 SET f_int2 = f_int1,
5960 f_char1 = CAST(f_int1 AS CHAR),
5961 f_char2 = CAST(f_int1 AS CHAR),
5962 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5963 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5964 SET AUTOCOMMIT= 0;
5965 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5966 SELECT f_int1, f_int1, '', '', 'was inserted'
5967 FROM t0_template source_tab
5968 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5969         
5970 # check transactions-1 success:         1
5971 COMMIT WORK;
5972         
5973 # check transactions-2 success:         1
5974 ROLLBACK WORK;
5975         
5976 # check transactions-3 success:         1
5977 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5978 COMMIT WORK;
5979 ROLLBACK WORK;
5980         
5981 # check transactions-4 success:         1
5982 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5983 SELECT f_int1, f_int1, '', '', 'was inserted'
5984 FROM t0_template source_tab
5985 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5986         
5987 # check transactions-5 success:         1
5988 ROLLBACK WORK;
5989         
5990 # check transactions-6 success:         1
5991 # INFO: Storage engine used for t1 seems to be transactional.
5992 COMMIT;
5993         
5994 # check transactions-7 success:         1
5995 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5996 COMMIT WORK;
5997 SET @@session.sql_mode = 'traditional';
5998 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5999 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6000 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6001 '', '', 'was inserted' FROM t0_template
6002 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6003 ERROR 22012: Division by 0
6004 COMMIT;
6005         
6006 # check transactions-8 success:         1
6007 # INFO: Storage engine used for t1 seems to be able to revert
6008 #       changes made by the failing statement.
6009 SET @@session.sql_mode = '';
6010 SET AUTOCOMMIT= 1;
6011 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6012 COMMIT WORK;
6013 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6014         
6015 # check special-1 success:      1
6016 UPDATE t1 SET f_charbig = '';
6017         
6018 # check special-2 success:      1
6019 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6020 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6021 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6022 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6023 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6024 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6025 'just inserted' FROM t0_template
6026 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6027 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6028 BEGIN
6029 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6030 f_charbig = 'updated by trigger'
6031       WHERE f_int1 = new.f_int1;
6032 END|
6033 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6034 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6035 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6036         
6037 # check trigger-1 success:      1
6038 DROP TRIGGER trg_1;
6039 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6040 f_int2 = CAST(f_char1 AS SIGNED INT),
6041 f_charbig = 'just inserted'
6042    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6043 DELETE FROM t0_aux
6044 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6045 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6046 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6047 'just inserted' FROM t0_template
6048 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6049 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6050 BEGIN
6051 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6052 f_charbig = 'updated by trigger'
6053       WHERE f_int1 = new.f_int1;
6054 END|
6055 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6056 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6057 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6058         
6059 # check trigger-2 success:      1
6060 DROP TRIGGER trg_1;
6061 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6062 f_int2 = CAST(f_char1 AS SIGNED INT),
6063 f_charbig = 'just inserted'
6064    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6065 DELETE FROM t0_aux
6066 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6067 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6068 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6069 'just inserted' FROM t0_template
6070 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6071 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6072 BEGIN
6073 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6074 f_charbig = 'updated by trigger'
6075       WHERE f_int1 = new.f_int1;
6076 END|
6077 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6078 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6079         
6080 # check trigger-3 success:      1
6081 DROP TRIGGER trg_1;
6082 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6083 f_int2 = CAST(f_char1 AS SIGNED INT),
6084 f_charbig = 'just inserted'
6085    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6086 DELETE FROM t0_aux
6087 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6088 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6089 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6090 'just inserted' FROM t0_template
6091 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6092 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6093 BEGIN
6094 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6095 f_charbig = 'updated by trigger'
6096       WHERE f_int1 = - old.f_int1;
6097 END|
6098 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6099 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6100         
6101 # check trigger-4 success:      1
6102 DROP TRIGGER trg_1;
6103 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6104 f_int2 = CAST(f_char1 AS SIGNED INT),
6105 f_charbig = 'just inserted'
6106    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6107 DELETE FROM t0_aux
6108 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6109 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6110 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6111 'just inserted' FROM t0_template
6112 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6113 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6114 BEGIN
6115 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6116 f_charbig = 'updated by trigger'
6117       WHERE f_int1 = new.f_int1;
6118 END|
6119 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6120 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6121         
6122 # check trigger-5 success:      1
6123 DROP TRIGGER trg_1;
6124 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6125 f_int2 = CAST(f_char1 AS SIGNED INT),
6126 f_charbig = 'just inserted'
6127    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6128 DELETE FROM t0_aux
6129 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6130 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6131 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6132 'just inserted' FROM t0_template
6133 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6134 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6135 BEGIN
6136 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6137 f_charbig = 'updated by trigger'
6138       WHERE f_int1 = - old.f_int1;
6139 END|
6140 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6141 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6142         
6143 # check trigger-6 success:      1
6144 DROP TRIGGER trg_1;
6145 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6146 f_int2 = CAST(f_char1 AS SIGNED INT),
6147 f_charbig = 'just inserted'
6148    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6149 DELETE FROM t0_aux
6150 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6151 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6152 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6153 'just inserted' FROM t0_template
6154 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6155 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6156 BEGIN
6157 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6158 f_charbig = 'updated by trigger'
6159       WHERE f_int1 = - old.f_int1;
6160 END|
6161 DELETE FROM t0_aux
6162 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6163         
6164 # check trigger-7 success:      1
6165 DROP TRIGGER trg_1;
6166 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6167 f_int2 = CAST(f_char1 AS SIGNED INT),
6168 f_charbig = 'just inserted'
6169    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6170 DELETE FROM t0_aux
6171 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6172 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6173 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6174 'just inserted' FROM t0_template
6175 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6176 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6177 BEGIN
6178 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6179 f_charbig = 'updated by trigger'
6180       WHERE f_int1 = - old.f_int1;
6181 END|
6182 DELETE FROM t0_aux
6183 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6184         
6185 # check trigger-8 success:      1
6186 DROP TRIGGER trg_1;
6187 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6188 f_int2 = CAST(f_char1 AS SIGNED INT),
6189 f_charbig = 'just inserted'
6190    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6191 DELETE FROM t0_aux
6192 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6193 DELETE FROM t1
6194 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6195 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6196 BEGIN
6197 SET new.f_int1 = old.f_int1 + @max_row,
6198 new.f_int2 = old.f_int2 - @max_row,
6199 new.f_charbig = '####updated per update trigger####';
6200 END|
6201 UPDATE t1
6202 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6203 f_charbig = '####updated per update statement itself####';
6204         
6205 # check trigger-9 success:      1
6206 DROP TRIGGER trg_2;
6207 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6208 f_int2 = CAST(f_char1 AS SIGNED INT),
6209 f_charbig = CONCAT('===',f_char1,'===');
6210 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6211 BEGIN
6212 SET new.f_int1 = new.f_int1 + @max_row,
6213 new.f_int2 = new.f_int2 - @max_row,
6214 new.f_charbig = '####updated per update trigger####';
6215 END|
6216 UPDATE t1
6217 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6218 f_charbig = '####updated per update statement itself####';
6219         
6220 # check trigger-10 success:     1
6221 DROP TRIGGER trg_2;
6222 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6223 f_int2 = CAST(f_char1 AS SIGNED INT),
6224 f_charbig = CONCAT('===',f_char1,'===');
6225 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6226 BEGIN
6227 SET new.f_int1 = @my_max1 + @counter,
6228 new.f_int2 = @my_min2 - @counter,
6229 new.f_charbig = '####updated per insert trigger####';
6230 SET @counter = @counter + 1;
6231 END|
6232 SET @counter = 1;
6233 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6234 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6235 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6236 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6237 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6238 ORDER BY f_int1;
6239 DROP TRIGGER trg_3;
6240         
6241 # check trigger-11 success:     1
6242 DELETE FROM t1
6243 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6244 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6245 AND f_charbig = '####updated per insert trigger####';
6246 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6247 BEGIN
6248 SET new.f_int1 = @my_max1 + @counter,
6249 new.f_int2 = @my_min2 - @counter,
6250 new.f_charbig = '####updated per insert trigger####';
6251 SET @counter = @counter + 1;
6252 END|
6253 SET @counter = 1;
6254 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6255 INSERT INTO t1 (f_char1, f_char2, f_charbig)
6256 SELECT CAST(f_int1 AS CHAR),
6257 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6258 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6259 ORDER BY f_int1;
6260 DROP TRIGGER trg_3;
6261         
6262 # check trigger-12 success:     1
6263 DELETE FROM t1
6264 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6265 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6266 AND f_charbig = '####updated per insert trigger####';
6267 ANALYZE  TABLE t1;
6268 Table   Op      Msg_type        Msg_text
6269 test.t1 analyze status  OK
6270 CHECK    TABLE t1 EXTENDED;
6271 Table   Op      Msg_type        Msg_text
6272 test.t1 check   status  OK
6273 CHECKSUM TABLE t1 EXTENDED;
6274 Table   Checksum
6275 test.t1 <some_value>
6276 OPTIMIZE TABLE t1;
6277 Table   Op      Msg_type        Msg_text
6278 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
6279 test.t1 optimize        status  OK
6280 # check layout success:    1
6281 REPAIR   TABLE t1 EXTENDED;
6282 Table   Op      Msg_type        Msg_text
6283 test.t1 repair  note    The storage engine for the table doesn't support repair
6284 # check layout success:    1
6285 TRUNCATE t1;
6286         
6287 # check TRUNCATE success:       1
6288 # check layout success:    1
6289 # End usability test (inc/partition_check.inc)
6290 DROP TABLE t1;
6291 CREATE TABLE t1 (
6292 f_int1 INTEGER,
6293 f_int2 INTEGER,
6294 f_char1 CHAR(20),
6295 f_char2 CHAR(20),
6296 f_charbig VARCHAR(1000)
6297 , PRIMARY KEY (f_int1,f_int2)
6299 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
6300 (PARTITION part1 VALUES LESS THAN (0)
6301 (SUBPARTITION subpart11, SUBPARTITION subpart12),
6302 PARTITION part2 VALUES LESS THAN (5)
6303 (SUBPARTITION subpart21, SUBPARTITION subpart22),
6304 PARTITION part3 VALUES LESS THAN (10)
6305 (SUBPARTITION subpart31, SUBPARTITION subpart32),
6306 PARTITION part4 VALUES LESS THAN (2147483646)
6307 (SUBPARTITION subpart41, SUBPARTITION subpart42));
6308 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6309 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6310 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6311 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
6312 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6313 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6314 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6315 # Start usability test (inc/partition_check.inc)
6316 create_command
6317 SHOW CREATE TABLE t1;
6318 Table   Create Table
6319 t1      CREATE TABLE `t1` (
6320   `f_int1` int(11) NOT NULL DEFAULT '0',
6321   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
6322   `f_char1` char(20) DEFAULT NULL,
6323   `f_char2` char(20) DEFAULT NULL,
6324   `f_charbig` varchar(1000) DEFAULT NULL,
6325   PRIMARY KEY (`f_int1`,`f_int2`)
6326 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
6327 /*!50100 PARTITION BY RANGE (f_int1)
6328 SUBPARTITION BY KEY (f_int1)
6329 (PARTITION part1 VALUES LESS THAN (0)
6330  (SUBPARTITION subpart11 ENGINE = InnoDB,
6331   SUBPARTITION subpart12 ENGINE = InnoDB),
6332  PARTITION part2 VALUES LESS THAN (5)
6333  (SUBPARTITION subpart21 ENGINE = InnoDB,
6334   SUBPARTITION subpart22 ENGINE = InnoDB),
6335  PARTITION part3 VALUES LESS THAN (10)
6336  (SUBPARTITION subpart31 ENGINE = InnoDB,
6337   SUBPARTITION subpart32 ENGINE = InnoDB),
6338  PARTITION part4 VALUES LESS THAN (2147483646)
6339  (SUBPARTITION subpart41 ENGINE = InnoDB,
6340   SUBPARTITION subpart42 ENGINE = InnoDB)) */
6342 # check prerequisites-1 success:    1
6343 # check COUNT(*) success:    1
6344 # check MIN/MAX(f_int1) success:    1
6345 # check MIN/MAX(f_int2) success:    1
6346 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6347 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6348 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6349 WHERE f_int1 IN (2,3);
6350 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6351 # check prerequisites-3 success:    1
6352 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6353 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6354 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6355 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6356 WHERE f_int1 IN (2,3);
6357 DELETE FROM t1 WHERE f_charbig = 'delete me';
6358 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6359 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6360 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6361 WHERE f_int1 IN (2,3);
6362 DELETE FROM t1 WHERE f_charbig = 'delete me';
6363 # check read via f_int1 success: 1
6364 # check read via f_int2 success: 1
6365         
6366 # check multiple-1 success:     1
6367 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6368         
6369 # check multiple-2 success:     1
6370 INSERT INTO t1 SELECT * FROM t0_template
6371 WHERE MOD(f_int1,3) = 0;
6372         
6373 # check multiple-3 success:     1
6374 UPDATE t1 SET f_int1 = f_int1 + @max_row
6375 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6376 AND @max_row_div2 + @max_row_div4;
6377         
6378 # check multiple-4 success:     1
6379 DELETE FROM t1
6380 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6381 AND @max_row_div2 + @max_row_div4 + @max_row;
6382         
6383 # check multiple-5 success:     1
6384 SELECT COUNT(*) INTO @try_count FROM t0_template
6385 WHERE MOD(f_int1,3) = 0
6386 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6387 SELECT COUNT(*) INTO @clash_count
6388 FROM t1 INNER JOIN t0_template USING(f_int1)
6389 WHERE MOD(f_int1,3) = 0
6390 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6391 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6392 INSERT INTO t1
6393 SET f_int1 = @cur_value , f_int2 = @cur_value,
6394 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6395 f_charbig = '#SINGLE#';
6396         
6397 # check single-1 success:       1
6398 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6399 INSERT INTO t1
6400 SET f_int1 = @cur_value , f_int2 = @cur_value,
6401 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6402 f_charbig = '#SINGLE#';
6403         
6404 # check single-2 success:       1
6405 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6406 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6407 UPDATE t1 SET f_int1 = @cur_value2
6408 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6409         
6410 # check single-3 success:       1
6411 SET @cur_value1= -1;
6412 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6413 UPDATE t1 SET f_int1 = @cur_value1
6414 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6415         
6416 # check single-4 success:       1
6417 SELECT MAX(f_int1) INTO @cur_value FROM t1;
6418 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6419         
6420 # check single-5 success:       1
6421 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6422         
6423 # check single-6 success:       1
6424 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6425 ERROR HY000: Table has no partition for value 2147483647
6426 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6427 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6428 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6429 f_charbig = '#NULL#';
6430 INSERT INTO t1
6431 SET f_int1 = NULL , f_int2 = -@max_row,
6432 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6433 f_charbig = '#NULL#';
6434 ERROR 23000: Column 'f_int1' cannot be null
6435 # check null success:    1
6436 DELETE FROM t1
6437 WHERE f_int1 = 0 AND f_int2 = 0
6438 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6439 AND f_charbig = '#NULL#';
6440 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6441 SELECT f_int1, f_int1, '', '', 'was inserted'
6442    FROM t0_template source_tab
6443 WHERE MOD(f_int1,3) = 0
6444 AND f_int1 BETWEEN @max_row_div2 AND @max_row
6445 ON DUPLICATE KEY
6446 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6447 f_int2 = 2 * @max_row + source_tab.f_int1,
6448 f_charbig = 'was updated';
6449         
6450 # check unique-1-a success:     1
6451         
6452 # check unique-1-b success:     1
6453 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6454 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6455 f_int2 = CAST(f_char1 AS SIGNED INT),
6456 f_charbig = CONCAT('===',f_char1,'===')
6457 WHERE f_charbig = 'was updated';
6458 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6459 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6460    FROM t0_template source_tab
6461 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6462         
6463 # check replace success:        1
6464 DELETE FROM t1
6465 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6466 DELETE FROM t1
6467 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6468 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6469 UPDATE t1 SET f_int2 = f_int1,
6470 f_char1 = CAST(f_int1 AS CHAR),
6471 f_char2 = CAST(f_int1 AS CHAR),
6472 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6473 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6474 SET AUTOCOMMIT= 0;
6475 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6476 SELECT f_int1, f_int1, '', '', 'was inserted'
6477 FROM t0_template source_tab
6478 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6479         
6480 # check transactions-1 success:         1
6481 COMMIT WORK;
6482         
6483 # check transactions-2 success:         1
6484 ROLLBACK WORK;
6485         
6486 # check transactions-3 success:         1
6487 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6488 COMMIT WORK;
6489 ROLLBACK WORK;
6490         
6491 # check transactions-4 success:         1
6492 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6493 SELECT f_int1, f_int1, '', '', 'was inserted'
6494 FROM t0_template source_tab
6495 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6496         
6497 # check transactions-5 success:         1
6498 ROLLBACK WORK;
6499         
6500 # check transactions-6 success:         1
6501 # INFO: Storage engine used for t1 seems to be transactional.
6502 COMMIT;
6503         
6504 # check transactions-7 success:         1
6505 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6506 COMMIT WORK;
6507 SET @@session.sql_mode = 'traditional';
6508 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6509 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6510 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6511 '', '', 'was inserted' FROM t0_template
6512 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6513 ERROR 22012: Division by 0
6514 COMMIT;
6515         
6516 # check transactions-8 success:         1
6517 # INFO: Storage engine used for t1 seems to be able to revert
6518 #       changes made by the failing statement.
6519 SET @@session.sql_mode = '';
6520 SET AUTOCOMMIT= 1;
6521 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6522 COMMIT WORK;
6523 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6524         
6525 # check special-1 success:      1
6526 UPDATE t1 SET f_charbig = '';
6527         
6528 # check special-2 success:      1
6529 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6530 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6531 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6532 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6533 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6534 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6535 'just inserted' FROM t0_template
6536 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6537 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6538 BEGIN
6539 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6540 f_charbig = 'updated by trigger'
6541       WHERE f_int1 = new.f_int1;
6542 END|
6543 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6544 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6546         
6547 # check trigger-1 success:      1
6548 DROP TRIGGER trg_1;
6549 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6550 f_int2 = CAST(f_char1 AS SIGNED INT),
6551 f_charbig = 'just inserted'
6552    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6553 DELETE FROM t0_aux
6554 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6555 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6556 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6557 'just inserted' FROM t0_template
6558 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6559 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6560 BEGIN
6561 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6562 f_charbig = 'updated by trigger'
6563       WHERE f_int1 = new.f_int1;
6564 END|
6565 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6566 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6567 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6568         
6569 # check trigger-2 success:      1
6570 DROP TRIGGER trg_1;
6571 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6572 f_int2 = CAST(f_char1 AS SIGNED INT),
6573 f_charbig = 'just inserted'
6574    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6575 DELETE FROM t0_aux
6576 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6577 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6578 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6579 'just inserted' FROM t0_template
6580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6581 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6582 BEGIN
6583 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6584 f_charbig = 'updated by trigger'
6585       WHERE f_int1 = new.f_int1;
6586 END|
6587 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6588 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6589         
6590 # check trigger-3 success:      1
6591 DROP TRIGGER trg_1;
6592 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6593 f_int2 = CAST(f_char1 AS SIGNED INT),
6594 f_charbig = 'just inserted'
6595    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6596 DELETE FROM t0_aux
6597 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6598 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6599 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6600 'just inserted' FROM t0_template
6601 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6602 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6603 BEGIN
6604 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6605 f_charbig = 'updated by trigger'
6606       WHERE f_int1 = - old.f_int1;
6607 END|
6608 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6609 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6610         
6611 # check trigger-4 success:      1
6612 DROP TRIGGER trg_1;
6613 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6614 f_int2 = CAST(f_char1 AS SIGNED INT),
6615 f_charbig = 'just inserted'
6616    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6617 DELETE FROM t0_aux
6618 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6619 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6620 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6621 'just inserted' FROM t0_template
6622 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6623 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6624 BEGIN
6625 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6626 f_charbig = 'updated by trigger'
6627       WHERE f_int1 = new.f_int1;
6628 END|
6629 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6630 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6631         
6632 # check trigger-5 success:      1
6633 DROP TRIGGER trg_1;
6634 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6635 f_int2 = CAST(f_char1 AS SIGNED INT),
6636 f_charbig = 'just inserted'
6637    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6638 DELETE FROM t0_aux
6639 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6640 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6641 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6642 'just inserted' FROM t0_template
6643 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6644 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6645 BEGIN
6646 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6647 f_charbig = 'updated by trigger'
6648       WHERE f_int1 = - old.f_int1;
6649 END|
6650 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6651 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6652         
6653 # check trigger-6 success:      1
6654 DROP TRIGGER trg_1;
6655 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6656 f_int2 = CAST(f_char1 AS SIGNED INT),
6657 f_charbig = 'just inserted'
6658    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6659 DELETE FROM t0_aux
6660 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6661 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6662 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6663 'just inserted' FROM t0_template
6664 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6665 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6666 BEGIN
6667 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6668 f_charbig = 'updated by trigger'
6669       WHERE f_int1 = - old.f_int1;
6670 END|
6671 DELETE FROM t0_aux
6672 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6673         
6674 # check trigger-7 success:      1
6675 DROP TRIGGER trg_1;
6676 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6677 f_int2 = CAST(f_char1 AS SIGNED INT),
6678 f_charbig = 'just inserted'
6679    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6680 DELETE FROM t0_aux
6681 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6682 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6683 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6684 'just inserted' FROM t0_template
6685 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6686 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6687 BEGIN
6688 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6689 f_charbig = 'updated by trigger'
6690       WHERE f_int1 = - old.f_int1;
6691 END|
6692 DELETE FROM t0_aux
6693 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6694         
6695 # check trigger-8 success:      1
6696 DROP TRIGGER trg_1;
6697 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6698 f_int2 = CAST(f_char1 AS SIGNED INT),
6699 f_charbig = 'just inserted'
6700    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6701 DELETE FROM t0_aux
6702 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6703 DELETE FROM t1
6704 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6705 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6706 BEGIN
6707 SET new.f_int1 = old.f_int1 + @max_row,
6708 new.f_int2 = old.f_int2 - @max_row,
6709 new.f_charbig = '####updated per update trigger####';
6710 END|
6711 UPDATE t1
6712 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6713 f_charbig = '####updated per update statement itself####';
6714         
6715 # check trigger-9 success:      1
6716 DROP TRIGGER trg_2;
6717 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6718 f_int2 = CAST(f_char1 AS SIGNED INT),
6719 f_charbig = CONCAT('===',f_char1,'===');
6720 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6721 BEGIN
6722 SET new.f_int1 = new.f_int1 + @max_row,
6723 new.f_int2 = new.f_int2 - @max_row,
6724 new.f_charbig = '####updated per update trigger####';
6725 END|
6726 UPDATE t1
6727 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6728 f_charbig = '####updated per update statement itself####';
6729         
6730 # check trigger-10 success:     1
6731 DROP TRIGGER trg_2;
6732 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6733 f_int2 = CAST(f_char1 AS SIGNED INT),
6734 f_charbig = CONCAT('===',f_char1,'===');
6735 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6736 BEGIN
6737 SET new.f_int1 = @my_max1 + @counter,
6738 new.f_int2 = @my_min2 - @counter,
6739 new.f_charbig = '####updated per insert trigger####';
6740 SET @counter = @counter + 1;
6741 END|
6742 SET @counter = 1;
6743 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6744 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6745 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6746 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6747 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6748 ORDER BY f_int1;
6749 DROP TRIGGER trg_3;
6750         
6751 # check trigger-11 success:     1
6752 DELETE FROM t1
6753 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6754 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6755 AND f_charbig = '####updated per insert trigger####';
6756 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6757 BEGIN
6758 SET new.f_int1 = @my_max1 + @counter,
6759 new.f_int2 = @my_min2 - @counter,
6760 new.f_charbig = '####updated per insert trigger####';
6761 SET @counter = @counter + 1;
6762 END|
6763 SET @counter = 1;
6764 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6765 INSERT INTO t1 (f_char1, f_char2, f_charbig)
6766 SELECT CAST(f_int1 AS CHAR),
6767 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6768 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6769 ORDER BY f_int1;
6770 DROP TRIGGER trg_3;
6771         
6772 # check trigger-12 success:     1
6773 DELETE FROM t1
6774 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6775 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6776 AND f_charbig = '####updated per insert trigger####';
6777 ANALYZE  TABLE t1;
6778 Table   Op      Msg_type        Msg_text
6779 test.t1 analyze status  OK
6780 CHECK    TABLE t1 EXTENDED;
6781 Table   Op      Msg_type        Msg_text
6782 test.t1 check   status  OK
6783 CHECKSUM TABLE t1 EXTENDED;
6784 Table   Checksum
6785 test.t1 <some_value>
6786 OPTIMIZE TABLE t1;
6787 Table   Op      Msg_type        Msg_text
6788 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
6789 test.t1 optimize        status  OK
6790 # check layout success:    1
6791 REPAIR   TABLE t1 EXTENDED;
6792 Table   Op      Msg_type        Msg_text
6793 test.t1 repair  note    The storage engine for the table doesn't support repair
6794 # check layout success:    1
6795 TRUNCATE t1;
6796         
6797 # check TRUNCATE success:       1
6798 # check layout success:    1
6799 # End usability test (inc/partition_check.inc)
6800 DROP TABLE t1;
6801 CREATE TABLE t1 (
6802 f_int1 INTEGER,
6803 f_int2 INTEGER,
6804 f_char1 CHAR(20),
6805 f_char2 CHAR(20),
6806 f_charbig VARCHAR(1000)
6807 , PRIMARY KEY (f_int1,f_int2)
6809 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
6810 (PARTITION part1 VALUES IN (0)
6811 (SUBPARTITION sp11, SUBPARTITION sp12),
6812 PARTITION part2 VALUES IN (1)
6813 (SUBPARTITION sp21, SUBPARTITION sp22),
6814 PARTITION part3 VALUES IN (2)
6815 (SUBPARTITION sp31, SUBPARTITION sp32),
6816 PARTITION part4 VALUES IN (NULL)
6817 (SUBPARTITION sp41, SUBPARTITION sp42));
6818 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6819 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6820 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6821 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
6822 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6823 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6824 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6825 # Start usability test (inc/partition_check.inc)
6826 create_command
6827 SHOW CREATE TABLE t1;
6828 Table   Create Table
6829 t1      CREATE TABLE `t1` (
6830   `f_int1` int(11) NOT NULL DEFAULT '0',
6831   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
6832   `f_char1` char(20) DEFAULT NULL,
6833   `f_char2` char(20) DEFAULT NULL,
6834   `f_charbig` varchar(1000) DEFAULT NULL,
6835   PRIMARY KEY (`f_int1`,`f_int2`)
6836 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
6837 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
6838 SUBPARTITION BY HASH (f_int1 + 1)
6839 (PARTITION part1 VALUES IN (0)
6840  (SUBPARTITION sp11 ENGINE = InnoDB,
6841   SUBPARTITION sp12 ENGINE = InnoDB),
6842  PARTITION part2 VALUES IN (1)
6843  (SUBPARTITION sp21 ENGINE = InnoDB,
6844   SUBPARTITION sp22 ENGINE = InnoDB),
6845  PARTITION part3 VALUES IN (2)
6846  (SUBPARTITION sp31 ENGINE = InnoDB,
6847   SUBPARTITION sp32 ENGINE = InnoDB),
6848  PARTITION part4 VALUES IN (NULL)
6849  (SUBPARTITION sp41 ENGINE = InnoDB,
6850   SUBPARTITION sp42 ENGINE = InnoDB)) */
6852 # check prerequisites-1 success:    1
6853 # check COUNT(*) success:    1
6854 # check MIN/MAX(f_int1) success:    1
6855 # check MIN/MAX(f_int2) success:    1
6856 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6857 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6858 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6859 WHERE f_int1 IN (2,3);
6860 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6861 # check prerequisites-3 success:    1
6862 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6863 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6864 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6865 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6866 WHERE f_int1 IN (2,3);
6867 DELETE FROM t1 WHERE f_charbig = 'delete me';
6868 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6869 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6870 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6871 WHERE f_int1 IN (2,3);
6872 DELETE FROM t1 WHERE f_charbig = 'delete me';
6873 # check read via f_int1 success: 1
6874 # check read via f_int2 success: 1
6875         
6876 # check multiple-1 success:     1
6877 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6878         
6879 # check multiple-2 success:     1
6880 INSERT INTO t1 SELECT * FROM t0_template
6881 WHERE MOD(f_int1,3) = 0;
6882         
6883 # check multiple-3 success:     1
6884 UPDATE t1 SET f_int1 = f_int1 + @max_row
6885 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6886 AND @max_row_div2 + @max_row_div4;
6887         
6888 # check multiple-4 success:     1
6889 DELETE FROM t1
6890 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6891 AND @max_row_div2 + @max_row_div4 + @max_row;
6892         
6893 # check multiple-5 success:     1
6894 SELECT COUNT(*) INTO @try_count FROM t0_template
6895 WHERE MOD(f_int1,3) = 0
6896 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6897 SELECT COUNT(*) INTO @clash_count
6898 FROM t1 INNER JOIN t0_template USING(f_int1)
6899 WHERE MOD(f_int1,3) = 0
6900 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6901 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6902 INSERT INTO t1
6903 SET f_int1 = @cur_value , f_int2 = @cur_value,
6904 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6905 f_charbig = '#SINGLE#';
6906         
6907 # check single-1 success:       1
6908 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6909 INSERT INTO t1
6910 SET f_int1 = @cur_value , f_int2 = @cur_value,
6911 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6912 f_charbig = '#SINGLE#';
6913         
6914 # check single-2 success:       1
6915 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6916 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6917 UPDATE t1 SET f_int1 = @cur_value2
6918 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6919         
6920 # check single-3 success:       1
6921 SET @cur_value1= -1;
6922 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6923 UPDATE t1 SET f_int1 = @cur_value1
6924 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6925         
6926 # check single-4 success:       1
6927 SELECT MAX(f_int1) INTO @cur_value FROM t1;
6928 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6929         
6930 # check single-5 success:       1
6931 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6932         
6933 # check single-6 success:       1
6934 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6935 Warnings:
6936 Warning 1264    Out of range value for column 'f_int2' at row 1
6937         
6938 # check single-7 success:       1
6939 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6940 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6941 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6942 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6943 f_charbig = '#NULL#';
6944 INSERT INTO t1
6945 SET f_int1 = NULL , f_int2 = -@max_row,
6946 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6947 f_charbig = '#NULL#';
6948 ERROR 23000: Column 'f_int1' cannot be null
6949 # check null success:    1
6950 DELETE FROM t1
6951 WHERE f_int1 = 0 AND f_int2 = 0
6952 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6953 AND f_charbig = '#NULL#';
6954 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6955 SELECT f_int1, f_int1, '', '', 'was inserted'
6956    FROM t0_template source_tab
6957 WHERE MOD(f_int1,3) = 0
6958 AND f_int1 BETWEEN @max_row_div2 AND @max_row
6959 ON DUPLICATE KEY
6960 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6961 f_int2 = 2 * @max_row + source_tab.f_int1,
6962 f_charbig = 'was updated';
6963         
6964 # check unique-1-a success:     1
6965         
6966 # check unique-1-b success:     1
6967 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6968 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6969 f_int2 = CAST(f_char1 AS SIGNED INT),
6970 f_charbig = CONCAT('===',f_char1,'===')
6971 WHERE f_charbig = 'was updated';
6972 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6973 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6974    FROM t0_template source_tab
6975 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6976         
6977 # check replace success:        1
6978 DELETE FROM t1
6979 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6980 DELETE FROM t1
6981 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6982 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6983 UPDATE t1 SET f_int2 = f_int1,
6984 f_char1 = CAST(f_int1 AS CHAR),
6985 f_char2 = CAST(f_int1 AS CHAR),
6986 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6987 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6988 SET AUTOCOMMIT= 0;
6989 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6990 SELECT f_int1, f_int1, '', '', 'was inserted'
6991 FROM t0_template source_tab
6992 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6993         
6994 # check transactions-1 success:         1
6995 COMMIT WORK;
6996         
6997 # check transactions-2 success:         1
6998 ROLLBACK WORK;
6999         
7000 # check transactions-3 success:         1
7001 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7002 COMMIT WORK;
7003 ROLLBACK WORK;
7004         
7005 # check transactions-4 success:         1
7006 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7007 SELECT f_int1, f_int1, '', '', 'was inserted'
7008 FROM t0_template source_tab
7009 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7010         
7011 # check transactions-5 success:         1
7012 ROLLBACK WORK;
7013         
7014 # check transactions-6 success:         1
7015 # INFO: Storage engine used for t1 seems to be transactional.
7016 COMMIT;
7017         
7018 # check transactions-7 success:         1
7019 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7020 COMMIT WORK;
7021 SET @@session.sql_mode = 'traditional';
7022 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7023 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7024 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7025 '', '', 'was inserted' FROM t0_template
7026 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7027 ERROR 22012: Division by 0
7028 COMMIT;
7029         
7030 # check transactions-8 success:         1
7031 # INFO: Storage engine used for t1 seems to be able to revert
7032 #       changes made by the failing statement.
7033 SET @@session.sql_mode = '';
7034 SET AUTOCOMMIT= 1;
7035 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7036 COMMIT WORK;
7037 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7038         
7039 # check special-1 success:      1
7040 UPDATE t1 SET f_charbig = '';
7041         
7042 # check special-2 success:      1
7043 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7044 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7045 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7046 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7047 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7048 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7049 'just inserted' FROM t0_template
7050 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7051 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7052 BEGIN
7053 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7054 f_charbig = 'updated by trigger'
7055       WHERE f_int1 = new.f_int1;
7056 END|
7057 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7058 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7059 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7060         
7061 # check trigger-1 success:      1
7062 DROP TRIGGER trg_1;
7063 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7064 f_int2 = CAST(f_char1 AS SIGNED INT),
7065 f_charbig = 'just inserted'
7066    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7067 DELETE FROM t0_aux
7068 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7069 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7070 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7071 'just inserted' FROM t0_template
7072 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7073 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7074 BEGIN
7075 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7076 f_charbig = 'updated by trigger'
7077       WHERE f_int1 = new.f_int1;
7078 END|
7079 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7080 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7081 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7082         
7083 # check trigger-2 success:      1
7084 DROP TRIGGER trg_1;
7085 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7086 f_int2 = CAST(f_char1 AS SIGNED INT),
7087 f_charbig = 'just inserted'
7088    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7089 DELETE FROM t0_aux
7090 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7091 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7092 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7093 'just inserted' FROM t0_template
7094 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7095 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7096 BEGIN
7097 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7098 f_charbig = 'updated by trigger'
7099       WHERE f_int1 = new.f_int1;
7100 END|
7101 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7102 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7103         
7104 # check trigger-3 success:      1
7105 DROP TRIGGER trg_1;
7106 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7107 f_int2 = CAST(f_char1 AS SIGNED INT),
7108 f_charbig = 'just inserted'
7109    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7110 DELETE FROM t0_aux
7111 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7112 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7113 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7114 'just inserted' FROM t0_template
7115 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7116 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7117 BEGIN
7118 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7119 f_charbig = 'updated by trigger'
7120       WHERE f_int1 = - old.f_int1;
7121 END|
7122 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7123 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7124         
7125 # check trigger-4 success:      1
7126 DROP TRIGGER trg_1;
7127 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7128 f_int2 = CAST(f_char1 AS SIGNED INT),
7129 f_charbig = 'just inserted'
7130    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7131 DELETE FROM t0_aux
7132 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7133 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7134 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7135 'just inserted' FROM t0_template
7136 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7137 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7138 BEGIN
7139 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7140 f_charbig = 'updated by trigger'
7141       WHERE f_int1 = new.f_int1;
7142 END|
7143 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7144 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7145         
7146 # check trigger-5 success:      1
7147 DROP TRIGGER trg_1;
7148 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7149 f_int2 = CAST(f_char1 AS SIGNED INT),
7150 f_charbig = 'just inserted'
7151    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7152 DELETE FROM t0_aux
7153 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7154 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7155 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7156 'just inserted' FROM t0_template
7157 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7158 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7159 BEGIN
7160 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7161 f_charbig = 'updated by trigger'
7162       WHERE f_int1 = - old.f_int1;
7163 END|
7164 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7165 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7166         
7167 # check trigger-6 success:      1
7168 DROP TRIGGER trg_1;
7169 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7170 f_int2 = CAST(f_char1 AS SIGNED INT),
7171 f_charbig = 'just inserted'
7172    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7173 DELETE FROM t0_aux
7174 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7177 'just inserted' FROM t0_template
7178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7179 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7180 BEGIN
7181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7182 f_charbig = 'updated by trigger'
7183       WHERE f_int1 = - old.f_int1;
7184 END|
7185 DELETE FROM t0_aux
7186 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7187         
7188 # check trigger-7 success:      1
7189 DROP TRIGGER trg_1;
7190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7191 f_int2 = CAST(f_char1 AS SIGNED INT),
7192 f_charbig = 'just inserted'
7193    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7194 DELETE FROM t0_aux
7195 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7196 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7197 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7198 'just inserted' FROM t0_template
7199 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7200 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7201 BEGIN
7202 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7203 f_charbig = 'updated by trigger'
7204       WHERE f_int1 = - old.f_int1;
7205 END|
7206 DELETE FROM t0_aux
7207 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7208         
7209 # check trigger-8 success:      1
7210 DROP TRIGGER trg_1;
7211 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7212 f_int2 = CAST(f_char1 AS SIGNED INT),
7213 f_charbig = 'just inserted'
7214    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7215 DELETE FROM t0_aux
7216 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7217 DELETE FROM t1
7218 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7219 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7220 BEGIN
7221 SET new.f_int1 = old.f_int1 + @max_row,
7222 new.f_int2 = old.f_int2 - @max_row,
7223 new.f_charbig = '####updated per update trigger####';
7224 END|
7225 UPDATE t1
7226 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7227 f_charbig = '####updated per update statement itself####';
7228         
7229 # check trigger-9 success:      1
7230 DROP TRIGGER trg_2;
7231 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7232 f_int2 = CAST(f_char1 AS SIGNED INT),
7233 f_charbig = CONCAT('===',f_char1,'===');
7234 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7235 BEGIN
7236 SET new.f_int1 = new.f_int1 + @max_row,
7237 new.f_int2 = new.f_int2 - @max_row,
7238 new.f_charbig = '####updated per update trigger####';
7239 END|
7240 UPDATE t1
7241 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7242 f_charbig = '####updated per update statement itself####';
7243         
7244 # check trigger-10 success:     1
7245 DROP TRIGGER trg_2;
7246 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7247 f_int2 = CAST(f_char1 AS SIGNED INT),
7248 f_charbig = CONCAT('===',f_char1,'===');
7249 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7250 BEGIN
7251 SET new.f_int1 = @my_max1 + @counter,
7252 new.f_int2 = @my_min2 - @counter,
7253 new.f_charbig = '####updated per insert trigger####';
7254 SET @counter = @counter + 1;
7255 END|
7256 SET @counter = 1;
7257 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7258 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7259 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7260 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7261 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7262 ORDER BY f_int1;
7263 DROP TRIGGER trg_3;
7264         
7265 # check trigger-11 success:     1
7266 DELETE FROM t1
7267 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7268 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7269 AND f_charbig = '####updated per insert trigger####';
7270 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7271 BEGIN
7272 SET new.f_int1 = @my_max1 + @counter,
7273 new.f_int2 = @my_min2 - @counter,
7274 new.f_charbig = '####updated per insert trigger####';
7275 SET @counter = @counter + 1;
7276 END|
7277 SET @counter = 1;
7278 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7279 INSERT INTO t1 (f_char1, f_char2, f_charbig)
7280 SELECT CAST(f_int1 AS CHAR),
7281 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7282 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7283 ORDER BY f_int1;
7284 DROP TRIGGER trg_3;
7285         
7286 # check trigger-12 success:     1
7287 DELETE FROM t1
7288 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7289 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7290 AND f_charbig = '####updated per insert trigger####';
7291 ANALYZE  TABLE t1;
7292 Table   Op      Msg_type        Msg_text
7293 test.t1 analyze status  OK
7294 CHECK    TABLE t1 EXTENDED;
7295 Table   Op      Msg_type        Msg_text
7296 test.t1 check   status  OK
7297 CHECKSUM TABLE t1 EXTENDED;
7298 Table   Checksum
7299 test.t1 <some_value>
7300 OPTIMIZE TABLE t1;
7301 Table   Op      Msg_type        Msg_text
7302 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
7303 test.t1 optimize        status  OK
7304 # check layout success:    1
7305 REPAIR   TABLE t1 EXTENDED;
7306 Table   Op      Msg_type        Msg_text
7307 test.t1 repair  note    The storage engine for the table doesn't support repair
7308 # check layout success:    1
7309 TRUNCATE t1;
7310         
7311 # check TRUNCATE success:       1
7312 # check layout success:    1
7313 # End usability test (inc/partition_check.inc)
7314 DROP TABLE t1;
7315 CREATE TABLE t1 (
7316 f_int1 INTEGER,
7317 f_int2 INTEGER,
7318 f_char1 CHAR(20),
7319 f_char2 CHAR(20),
7320 f_charbig VARCHAR(1000)
7321 , PRIMARY KEY (f_int1,f_int2)
7323 PARTITION BY LIST(ABS(MOD(f_int1,2)))
7324 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
7325 (PARTITION part1 VALUES IN (0),
7326 PARTITION part2 VALUES IN (1),
7327 PARTITION part3 VALUES IN (NULL));
7328 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7329 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7330 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7331 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
7332 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7333 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7334 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7335 # Start usability test (inc/partition_check.inc)
7336 create_command
7337 SHOW CREATE TABLE t1;
7338 Table   Create Table
7339 t1      CREATE TABLE `t1` (
7340   `f_int1` int(11) NOT NULL DEFAULT '0',
7341   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
7342   `f_char1` char(20) DEFAULT NULL,
7343   `f_char2` char(20) DEFAULT NULL,
7344   `f_charbig` varchar(1000) DEFAULT NULL,
7345   PRIMARY KEY (`f_int1`,`f_int2`)
7346 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
7347 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
7348 SUBPARTITION BY KEY (f_int1)
7349 SUBPARTITIONS 3
7350 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
7351  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
7352  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
7354 # check prerequisites-1 success:    1
7355 # check COUNT(*) success:    1
7356 # check MIN/MAX(f_int1) success:    1
7357 # check MIN/MAX(f_int2) success:    1
7358 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7359 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7360 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7361 WHERE f_int1 IN (2,3);
7362 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7363 # check prerequisites-3 success:    1
7364 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7365 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7366 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7367 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7368 WHERE f_int1 IN (2,3);
7369 DELETE FROM t1 WHERE f_charbig = 'delete me';
7370 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7371 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7372 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7373 WHERE f_int1 IN (2,3);
7374 DELETE FROM t1 WHERE f_charbig = 'delete me';
7375 # check read via f_int1 success: 1
7376 # check read via f_int2 success: 1
7377         
7378 # check multiple-1 success:     1
7379 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7380         
7381 # check multiple-2 success:     1
7382 INSERT INTO t1 SELECT * FROM t0_template
7383 WHERE MOD(f_int1,3) = 0;
7384         
7385 # check multiple-3 success:     1
7386 UPDATE t1 SET f_int1 = f_int1 + @max_row
7387 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7388 AND @max_row_div2 + @max_row_div4;
7389         
7390 # check multiple-4 success:     1
7391 DELETE FROM t1
7392 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7393 AND @max_row_div2 + @max_row_div4 + @max_row;
7394         
7395 # check multiple-5 success:     1
7396 SELECT COUNT(*) INTO @try_count FROM t0_template
7397 WHERE MOD(f_int1,3) = 0
7398 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7399 SELECT COUNT(*) INTO @clash_count
7400 FROM t1 INNER JOIN t0_template USING(f_int1)
7401 WHERE MOD(f_int1,3) = 0
7402 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7403 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7404 INSERT INTO t1
7405 SET f_int1 = @cur_value , f_int2 = @cur_value,
7406 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7407 f_charbig = '#SINGLE#';
7408         
7409 # check single-1 success:       1
7410 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7411 INSERT INTO t1
7412 SET f_int1 = @cur_value , f_int2 = @cur_value,
7413 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7414 f_charbig = '#SINGLE#';
7415         
7416 # check single-2 success:       1
7417 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7418 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7419 UPDATE t1 SET f_int1 = @cur_value2
7420 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7421         
7422 # check single-3 success:       1
7423 SET @cur_value1= -1;
7424 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7425 UPDATE t1 SET f_int1 = @cur_value1
7426 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7427         
7428 # check single-4 success:       1
7429 SELECT MAX(f_int1) INTO @cur_value FROM t1;
7430 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7431         
7432 # check single-5 success:       1
7433 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7434         
7435 # check single-6 success:       1
7436 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7437 Warnings:
7438 Warning 1264    Out of range value for column 'f_int2' at row 1
7439         
7440 # check single-7 success:       1
7441 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7442 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7443 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7444 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7445 f_charbig = '#NULL#';
7446 INSERT INTO t1
7447 SET f_int1 = NULL , f_int2 = -@max_row,
7448 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7449 f_charbig = '#NULL#';
7450 ERROR 23000: Column 'f_int1' cannot be null
7451 # check null success:    1
7452 DELETE FROM t1
7453 WHERE f_int1 = 0 AND f_int2 = 0
7454 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7455 AND f_charbig = '#NULL#';
7456 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7457 SELECT f_int1, f_int1, '', '', 'was inserted'
7458    FROM t0_template source_tab
7459 WHERE MOD(f_int1,3) = 0
7460 AND f_int1 BETWEEN @max_row_div2 AND @max_row
7461 ON DUPLICATE KEY
7462 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7463 f_int2 = 2 * @max_row + source_tab.f_int1,
7464 f_charbig = 'was updated';
7465         
7466 # check unique-1-a success:     1
7467         
7468 # check unique-1-b success:     1
7469 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7470 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7471 f_int2 = CAST(f_char1 AS SIGNED INT),
7472 f_charbig = CONCAT('===',f_char1,'===')
7473 WHERE f_charbig = 'was updated';
7474 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7475 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7476    FROM t0_template source_tab
7477 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7478         
7479 # check replace success:        1
7480 DELETE FROM t1
7481 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7482 DELETE FROM t1
7483 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7484 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7485 UPDATE t1 SET f_int2 = f_int1,
7486 f_char1 = CAST(f_int1 AS CHAR),
7487 f_char2 = CAST(f_int1 AS CHAR),
7488 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7489 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7490 SET AUTOCOMMIT= 0;
7491 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7492 SELECT f_int1, f_int1, '', '', 'was inserted'
7493 FROM t0_template source_tab
7494 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7495         
7496 # check transactions-1 success:         1
7497 COMMIT WORK;
7498         
7499 # check transactions-2 success:         1
7500 ROLLBACK WORK;
7501         
7502 # check transactions-3 success:         1
7503 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7504 COMMIT WORK;
7505 ROLLBACK WORK;
7506         
7507 # check transactions-4 success:         1
7508 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7509 SELECT f_int1, f_int1, '', '', 'was inserted'
7510 FROM t0_template source_tab
7511 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7512         
7513 # check transactions-5 success:         1
7514 ROLLBACK WORK;
7515         
7516 # check transactions-6 success:         1
7517 # INFO: Storage engine used for t1 seems to be transactional.
7518 COMMIT;
7519         
7520 # check transactions-7 success:         1
7521 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7522 COMMIT WORK;
7523 SET @@session.sql_mode = 'traditional';
7524 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7525 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7526 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7527 '', '', 'was inserted' FROM t0_template
7528 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7529 ERROR 22012: Division by 0
7530 COMMIT;
7531         
7532 # check transactions-8 success:         1
7533 # INFO: Storage engine used for t1 seems to be able to revert
7534 #       changes made by the failing statement.
7535 SET @@session.sql_mode = '';
7536 SET AUTOCOMMIT= 1;
7537 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7538 COMMIT WORK;
7539 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7540         
7541 # check special-1 success:      1
7542 UPDATE t1 SET f_charbig = '';
7543         
7544 # check special-2 success:      1
7545 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7546 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7547 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7548 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7549 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7550 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7551 'just inserted' FROM t0_template
7552 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7553 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7554 BEGIN
7555 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7556 f_charbig = 'updated by trigger'
7557       WHERE f_int1 = new.f_int1;
7558 END|
7559 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7560 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7561 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7562         
7563 # check trigger-1 success:      1
7564 DROP TRIGGER trg_1;
7565 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7566 f_int2 = CAST(f_char1 AS SIGNED INT),
7567 f_charbig = 'just inserted'
7568    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7569 DELETE FROM t0_aux
7570 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7571 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7572 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7573 'just inserted' FROM t0_template
7574 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7575 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7576 BEGIN
7577 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7578 f_charbig = 'updated by trigger'
7579       WHERE f_int1 = new.f_int1;
7580 END|
7581 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7582 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7583 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7584         
7585 # check trigger-2 success:      1
7586 DROP TRIGGER trg_1;
7587 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7588 f_int2 = CAST(f_char1 AS SIGNED INT),
7589 f_charbig = 'just inserted'
7590    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7591 DELETE FROM t0_aux
7592 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7593 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7594 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7595 'just inserted' FROM t0_template
7596 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7597 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7598 BEGIN
7599 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7600 f_charbig = 'updated by trigger'
7601       WHERE f_int1 = new.f_int1;
7602 END|
7603 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7604 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7605         
7606 # check trigger-3 success:      1
7607 DROP TRIGGER trg_1;
7608 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7609 f_int2 = CAST(f_char1 AS SIGNED INT),
7610 f_charbig = 'just inserted'
7611    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7612 DELETE FROM t0_aux
7613 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7614 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7615 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7616 'just inserted' FROM t0_template
7617 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7618 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7619 BEGIN
7620 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7621 f_charbig = 'updated by trigger'
7622       WHERE f_int1 = - old.f_int1;
7623 END|
7624 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7625 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7626         
7627 # check trigger-4 success:      1
7628 DROP TRIGGER trg_1;
7629 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7630 f_int2 = CAST(f_char1 AS SIGNED INT),
7631 f_charbig = 'just inserted'
7632    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7633 DELETE FROM t0_aux
7634 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7635 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7636 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7637 'just inserted' FROM t0_template
7638 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7639 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7640 BEGIN
7641 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7642 f_charbig = 'updated by trigger'
7643       WHERE f_int1 = new.f_int1;
7644 END|
7645 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7646 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7647         
7648 # check trigger-5 success:      1
7649 DROP TRIGGER trg_1;
7650 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7651 f_int2 = CAST(f_char1 AS SIGNED INT),
7652 f_charbig = 'just inserted'
7653    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7654 DELETE FROM t0_aux
7655 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7656 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7657 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7658 'just inserted' FROM t0_template
7659 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7660 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7661 BEGIN
7662 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7663 f_charbig = 'updated by trigger'
7664       WHERE f_int1 = - old.f_int1;
7665 END|
7666 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7667 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7668         
7669 # check trigger-6 success:      1
7670 DROP TRIGGER trg_1;
7671 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7672 f_int2 = CAST(f_char1 AS SIGNED INT),
7673 f_charbig = 'just inserted'
7674    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7675 DELETE FROM t0_aux
7676 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7677 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7678 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7679 'just inserted' FROM t0_template
7680 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7681 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7682 BEGIN
7683 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7684 f_charbig = 'updated by trigger'
7685       WHERE f_int1 = - old.f_int1;
7686 END|
7687 DELETE FROM t0_aux
7688 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7689         
7690 # check trigger-7 success:      1
7691 DROP TRIGGER trg_1;
7692 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7693 f_int2 = CAST(f_char1 AS SIGNED INT),
7694 f_charbig = 'just inserted'
7695    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7696 DELETE FROM t0_aux
7697 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7698 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7699 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7700 'just inserted' FROM t0_template
7701 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7702 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7703 BEGIN
7704 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7705 f_charbig = 'updated by trigger'
7706       WHERE f_int1 = - old.f_int1;
7707 END|
7708 DELETE FROM t0_aux
7709 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7710         
7711 # check trigger-8 success:      1
7712 DROP TRIGGER trg_1;
7713 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7714 f_int2 = CAST(f_char1 AS SIGNED INT),
7715 f_charbig = 'just inserted'
7716    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7717 DELETE FROM t0_aux
7718 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7719 DELETE FROM t1
7720 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7721 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7722 BEGIN
7723 SET new.f_int1 = old.f_int1 + @max_row,
7724 new.f_int2 = old.f_int2 - @max_row,
7725 new.f_charbig = '####updated per update trigger####';
7726 END|
7727 UPDATE t1
7728 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7729 f_charbig = '####updated per update statement itself####';
7730         
7731 # check trigger-9 success:      1
7732 DROP TRIGGER trg_2;
7733 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7734 f_int2 = CAST(f_char1 AS SIGNED INT),
7735 f_charbig = CONCAT('===',f_char1,'===');
7736 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7737 BEGIN
7738 SET new.f_int1 = new.f_int1 + @max_row,
7739 new.f_int2 = new.f_int2 - @max_row,
7740 new.f_charbig = '####updated per update trigger####';
7741 END|
7742 UPDATE t1
7743 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7744 f_charbig = '####updated per update statement itself####';
7745         
7746 # check trigger-10 success:     1
7747 DROP TRIGGER trg_2;
7748 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7749 f_int2 = CAST(f_char1 AS SIGNED INT),
7750 f_charbig = CONCAT('===',f_char1,'===');
7751 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7752 BEGIN
7753 SET new.f_int1 = @my_max1 + @counter,
7754 new.f_int2 = @my_min2 - @counter,
7755 new.f_charbig = '####updated per insert trigger####';
7756 SET @counter = @counter + 1;
7757 END|
7758 SET @counter = 1;
7759 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7760 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7761 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7762 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7763 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7764 ORDER BY f_int1;
7765 DROP TRIGGER trg_3;
7766         
7767 # check trigger-11 success:     1
7768 DELETE FROM t1
7769 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7770 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7771 AND f_charbig = '####updated per insert trigger####';
7772 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7773 BEGIN
7774 SET new.f_int1 = @my_max1 + @counter,
7775 new.f_int2 = @my_min2 - @counter,
7776 new.f_charbig = '####updated per insert trigger####';
7777 SET @counter = @counter + 1;
7778 END|
7779 SET @counter = 1;
7780 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7781 INSERT INTO t1 (f_char1, f_char2, f_charbig)
7782 SELECT CAST(f_int1 AS CHAR),
7783 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7784 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7785 ORDER BY f_int1;
7786 DROP TRIGGER trg_3;
7787         
7788 # check trigger-12 success:     1
7789 DELETE FROM t1
7790 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7791 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7792 AND f_charbig = '####updated per insert trigger####';
7793 ANALYZE  TABLE t1;
7794 Table   Op      Msg_type        Msg_text
7795 test.t1 analyze status  OK
7796 CHECK    TABLE t1 EXTENDED;
7797 Table   Op      Msg_type        Msg_text
7798 test.t1 check   status  OK
7799 CHECKSUM TABLE t1 EXTENDED;
7800 Table   Checksum
7801 test.t1 <some_value>
7802 OPTIMIZE TABLE t1;
7803 Table   Op      Msg_type        Msg_text
7804 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
7805 test.t1 optimize        status  OK
7806 # check layout success:    1
7807 REPAIR   TABLE t1 EXTENDED;
7808 Table   Op      Msg_type        Msg_text
7809 test.t1 repair  note    The storage engine for the table doesn't support repair
7810 # check layout success:    1
7811 TRUNCATE t1;
7812         
7813 # check TRUNCATE success:       1
7814 # check layout success:    1
7815 # End usability test (inc/partition_check.inc)
7816 DROP TABLE t1;
7817 DROP TABLE IF EXISTS t1;
7818 CREATE TABLE t1 (
7819 f_int1 INTEGER,
7820 f_int2 INTEGER,
7821 f_char1 CHAR(20),
7822 f_char2 CHAR(20),
7823 f_charbig VARCHAR(1000)
7824 , PRIMARY KEY (f_int2,f_int1)
7826 PARTITION BY HASH(f_int1) PARTITIONS 2;
7827 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7828 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7829 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7830 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
7831 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7832 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7833 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7834 # Start usability test (inc/partition_check.inc)
7835 create_command
7836 SHOW CREATE TABLE t1;
7837 Table   Create Table
7838 t1      CREATE TABLE `t1` (
7839   `f_int1` int(11) NOT NULL DEFAULT '0',
7840   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
7841   `f_char1` char(20) DEFAULT NULL,
7842   `f_char2` char(20) DEFAULT NULL,
7843   `f_charbig` varchar(1000) DEFAULT NULL,
7844   PRIMARY KEY (`f_int2`,`f_int1`)
7845 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
7846 /*!50100 PARTITION BY HASH (f_int1)
7847 PARTITIONS 2 */
7849 # check prerequisites-1 success:    1
7850 # check COUNT(*) success:    1
7851 # check MIN/MAX(f_int1) success:    1
7852 # check MIN/MAX(f_int2) success:    1
7853 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7854 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7855 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7856 WHERE f_int1 IN (2,3);
7857 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7858 # check prerequisites-3 success:    1
7859 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7860 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7861 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7862 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7863 WHERE f_int1 IN (2,3);
7864 DELETE FROM t1 WHERE f_charbig = 'delete me';
7865 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7866 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7867 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7868 WHERE f_int1 IN (2,3);
7869 DELETE FROM t1 WHERE f_charbig = 'delete me';
7870 # check read via f_int1 success: 1
7871 # check read via f_int2 success: 1
7872         
7873 # check multiple-1 success:     1
7874 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7875         
7876 # check multiple-2 success:     1
7877 INSERT INTO t1 SELECT * FROM t0_template
7878 WHERE MOD(f_int1,3) = 0;
7879         
7880 # check multiple-3 success:     1
7881 UPDATE t1 SET f_int1 = f_int1 + @max_row
7882 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7883 AND @max_row_div2 + @max_row_div4;
7884         
7885 # check multiple-4 success:     1
7886 DELETE FROM t1
7887 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7888 AND @max_row_div2 + @max_row_div4 + @max_row;
7889         
7890 # check multiple-5 success:     1
7891 SELECT COUNT(*) INTO @try_count FROM t0_template
7892 WHERE MOD(f_int1,3) = 0
7893 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7894 SELECT COUNT(*) INTO @clash_count
7895 FROM t1 INNER JOIN t0_template USING(f_int1)
7896 WHERE MOD(f_int1,3) = 0
7897 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7898 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7899 INSERT INTO t1
7900 SET f_int1 = @cur_value , f_int2 = @cur_value,
7901 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7902 f_charbig = '#SINGLE#';
7903         
7904 # check single-1 success:       1
7905 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7906 INSERT INTO t1
7907 SET f_int1 = @cur_value , f_int2 = @cur_value,
7908 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7909 f_charbig = '#SINGLE#';
7910         
7911 # check single-2 success:       1
7912 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7913 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7914 UPDATE t1 SET f_int1 = @cur_value2
7915 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7916         
7917 # check single-3 success:       1
7918 SET @cur_value1= -1;
7919 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7920 UPDATE t1 SET f_int1 = @cur_value1
7921 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7922         
7923 # check single-4 success:       1
7924 SELECT MAX(f_int1) INTO @cur_value FROM t1;
7925 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7926         
7927 # check single-5 success:       1
7928 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7929         
7930 # check single-6 success:       1
7931 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7932 Warnings:
7933 Warning 1264    Out of range value for column 'f_int2' at row 1
7934         
7935 # check single-7 success:       1
7936 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7937 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7938 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7939 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7940 f_charbig = '#NULL#';
7941 INSERT INTO t1
7942 SET f_int1 = NULL , f_int2 = -@max_row,
7943 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7944 f_charbig = '#NULL#';
7945 ERROR 23000: Column 'f_int1' cannot be null
7946 # check null success:    1
7947 DELETE FROM t1
7948 WHERE f_int1 = 0 AND f_int2 = 0
7949 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7950 AND f_charbig = '#NULL#';
7951 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7952 SELECT f_int1, f_int1, '', '', 'was inserted'
7953    FROM t0_template source_tab
7954 WHERE MOD(f_int1,3) = 0
7955 AND f_int1 BETWEEN @max_row_div2 AND @max_row
7956 ON DUPLICATE KEY
7957 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7958 f_int2 = 2 * @max_row + source_tab.f_int1,
7959 f_charbig = 'was updated';
7960         
7961 # check unique-1-a success:     1
7962         
7963 # check unique-1-b success:     1
7964 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7965 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7966 f_int2 = CAST(f_char1 AS SIGNED INT),
7967 f_charbig = CONCAT('===',f_char1,'===')
7968 WHERE f_charbig = 'was updated';
7969 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7970 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7971    FROM t0_template source_tab
7972 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7973         
7974 # check replace success:        1
7975 DELETE FROM t1
7976 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7977 DELETE FROM t1
7978 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7979 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7980 UPDATE t1 SET f_int2 = f_int1,
7981 f_char1 = CAST(f_int1 AS CHAR),
7982 f_char2 = CAST(f_int1 AS CHAR),
7983 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7984 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7985 SET AUTOCOMMIT= 0;
7986 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7987 SELECT f_int1, f_int1, '', '', 'was inserted'
7988 FROM t0_template source_tab
7989 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7990         
7991 # check transactions-1 success:         1
7992 COMMIT WORK;
7993         
7994 # check transactions-2 success:         1
7995 ROLLBACK WORK;
7996         
7997 # check transactions-3 success:         1
7998 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7999 COMMIT WORK;
8000 ROLLBACK WORK;
8001         
8002 # check transactions-4 success:         1
8003 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8004 SELECT f_int1, f_int1, '', '', 'was inserted'
8005 FROM t0_template source_tab
8006 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8007         
8008 # check transactions-5 success:         1
8009 ROLLBACK WORK;
8010         
8011 # check transactions-6 success:         1
8012 # INFO: Storage engine used for t1 seems to be transactional.
8013 COMMIT;
8014         
8015 # check transactions-7 success:         1
8016 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8017 COMMIT WORK;
8018 SET @@session.sql_mode = 'traditional';
8019 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8020 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8021 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8022 '', '', 'was inserted' FROM t0_template
8023 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8024 ERROR 22012: Division by 0
8025 COMMIT;
8026         
8027 # check transactions-8 success:         1
8028 # INFO: Storage engine used for t1 seems to be able to revert
8029 #       changes made by the failing statement.
8030 SET @@session.sql_mode = '';
8031 SET AUTOCOMMIT= 1;
8032 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8033 COMMIT WORK;
8034 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8035         
8036 # check special-1 success:      1
8037 UPDATE t1 SET f_charbig = '';
8038         
8039 # check special-2 success:      1
8040 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8041 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8042 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8043 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8044 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8045 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8046 'just inserted' FROM t0_template
8047 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8048 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8049 BEGIN
8050 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8051 f_charbig = 'updated by trigger'
8052       WHERE f_int1 = new.f_int1;
8053 END|
8054 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8055 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8056 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8057         
8058 # check trigger-1 success:      1
8059 DROP TRIGGER trg_1;
8060 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8061 f_int2 = CAST(f_char1 AS SIGNED INT),
8062 f_charbig = 'just inserted'
8063    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8064 DELETE FROM t0_aux
8065 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8066 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8067 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8068 'just inserted' FROM t0_template
8069 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8070 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8071 BEGIN
8072 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8073 f_charbig = 'updated by trigger'
8074       WHERE f_int1 = new.f_int1;
8075 END|
8076 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8077 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8078 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8079         
8080 # check trigger-2 success:      1
8081 DROP TRIGGER trg_1;
8082 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8083 f_int2 = CAST(f_char1 AS SIGNED INT),
8084 f_charbig = 'just inserted'
8085    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8086 DELETE FROM t0_aux
8087 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8088 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8089 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8090 'just inserted' FROM t0_template
8091 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8092 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8093 BEGIN
8094 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8095 f_charbig = 'updated by trigger'
8096       WHERE f_int1 = new.f_int1;
8097 END|
8098 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8099 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8100         
8101 # check trigger-3 success:      1
8102 DROP TRIGGER trg_1;
8103 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8104 f_int2 = CAST(f_char1 AS SIGNED INT),
8105 f_charbig = 'just inserted'
8106    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8107 DELETE FROM t0_aux
8108 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8109 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8110 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8111 'just inserted' FROM t0_template
8112 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8113 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8114 BEGIN
8115 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8116 f_charbig = 'updated by trigger'
8117       WHERE f_int1 = - old.f_int1;
8118 END|
8119 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8120 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8121         
8122 # check trigger-4 success:      1
8123 DROP TRIGGER trg_1;
8124 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8125 f_int2 = CAST(f_char1 AS SIGNED INT),
8126 f_charbig = 'just inserted'
8127    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8128 DELETE FROM t0_aux
8129 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8130 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8131 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8132 'just inserted' FROM t0_template
8133 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8134 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8135 BEGIN
8136 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8137 f_charbig = 'updated by trigger'
8138       WHERE f_int1 = new.f_int1;
8139 END|
8140 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8141 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8142         
8143 # check trigger-5 success:      1
8144 DROP TRIGGER trg_1;
8145 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8146 f_int2 = CAST(f_char1 AS SIGNED INT),
8147 f_charbig = 'just inserted'
8148    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8149 DELETE FROM t0_aux
8150 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8151 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8152 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8153 'just inserted' FROM t0_template
8154 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8155 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8156 BEGIN
8157 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8158 f_charbig = 'updated by trigger'
8159       WHERE f_int1 = - old.f_int1;
8160 END|
8161 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8162 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8163         
8164 # check trigger-6 success:      1
8165 DROP TRIGGER trg_1;
8166 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8167 f_int2 = CAST(f_char1 AS SIGNED INT),
8168 f_charbig = 'just inserted'
8169    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8170 DELETE FROM t0_aux
8171 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8172 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8173 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8174 'just inserted' FROM t0_template
8175 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8176 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8177 BEGIN
8178 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8179 f_charbig = 'updated by trigger'
8180       WHERE f_int1 = - old.f_int1;
8181 END|
8182 DELETE FROM t0_aux
8183 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8184         
8185 # check trigger-7 success:      1
8186 DROP TRIGGER trg_1;
8187 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8188 f_int2 = CAST(f_char1 AS SIGNED INT),
8189 f_charbig = 'just inserted'
8190    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8191 DELETE FROM t0_aux
8192 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8193 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8194 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8195 'just inserted' FROM t0_template
8196 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8197 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8198 BEGIN
8199 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8200 f_charbig = 'updated by trigger'
8201       WHERE f_int1 = - old.f_int1;
8202 END|
8203 DELETE FROM t0_aux
8204 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8205         
8206 # check trigger-8 success:      1
8207 DROP TRIGGER trg_1;
8208 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8209 f_int2 = CAST(f_char1 AS SIGNED INT),
8210 f_charbig = 'just inserted'
8211    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8212 DELETE FROM t0_aux
8213 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8214 DELETE FROM t1
8215 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8216 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8217 BEGIN
8218 SET new.f_int1 = old.f_int1 + @max_row,
8219 new.f_int2 = old.f_int2 - @max_row,
8220 new.f_charbig = '####updated per update trigger####';
8221 END|
8222 UPDATE t1
8223 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8224 f_charbig = '####updated per update statement itself####';
8225         
8226 # check trigger-9 success:      1
8227 DROP TRIGGER trg_2;
8228 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8229 f_int2 = CAST(f_char1 AS SIGNED INT),
8230 f_charbig = CONCAT('===',f_char1,'===');
8231 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8232 BEGIN
8233 SET new.f_int1 = new.f_int1 + @max_row,
8234 new.f_int2 = new.f_int2 - @max_row,
8235 new.f_charbig = '####updated per update trigger####';
8236 END|
8237 UPDATE t1
8238 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8239 f_charbig = '####updated per update statement itself####';
8240         
8241 # check trigger-10 success:     1
8242 DROP TRIGGER trg_2;
8243 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8244 f_int2 = CAST(f_char1 AS SIGNED INT),
8245 f_charbig = CONCAT('===',f_char1,'===');
8246 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8247 BEGIN
8248 SET new.f_int1 = @my_max1 + @counter,
8249 new.f_int2 = @my_min2 - @counter,
8250 new.f_charbig = '####updated per insert trigger####';
8251 SET @counter = @counter + 1;
8252 END|
8253 SET @counter = 1;
8254 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8255 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8256 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8257 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8258 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8259 ORDER BY f_int1;
8260 DROP TRIGGER trg_3;
8261         
8262 # check trigger-11 success:     1
8263 DELETE FROM t1
8264 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8265 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8266 AND f_charbig = '####updated per insert trigger####';
8267 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8268 BEGIN
8269 SET new.f_int1 = @my_max1 + @counter,
8270 new.f_int2 = @my_min2 - @counter,
8271 new.f_charbig = '####updated per insert trigger####';
8272 SET @counter = @counter + 1;
8273 END|
8274 SET @counter = 1;
8275 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8276 INSERT INTO t1 (f_char1, f_char2, f_charbig)
8277 SELECT CAST(f_int1 AS CHAR),
8278 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8280 ORDER BY f_int1;
8281 DROP TRIGGER trg_3;
8282         
8283 # check trigger-12 success:     1
8284 DELETE FROM t1
8285 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8286 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8287 AND f_charbig = '####updated per insert trigger####';
8288 ANALYZE  TABLE t1;
8289 Table   Op      Msg_type        Msg_text
8290 test.t1 analyze status  OK
8291 CHECK    TABLE t1 EXTENDED;
8292 Table   Op      Msg_type        Msg_text
8293 test.t1 check   status  OK
8294 CHECKSUM TABLE t1 EXTENDED;
8295 Table   Checksum
8296 test.t1 <some_value>
8297 OPTIMIZE TABLE t1;
8298 Table   Op      Msg_type        Msg_text
8299 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8300 test.t1 optimize        status  OK
8301 # check layout success:    1
8302 REPAIR   TABLE t1 EXTENDED;
8303 Table   Op      Msg_type        Msg_text
8304 test.t1 repair  note    The storage engine for the table doesn't support repair
8305 # check layout success:    1
8306 TRUNCATE t1;
8307         
8308 # check TRUNCATE success:       1
8309 # check layout success:    1
8310 # End usability test (inc/partition_check.inc)
8311 DROP TABLE t1;
8312 CREATE TABLE t1 (
8313 f_int1 INTEGER,
8314 f_int2 INTEGER,
8315 f_char1 CHAR(20),
8316 f_char2 CHAR(20),
8317 f_charbig VARCHAR(1000)
8318 , PRIMARY KEY (f_int2,f_int1)
8320 PARTITION BY KEY(f_int1) PARTITIONS 5;
8321 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8322 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8323 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8324 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
8325 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8326 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8327 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8328 # Start usability test (inc/partition_check.inc)
8329 create_command
8330 SHOW CREATE TABLE t1;
8331 Table   Create Table
8332 t1      CREATE TABLE `t1` (
8333   `f_int1` int(11) NOT NULL DEFAULT '0',
8334   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
8335   `f_char1` char(20) DEFAULT NULL,
8336   `f_char2` char(20) DEFAULT NULL,
8337   `f_charbig` varchar(1000) DEFAULT NULL,
8338   PRIMARY KEY (`f_int2`,`f_int1`)
8339 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
8340 /*!50100 PARTITION BY KEY (f_int1)
8341 PARTITIONS 5 */
8343 # check prerequisites-1 success:    1
8344 # check COUNT(*) success:    1
8345 # check MIN/MAX(f_int1) success:    1
8346 # check MIN/MAX(f_int2) success:    1
8347 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8348 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8349 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8350 WHERE f_int1 IN (2,3);
8351 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8352 # check prerequisites-3 success:    1
8353 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8354 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8355 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8356 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8357 WHERE f_int1 IN (2,3);
8358 DELETE FROM t1 WHERE f_charbig = 'delete me';
8359 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8360 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8361 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8362 WHERE f_int1 IN (2,3);
8363 DELETE FROM t1 WHERE f_charbig = 'delete me';
8364 # check read via f_int1 success: 1
8365 # check read via f_int2 success: 1
8366         
8367 # check multiple-1 success:     1
8368 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8369         
8370 # check multiple-2 success:     1
8371 INSERT INTO t1 SELECT * FROM t0_template
8372 WHERE MOD(f_int1,3) = 0;
8373         
8374 # check multiple-3 success:     1
8375 UPDATE t1 SET f_int1 = f_int1 + @max_row
8376 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8377 AND @max_row_div2 + @max_row_div4;
8378         
8379 # check multiple-4 success:     1
8380 DELETE FROM t1
8381 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8382 AND @max_row_div2 + @max_row_div4 + @max_row;
8383         
8384 # check multiple-5 success:     1
8385 SELECT COUNT(*) INTO @try_count FROM t0_template
8386 WHERE MOD(f_int1,3) = 0
8387 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8388 SELECT COUNT(*) INTO @clash_count
8389 FROM t1 INNER JOIN t0_template USING(f_int1)
8390 WHERE MOD(f_int1,3) = 0
8391 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8392 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8393 INSERT INTO t1
8394 SET f_int1 = @cur_value , f_int2 = @cur_value,
8395 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8396 f_charbig = '#SINGLE#';
8397         
8398 # check single-1 success:       1
8399 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8400 INSERT INTO t1
8401 SET f_int1 = @cur_value , f_int2 = @cur_value,
8402 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8403 f_charbig = '#SINGLE#';
8404         
8405 # check single-2 success:       1
8406 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8407 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8408 UPDATE t1 SET f_int1 = @cur_value2
8409 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8410         
8411 # check single-3 success:       1
8412 SET @cur_value1= -1;
8413 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8414 UPDATE t1 SET f_int1 = @cur_value1
8415 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8416         
8417 # check single-4 success:       1
8418 SELECT MAX(f_int1) INTO @cur_value FROM t1;
8419 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8420         
8421 # check single-5 success:       1
8422 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8423         
8424 # check single-6 success:       1
8425 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8426 Warnings:
8427 Warning 1264    Out of range value for column 'f_int2' at row 1
8428         
8429 # check single-7 success:       1
8430 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8431 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8432 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8433 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8434 f_charbig = '#NULL#';
8435 INSERT INTO t1
8436 SET f_int1 = NULL , f_int2 = -@max_row,
8437 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8438 f_charbig = '#NULL#';
8439 ERROR 23000: Column 'f_int1' cannot be null
8440 # check null success:    1
8441 DELETE FROM t1
8442 WHERE f_int1 = 0 AND f_int2 = 0
8443 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8444 AND f_charbig = '#NULL#';
8445 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8446 SELECT f_int1, f_int1, '', '', 'was inserted'
8447    FROM t0_template source_tab
8448 WHERE MOD(f_int1,3) = 0
8449 AND f_int1 BETWEEN @max_row_div2 AND @max_row
8450 ON DUPLICATE KEY
8451 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8452 f_int2 = 2 * @max_row + source_tab.f_int1,
8453 f_charbig = 'was updated';
8454         
8455 # check unique-1-a success:     1
8456         
8457 # check unique-1-b success:     1
8458 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8459 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8460 f_int2 = CAST(f_char1 AS SIGNED INT),
8461 f_charbig = CONCAT('===',f_char1,'===')
8462 WHERE f_charbig = 'was updated';
8463 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8464 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8465    FROM t0_template source_tab
8466 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8467         
8468 # check replace success:        1
8469 DELETE FROM t1
8470 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8471 DELETE FROM t1
8472 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8473 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8474 UPDATE t1 SET f_int2 = f_int1,
8475 f_char1 = CAST(f_int1 AS CHAR),
8476 f_char2 = CAST(f_int1 AS CHAR),
8477 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8478 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8479 SET AUTOCOMMIT= 0;
8480 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8481 SELECT f_int1, f_int1, '', '', 'was inserted'
8482 FROM t0_template source_tab
8483 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8484         
8485 # check transactions-1 success:         1
8486 COMMIT WORK;
8487         
8488 # check transactions-2 success:         1
8489 ROLLBACK WORK;
8490         
8491 # check transactions-3 success:         1
8492 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8493 COMMIT WORK;
8494 ROLLBACK WORK;
8495         
8496 # check transactions-4 success:         1
8497 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8498 SELECT f_int1, f_int1, '', '', 'was inserted'
8499 FROM t0_template source_tab
8500 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8501         
8502 # check transactions-5 success:         1
8503 ROLLBACK WORK;
8504         
8505 # check transactions-6 success:         1
8506 # INFO: Storage engine used for t1 seems to be transactional.
8507 COMMIT;
8508         
8509 # check transactions-7 success:         1
8510 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8511 COMMIT WORK;
8512 SET @@session.sql_mode = 'traditional';
8513 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8514 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8515 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8516 '', '', 'was inserted' FROM t0_template
8517 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8518 ERROR 22012: Division by 0
8519 COMMIT;
8520         
8521 # check transactions-8 success:         1
8522 # INFO: Storage engine used for t1 seems to be able to revert
8523 #       changes made by the failing statement.
8524 SET @@session.sql_mode = '';
8525 SET AUTOCOMMIT= 1;
8526 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8527 COMMIT WORK;
8528 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8529         
8530 # check special-1 success:      1
8531 UPDATE t1 SET f_charbig = '';
8532         
8533 # check special-2 success:      1
8534 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8535 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8536 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8537 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8538 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8539 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8540 'just inserted' FROM t0_template
8541 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8542 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8543 BEGIN
8544 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8545 f_charbig = 'updated by trigger'
8546       WHERE f_int1 = new.f_int1;
8547 END|
8548 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8549 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8550 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8551         
8552 # check trigger-1 success:      1
8553 DROP TRIGGER trg_1;
8554 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8555 f_int2 = CAST(f_char1 AS SIGNED INT),
8556 f_charbig = 'just inserted'
8557    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8558 DELETE FROM t0_aux
8559 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8560 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8561 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8562 'just inserted' FROM t0_template
8563 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8564 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8565 BEGIN
8566 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8567 f_charbig = 'updated by trigger'
8568       WHERE f_int1 = new.f_int1;
8569 END|
8570 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8571 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8572 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8573         
8574 # check trigger-2 success:      1
8575 DROP TRIGGER trg_1;
8576 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8577 f_int2 = CAST(f_char1 AS SIGNED INT),
8578 f_charbig = 'just inserted'
8579    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8580 DELETE FROM t0_aux
8581 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8582 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8583 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8584 'just inserted' FROM t0_template
8585 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8586 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8587 BEGIN
8588 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8589 f_charbig = 'updated by trigger'
8590       WHERE f_int1 = new.f_int1;
8591 END|
8592 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8593 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8594         
8595 # check trigger-3 success:      1
8596 DROP TRIGGER trg_1;
8597 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8598 f_int2 = CAST(f_char1 AS SIGNED INT),
8599 f_charbig = 'just inserted'
8600    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8601 DELETE FROM t0_aux
8602 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8603 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8604 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8605 'just inserted' FROM t0_template
8606 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8607 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8608 BEGIN
8609 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8610 f_charbig = 'updated by trigger'
8611       WHERE f_int1 = - old.f_int1;
8612 END|
8613 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8614 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8615         
8616 # check trigger-4 success:      1
8617 DROP TRIGGER trg_1;
8618 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8619 f_int2 = CAST(f_char1 AS SIGNED INT),
8620 f_charbig = 'just inserted'
8621    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8622 DELETE FROM t0_aux
8623 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8624 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8625 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8626 'just inserted' FROM t0_template
8627 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8628 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8629 BEGIN
8630 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8631 f_charbig = 'updated by trigger'
8632       WHERE f_int1 = new.f_int1;
8633 END|
8634 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8635 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8636         
8637 # check trigger-5 success:      1
8638 DROP TRIGGER trg_1;
8639 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8640 f_int2 = CAST(f_char1 AS SIGNED INT),
8641 f_charbig = 'just inserted'
8642    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8643 DELETE FROM t0_aux
8644 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8645 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8646 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8647 'just inserted' FROM t0_template
8648 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8649 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8650 BEGIN
8651 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8652 f_charbig = 'updated by trigger'
8653       WHERE f_int1 = - old.f_int1;
8654 END|
8655 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8656 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8657         
8658 # check trigger-6 success:      1
8659 DROP TRIGGER trg_1;
8660 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8661 f_int2 = CAST(f_char1 AS SIGNED INT),
8662 f_charbig = 'just inserted'
8663    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8664 DELETE FROM t0_aux
8665 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8666 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8667 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8668 'just inserted' FROM t0_template
8669 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8670 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8671 BEGIN
8672 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8673 f_charbig = 'updated by trigger'
8674       WHERE f_int1 = - old.f_int1;
8675 END|
8676 DELETE FROM t0_aux
8677 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8678         
8679 # check trigger-7 success:      1
8680 DROP TRIGGER trg_1;
8681 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8682 f_int2 = CAST(f_char1 AS SIGNED INT),
8683 f_charbig = 'just inserted'
8684    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8685 DELETE FROM t0_aux
8686 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8687 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8688 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8689 'just inserted' FROM t0_template
8690 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8691 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8692 BEGIN
8693 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8694 f_charbig = 'updated by trigger'
8695       WHERE f_int1 = - old.f_int1;
8696 END|
8697 DELETE FROM t0_aux
8698 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8699         
8700 # check trigger-8 success:      1
8701 DROP TRIGGER trg_1;
8702 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8703 f_int2 = CAST(f_char1 AS SIGNED INT),
8704 f_charbig = 'just inserted'
8705    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8706 DELETE FROM t0_aux
8707 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8708 DELETE FROM t1
8709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8710 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8711 BEGIN
8712 SET new.f_int1 = old.f_int1 + @max_row,
8713 new.f_int2 = old.f_int2 - @max_row,
8714 new.f_charbig = '####updated per update trigger####';
8715 END|
8716 UPDATE t1
8717 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8718 f_charbig = '####updated per update statement itself####';
8719         
8720 # check trigger-9 success:      1
8721 DROP TRIGGER trg_2;
8722 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8723 f_int2 = CAST(f_char1 AS SIGNED INT),
8724 f_charbig = CONCAT('===',f_char1,'===');
8725 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8726 BEGIN
8727 SET new.f_int1 = new.f_int1 + @max_row,
8728 new.f_int2 = new.f_int2 - @max_row,
8729 new.f_charbig = '####updated per update trigger####';
8730 END|
8731 UPDATE t1
8732 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8733 f_charbig = '####updated per update statement itself####';
8734         
8735 # check trigger-10 success:     1
8736 DROP TRIGGER trg_2;
8737 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8738 f_int2 = CAST(f_char1 AS SIGNED INT),
8739 f_charbig = CONCAT('===',f_char1,'===');
8740 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8741 BEGIN
8742 SET new.f_int1 = @my_max1 + @counter,
8743 new.f_int2 = @my_min2 - @counter,
8744 new.f_charbig = '####updated per insert trigger####';
8745 SET @counter = @counter + 1;
8746 END|
8747 SET @counter = 1;
8748 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8749 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8750 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8751 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8752 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8753 ORDER BY f_int1;
8754 DROP TRIGGER trg_3;
8755         
8756 # check trigger-11 success:     1
8757 DELETE FROM t1
8758 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8759 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8760 AND f_charbig = '####updated per insert trigger####';
8761 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8762 BEGIN
8763 SET new.f_int1 = @my_max1 + @counter,
8764 new.f_int2 = @my_min2 - @counter,
8765 new.f_charbig = '####updated per insert trigger####';
8766 SET @counter = @counter + 1;
8767 END|
8768 SET @counter = 1;
8769 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8770 INSERT INTO t1 (f_char1, f_char2, f_charbig)
8771 SELECT CAST(f_int1 AS CHAR),
8772 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8773 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8774 ORDER BY f_int1;
8775 DROP TRIGGER trg_3;
8776         
8777 # check trigger-12 success:     1
8778 DELETE FROM t1
8779 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8780 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8781 AND f_charbig = '####updated per insert trigger####';
8782 ANALYZE  TABLE t1;
8783 Table   Op      Msg_type        Msg_text
8784 test.t1 analyze status  OK
8785 CHECK    TABLE t1 EXTENDED;
8786 Table   Op      Msg_type        Msg_text
8787 test.t1 check   status  OK
8788 CHECKSUM TABLE t1 EXTENDED;
8789 Table   Checksum
8790 test.t1 <some_value>
8791 OPTIMIZE TABLE t1;
8792 Table   Op      Msg_type        Msg_text
8793 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8794 test.t1 optimize        status  OK
8795 # check layout success:    1
8796 REPAIR   TABLE t1 EXTENDED;
8797 Table   Op      Msg_type        Msg_text
8798 test.t1 repair  note    The storage engine for the table doesn't support repair
8799 # check layout success:    1
8800 TRUNCATE t1;
8801         
8802 # check TRUNCATE success:       1
8803 # check layout success:    1
8804 # End usability test (inc/partition_check.inc)
8805 DROP TABLE t1;
8806 CREATE TABLE t1 (
8807 f_int1 INTEGER,
8808 f_int2 INTEGER,
8809 f_char1 CHAR(20),
8810 f_char2 CHAR(20),
8811 f_charbig VARCHAR(1000)
8812 , PRIMARY KEY (f_int2,f_int1)
8814 PARTITION BY LIST(MOD(f_int1,4))
8815 (PARTITION part_3 VALUES IN (-3),
8816 PARTITION part_2 VALUES IN (-2),
8817 PARTITION part_1 VALUES IN (-1),
8818 PARTITION part_N VALUES IN (NULL),
8819 PARTITION part0 VALUES IN (0),
8820 PARTITION part1 VALUES IN (1),
8821 PARTITION part2 VALUES IN (2),
8822 PARTITION part3 VALUES IN (3));
8823 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8824 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8825 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8826 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
8827 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8828 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8829 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8830 # Start usability test (inc/partition_check.inc)
8831 create_command
8832 SHOW CREATE TABLE t1;
8833 Table   Create Table
8834 t1      CREATE TABLE `t1` (
8835   `f_int1` int(11) NOT NULL DEFAULT '0',
8836   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
8837   `f_char1` char(20) DEFAULT NULL,
8838   `f_char2` char(20) DEFAULT NULL,
8839   `f_charbig` varchar(1000) DEFAULT NULL,
8840   PRIMARY KEY (`f_int2`,`f_int1`)
8841 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
8842 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
8843 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
8844  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
8845  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
8846  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
8847  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
8848  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
8849  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
8850  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
8852 # check prerequisites-1 success:    1
8853 # check COUNT(*) success:    1
8854 # check MIN/MAX(f_int1) success:    1
8855 # check MIN/MAX(f_int2) success:    1
8856 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8857 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8858 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8859 WHERE f_int1 IN (2,3);
8860 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8861 # check prerequisites-3 success:    1
8862 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8863 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8864 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8865 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8866 WHERE f_int1 IN (2,3);
8867 DELETE FROM t1 WHERE f_charbig = 'delete me';
8868 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8869 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8870 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8871 WHERE f_int1 IN (2,3);
8872 DELETE FROM t1 WHERE f_charbig = 'delete me';
8873 # check read via f_int1 success: 1
8874 # check read via f_int2 success: 1
8875         
8876 # check multiple-1 success:     1
8877 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8878         
8879 # check multiple-2 success:     1
8880 INSERT INTO t1 SELECT * FROM t0_template
8881 WHERE MOD(f_int1,3) = 0;
8882         
8883 # check multiple-3 success:     1
8884 UPDATE t1 SET f_int1 = f_int1 + @max_row
8885 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8886 AND @max_row_div2 + @max_row_div4;
8887         
8888 # check multiple-4 success:     1
8889 DELETE FROM t1
8890 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8891 AND @max_row_div2 + @max_row_div4 + @max_row;
8892         
8893 # check multiple-5 success:     1
8894 SELECT COUNT(*) INTO @try_count FROM t0_template
8895 WHERE MOD(f_int1,3) = 0
8896 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8897 SELECT COUNT(*) INTO @clash_count
8898 FROM t1 INNER JOIN t0_template USING(f_int1)
8899 WHERE MOD(f_int1,3) = 0
8900 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8901 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8902 INSERT INTO t1
8903 SET f_int1 = @cur_value , f_int2 = @cur_value,
8904 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8905 f_charbig = '#SINGLE#';
8906         
8907 # check single-1 success:       1
8908 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8909 INSERT INTO t1
8910 SET f_int1 = @cur_value , f_int2 = @cur_value,
8911 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8912 f_charbig = '#SINGLE#';
8913         
8914 # check single-2 success:       1
8915 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8916 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8917 UPDATE t1 SET f_int1 = @cur_value2
8918 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8919         
8920 # check single-3 success:       1
8921 SET @cur_value1= -1;
8922 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8923 UPDATE t1 SET f_int1 = @cur_value1
8924 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8925         
8926 # check single-4 success:       1
8927 SELECT MAX(f_int1) INTO @cur_value FROM t1;
8928 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8929         
8930 # check single-5 success:       1
8931 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8932         
8933 # check single-6 success:       1
8934 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8935 Warnings:
8936 Warning 1264    Out of range value for column 'f_int2' at row 1
8937         
8938 # check single-7 success:       1
8939 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8940 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8941 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8942 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8943 f_charbig = '#NULL#';
8944 INSERT INTO t1
8945 SET f_int1 = NULL , f_int2 = -@max_row,
8946 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8947 f_charbig = '#NULL#';
8948 ERROR 23000: Column 'f_int1' cannot be null
8949 # check null success:    1
8950 DELETE FROM t1
8951 WHERE f_int1 = 0 AND f_int2 = 0
8952 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8953 AND f_charbig = '#NULL#';
8954 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8955 SELECT f_int1, f_int1, '', '', 'was inserted'
8956    FROM t0_template source_tab
8957 WHERE MOD(f_int1,3) = 0
8958 AND f_int1 BETWEEN @max_row_div2 AND @max_row
8959 ON DUPLICATE KEY
8960 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8961 f_int2 = 2 * @max_row + source_tab.f_int1,
8962 f_charbig = 'was updated';
8963         
8964 # check unique-1-a success:     1
8965         
8966 # check unique-1-b success:     1
8967 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8968 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8969 f_int2 = CAST(f_char1 AS SIGNED INT),
8970 f_charbig = CONCAT('===',f_char1,'===')
8971 WHERE f_charbig = 'was updated';
8972 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8973 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8974    FROM t0_template source_tab
8975 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8976         
8977 # check replace success:        1
8978 DELETE FROM t1
8979 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8980 DELETE FROM t1
8981 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8982 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8983 UPDATE t1 SET f_int2 = f_int1,
8984 f_char1 = CAST(f_int1 AS CHAR),
8985 f_char2 = CAST(f_int1 AS CHAR),
8986 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8987 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8988 SET AUTOCOMMIT= 0;
8989 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8990 SELECT f_int1, f_int1, '', '', 'was inserted'
8991 FROM t0_template source_tab
8992 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8993         
8994 # check transactions-1 success:         1
8995 COMMIT WORK;
8996         
8997 # check transactions-2 success:         1
8998 ROLLBACK WORK;
8999         
9000 # check transactions-3 success:         1
9001 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9002 COMMIT WORK;
9003 ROLLBACK WORK;
9004         
9005 # check transactions-4 success:         1
9006 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9007 SELECT f_int1, f_int1, '', '', 'was inserted'
9008 FROM t0_template source_tab
9009 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9010         
9011 # check transactions-5 success:         1
9012 ROLLBACK WORK;
9013         
9014 # check transactions-6 success:         1
9015 # INFO: Storage engine used for t1 seems to be transactional.
9016 COMMIT;
9017         
9018 # check transactions-7 success:         1
9019 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9020 COMMIT WORK;
9021 SET @@session.sql_mode = 'traditional';
9022 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9023 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9024 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9025 '', '', 'was inserted' FROM t0_template
9026 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9027 ERROR 22012: Division by 0
9028 COMMIT;
9029         
9030 # check transactions-8 success:         1
9031 # INFO: Storage engine used for t1 seems to be able to revert
9032 #       changes made by the failing statement.
9033 SET @@session.sql_mode = '';
9034 SET AUTOCOMMIT= 1;
9035 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9036 COMMIT WORK;
9037 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9038         
9039 # check special-1 success:      1
9040 UPDATE t1 SET f_charbig = '';
9041         
9042 # check special-2 success:      1
9043 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9044 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9045 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9046 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9047 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9048 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9049 'just inserted' FROM t0_template
9050 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9051 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9052 BEGIN
9053 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9054 f_charbig = 'updated by trigger'
9055       WHERE f_int1 = new.f_int1;
9056 END|
9057 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9058 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9059 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9060         
9061 # check trigger-1 success:      1
9062 DROP TRIGGER trg_1;
9063 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9064 f_int2 = CAST(f_char1 AS SIGNED INT),
9065 f_charbig = 'just inserted'
9066    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9067 DELETE FROM t0_aux
9068 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9069 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9070 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9071 'just inserted' FROM t0_template
9072 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9073 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9074 BEGIN
9075 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9076 f_charbig = 'updated by trigger'
9077       WHERE f_int1 = new.f_int1;
9078 END|
9079 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9080 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9081 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9082         
9083 # check trigger-2 success:      1
9084 DROP TRIGGER trg_1;
9085 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9086 f_int2 = CAST(f_char1 AS SIGNED INT),
9087 f_charbig = 'just inserted'
9088    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9089 DELETE FROM t0_aux
9090 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9091 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9092 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9093 'just inserted' FROM t0_template
9094 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9095 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9096 BEGIN
9097 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9098 f_charbig = 'updated by trigger'
9099       WHERE f_int1 = new.f_int1;
9100 END|
9101 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9102 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9103         
9104 # check trigger-3 success:      1
9105 DROP TRIGGER trg_1;
9106 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9107 f_int2 = CAST(f_char1 AS SIGNED INT),
9108 f_charbig = 'just inserted'
9109    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9110 DELETE FROM t0_aux
9111 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9112 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9113 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9114 'just inserted' FROM t0_template
9115 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9116 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9117 BEGIN
9118 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9119 f_charbig = 'updated by trigger'
9120       WHERE f_int1 = - old.f_int1;
9121 END|
9122 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9123 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9124         
9125 # check trigger-4 success:      1
9126 DROP TRIGGER trg_1;
9127 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9128 f_int2 = CAST(f_char1 AS SIGNED INT),
9129 f_charbig = 'just inserted'
9130    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9131 DELETE FROM t0_aux
9132 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9133 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9134 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9135 'just inserted' FROM t0_template
9136 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9137 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9138 BEGIN
9139 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9140 f_charbig = 'updated by trigger'
9141       WHERE f_int1 = new.f_int1;
9142 END|
9143 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9144 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9145         
9146 # check trigger-5 success:      1
9147 DROP TRIGGER trg_1;
9148 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9149 f_int2 = CAST(f_char1 AS SIGNED INT),
9150 f_charbig = 'just inserted'
9151    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9152 DELETE FROM t0_aux
9153 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9154 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9155 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9156 'just inserted' FROM t0_template
9157 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9158 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9159 BEGIN
9160 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9161 f_charbig = 'updated by trigger'
9162       WHERE f_int1 = - old.f_int1;
9163 END|
9164 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9165 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9166         
9167 # check trigger-6 success:      1
9168 DROP TRIGGER trg_1;
9169 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9170 f_int2 = CAST(f_char1 AS SIGNED INT),
9171 f_charbig = 'just inserted'
9172    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9173 DELETE FROM t0_aux
9174 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9177 'just inserted' FROM t0_template
9178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9179 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9180 BEGIN
9181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9182 f_charbig = 'updated by trigger'
9183       WHERE f_int1 = - old.f_int1;
9184 END|
9185 DELETE FROM t0_aux
9186 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9187         
9188 # check trigger-7 success:      1
9189 DROP TRIGGER trg_1;
9190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9191 f_int2 = CAST(f_char1 AS SIGNED INT),
9192 f_charbig = 'just inserted'
9193    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9194 DELETE FROM t0_aux
9195 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9196 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9197 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9198 'just inserted' FROM t0_template
9199 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9200 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9201 BEGIN
9202 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9203 f_charbig = 'updated by trigger'
9204       WHERE f_int1 = - old.f_int1;
9205 END|
9206 DELETE FROM t0_aux
9207 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9208         
9209 # check trigger-8 success:      1
9210 DROP TRIGGER trg_1;
9211 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9212 f_int2 = CAST(f_char1 AS SIGNED INT),
9213 f_charbig = 'just inserted'
9214    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9215 DELETE FROM t0_aux
9216 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9217 DELETE FROM t1
9218 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9219 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9220 BEGIN
9221 SET new.f_int1 = old.f_int1 + @max_row,
9222 new.f_int2 = old.f_int2 - @max_row,
9223 new.f_charbig = '####updated per update trigger####';
9224 END|
9225 UPDATE t1
9226 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9227 f_charbig = '####updated per update statement itself####';
9228         
9229 # check trigger-9 success:      1
9230 DROP TRIGGER trg_2;
9231 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9232 f_int2 = CAST(f_char1 AS SIGNED INT),
9233 f_charbig = CONCAT('===',f_char1,'===');
9234 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9235 BEGIN
9236 SET new.f_int1 = new.f_int1 + @max_row,
9237 new.f_int2 = new.f_int2 - @max_row,
9238 new.f_charbig = '####updated per update trigger####';
9239 END|
9240 UPDATE t1
9241 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9242 f_charbig = '####updated per update statement itself####';
9243         
9244 # check trigger-10 success:     1
9245 DROP TRIGGER trg_2;
9246 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9247 f_int2 = CAST(f_char1 AS SIGNED INT),
9248 f_charbig = CONCAT('===',f_char1,'===');
9249 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9250 BEGIN
9251 SET new.f_int1 = @my_max1 + @counter,
9252 new.f_int2 = @my_min2 - @counter,
9253 new.f_charbig = '####updated per insert trigger####';
9254 SET @counter = @counter + 1;
9255 END|
9256 SET @counter = 1;
9257 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9258 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9259 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9260 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9261 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9262 ORDER BY f_int1;
9263 DROP TRIGGER trg_3;
9264         
9265 # check trigger-11 success:     1
9266 DELETE FROM t1
9267 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9268 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9269 AND f_charbig = '####updated per insert trigger####';
9270 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9271 BEGIN
9272 SET new.f_int1 = @my_max1 + @counter,
9273 new.f_int2 = @my_min2 - @counter,
9274 new.f_charbig = '####updated per insert trigger####';
9275 SET @counter = @counter + 1;
9276 END|
9277 SET @counter = 1;
9278 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9279 INSERT INTO t1 (f_char1, f_char2, f_charbig)
9280 SELECT CAST(f_int1 AS CHAR),
9281 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9282 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9283 ORDER BY f_int1;
9284 DROP TRIGGER trg_3;
9285         
9286 # check trigger-12 success:     1
9287 DELETE FROM t1
9288 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9289 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9290 AND f_charbig = '####updated per insert trigger####';
9291 ANALYZE  TABLE t1;
9292 Table   Op      Msg_type        Msg_text
9293 test.t1 analyze status  OK
9294 CHECK    TABLE t1 EXTENDED;
9295 Table   Op      Msg_type        Msg_text
9296 test.t1 check   status  OK
9297 CHECKSUM TABLE t1 EXTENDED;
9298 Table   Checksum
9299 test.t1 <some_value>
9300 OPTIMIZE TABLE t1;
9301 Table   Op      Msg_type        Msg_text
9302 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9303 test.t1 optimize        status  OK
9304 # check layout success:    1
9305 REPAIR   TABLE t1 EXTENDED;
9306 Table   Op      Msg_type        Msg_text
9307 test.t1 repair  note    The storage engine for the table doesn't support repair
9308 # check layout success:    1
9309 TRUNCATE t1;
9310         
9311 # check TRUNCATE success:       1
9312 # check layout success:    1
9313 # End usability test (inc/partition_check.inc)
9314 DROP TABLE t1;
9315 CREATE TABLE t1 (
9316 f_int1 INTEGER,
9317 f_int2 INTEGER,
9318 f_char1 CHAR(20),
9319 f_char2 CHAR(20),
9320 f_charbig VARCHAR(1000)
9321 , PRIMARY KEY (f_int2,f_int1)
9323 PARTITION BY RANGE(f_int1)
9324 (PARTITION parta VALUES LESS THAN (0),
9325 PARTITION partb VALUES LESS THAN (5),
9326 PARTITION partc VALUES LESS THAN (10),
9327 PARTITION partd VALUES LESS THAN (10 + 5),
9328 PARTITION parte VALUES LESS THAN (20),
9329 PARTITION partf VALUES LESS THAN (2147483646));
9330 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9331 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9332 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9333 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
9334 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9335 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9336 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9337 # Start usability test (inc/partition_check.inc)
9338 create_command
9339 SHOW CREATE TABLE t1;
9340 Table   Create Table
9341 t1      CREATE TABLE `t1` (
9342   `f_int1` int(11) NOT NULL DEFAULT '0',
9343   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
9344   `f_char1` char(20) DEFAULT NULL,
9345   `f_char2` char(20) DEFAULT NULL,
9346   `f_charbig` varchar(1000) DEFAULT NULL,
9347   PRIMARY KEY (`f_int2`,`f_int1`)
9348 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
9349 /*!50100 PARTITION BY RANGE (f_int1)
9350 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9351  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9352  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9353  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
9354  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
9355  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9357 # check prerequisites-1 success:    1
9358 # check COUNT(*) success:    1
9359 # check MIN/MAX(f_int1) success:    1
9360 # check MIN/MAX(f_int2) success:    1
9361 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9362 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9363 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9364 WHERE f_int1 IN (2,3);
9365 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9366 # check prerequisites-3 success:    1
9367 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9368 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9369 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9370 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9371 WHERE f_int1 IN (2,3);
9372 DELETE FROM t1 WHERE f_charbig = 'delete me';
9373 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9374 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9375 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9376 WHERE f_int1 IN (2,3);
9377 DELETE FROM t1 WHERE f_charbig = 'delete me';
9378 # check read via f_int1 success: 1
9379 # check read via f_int2 success: 1
9380         
9381 # check multiple-1 success:     1
9382 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9383         
9384 # check multiple-2 success:     1
9385 INSERT INTO t1 SELECT * FROM t0_template
9386 WHERE MOD(f_int1,3) = 0;
9387         
9388 # check multiple-3 success:     1
9389 UPDATE t1 SET f_int1 = f_int1 + @max_row
9390 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9391 AND @max_row_div2 + @max_row_div4;
9392         
9393 # check multiple-4 success:     1
9394 DELETE FROM t1
9395 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9396 AND @max_row_div2 + @max_row_div4 + @max_row;
9397         
9398 # check multiple-5 success:     1
9399 SELECT COUNT(*) INTO @try_count FROM t0_template
9400 WHERE MOD(f_int1,3) = 0
9401 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9402 SELECT COUNT(*) INTO @clash_count
9403 FROM t1 INNER JOIN t0_template USING(f_int1)
9404 WHERE MOD(f_int1,3) = 0
9405 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9406 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9407 INSERT INTO t1
9408 SET f_int1 = @cur_value , f_int2 = @cur_value,
9409 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9410 f_charbig = '#SINGLE#';
9411         
9412 # check single-1 success:       1
9413 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9414 INSERT INTO t1
9415 SET f_int1 = @cur_value , f_int2 = @cur_value,
9416 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9417 f_charbig = '#SINGLE#';
9418         
9419 # check single-2 success:       1
9420 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9421 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9422 UPDATE t1 SET f_int1 = @cur_value2
9423 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9424         
9425 # check single-3 success:       1
9426 SET @cur_value1= -1;
9427 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9428 UPDATE t1 SET f_int1 = @cur_value1
9429 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9430         
9431 # check single-4 success:       1
9432 SELECT MAX(f_int1) INTO @cur_value FROM t1;
9433 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9434         
9435 # check single-5 success:       1
9436 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9437         
9438 # check single-6 success:       1
9439 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9440 ERROR HY000: Table has no partition for value 2147483647
9441 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9442 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9443 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9444 f_charbig = '#NULL#';
9445 INSERT INTO t1
9446 SET f_int1 = NULL , f_int2 = -@max_row,
9447 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9448 f_charbig = '#NULL#';
9449 ERROR 23000: Column 'f_int1' cannot be null
9450 # check null success:    1
9451 DELETE FROM t1
9452 WHERE f_int1 = 0 AND f_int2 = 0
9453 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9454 AND f_charbig = '#NULL#';
9455 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9456 SELECT f_int1, f_int1, '', '', 'was inserted'
9457    FROM t0_template source_tab
9458 WHERE MOD(f_int1,3) = 0
9459 AND f_int1 BETWEEN @max_row_div2 AND @max_row
9460 ON DUPLICATE KEY
9461 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9462 f_int2 = 2 * @max_row + source_tab.f_int1,
9463 f_charbig = 'was updated';
9464         
9465 # check unique-1-a success:     1
9466         
9467 # check unique-1-b success:     1
9468 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9469 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9470 f_int2 = CAST(f_char1 AS SIGNED INT),
9471 f_charbig = CONCAT('===',f_char1,'===')
9472 WHERE f_charbig = 'was updated';
9473 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9474 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9475    FROM t0_template source_tab
9476 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9477         
9478 # check replace success:        1
9479 DELETE FROM t1
9480 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9481 DELETE FROM t1
9482 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9483 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9484 UPDATE t1 SET f_int2 = f_int1,
9485 f_char1 = CAST(f_int1 AS CHAR),
9486 f_char2 = CAST(f_int1 AS CHAR),
9487 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9488 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9489 SET AUTOCOMMIT= 0;
9490 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9491 SELECT f_int1, f_int1, '', '', 'was inserted'
9492 FROM t0_template source_tab
9493 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9494         
9495 # check transactions-1 success:         1
9496 COMMIT WORK;
9497         
9498 # check transactions-2 success:         1
9499 ROLLBACK WORK;
9500         
9501 # check transactions-3 success:         1
9502 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9503 COMMIT WORK;
9504 ROLLBACK WORK;
9505         
9506 # check transactions-4 success:         1
9507 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9508 SELECT f_int1, f_int1, '', '', 'was inserted'
9509 FROM t0_template source_tab
9510 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9511         
9512 # check transactions-5 success:         1
9513 ROLLBACK WORK;
9514         
9515 # check transactions-6 success:         1
9516 # INFO: Storage engine used for t1 seems to be transactional.
9517 COMMIT;
9518         
9519 # check transactions-7 success:         1
9520 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9521 COMMIT WORK;
9522 SET @@session.sql_mode = 'traditional';
9523 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9524 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9525 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9526 '', '', 'was inserted' FROM t0_template
9527 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9528 ERROR 22012: Division by 0
9529 COMMIT;
9530         
9531 # check transactions-8 success:         1
9532 # INFO: Storage engine used for t1 seems to be able to revert
9533 #       changes made by the failing statement.
9534 SET @@session.sql_mode = '';
9535 SET AUTOCOMMIT= 1;
9536 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9537 COMMIT WORK;
9538 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9539         
9540 # check special-1 success:      1
9541 UPDATE t1 SET f_charbig = '';
9542         
9543 # check special-2 success:      1
9544 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9545 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9546 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9547 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9548 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9549 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9550 'just inserted' FROM t0_template
9551 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9552 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9553 BEGIN
9554 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9555 f_charbig = 'updated by trigger'
9556       WHERE f_int1 = new.f_int1;
9557 END|
9558 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9559 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9560 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9561         
9562 # check trigger-1 success:      1
9563 DROP TRIGGER trg_1;
9564 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9565 f_int2 = CAST(f_char1 AS SIGNED INT),
9566 f_charbig = 'just inserted'
9567    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9568 DELETE FROM t0_aux
9569 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9570 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9571 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9572 'just inserted' FROM t0_template
9573 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9574 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9575 BEGIN
9576 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9577 f_charbig = 'updated by trigger'
9578       WHERE f_int1 = new.f_int1;
9579 END|
9580 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9581 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9582 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9583         
9584 # check trigger-2 success:      1
9585 DROP TRIGGER trg_1;
9586 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9587 f_int2 = CAST(f_char1 AS SIGNED INT),
9588 f_charbig = 'just inserted'
9589    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9590 DELETE FROM t0_aux
9591 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9592 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9593 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9594 'just inserted' FROM t0_template
9595 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9596 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9597 BEGIN
9598 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9599 f_charbig = 'updated by trigger'
9600       WHERE f_int1 = new.f_int1;
9601 END|
9602 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9603 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9604         
9605 # check trigger-3 success:      1
9606 DROP TRIGGER trg_1;
9607 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9608 f_int2 = CAST(f_char1 AS SIGNED INT),
9609 f_charbig = 'just inserted'
9610    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9611 DELETE FROM t0_aux
9612 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9613 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9614 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9615 'just inserted' FROM t0_template
9616 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9617 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9618 BEGIN
9619 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9620 f_charbig = 'updated by trigger'
9621       WHERE f_int1 = - old.f_int1;
9622 END|
9623 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9624 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9625         
9626 # check trigger-4 success:      1
9627 DROP TRIGGER trg_1;
9628 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9629 f_int2 = CAST(f_char1 AS SIGNED INT),
9630 f_charbig = 'just inserted'
9631    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9632 DELETE FROM t0_aux
9633 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9634 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9635 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9636 'just inserted' FROM t0_template
9637 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9638 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9639 BEGIN
9640 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9641 f_charbig = 'updated by trigger'
9642       WHERE f_int1 = new.f_int1;
9643 END|
9644 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9645 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9646         
9647 # check trigger-5 success:      1
9648 DROP TRIGGER trg_1;
9649 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9650 f_int2 = CAST(f_char1 AS SIGNED INT),
9651 f_charbig = 'just inserted'
9652    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9653 DELETE FROM t0_aux
9654 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9655 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9656 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9657 'just inserted' FROM t0_template
9658 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9659 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9660 BEGIN
9661 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9662 f_charbig = 'updated by trigger'
9663       WHERE f_int1 = - old.f_int1;
9664 END|
9665 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9666 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9667         
9668 # check trigger-6 success:      1
9669 DROP TRIGGER trg_1;
9670 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9671 f_int2 = CAST(f_char1 AS SIGNED INT),
9672 f_charbig = 'just inserted'
9673    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9674 DELETE FROM t0_aux
9675 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9676 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9677 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9678 'just inserted' FROM t0_template
9679 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9680 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9681 BEGIN
9682 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9683 f_charbig = 'updated by trigger'
9684       WHERE f_int1 = - old.f_int1;
9685 END|
9686 DELETE FROM t0_aux
9687 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9688         
9689 # check trigger-7 success:      1
9690 DROP TRIGGER trg_1;
9691 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9692 f_int2 = CAST(f_char1 AS SIGNED INT),
9693 f_charbig = 'just inserted'
9694    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9695 DELETE FROM t0_aux
9696 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9697 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9698 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9699 'just inserted' FROM t0_template
9700 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9701 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9702 BEGIN
9703 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9704 f_charbig = 'updated by trigger'
9705       WHERE f_int1 = - old.f_int1;
9706 END|
9707 DELETE FROM t0_aux
9708 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9709         
9710 # check trigger-8 success:      1
9711 DROP TRIGGER trg_1;
9712 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9713 f_int2 = CAST(f_char1 AS SIGNED INT),
9714 f_charbig = 'just inserted'
9715    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9716 DELETE FROM t0_aux
9717 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9718 DELETE FROM t1
9719 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9720 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9721 BEGIN
9722 SET new.f_int1 = old.f_int1 + @max_row,
9723 new.f_int2 = old.f_int2 - @max_row,
9724 new.f_charbig = '####updated per update trigger####';
9725 END|
9726 UPDATE t1
9727 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9728 f_charbig = '####updated per update statement itself####';
9729         
9730 # check trigger-9 success:      1
9731 DROP TRIGGER trg_2;
9732 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9733 f_int2 = CAST(f_char1 AS SIGNED INT),
9734 f_charbig = CONCAT('===',f_char1,'===');
9735 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9736 BEGIN
9737 SET new.f_int1 = new.f_int1 + @max_row,
9738 new.f_int2 = new.f_int2 - @max_row,
9739 new.f_charbig = '####updated per update trigger####';
9740 END|
9741 UPDATE t1
9742 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9743 f_charbig = '####updated per update statement itself####';
9744         
9745 # check trigger-10 success:     1
9746 DROP TRIGGER trg_2;
9747 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9748 f_int2 = CAST(f_char1 AS SIGNED INT),
9749 f_charbig = CONCAT('===',f_char1,'===');
9750 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9751 BEGIN
9752 SET new.f_int1 = @my_max1 + @counter,
9753 new.f_int2 = @my_min2 - @counter,
9754 new.f_charbig = '####updated per insert trigger####';
9755 SET @counter = @counter + 1;
9756 END|
9757 SET @counter = 1;
9758 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9759 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9760 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9761 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9762 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9763 ORDER BY f_int1;
9764 DROP TRIGGER trg_3;
9765         
9766 # check trigger-11 success:     1
9767 DELETE FROM t1
9768 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9769 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9770 AND f_charbig = '####updated per insert trigger####';
9771 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9772 BEGIN
9773 SET new.f_int1 = @my_max1 + @counter,
9774 new.f_int2 = @my_min2 - @counter,
9775 new.f_charbig = '####updated per insert trigger####';
9776 SET @counter = @counter + 1;
9777 END|
9778 SET @counter = 1;
9779 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9780 INSERT INTO t1 (f_char1, f_char2, f_charbig)
9781 SELECT CAST(f_int1 AS CHAR),
9782 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9783 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9784 ORDER BY f_int1;
9785 DROP TRIGGER trg_3;
9786         
9787 # check trigger-12 success:     1
9788 DELETE FROM t1
9789 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9790 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9791 AND f_charbig = '####updated per insert trigger####';
9792 ANALYZE  TABLE t1;
9793 Table   Op      Msg_type        Msg_text
9794 test.t1 analyze status  OK
9795 CHECK    TABLE t1 EXTENDED;
9796 Table   Op      Msg_type        Msg_text
9797 test.t1 check   status  OK
9798 CHECKSUM TABLE t1 EXTENDED;
9799 Table   Checksum
9800 test.t1 <some_value>
9801 OPTIMIZE TABLE t1;
9802 Table   Op      Msg_type        Msg_text
9803 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9804 test.t1 optimize        status  OK
9805 # check layout success:    1
9806 REPAIR   TABLE t1 EXTENDED;
9807 Table   Op      Msg_type        Msg_text
9808 test.t1 repair  note    The storage engine for the table doesn't support repair
9809 # check layout success:    1
9810 TRUNCATE t1;
9811         
9812 # check TRUNCATE success:       1
9813 # check layout success:    1
9814 # End usability test (inc/partition_check.inc)
9815 DROP TABLE t1;
9816 CREATE TABLE t1 (
9817 f_int1 INTEGER,
9818 f_int2 INTEGER,
9819 f_char1 CHAR(20),
9820 f_char2 CHAR(20),
9821 f_charbig VARCHAR(1000)
9822 , PRIMARY KEY (f_int2,f_int1)
9824 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
9825 (PARTITION parta VALUES LESS THAN (0),
9826 PARTITION partb VALUES LESS THAN (5),
9827 PARTITION partc VALUES LESS THAN (10),
9828 PARTITION partd VALUES LESS THAN (2147483646));
9829 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9830 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9831 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9832 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
9833 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9834 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9835 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9836 # Start usability test (inc/partition_check.inc)
9837 create_command
9838 SHOW CREATE TABLE t1;
9839 Table   Create Table
9840 t1      CREATE TABLE `t1` (
9841   `f_int1` int(11) NOT NULL DEFAULT '0',
9842   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
9843   `f_char1` char(20) DEFAULT NULL,
9844   `f_char2` char(20) DEFAULT NULL,
9845   `f_charbig` varchar(1000) DEFAULT NULL,
9846   PRIMARY KEY (`f_int2`,`f_int1`)
9847 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
9848 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
9849 SUBPARTITION BY HASH (f_int1)
9850 SUBPARTITIONS 2
9851 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9852  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9853  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9854  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9856 # check prerequisites-1 success:    1
9857 # check COUNT(*) success:    1
9858 # check MIN/MAX(f_int1) success:    1
9859 # check MIN/MAX(f_int2) success:    1
9860 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9861 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9862 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9863 WHERE f_int1 IN (2,3);
9864 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9865 # check prerequisites-3 success:    1
9866 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9867 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9868 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9869 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9870 WHERE f_int1 IN (2,3);
9871 DELETE FROM t1 WHERE f_charbig = 'delete me';
9872 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9873 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9874 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9875 WHERE f_int1 IN (2,3);
9876 DELETE FROM t1 WHERE f_charbig = 'delete me';
9877 # check read via f_int1 success: 1
9878 # check read via f_int2 success: 1
9879         
9880 # check multiple-1 success:     1
9881 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9882         
9883 # check multiple-2 success:     1
9884 INSERT INTO t1 SELECT * FROM t0_template
9885 WHERE MOD(f_int1,3) = 0;
9886         
9887 # check multiple-3 success:     1
9888 UPDATE t1 SET f_int1 = f_int1 + @max_row
9889 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9890 AND @max_row_div2 + @max_row_div4;
9891         
9892 # check multiple-4 success:     1
9893 DELETE FROM t1
9894 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9895 AND @max_row_div2 + @max_row_div4 + @max_row;
9896         
9897 # check multiple-5 success:     1
9898 SELECT COUNT(*) INTO @try_count FROM t0_template
9899 WHERE MOD(f_int1,3) = 0
9900 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9901 SELECT COUNT(*) INTO @clash_count
9902 FROM t1 INNER JOIN t0_template USING(f_int1)
9903 WHERE MOD(f_int1,3) = 0
9904 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9905 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9906 INSERT INTO t1
9907 SET f_int1 = @cur_value , f_int2 = @cur_value,
9908 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9909 f_charbig = '#SINGLE#';
9910         
9911 # check single-1 success:       1
9912 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9913 INSERT INTO t1
9914 SET f_int1 = @cur_value , f_int2 = @cur_value,
9915 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9916 f_charbig = '#SINGLE#';
9917         
9918 # check single-2 success:       1
9919 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9920 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9921 UPDATE t1 SET f_int1 = @cur_value2
9922 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9923         
9924 # check single-3 success:       1
9925 SET @cur_value1= -1;
9926 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9927 UPDATE t1 SET f_int1 = @cur_value1
9928 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9929         
9930 # check single-4 success:       1
9931 SELECT MAX(f_int1) INTO @cur_value FROM t1;
9932 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9933         
9934 # check single-5 success:       1
9935 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9936         
9937 # check single-6 success:       1
9938 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9939 Warnings:
9940 Warning 1264    Out of range value for column 'f_int2' at row 1
9941         
9942 # check single-7 success:       1
9943 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9944 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9945 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9946 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9947 f_charbig = '#NULL#';
9948 INSERT INTO t1
9949 SET f_int1 = NULL , f_int2 = -@max_row,
9950 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9951 f_charbig = '#NULL#';
9952 ERROR 23000: Column 'f_int1' cannot be null
9953 # check null success:    1
9954 DELETE FROM t1
9955 WHERE f_int1 = 0 AND f_int2 = 0
9956 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9957 AND f_charbig = '#NULL#';
9958 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9959 SELECT f_int1, f_int1, '', '', 'was inserted'
9960    FROM t0_template source_tab
9961 WHERE MOD(f_int1,3) = 0
9962 AND f_int1 BETWEEN @max_row_div2 AND @max_row
9963 ON DUPLICATE KEY
9964 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9965 f_int2 = 2 * @max_row + source_tab.f_int1,
9966 f_charbig = 'was updated';
9967         
9968 # check unique-1-a success:     1
9969         
9970 # check unique-1-b success:     1
9971 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9972 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9973 f_int2 = CAST(f_char1 AS SIGNED INT),
9974 f_charbig = CONCAT('===',f_char1,'===')
9975 WHERE f_charbig = 'was updated';
9976 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9977 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9978    FROM t0_template source_tab
9979 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9980         
9981 # check replace success:        1
9982 DELETE FROM t1
9983 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9984 DELETE FROM t1
9985 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9986 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9987 UPDATE t1 SET f_int2 = f_int1,
9988 f_char1 = CAST(f_int1 AS CHAR),
9989 f_char2 = CAST(f_int1 AS CHAR),
9990 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9991 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9992 SET AUTOCOMMIT= 0;
9993 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9994 SELECT f_int1, f_int1, '', '', 'was inserted'
9995 FROM t0_template source_tab
9996 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9997         
9998 # check transactions-1 success:         1
9999 COMMIT WORK;
10000         
10001 # check transactions-2 success:         1
10002 ROLLBACK WORK;
10003         
10004 # check transactions-3 success:         1
10005 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10006 COMMIT WORK;
10007 ROLLBACK WORK;
10008         
10009 # check transactions-4 success:         1
10010 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10011 SELECT f_int1, f_int1, '', '', 'was inserted'
10012 FROM t0_template source_tab
10013 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10014         
10015 # check transactions-5 success:         1
10016 ROLLBACK WORK;
10017         
10018 # check transactions-6 success:         1
10019 # INFO: Storage engine used for t1 seems to be transactional.
10020 COMMIT;
10021         
10022 # check transactions-7 success:         1
10023 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10024 COMMIT WORK;
10025 SET @@session.sql_mode = 'traditional';
10026 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10027 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10028 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10029 '', '', 'was inserted' FROM t0_template
10030 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10031 ERROR 22012: Division by 0
10032 COMMIT;
10033         
10034 # check transactions-8 success:         1
10035 # INFO: Storage engine used for t1 seems to be able to revert
10036 #       changes made by the failing statement.
10037 SET @@session.sql_mode = '';
10038 SET AUTOCOMMIT= 1;
10039 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10040 COMMIT WORK;
10041 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10042         
10043 # check special-1 success:      1
10044 UPDATE t1 SET f_charbig = '';
10045         
10046 # check special-2 success:      1
10047 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10048 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10049 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10050 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10051 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10052 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10053 'just inserted' FROM t0_template
10054 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10055 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10056 BEGIN
10057 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10058 f_charbig = 'updated by trigger'
10059       WHERE f_int1 = new.f_int1;
10060 END|
10061 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10062 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10063 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10064         
10065 # check trigger-1 success:      1
10066 DROP TRIGGER trg_1;
10067 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10068 f_int2 = CAST(f_char1 AS SIGNED INT),
10069 f_charbig = 'just inserted'
10070    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10071 DELETE FROM t0_aux
10072 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10073 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10074 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10075 'just inserted' FROM t0_template
10076 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10077 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10078 BEGIN
10079 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10080 f_charbig = 'updated by trigger'
10081       WHERE f_int1 = new.f_int1;
10082 END|
10083 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10084 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10085 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10086         
10087 # check trigger-2 success:      1
10088 DROP TRIGGER trg_1;
10089 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10090 f_int2 = CAST(f_char1 AS SIGNED INT),
10091 f_charbig = 'just inserted'
10092    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10093 DELETE FROM t0_aux
10094 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10095 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10096 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10097 'just inserted' FROM t0_template
10098 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10099 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10100 BEGIN
10101 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10102 f_charbig = 'updated by trigger'
10103       WHERE f_int1 = new.f_int1;
10104 END|
10105 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10106 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10107         
10108 # check trigger-3 success:      1
10109 DROP TRIGGER trg_1;
10110 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10111 f_int2 = CAST(f_char1 AS SIGNED INT),
10112 f_charbig = 'just inserted'
10113    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10114 DELETE FROM t0_aux
10115 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10116 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10117 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10118 'just inserted' FROM t0_template
10119 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10120 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10121 BEGIN
10122 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10123 f_charbig = 'updated by trigger'
10124       WHERE f_int1 = - old.f_int1;
10125 END|
10126 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10127 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10128         
10129 # check trigger-4 success:      1
10130 DROP TRIGGER trg_1;
10131 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10132 f_int2 = CAST(f_char1 AS SIGNED INT),
10133 f_charbig = 'just inserted'
10134    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10135 DELETE FROM t0_aux
10136 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10137 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10138 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10139 'just inserted' FROM t0_template
10140 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10141 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10142 BEGIN
10143 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10144 f_charbig = 'updated by trigger'
10145       WHERE f_int1 = new.f_int1;
10146 END|
10147 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10148 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10149         
10150 # check trigger-5 success:      1
10151 DROP TRIGGER trg_1;
10152 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10153 f_int2 = CAST(f_char1 AS SIGNED INT),
10154 f_charbig = 'just inserted'
10155    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10156 DELETE FROM t0_aux
10157 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10158 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10159 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10160 'just inserted' FROM t0_template
10161 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10162 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10163 BEGIN
10164 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10165 f_charbig = 'updated by trigger'
10166       WHERE f_int1 = - old.f_int1;
10167 END|
10168 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10169 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10170         
10171 # check trigger-6 success:      1
10172 DROP TRIGGER trg_1;
10173 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10174 f_int2 = CAST(f_char1 AS SIGNED INT),
10175 f_charbig = 'just inserted'
10176    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10177 DELETE FROM t0_aux
10178 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10179 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10180 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10181 'just inserted' FROM t0_template
10182 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10183 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10184 BEGIN
10185 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10186 f_charbig = 'updated by trigger'
10187       WHERE f_int1 = - old.f_int1;
10188 END|
10189 DELETE FROM t0_aux
10190 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10191         
10192 # check trigger-7 success:      1
10193 DROP TRIGGER trg_1;
10194 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10195 f_int2 = CAST(f_char1 AS SIGNED INT),
10196 f_charbig = 'just inserted'
10197    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10198 DELETE FROM t0_aux
10199 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10200 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10201 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10202 'just inserted' FROM t0_template
10203 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10204 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10205 BEGIN
10206 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10207 f_charbig = 'updated by trigger'
10208       WHERE f_int1 = - old.f_int1;
10209 END|
10210 DELETE FROM t0_aux
10211 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10212         
10213 # check trigger-8 success:      1
10214 DROP TRIGGER trg_1;
10215 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10216 f_int2 = CAST(f_char1 AS SIGNED INT),
10217 f_charbig = 'just inserted'
10218    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10219 DELETE FROM t0_aux
10220 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10221 DELETE FROM t1
10222 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10223 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10224 BEGIN
10225 SET new.f_int1 = old.f_int1 + @max_row,
10226 new.f_int2 = old.f_int2 - @max_row,
10227 new.f_charbig = '####updated per update trigger####';
10228 END|
10229 UPDATE t1
10230 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10231 f_charbig = '####updated per update statement itself####';
10232         
10233 # check trigger-9 success:      1
10234 DROP TRIGGER trg_2;
10235 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10236 f_int2 = CAST(f_char1 AS SIGNED INT),
10237 f_charbig = CONCAT('===',f_char1,'===');
10238 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10239 BEGIN
10240 SET new.f_int1 = new.f_int1 + @max_row,
10241 new.f_int2 = new.f_int2 - @max_row,
10242 new.f_charbig = '####updated per update trigger####';
10243 END|
10244 UPDATE t1
10245 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10246 f_charbig = '####updated per update statement itself####';
10247         
10248 # check trigger-10 success:     1
10249 DROP TRIGGER trg_2;
10250 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10251 f_int2 = CAST(f_char1 AS SIGNED INT),
10252 f_charbig = CONCAT('===',f_char1,'===');
10253 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10254 BEGIN
10255 SET new.f_int1 = @my_max1 + @counter,
10256 new.f_int2 = @my_min2 - @counter,
10257 new.f_charbig = '####updated per insert trigger####';
10258 SET @counter = @counter + 1;
10259 END|
10260 SET @counter = 1;
10261 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10262 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10263 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10264 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10265 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10266 ORDER BY f_int1;
10267 DROP TRIGGER trg_3;
10268         
10269 # check trigger-11 success:     1
10270 DELETE FROM t1
10271 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10272 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10273 AND f_charbig = '####updated per insert trigger####';
10274 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10275 BEGIN
10276 SET new.f_int1 = @my_max1 + @counter,
10277 new.f_int2 = @my_min2 - @counter,
10278 new.f_charbig = '####updated per insert trigger####';
10279 SET @counter = @counter + 1;
10280 END|
10281 SET @counter = 1;
10282 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10283 INSERT INTO t1 (f_char1, f_char2, f_charbig)
10284 SELECT CAST(f_int1 AS CHAR),
10285 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10286 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10287 ORDER BY f_int1;
10288 DROP TRIGGER trg_3;
10289         
10290 # check trigger-12 success:     1
10291 DELETE FROM t1
10292 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10293 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10294 AND f_charbig = '####updated per insert trigger####';
10295 ANALYZE  TABLE t1;
10296 Table   Op      Msg_type        Msg_text
10297 test.t1 analyze status  OK
10298 CHECK    TABLE t1 EXTENDED;
10299 Table   Op      Msg_type        Msg_text
10300 test.t1 check   status  OK
10301 CHECKSUM TABLE t1 EXTENDED;
10302 Table   Checksum
10303 test.t1 <some_value>
10304 OPTIMIZE TABLE t1;
10305 Table   Op      Msg_type        Msg_text
10306 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10307 test.t1 optimize        status  OK
10308 # check layout success:    1
10309 REPAIR   TABLE t1 EXTENDED;
10310 Table   Op      Msg_type        Msg_text
10311 test.t1 repair  note    The storage engine for the table doesn't support repair
10312 # check layout success:    1
10313 TRUNCATE t1;
10314         
10315 # check TRUNCATE success:       1
10316 # check layout success:    1
10317 # End usability test (inc/partition_check.inc)
10318 DROP TABLE t1;
10319 CREATE TABLE t1 (
10320 f_int1 INTEGER,
10321 f_int2 INTEGER,
10322 f_char1 CHAR(20),
10323 f_char2 CHAR(20),
10324 f_charbig VARCHAR(1000)
10325 , PRIMARY KEY (f_int2,f_int1)
10327 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
10328 (PARTITION part1 VALUES LESS THAN (0)
10329 (SUBPARTITION subpart11, SUBPARTITION subpart12),
10330 PARTITION part2 VALUES LESS THAN (5)
10331 (SUBPARTITION subpart21, SUBPARTITION subpart22),
10332 PARTITION part3 VALUES LESS THAN (10)
10333 (SUBPARTITION subpart31, SUBPARTITION subpart32),
10334 PARTITION part4 VALUES LESS THAN (2147483646)
10335 (SUBPARTITION subpart41, SUBPARTITION subpart42));
10336 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10337 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10338 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10339 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
10340 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10341 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10342 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10343 # Start usability test (inc/partition_check.inc)
10344 create_command
10345 SHOW CREATE TABLE t1;
10346 Table   Create Table
10347 t1      CREATE TABLE `t1` (
10348   `f_int1` int(11) NOT NULL DEFAULT '0',
10349   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
10350   `f_char1` char(20) DEFAULT NULL,
10351   `f_char2` char(20) DEFAULT NULL,
10352   `f_charbig` varchar(1000) DEFAULT NULL,
10353   PRIMARY KEY (`f_int2`,`f_int1`)
10354 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
10355 /*!50100 PARTITION BY RANGE (f_int1)
10356 SUBPARTITION BY KEY (f_int1)
10357 (PARTITION part1 VALUES LESS THAN (0)
10358  (SUBPARTITION subpart11 ENGINE = InnoDB,
10359   SUBPARTITION subpart12 ENGINE = InnoDB),
10360  PARTITION part2 VALUES LESS THAN (5)
10361  (SUBPARTITION subpart21 ENGINE = InnoDB,
10362   SUBPARTITION subpart22 ENGINE = InnoDB),
10363  PARTITION part3 VALUES LESS THAN (10)
10364  (SUBPARTITION subpart31 ENGINE = InnoDB,
10365   SUBPARTITION subpart32 ENGINE = InnoDB),
10366  PARTITION part4 VALUES LESS THAN (2147483646)
10367  (SUBPARTITION subpart41 ENGINE = InnoDB,
10368   SUBPARTITION subpart42 ENGINE = InnoDB)) */
10370 # check prerequisites-1 success:    1
10371 # check COUNT(*) success:    1
10372 # check MIN/MAX(f_int1) success:    1
10373 # check MIN/MAX(f_int2) success:    1
10374 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10375 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10376 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10377 WHERE f_int1 IN (2,3);
10378 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10379 # check prerequisites-3 success:    1
10380 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10381 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10382 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10383 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10384 WHERE f_int1 IN (2,3);
10385 DELETE FROM t1 WHERE f_charbig = 'delete me';
10386 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10387 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10388 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10389 WHERE f_int1 IN (2,3);
10390 DELETE FROM t1 WHERE f_charbig = 'delete me';
10391 # check read via f_int1 success: 1
10392 # check read via f_int2 success: 1
10393         
10394 # check multiple-1 success:     1
10395 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10396         
10397 # check multiple-2 success:     1
10398 INSERT INTO t1 SELECT * FROM t0_template
10399 WHERE MOD(f_int1,3) = 0;
10400         
10401 # check multiple-3 success:     1
10402 UPDATE t1 SET f_int1 = f_int1 + @max_row
10403 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10404 AND @max_row_div2 + @max_row_div4;
10405         
10406 # check multiple-4 success:     1
10407 DELETE FROM t1
10408 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10409 AND @max_row_div2 + @max_row_div4 + @max_row;
10410         
10411 # check multiple-5 success:     1
10412 SELECT COUNT(*) INTO @try_count FROM t0_template
10413 WHERE MOD(f_int1,3) = 0
10414 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10415 SELECT COUNT(*) INTO @clash_count
10416 FROM t1 INNER JOIN t0_template USING(f_int1)
10417 WHERE MOD(f_int1,3) = 0
10418 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10419 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10420 INSERT INTO t1
10421 SET f_int1 = @cur_value , f_int2 = @cur_value,
10422 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10423 f_charbig = '#SINGLE#';
10424         
10425 # check single-1 success:       1
10426 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10427 INSERT INTO t1
10428 SET f_int1 = @cur_value , f_int2 = @cur_value,
10429 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10430 f_charbig = '#SINGLE#';
10431         
10432 # check single-2 success:       1
10433 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10434 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10435 UPDATE t1 SET f_int1 = @cur_value2
10436 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10437         
10438 # check single-3 success:       1
10439 SET @cur_value1= -1;
10440 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10441 UPDATE t1 SET f_int1 = @cur_value1
10442 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10443         
10444 # check single-4 success:       1
10445 SELECT MAX(f_int1) INTO @cur_value FROM t1;
10446 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10447         
10448 # check single-5 success:       1
10449 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10450         
10451 # check single-6 success:       1
10452 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10453 ERROR HY000: Table has no partition for value 2147483647
10454 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10455 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10456 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10457 f_charbig = '#NULL#';
10458 INSERT INTO t1
10459 SET f_int1 = NULL , f_int2 = -@max_row,
10460 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10461 f_charbig = '#NULL#';
10462 ERROR 23000: Column 'f_int1' cannot be null
10463 # check null success:    1
10464 DELETE FROM t1
10465 WHERE f_int1 = 0 AND f_int2 = 0
10466 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10467 AND f_charbig = '#NULL#';
10468 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10469 SELECT f_int1, f_int1, '', '', 'was inserted'
10470    FROM t0_template source_tab
10471 WHERE MOD(f_int1,3) = 0
10472 AND f_int1 BETWEEN @max_row_div2 AND @max_row
10473 ON DUPLICATE KEY
10474 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10475 f_int2 = 2 * @max_row + source_tab.f_int1,
10476 f_charbig = 'was updated';
10477         
10478 # check unique-1-a success:     1
10479         
10480 # check unique-1-b success:     1
10481 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10482 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10483 f_int2 = CAST(f_char1 AS SIGNED INT),
10484 f_charbig = CONCAT('===',f_char1,'===')
10485 WHERE f_charbig = 'was updated';
10486 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10487 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10488    FROM t0_template source_tab
10489 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10490         
10491 # check replace success:        1
10492 DELETE FROM t1
10493 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10494 DELETE FROM t1
10495 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10496 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10497 UPDATE t1 SET f_int2 = f_int1,
10498 f_char1 = CAST(f_int1 AS CHAR),
10499 f_char2 = CAST(f_int1 AS CHAR),
10500 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10501 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10502 SET AUTOCOMMIT= 0;
10503 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10504 SELECT f_int1, f_int1, '', '', 'was inserted'
10505 FROM t0_template source_tab
10506 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10507         
10508 # check transactions-1 success:         1
10509 COMMIT WORK;
10510         
10511 # check transactions-2 success:         1
10512 ROLLBACK WORK;
10513         
10514 # check transactions-3 success:         1
10515 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10516 COMMIT WORK;
10517 ROLLBACK WORK;
10518         
10519 # check transactions-4 success:         1
10520 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10521 SELECT f_int1, f_int1, '', '', 'was inserted'
10522 FROM t0_template source_tab
10523 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10524         
10525 # check transactions-5 success:         1
10526 ROLLBACK WORK;
10527         
10528 # check transactions-6 success:         1
10529 # INFO: Storage engine used for t1 seems to be transactional.
10530 COMMIT;
10531         
10532 # check transactions-7 success:         1
10533 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10534 COMMIT WORK;
10535 SET @@session.sql_mode = 'traditional';
10536 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10537 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10538 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10539 '', '', 'was inserted' FROM t0_template
10540 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10541 ERROR 22012: Division by 0
10542 COMMIT;
10543         
10544 # check transactions-8 success:         1
10545 # INFO: Storage engine used for t1 seems to be able to revert
10546 #       changes made by the failing statement.
10547 SET @@session.sql_mode = '';
10548 SET AUTOCOMMIT= 1;
10549 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10550 COMMIT WORK;
10551 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10552         
10553 # check special-1 success:      1
10554 UPDATE t1 SET f_charbig = '';
10555         
10556 # check special-2 success:      1
10557 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10558 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10559 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10560 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10561 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10562 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10563 'just inserted' FROM t0_template
10564 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10565 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10566 BEGIN
10567 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10568 f_charbig = 'updated by trigger'
10569       WHERE f_int1 = new.f_int1;
10570 END|
10571 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10572 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10573 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10574         
10575 # check trigger-1 success:      1
10576 DROP TRIGGER trg_1;
10577 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10578 f_int2 = CAST(f_char1 AS SIGNED INT),
10579 f_charbig = 'just inserted'
10580    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10581 DELETE FROM t0_aux
10582 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10583 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10584 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10585 'just inserted' FROM t0_template
10586 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10587 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10588 BEGIN
10589 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10590 f_charbig = 'updated by trigger'
10591       WHERE f_int1 = new.f_int1;
10592 END|
10593 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10594 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10595 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10596         
10597 # check trigger-2 success:      1
10598 DROP TRIGGER trg_1;
10599 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10600 f_int2 = CAST(f_char1 AS SIGNED INT),
10601 f_charbig = 'just inserted'
10602    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10603 DELETE FROM t0_aux
10604 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10605 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10606 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10607 'just inserted' FROM t0_template
10608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10609 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10610 BEGIN
10611 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10612 f_charbig = 'updated by trigger'
10613       WHERE f_int1 = new.f_int1;
10614 END|
10615 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10616 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10617         
10618 # check trigger-3 success:      1
10619 DROP TRIGGER trg_1;
10620 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10621 f_int2 = CAST(f_char1 AS SIGNED INT),
10622 f_charbig = 'just inserted'
10623    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10624 DELETE FROM t0_aux
10625 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10626 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10627 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10628 'just inserted' FROM t0_template
10629 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10630 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10631 BEGIN
10632 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10633 f_charbig = 'updated by trigger'
10634       WHERE f_int1 = - old.f_int1;
10635 END|
10636 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10637 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10638         
10639 # check trigger-4 success:      1
10640 DROP TRIGGER trg_1;
10641 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10642 f_int2 = CAST(f_char1 AS SIGNED INT),
10643 f_charbig = 'just inserted'
10644    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10645 DELETE FROM t0_aux
10646 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10647 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10648 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10649 'just inserted' FROM t0_template
10650 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10651 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10652 BEGIN
10653 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10654 f_charbig = 'updated by trigger'
10655       WHERE f_int1 = new.f_int1;
10656 END|
10657 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10658 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10659         
10660 # check trigger-5 success:      1
10661 DROP TRIGGER trg_1;
10662 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10663 f_int2 = CAST(f_char1 AS SIGNED INT),
10664 f_charbig = 'just inserted'
10665    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10666 DELETE FROM t0_aux
10667 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10668 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10669 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10670 'just inserted' FROM t0_template
10671 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10672 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10673 BEGIN
10674 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10675 f_charbig = 'updated by trigger'
10676       WHERE f_int1 = - old.f_int1;
10677 END|
10678 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10679 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10680         
10681 # check trigger-6 success:      1
10682 DROP TRIGGER trg_1;
10683 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10684 f_int2 = CAST(f_char1 AS SIGNED INT),
10685 f_charbig = 'just inserted'
10686    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10687 DELETE FROM t0_aux
10688 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10689 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10690 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10691 'just inserted' FROM t0_template
10692 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10693 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10694 BEGIN
10695 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10696 f_charbig = 'updated by trigger'
10697       WHERE f_int1 = - old.f_int1;
10698 END|
10699 DELETE FROM t0_aux
10700 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10701         
10702 # check trigger-7 success:      1
10703 DROP TRIGGER trg_1;
10704 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10705 f_int2 = CAST(f_char1 AS SIGNED INT),
10706 f_charbig = 'just inserted'
10707    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10708 DELETE FROM t0_aux
10709 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10710 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10711 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10712 'just inserted' FROM t0_template
10713 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10714 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10715 BEGIN
10716 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10717 f_charbig = 'updated by trigger'
10718       WHERE f_int1 = - old.f_int1;
10719 END|
10720 DELETE FROM t0_aux
10721 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10722         
10723 # check trigger-8 success:      1
10724 DROP TRIGGER trg_1;
10725 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10726 f_int2 = CAST(f_char1 AS SIGNED INT),
10727 f_charbig = 'just inserted'
10728    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10729 DELETE FROM t0_aux
10730 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10731 DELETE FROM t1
10732 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10733 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10734 BEGIN
10735 SET new.f_int1 = old.f_int1 + @max_row,
10736 new.f_int2 = old.f_int2 - @max_row,
10737 new.f_charbig = '####updated per update trigger####';
10738 END|
10739 UPDATE t1
10740 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10741 f_charbig = '####updated per update statement itself####';
10742         
10743 # check trigger-9 success:      1
10744 DROP TRIGGER trg_2;
10745 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10746 f_int2 = CAST(f_char1 AS SIGNED INT),
10747 f_charbig = CONCAT('===',f_char1,'===');
10748 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10749 BEGIN
10750 SET new.f_int1 = new.f_int1 + @max_row,
10751 new.f_int2 = new.f_int2 - @max_row,
10752 new.f_charbig = '####updated per update trigger####';
10753 END|
10754 UPDATE t1
10755 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10756 f_charbig = '####updated per update statement itself####';
10757         
10758 # check trigger-10 success:     1
10759 DROP TRIGGER trg_2;
10760 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10761 f_int2 = CAST(f_char1 AS SIGNED INT),
10762 f_charbig = CONCAT('===',f_char1,'===');
10763 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10764 BEGIN
10765 SET new.f_int1 = @my_max1 + @counter,
10766 new.f_int2 = @my_min2 - @counter,
10767 new.f_charbig = '####updated per insert trigger####';
10768 SET @counter = @counter + 1;
10769 END|
10770 SET @counter = 1;
10771 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10772 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10773 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10774 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10775 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10776 ORDER BY f_int1;
10777 DROP TRIGGER trg_3;
10778         
10779 # check trigger-11 success:     1
10780 DELETE FROM t1
10781 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10782 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10783 AND f_charbig = '####updated per insert trigger####';
10784 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10785 BEGIN
10786 SET new.f_int1 = @my_max1 + @counter,
10787 new.f_int2 = @my_min2 - @counter,
10788 new.f_charbig = '####updated per insert trigger####';
10789 SET @counter = @counter + 1;
10790 END|
10791 SET @counter = 1;
10792 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10793 INSERT INTO t1 (f_char1, f_char2, f_charbig)
10794 SELECT CAST(f_int1 AS CHAR),
10795 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10796 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10797 ORDER BY f_int1;
10798 DROP TRIGGER trg_3;
10799         
10800 # check trigger-12 success:     1
10801 DELETE FROM t1
10802 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10803 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10804 AND f_charbig = '####updated per insert trigger####';
10805 ANALYZE  TABLE t1;
10806 Table   Op      Msg_type        Msg_text
10807 test.t1 analyze status  OK
10808 CHECK    TABLE t1 EXTENDED;
10809 Table   Op      Msg_type        Msg_text
10810 test.t1 check   status  OK
10811 CHECKSUM TABLE t1 EXTENDED;
10812 Table   Checksum
10813 test.t1 <some_value>
10814 OPTIMIZE TABLE t1;
10815 Table   Op      Msg_type        Msg_text
10816 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10817 test.t1 optimize        status  OK
10818 # check layout success:    1
10819 REPAIR   TABLE t1 EXTENDED;
10820 Table   Op      Msg_type        Msg_text
10821 test.t1 repair  note    The storage engine for the table doesn't support repair
10822 # check layout success:    1
10823 TRUNCATE t1;
10824         
10825 # check TRUNCATE success:       1
10826 # check layout success:    1
10827 # End usability test (inc/partition_check.inc)
10828 DROP TABLE t1;
10829 CREATE TABLE t1 (
10830 f_int1 INTEGER,
10831 f_int2 INTEGER,
10832 f_char1 CHAR(20),
10833 f_char2 CHAR(20),
10834 f_charbig VARCHAR(1000)
10835 , PRIMARY KEY (f_int2,f_int1)
10837 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
10838 (PARTITION part1 VALUES IN (0)
10839 (SUBPARTITION sp11, SUBPARTITION sp12),
10840 PARTITION part2 VALUES IN (1)
10841 (SUBPARTITION sp21, SUBPARTITION sp22),
10842 PARTITION part3 VALUES IN (2)
10843 (SUBPARTITION sp31, SUBPARTITION sp32),
10844 PARTITION part4 VALUES IN (NULL)
10845 (SUBPARTITION sp41, SUBPARTITION sp42));
10846 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10847 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10848 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10849 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
10850 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10851 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10852 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10853 # Start usability test (inc/partition_check.inc)
10854 create_command
10855 SHOW CREATE TABLE t1;
10856 Table   Create Table
10857 t1      CREATE TABLE `t1` (
10858   `f_int1` int(11) NOT NULL DEFAULT '0',
10859   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
10860   `f_char1` char(20) DEFAULT NULL,
10861   `f_char2` char(20) DEFAULT NULL,
10862   `f_charbig` varchar(1000) DEFAULT NULL,
10863   PRIMARY KEY (`f_int2`,`f_int1`)
10864 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
10865 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
10866 SUBPARTITION BY HASH (f_int1 + 1)
10867 (PARTITION part1 VALUES IN (0)
10868  (SUBPARTITION sp11 ENGINE = InnoDB,
10869   SUBPARTITION sp12 ENGINE = InnoDB),
10870  PARTITION part2 VALUES IN (1)
10871  (SUBPARTITION sp21 ENGINE = InnoDB,
10872   SUBPARTITION sp22 ENGINE = InnoDB),
10873  PARTITION part3 VALUES IN (2)
10874  (SUBPARTITION sp31 ENGINE = InnoDB,
10875   SUBPARTITION sp32 ENGINE = InnoDB),
10876  PARTITION part4 VALUES IN (NULL)
10877  (SUBPARTITION sp41 ENGINE = InnoDB,
10878   SUBPARTITION sp42 ENGINE = InnoDB)) */
10880 # check prerequisites-1 success:    1
10881 # check COUNT(*) success:    1
10882 # check MIN/MAX(f_int1) success:    1
10883 # check MIN/MAX(f_int2) success:    1
10884 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10885 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10886 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10887 WHERE f_int1 IN (2,3);
10888 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10889 # check prerequisites-3 success:    1
10890 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10891 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10892 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10893 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10894 WHERE f_int1 IN (2,3);
10895 DELETE FROM t1 WHERE f_charbig = 'delete me';
10896 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10897 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10898 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10899 WHERE f_int1 IN (2,3);
10900 DELETE FROM t1 WHERE f_charbig = 'delete me';
10901 # check read via f_int1 success: 1
10902 # check read via f_int2 success: 1
10903         
10904 # check multiple-1 success:     1
10905 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10906         
10907 # check multiple-2 success:     1
10908 INSERT INTO t1 SELECT * FROM t0_template
10909 WHERE MOD(f_int1,3) = 0;
10910         
10911 # check multiple-3 success:     1
10912 UPDATE t1 SET f_int1 = f_int1 + @max_row
10913 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10914 AND @max_row_div2 + @max_row_div4;
10915         
10916 # check multiple-4 success:     1
10917 DELETE FROM t1
10918 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10919 AND @max_row_div2 + @max_row_div4 + @max_row;
10920         
10921 # check multiple-5 success:     1
10922 SELECT COUNT(*) INTO @try_count FROM t0_template
10923 WHERE MOD(f_int1,3) = 0
10924 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10925 SELECT COUNT(*) INTO @clash_count
10926 FROM t1 INNER JOIN t0_template USING(f_int1)
10927 WHERE MOD(f_int1,3) = 0
10928 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10929 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10930 INSERT INTO t1
10931 SET f_int1 = @cur_value , f_int2 = @cur_value,
10932 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10933 f_charbig = '#SINGLE#';
10934         
10935 # check single-1 success:       1
10936 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10937 INSERT INTO t1
10938 SET f_int1 = @cur_value , f_int2 = @cur_value,
10939 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10940 f_charbig = '#SINGLE#';
10941         
10942 # check single-2 success:       1
10943 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10944 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10945 UPDATE t1 SET f_int1 = @cur_value2
10946 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10947         
10948 # check single-3 success:       1
10949 SET @cur_value1= -1;
10950 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10951 UPDATE t1 SET f_int1 = @cur_value1
10952 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10953         
10954 # check single-4 success:       1
10955 SELECT MAX(f_int1) INTO @cur_value FROM t1;
10956 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10957         
10958 # check single-5 success:       1
10959 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10960         
10961 # check single-6 success:       1
10962 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10963 Warnings:
10964 Warning 1264    Out of range value for column 'f_int2' at row 1
10965         
10966 # check single-7 success:       1
10967 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10968 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10969 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10970 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10971 f_charbig = '#NULL#';
10972 INSERT INTO t1
10973 SET f_int1 = NULL , f_int2 = -@max_row,
10974 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10975 f_charbig = '#NULL#';
10976 ERROR 23000: Column 'f_int1' cannot be null
10977 # check null success:    1
10978 DELETE FROM t1
10979 WHERE f_int1 = 0 AND f_int2 = 0
10980 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10981 AND f_charbig = '#NULL#';
10982 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10983 SELECT f_int1, f_int1, '', '', 'was inserted'
10984    FROM t0_template source_tab
10985 WHERE MOD(f_int1,3) = 0
10986 AND f_int1 BETWEEN @max_row_div2 AND @max_row
10987 ON DUPLICATE KEY
10988 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10989 f_int2 = 2 * @max_row + source_tab.f_int1,
10990 f_charbig = 'was updated';
10991         
10992 # check unique-1-a success:     1
10993         
10994 # check unique-1-b success:     1
10995 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10996 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10997 f_int2 = CAST(f_char1 AS SIGNED INT),
10998 f_charbig = CONCAT('===',f_char1,'===')
10999 WHERE f_charbig = 'was updated';
11000 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11001 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11002    FROM t0_template source_tab
11003 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11004         
11005 # check replace success:        1
11006 DELETE FROM t1
11007 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11008 DELETE FROM t1
11009 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11010 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11011 UPDATE t1 SET f_int2 = f_int1,
11012 f_char1 = CAST(f_int1 AS CHAR),
11013 f_char2 = CAST(f_int1 AS CHAR),
11014 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11015 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11016 SET AUTOCOMMIT= 0;
11017 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11018 SELECT f_int1, f_int1, '', '', 'was inserted'
11019 FROM t0_template source_tab
11020 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11021         
11022 # check transactions-1 success:         1
11023 COMMIT WORK;
11024         
11025 # check transactions-2 success:         1
11026 ROLLBACK WORK;
11027         
11028 # check transactions-3 success:         1
11029 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11030 COMMIT WORK;
11031 ROLLBACK WORK;
11032         
11033 # check transactions-4 success:         1
11034 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11035 SELECT f_int1, f_int1, '', '', 'was inserted'
11036 FROM t0_template source_tab
11037 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11038         
11039 # check transactions-5 success:         1
11040 ROLLBACK WORK;
11041         
11042 # check transactions-6 success:         1
11043 # INFO: Storage engine used for t1 seems to be transactional.
11044 COMMIT;
11045         
11046 # check transactions-7 success:         1
11047 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11048 COMMIT WORK;
11049 SET @@session.sql_mode = 'traditional';
11050 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11051 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11052 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11053 '', '', 'was inserted' FROM t0_template
11054 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11055 ERROR 22012: Division by 0
11056 COMMIT;
11057         
11058 # check transactions-8 success:         1
11059 # INFO: Storage engine used for t1 seems to be able to revert
11060 #       changes made by the failing statement.
11061 SET @@session.sql_mode = '';
11062 SET AUTOCOMMIT= 1;
11063 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11064 COMMIT WORK;
11065 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11066         
11067 # check special-1 success:      1
11068 UPDATE t1 SET f_charbig = '';
11069         
11070 # check special-2 success:      1
11071 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11072 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11073 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11074 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11075 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11076 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11077 'just inserted' FROM t0_template
11078 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11079 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11080 BEGIN
11081 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11082 f_charbig = 'updated by trigger'
11083       WHERE f_int1 = new.f_int1;
11084 END|
11085 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11086 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11087 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11088         
11089 # check trigger-1 success:      1
11090 DROP TRIGGER trg_1;
11091 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11092 f_int2 = CAST(f_char1 AS SIGNED INT),
11093 f_charbig = 'just inserted'
11094    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11095 DELETE FROM t0_aux
11096 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11097 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11098 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11099 'just inserted' FROM t0_template
11100 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11101 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11102 BEGIN
11103 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11104 f_charbig = 'updated by trigger'
11105       WHERE f_int1 = new.f_int1;
11106 END|
11107 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11108 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11109 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11110         
11111 # check trigger-2 success:      1
11112 DROP TRIGGER trg_1;
11113 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11114 f_int2 = CAST(f_char1 AS SIGNED INT),
11115 f_charbig = 'just inserted'
11116    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11117 DELETE FROM t0_aux
11118 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11119 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11120 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11121 'just inserted' FROM t0_template
11122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11123 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11124 BEGIN
11125 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11126 f_charbig = 'updated by trigger'
11127       WHERE f_int1 = new.f_int1;
11128 END|
11129 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11130 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11131         
11132 # check trigger-3 success:      1
11133 DROP TRIGGER trg_1;
11134 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11135 f_int2 = CAST(f_char1 AS SIGNED INT),
11136 f_charbig = 'just inserted'
11137    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11138 DELETE FROM t0_aux
11139 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11140 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11141 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11142 'just inserted' FROM t0_template
11143 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11144 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11145 BEGIN
11146 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11147 f_charbig = 'updated by trigger'
11148       WHERE f_int1 = - old.f_int1;
11149 END|
11150 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11151 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11152         
11153 # check trigger-4 success:      1
11154 DROP TRIGGER trg_1;
11155 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11156 f_int2 = CAST(f_char1 AS SIGNED INT),
11157 f_charbig = 'just inserted'
11158    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11159 DELETE FROM t0_aux
11160 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11161 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11162 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11163 'just inserted' FROM t0_template
11164 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11165 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11166 BEGIN
11167 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11168 f_charbig = 'updated by trigger'
11169       WHERE f_int1 = new.f_int1;
11170 END|
11171 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11172 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11173         
11174 # check trigger-5 success:      1
11175 DROP TRIGGER trg_1;
11176 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11177 f_int2 = CAST(f_char1 AS SIGNED INT),
11178 f_charbig = 'just inserted'
11179    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11180 DELETE FROM t0_aux
11181 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11182 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11183 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11184 'just inserted' FROM t0_template
11185 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11186 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11187 BEGIN
11188 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11189 f_charbig = 'updated by trigger'
11190       WHERE f_int1 = - old.f_int1;
11191 END|
11192 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11193 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11194         
11195 # check trigger-6 success:      1
11196 DROP TRIGGER trg_1;
11197 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11198 f_int2 = CAST(f_char1 AS SIGNED INT),
11199 f_charbig = 'just inserted'
11200    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11201 DELETE FROM t0_aux
11202 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11203 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11204 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11205 'just inserted' FROM t0_template
11206 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11207 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11208 BEGIN
11209 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11210 f_charbig = 'updated by trigger'
11211       WHERE f_int1 = - old.f_int1;
11212 END|
11213 DELETE FROM t0_aux
11214 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11215         
11216 # check trigger-7 success:      1
11217 DROP TRIGGER trg_1;
11218 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11219 f_int2 = CAST(f_char1 AS SIGNED INT),
11220 f_charbig = 'just inserted'
11221    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11222 DELETE FROM t0_aux
11223 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11224 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11225 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11226 'just inserted' FROM t0_template
11227 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11228 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11229 BEGIN
11230 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11231 f_charbig = 'updated by trigger'
11232       WHERE f_int1 = - old.f_int1;
11233 END|
11234 DELETE FROM t0_aux
11235 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11236         
11237 # check trigger-8 success:      1
11238 DROP TRIGGER trg_1;
11239 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11240 f_int2 = CAST(f_char1 AS SIGNED INT),
11241 f_charbig = 'just inserted'
11242    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11243 DELETE FROM t0_aux
11244 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11245 DELETE FROM t1
11246 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11247 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11248 BEGIN
11249 SET new.f_int1 = old.f_int1 + @max_row,
11250 new.f_int2 = old.f_int2 - @max_row,
11251 new.f_charbig = '####updated per update trigger####';
11252 END|
11253 UPDATE t1
11254 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11255 f_charbig = '####updated per update statement itself####';
11256         
11257 # check trigger-9 success:      1
11258 DROP TRIGGER trg_2;
11259 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11260 f_int2 = CAST(f_char1 AS SIGNED INT),
11261 f_charbig = CONCAT('===',f_char1,'===');
11262 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11263 BEGIN
11264 SET new.f_int1 = new.f_int1 + @max_row,
11265 new.f_int2 = new.f_int2 - @max_row,
11266 new.f_charbig = '####updated per update trigger####';
11267 END|
11268 UPDATE t1
11269 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11270 f_charbig = '####updated per update statement itself####';
11271         
11272 # check trigger-10 success:     1
11273 DROP TRIGGER trg_2;
11274 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11275 f_int2 = CAST(f_char1 AS SIGNED INT),
11276 f_charbig = CONCAT('===',f_char1,'===');
11277 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11278 BEGIN
11279 SET new.f_int1 = @my_max1 + @counter,
11280 new.f_int2 = @my_min2 - @counter,
11281 new.f_charbig = '####updated per insert trigger####';
11282 SET @counter = @counter + 1;
11283 END|
11284 SET @counter = 1;
11285 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11286 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11287 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11288 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11289 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11290 ORDER BY f_int1;
11291 DROP TRIGGER trg_3;
11292         
11293 # check trigger-11 success:     1
11294 DELETE FROM t1
11295 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11296 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11297 AND f_charbig = '####updated per insert trigger####';
11298 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11299 BEGIN
11300 SET new.f_int1 = @my_max1 + @counter,
11301 new.f_int2 = @my_min2 - @counter,
11302 new.f_charbig = '####updated per insert trigger####';
11303 SET @counter = @counter + 1;
11304 END|
11305 SET @counter = 1;
11306 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11307 INSERT INTO t1 (f_char1, f_char2, f_charbig)
11308 SELECT CAST(f_int1 AS CHAR),
11309 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11310 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11311 ORDER BY f_int1;
11312 DROP TRIGGER trg_3;
11313         
11314 # check trigger-12 success:     1
11315 DELETE FROM t1
11316 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11317 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11318 AND f_charbig = '####updated per insert trigger####';
11319 ANALYZE  TABLE t1;
11320 Table   Op      Msg_type        Msg_text
11321 test.t1 analyze status  OK
11322 CHECK    TABLE t1 EXTENDED;
11323 Table   Op      Msg_type        Msg_text
11324 test.t1 check   status  OK
11325 CHECKSUM TABLE t1 EXTENDED;
11326 Table   Checksum
11327 test.t1 <some_value>
11328 OPTIMIZE TABLE t1;
11329 Table   Op      Msg_type        Msg_text
11330 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
11331 test.t1 optimize        status  OK
11332 # check layout success:    1
11333 REPAIR   TABLE t1 EXTENDED;
11334 Table   Op      Msg_type        Msg_text
11335 test.t1 repair  note    The storage engine for the table doesn't support repair
11336 # check layout success:    1
11337 TRUNCATE t1;
11338         
11339 # check TRUNCATE success:       1
11340 # check layout success:    1
11341 # End usability test (inc/partition_check.inc)
11342 DROP TABLE t1;
11343 CREATE TABLE t1 (
11344 f_int1 INTEGER,
11345 f_int2 INTEGER,
11346 f_char1 CHAR(20),
11347 f_char2 CHAR(20),
11348 f_charbig VARCHAR(1000)
11349 , PRIMARY KEY (f_int2,f_int1)
11351 PARTITION BY LIST(ABS(MOD(f_int1,2)))
11352 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
11353 (PARTITION part1 VALUES IN (0),
11354 PARTITION part2 VALUES IN (1),
11355 PARTITION part3 VALUES IN (NULL));
11356 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11357 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11358 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11359 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
11360 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11361 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11362 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11363 # Start usability test (inc/partition_check.inc)
11364 create_command
11365 SHOW CREATE TABLE t1;
11366 Table   Create Table
11367 t1      CREATE TABLE `t1` (
11368   `f_int1` int(11) NOT NULL DEFAULT '0',
11369   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
11370   `f_char1` char(20) DEFAULT NULL,
11371   `f_char2` char(20) DEFAULT NULL,
11372   `f_charbig` varchar(1000) DEFAULT NULL,
11373   PRIMARY KEY (`f_int2`,`f_int1`)
11374 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
11375 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
11376 SUBPARTITION BY KEY (f_int1)
11377 SUBPARTITIONS 3
11378 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
11379  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
11380  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
11382 # check prerequisites-1 success:    1
11383 # check COUNT(*) success:    1
11384 # check MIN/MAX(f_int1) success:    1
11385 # check MIN/MAX(f_int2) success:    1
11386 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11387 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11388 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11389 WHERE f_int1 IN (2,3);
11390 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
11391 # check prerequisites-3 success:    1
11392 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11393 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11394 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11395 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11396 WHERE f_int1 IN (2,3);
11397 DELETE FROM t1 WHERE f_charbig = 'delete me';
11398 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11399 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11400 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11401 WHERE f_int1 IN (2,3);
11402 DELETE FROM t1 WHERE f_charbig = 'delete me';
11403 # check read via f_int1 success: 1
11404 # check read via f_int2 success: 1
11405         
11406 # check multiple-1 success:     1
11407 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11408         
11409 # check multiple-2 success:     1
11410 INSERT INTO t1 SELECT * FROM t0_template
11411 WHERE MOD(f_int1,3) = 0;
11412         
11413 # check multiple-3 success:     1
11414 UPDATE t1 SET f_int1 = f_int1 + @max_row
11415 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11416 AND @max_row_div2 + @max_row_div4;
11417         
11418 # check multiple-4 success:     1
11419 DELETE FROM t1
11420 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11421 AND @max_row_div2 + @max_row_div4 + @max_row;
11422         
11423 # check multiple-5 success:     1
11424 SELECT COUNT(*) INTO @try_count FROM t0_template
11425 WHERE MOD(f_int1,3) = 0
11426 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11427 SELECT COUNT(*) INTO @clash_count
11428 FROM t1 INNER JOIN t0_template USING(f_int1)
11429 WHERE MOD(f_int1,3) = 0
11430 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11431 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11432 INSERT INTO t1
11433 SET f_int1 = @cur_value , f_int2 = @cur_value,
11434 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11435 f_charbig = '#SINGLE#';
11436         
11437 # check single-1 success:       1
11438 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11439 INSERT INTO t1
11440 SET f_int1 = @cur_value , f_int2 = @cur_value,
11441 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11442 f_charbig = '#SINGLE#';
11443         
11444 # check single-2 success:       1
11445 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11446 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11447 UPDATE t1 SET f_int1 = @cur_value2
11448 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11449         
11450 # check single-3 success:       1
11451 SET @cur_value1= -1;
11452 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11453 UPDATE t1 SET f_int1 = @cur_value1
11454 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11455         
11456 # check single-4 success:       1
11457 SELECT MAX(f_int1) INTO @cur_value FROM t1;
11458 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11459         
11460 # check single-5 success:       1
11461 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11462         
11463 # check single-6 success:       1
11464 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11465 Warnings:
11466 Warning 1264    Out of range value for column 'f_int2' at row 1
11467         
11468 # check single-7 success:       1
11469 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11470 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11471 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11472 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11473 f_charbig = '#NULL#';
11474 INSERT INTO t1
11475 SET f_int1 = NULL , f_int2 = -@max_row,
11476 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11477 f_charbig = '#NULL#';
11478 ERROR 23000: Column 'f_int1' cannot be null
11479 # check null success:    1
11480 DELETE FROM t1
11481 WHERE f_int1 = 0 AND f_int2 = 0
11482 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11483 AND f_charbig = '#NULL#';
11484 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11485 SELECT f_int1, f_int1, '', '', 'was inserted'
11486    FROM t0_template source_tab
11487 WHERE MOD(f_int1,3) = 0
11488 AND f_int1 BETWEEN @max_row_div2 AND @max_row
11489 ON DUPLICATE KEY
11490 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11491 f_int2 = 2 * @max_row + source_tab.f_int1,
11492 f_charbig = 'was updated';
11493         
11494 # check unique-1-a success:     1
11495         
11496 # check unique-1-b success:     1
11497 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11498 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11499 f_int2 = CAST(f_char1 AS SIGNED INT),
11500 f_charbig = CONCAT('===',f_char1,'===')
11501 WHERE f_charbig = 'was updated';
11502 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11503 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11504    FROM t0_template source_tab
11505 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11506         
11507 # check replace success:        1
11508 DELETE FROM t1
11509 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11510 DELETE FROM t1
11511 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11512 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11513 UPDATE t1 SET f_int2 = f_int1,
11514 f_char1 = CAST(f_int1 AS CHAR),
11515 f_char2 = CAST(f_int1 AS CHAR),
11516 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11517 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11518 SET AUTOCOMMIT= 0;
11519 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11520 SELECT f_int1, f_int1, '', '', 'was inserted'
11521 FROM t0_template source_tab
11522 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11523         
11524 # check transactions-1 success:         1
11525 COMMIT WORK;
11526         
11527 # check transactions-2 success:         1
11528 ROLLBACK WORK;
11529         
11530 # check transactions-3 success:         1
11531 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11532 COMMIT WORK;
11533 ROLLBACK WORK;
11534         
11535 # check transactions-4 success:         1
11536 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11537 SELECT f_int1, f_int1, '', '', 'was inserted'
11538 FROM t0_template source_tab
11539 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11540         
11541 # check transactions-5 success:         1
11542 ROLLBACK WORK;
11543         
11544 # check transactions-6 success:         1
11545 # INFO: Storage engine used for t1 seems to be transactional.
11546 COMMIT;
11547         
11548 # check transactions-7 success:         1
11549 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11550 COMMIT WORK;
11551 SET @@session.sql_mode = 'traditional';
11552 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11553 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11554 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11555 '', '', 'was inserted' FROM t0_template
11556 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11557 ERROR 22012: Division by 0
11558 COMMIT;
11559         
11560 # check transactions-8 success:         1
11561 # INFO: Storage engine used for t1 seems to be able to revert
11562 #       changes made by the failing statement.
11563 SET @@session.sql_mode = '';
11564 SET AUTOCOMMIT= 1;
11565 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11566 COMMIT WORK;
11567 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11568         
11569 # check special-1 success:      1
11570 UPDATE t1 SET f_charbig = '';
11571         
11572 # check special-2 success:      1
11573 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11574 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11575 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11576 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11577 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11578 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11579 'just inserted' FROM t0_template
11580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11581 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11582 BEGIN
11583 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11584 f_charbig = 'updated by trigger'
11585       WHERE f_int1 = new.f_int1;
11586 END|
11587 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11588 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11590         
11591 # check trigger-1 success:      1
11592 DROP TRIGGER trg_1;
11593 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11594 f_int2 = CAST(f_char1 AS SIGNED INT),
11595 f_charbig = 'just inserted'
11596    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11597 DELETE FROM t0_aux
11598 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11599 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11600 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11601 'just inserted' FROM t0_template
11602 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11603 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11604 BEGIN
11605 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11606 f_charbig = 'updated by trigger'
11607       WHERE f_int1 = new.f_int1;
11608 END|
11609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11610 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11612         
11613 # check trigger-2 success:      1
11614 DROP TRIGGER trg_1;
11615 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11616 f_int2 = CAST(f_char1 AS SIGNED INT),
11617 f_charbig = 'just inserted'
11618    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11619 DELETE FROM t0_aux
11620 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11621 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11622 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11623 'just inserted' FROM t0_template
11624 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11625 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11626 BEGIN
11627 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11628 f_charbig = 'updated by trigger'
11629       WHERE f_int1 = new.f_int1;
11630 END|
11631 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11632 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11633         
11634 # check trigger-3 success:      1
11635 DROP TRIGGER trg_1;
11636 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11637 f_int2 = CAST(f_char1 AS SIGNED INT),
11638 f_charbig = 'just inserted'
11639    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11640 DELETE FROM t0_aux
11641 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11642 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11643 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11644 'just inserted' FROM t0_template
11645 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11646 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11647 BEGIN
11648 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11649 f_charbig = 'updated by trigger'
11650       WHERE f_int1 = - old.f_int1;
11651 END|
11652 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11653 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11654         
11655 # check trigger-4 success:      1
11656 DROP TRIGGER trg_1;
11657 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11658 f_int2 = CAST(f_char1 AS SIGNED INT),
11659 f_charbig = 'just inserted'
11660    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11661 DELETE FROM t0_aux
11662 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11663 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11664 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11665 'just inserted' FROM t0_template
11666 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11667 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11668 BEGIN
11669 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11670 f_charbig = 'updated by trigger'
11671       WHERE f_int1 = new.f_int1;
11672 END|
11673 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11674 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11675         
11676 # check trigger-5 success:      1
11677 DROP TRIGGER trg_1;
11678 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11679 f_int2 = CAST(f_char1 AS SIGNED INT),
11680 f_charbig = 'just inserted'
11681    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11682 DELETE FROM t0_aux
11683 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11684 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11685 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11686 'just inserted' FROM t0_template
11687 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11688 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11689 BEGIN
11690 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11691 f_charbig = 'updated by trigger'
11692       WHERE f_int1 = - old.f_int1;
11693 END|
11694 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11695 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11696         
11697 # check trigger-6 success:      1
11698 DROP TRIGGER trg_1;
11699 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11700 f_int2 = CAST(f_char1 AS SIGNED INT),
11701 f_charbig = 'just inserted'
11702    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11703 DELETE FROM t0_aux
11704 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11705 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11706 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11707 'just inserted' FROM t0_template
11708 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11709 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11710 BEGIN
11711 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11712 f_charbig = 'updated by trigger'
11713       WHERE f_int1 = - old.f_int1;
11714 END|
11715 DELETE FROM t0_aux
11716 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11717         
11718 # check trigger-7 success:      1
11719 DROP TRIGGER trg_1;
11720 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11721 f_int2 = CAST(f_char1 AS SIGNED INT),
11722 f_charbig = 'just inserted'
11723    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11724 DELETE FROM t0_aux
11725 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11726 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11727 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11728 'just inserted' FROM t0_template
11729 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11730 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11731 BEGIN
11732 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11733 f_charbig = 'updated by trigger'
11734       WHERE f_int1 = - old.f_int1;
11735 END|
11736 DELETE FROM t0_aux
11737 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11738         
11739 # check trigger-8 success:      1
11740 DROP TRIGGER trg_1;
11741 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11742 f_int2 = CAST(f_char1 AS SIGNED INT),
11743 f_charbig = 'just inserted'
11744    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11745 DELETE FROM t0_aux
11746 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11747 DELETE FROM t1
11748 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11749 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11750 BEGIN
11751 SET new.f_int1 = old.f_int1 + @max_row,
11752 new.f_int2 = old.f_int2 - @max_row,
11753 new.f_charbig = '####updated per update trigger####';
11754 END|
11755 UPDATE t1
11756 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11757 f_charbig = '####updated per update statement itself####';
11758         
11759 # check trigger-9 success:      1
11760 DROP TRIGGER trg_2;
11761 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11762 f_int2 = CAST(f_char1 AS SIGNED INT),
11763 f_charbig = CONCAT('===',f_char1,'===');
11764 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11765 BEGIN
11766 SET new.f_int1 = new.f_int1 + @max_row,
11767 new.f_int2 = new.f_int2 - @max_row,
11768 new.f_charbig = '####updated per update trigger####';
11769 END|
11770 UPDATE t1
11771 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11772 f_charbig = '####updated per update statement itself####';
11773         
11774 # check trigger-10 success:     1
11775 DROP TRIGGER trg_2;
11776 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11777 f_int2 = CAST(f_char1 AS SIGNED INT),
11778 f_charbig = CONCAT('===',f_char1,'===');
11779 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11780 BEGIN
11781 SET new.f_int1 = @my_max1 + @counter,
11782 new.f_int2 = @my_min2 - @counter,
11783 new.f_charbig = '####updated per insert trigger####';
11784 SET @counter = @counter + 1;
11785 END|
11786 SET @counter = 1;
11787 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11788 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11789 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11790 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11791 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11792 ORDER BY f_int1;
11793 DROP TRIGGER trg_3;
11794         
11795 # check trigger-11 success:     1
11796 DELETE FROM t1
11797 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11798 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11799 AND f_charbig = '####updated per insert trigger####';
11800 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11801 BEGIN
11802 SET new.f_int1 = @my_max1 + @counter,
11803 new.f_int2 = @my_min2 - @counter,
11804 new.f_charbig = '####updated per insert trigger####';
11805 SET @counter = @counter + 1;
11806 END|
11807 SET @counter = 1;
11808 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11809 INSERT INTO t1 (f_char1, f_char2, f_charbig)
11810 SELECT CAST(f_int1 AS CHAR),
11811 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11812 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11813 ORDER BY f_int1;
11814 DROP TRIGGER trg_3;
11815         
11816 # check trigger-12 success:     1
11817 DELETE FROM t1
11818 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11819 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11820 AND f_charbig = '####updated per insert trigger####';
11821 ANALYZE  TABLE t1;
11822 Table   Op      Msg_type        Msg_text
11823 test.t1 analyze status  OK
11824 CHECK    TABLE t1 EXTENDED;
11825 Table   Op      Msg_type        Msg_text
11826 test.t1 check   status  OK
11827 CHECKSUM TABLE t1 EXTENDED;
11828 Table   Checksum
11829 test.t1 <some_value>
11830 OPTIMIZE TABLE t1;
11831 Table   Op      Msg_type        Msg_text
11832 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
11833 test.t1 optimize        status  OK
11834 # check layout success:    1
11835 REPAIR   TABLE t1 EXTENDED;
11836 Table   Op      Msg_type        Msg_text
11837 test.t1 repair  note    The storage engine for the table doesn't support repair
11838 # check layout success:    1
11839 TRUNCATE t1;
11840         
11841 # check TRUNCATE success:       1
11842 # check layout success:    1
11843 # End usability test (inc/partition_check.inc)
11844 DROP TABLE t1;
11845 #  2.1.3 UNIQUE INDEX exists
11846 DROP TABLE IF EXISTS t1;
11847 CREATE TABLE t1 (
11848 f_int1 INTEGER,
11849 f_int2 INTEGER,
11850 f_char1 CHAR(20),
11851 f_char2 CHAR(20),
11852 f_charbig VARCHAR(1000)
11853 , UNIQUE INDEX uidx1 (f_int1,f_int2)
11855 PARTITION BY HASH(f_int1) PARTITIONS 2;
11856 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11857 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11858 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11859 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
11860 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11861 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11862 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11863 # Start usability test (inc/partition_check.inc)
11864 create_command
11865 SHOW CREATE TABLE t1;
11866 Table   Create Table
11867 t1      CREATE TABLE `t1` (
11868   `f_int1` int(11) DEFAULT NULL,
11869   `f_int2` mediumint(9) DEFAULT NULL,
11870   `f_char1` char(20) DEFAULT NULL,
11871   `f_char2` char(20) DEFAULT NULL,
11872   `f_charbig` varchar(1000) DEFAULT NULL,
11873   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11874 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
11875 /*!50100 PARTITION BY HASH (f_int1)
11876 PARTITIONS 2 */
11878 # check prerequisites-1 success:    1
11879 # check COUNT(*) success:    1
11880 # check MIN/MAX(f_int1) success:    1
11881 # check MIN/MAX(f_int2) success:    1
11882 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11883 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11884 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11885 WHERE f_int1 IN (2,3);
11886 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11887 # check prerequisites-3 success:    1
11888 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11889 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11890 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11891 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11892 WHERE f_int1 IN (2,3);
11893 DELETE FROM t1 WHERE f_charbig = 'delete me';
11894 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11895 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11896 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11897 WHERE f_int1 IN (2,3);
11898 DELETE FROM t1 WHERE f_charbig = 'delete me';
11899 # check read via f_int1 success: 1
11900 # check read via f_int2 success: 1
11901         
11902 # check multiple-1 success:     1
11903 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11904         
11905 # check multiple-2 success:     1
11906 INSERT INTO t1 SELECT * FROM t0_template
11907 WHERE MOD(f_int1,3) = 0;
11908         
11909 # check multiple-3 success:     1
11910 UPDATE t1 SET f_int1 = f_int1 + @max_row
11911 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11912 AND @max_row_div2 + @max_row_div4;
11913         
11914 # check multiple-4 success:     1
11915 DELETE FROM t1
11916 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11917 AND @max_row_div2 + @max_row_div4 + @max_row;
11918         
11919 # check multiple-5 success:     1
11920 SELECT COUNT(*) INTO @try_count FROM t0_template
11921 WHERE MOD(f_int1,3) = 0
11922 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11923 SELECT COUNT(*) INTO @clash_count
11924 FROM t1 INNER JOIN t0_template USING(f_int1)
11925 WHERE MOD(f_int1,3) = 0
11926 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11927 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11928 INSERT INTO t1
11929 SET f_int1 = @cur_value , f_int2 = @cur_value,
11930 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11931 f_charbig = '#SINGLE#';
11932         
11933 # check single-1 success:       1
11934 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11935 INSERT INTO t1
11936 SET f_int1 = @cur_value , f_int2 = @cur_value,
11937 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11938 f_charbig = '#SINGLE#';
11939         
11940 # check single-2 success:       1
11941 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11942 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11943 UPDATE t1 SET f_int1 = @cur_value2
11944 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11945         
11946 # check single-3 success:       1
11947 SET @cur_value1= -1;
11948 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11949 UPDATE t1 SET f_int1 = @cur_value1
11950 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11951         
11952 # check single-4 success:       1
11953 SELECT MAX(f_int1) INTO @cur_value FROM t1;
11954 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11955         
11956 # check single-5 success:       1
11957 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11958         
11959 # check single-6 success:       1
11960 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11961 Warnings:
11962 Warning 1264    Out of range value for column 'f_int2' at row 1
11963         
11964 # check single-7 success:       1
11965 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11966 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11967 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11968 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11969 f_charbig = '#NULL#';
11970 INSERT INTO t1
11971 SET f_int1 = NULL , f_int2 = -@max_row,
11972 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11973 f_charbig = '#NULL#';
11974 # check null success:    1
11975         
11976 # check null-1 success:         1
11977 UPDATE t1 SET f_int1 = -@max_row
11978 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11979 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11980         
11981 # check null-2 success:         1
11982 UPDATE t1 SET f_int1 = NULL
11983 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11984 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11985         
11986 # check null-3 success:         1
11987 DELETE FROM t1
11988 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11989 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11990         
11991 # check null-4 success:         1
11992 DELETE FROM t1
11993 WHERE f_int1 = 0 AND f_int2 = 0
11994 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11995 AND f_charbig = '#NULL#';
11996 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11997 SELECT f_int1, f_int1, '', '', 'was inserted'
11998    FROM t0_template source_tab
11999 WHERE MOD(f_int1,3) = 0
12000 AND f_int1 BETWEEN @max_row_div2 AND @max_row
12001 ON DUPLICATE KEY
12002 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12003 f_int2 = 2 * @max_row + source_tab.f_int1,
12004 f_charbig = 'was updated';
12005         
12006 # check unique-1-a success:     1
12007         
12008 # check unique-1-b success:     1
12009 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12010 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12011 f_int2 = CAST(f_char1 AS SIGNED INT),
12012 f_charbig = CONCAT('===',f_char1,'===')
12013 WHERE f_charbig = 'was updated';
12014 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12015 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12016    FROM t0_template source_tab
12017 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12018         
12019 # check replace success:        1
12020 DELETE FROM t1
12021 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12022 DELETE FROM t1
12023 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12024 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12025 UPDATE t1 SET f_int2 = f_int1,
12026 f_char1 = CAST(f_int1 AS CHAR),
12027 f_char2 = CAST(f_int1 AS CHAR),
12028 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12029 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12030 SET AUTOCOMMIT= 0;
12031 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12032 SELECT f_int1, f_int1, '', '', 'was inserted'
12033 FROM t0_template source_tab
12034 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12035         
12036 # check transactions-1 success:         1
12037 COMMIT WORK;
12038         
12039 # check transactions-2 success:         1
12040 ROLLBACK WORK;
12041         
12042 # check transactions-3 success:         1
12043 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12044 COMMIT WORK;
12045 ROLLBACK WORK;
12046         
12047 # check transactions-4 success:         1
12048 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12049 SELECT f_int1, f_int1, '', '', 'was inserted'
12050 FROM t0_template source_tab
12051 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12052         
12053 # check transactions-5 success:         1
12054 ROLLBACK WORK;
12055         
12056 # check transactions-6 success:         1
12057 # INFO: Storage engine used for t1 seems to be transactional.
12058 COMMIT;
12059         
12060 # check transactions-7 success:         1
12061 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12062 COMMIT WORK;
12063 SET @@session.sql_mode = 'traditional';
12064 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12065 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12066 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12067 '', '', 'was inserted' FROM t0_template
12068 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12069 ERROR 22012: Division by 0
12070 COMMIT;
12071         
12072 # check transactions-8 success:         1
12073 # INFO: Storage engine used for t1 seems to be able to revert
12074 #       changes made by the failing statement.
12075 SET @@session.sql_mode = '';
12076 SET AUTOCOMMIT= 1;
12077 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12078 COMMIT WORK;
12079 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12080         
12081 # check special-1 success:      1
12082 UPDATE t1 SET f_charbig = '';
12083         
12084 # check special-2 success:      1
12085 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12086 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12087 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12088 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12089 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12090 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12091 'just inserted' FROM t0_template
12092 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12093 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12094 BEGIN
12095 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12096 f_charbig = 'updated by trigger'
12097       WHERE f_int1 = new.f_int1;
12098 END|
12099 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12100 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12101 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12102         
12103 # check trigger-1 success:      1
12104 DROP TRIGGER trg_1;
12105 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12106 f_int2 = CAST(f_char1 AS SIGNED INT),
12107 f_charbig = 'just inserted'
12108    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12109 DELETE FROM t0_aux
12110 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12111 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12112 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12113 'just inserted' FROM t0_template
12114 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12115 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12116 BEGIN
12117 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12118 f_charbig = 'updated by trigger'
12119       WHERE f_int1 = new.f_int1;
12120 END|
12121 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12122 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12123 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12124         
12125 # check trigger-2 success:      1
12126 DROP TRIGGER trg_1;
12127 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12128 f_int2 = CAST(f_char1 AS SIGNED INT),
12129 f_charbig = 'just inserted'
12130    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12131 DELETE FROM t0_aux
12132 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12133 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12134 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12135 'just inserted' FROM t0_template
12136 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12137 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12138 BEGIN
12139 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12140 f_charbig = 'updated by trigger'
12141       WHERE f_int1 = new.f_int1;
12142 END|
12143 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12144 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12145         
12146 # check trigger-3 success:      1
12147 DROP TRIGGER trg_1;
12148 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12149 f_int2 = CAST(f_char1 AS SIGNED INT),
12150 f_charbig = 'just inserted'
12151    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12152 DELETE FROM t0_aux
12153 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12154 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12155 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12156 'just inserted' FROM t0_template
12157 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12158 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12159 BEGIN
12160 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12161 f_charbig = 'updated by trigger'
12162       WHERE f_int1 = - old.f_int1;
12163 END|
12164 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12165 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12166         
12167 # check trigger-4 success:      1
12168 DROP TRIGGER trg_1;
12169 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12170 f_int2 = CAST(f_char1 AS SIGNED INT),
12171 f_charbig = 'just inserted'
12172    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12173 DELETE FROM t0_aux
12174 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12177 'just inserted' FROM t0_template
12178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12179 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12180 BEGIN
12181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12182 f_charbig = 'updated by trigger'
12183       WHERE f_int1 = new.f_int1;
12184 END|
12185 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12186 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12187         
12188 # check trigger-5 success:      1
12189 DROP TRIGGER trg_1;
12190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12191 f_int2 = CAST(f_char1 AS SIGNED INT),
12192 f_charbig = 'just inserted'
12193    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12194 DELETE FROM t0_aux
12195 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12196 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12197 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12198 'just inserted' FROM t0_template
12199 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12200 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12201 BEGIN
12202 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12203 f_charbig = 'updated by trigger'
12204       WHERE f_int1 = - old.f_int1;
12205 END|
12206 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12207 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12208         
12209 # check trigger-6 success:      1
12210 DROP TRIGGER trg_1;
12211 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12212 f_int2 = CAST(f_char1 AS SIGNED INT),
12213 f_charbig = 'just inserted'
12214    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12215 DELETE FROM t0_aux
12216 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12217 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12218 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12219 'just inserted' FROM t0_template
12220 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12221 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12222 BEGIN
12223 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12224 f_charbig = 'updated by trigger'
12225       WHERE f_int1 = - old.f_int1;
12226 END|
12227 DELETE FROM t0_aux
12228 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12229         
12230 # check trigger-7 success:      1
12231 DROP TRIGGER trg_1;
12232 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12233 f_int2 = CAST(f_char1 AS SIGNED INT),
12234 f_charbig = 'just inserted'
12235    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12236 DELETE FROM t0_aux
12237 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12238 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12239 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12240 'just inserted' FROM t0_template
12241 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12242 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12243 BEGIN
12244 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12245 f_charbig = 'updated by trigger'
12246       WHERE f_int1 = - old.f_int1;
12247 END|
12248 DELETE FROM t0_aux
12249 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12250         
12251 # check trigger-8 success:      1
12252 DROP TRIGGER trg_1;
12253 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12254 f_int2 = CAST(f_char1 AS SIGNED INT),
12255 f_charbig = 'just inserted'
12256    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12257 DELETE FROM t0_aux
12258 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12259 DELETE FROM t1
12260 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12261 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12262 BEGIN
12263 SET new.f_int1 = old.f_int1 + @max_row,
12264 new.f_int2 = old.f_int2 - @max_row,
12265 new.f_charbig = '####updated per update trigger####';
12266 END|
12267 UPDATE t1
12268 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12269 f_charbig = '####updated per update statement itself####';
12270         
12271 # check trigger-9 success:      1
12272 DROP TRIGGER trg_2;
12273 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12274 f_int2 = CAST(f_char1 AS SIGNED INT),
12275 f_charbig = CONCAT('===',f_char1,'===');
12276 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12277 BEGIN
12278 SET new.f_int1 = new.f_int1 + @max_row,
12279 new.f_int2 = new.f_int2 - @max_row,
12280 new.f_charbig = '####updated per update trigger####';
12281 END|
12282 UPDATE t1
12283 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12284 f_charbig = '####updated per update statement itself####';
12285         
12286 # check trigger-10 success:     1
12287 DROP TRIGGER trg_2;
12288 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12289 f_int2 = CAST(f_char1 AS SIGNED INT),
12290 f_charbig = CONCAT('===',f_char1,'===');
12291 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12292 BEGIN
12293 SET new.f_int1 = @my_max1 + @counter,
12294 new.f_int2 = @my_min2 - @counter,
12295 new.f_charbig = '####updated per insert trigger####';
12296 SET @counter = @counter + 1;
12297 END|
12298 SET @counter = 1;
12299 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12300 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12301 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12302 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12303 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12304 ORDER BY f_int1;
12305 DROP TRIGGER trg_3;
12306         
12307 # check trigger-11 success:     1
12308 DELETE FROM t1
12309 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12310 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12311 AND f_charbig = '####updated per insert trigger####';
12312 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12313 BEGIN
12314 SET new.f_int1 = @my_max1 + @counter,
12315 new.f_int2 = @my_min2 - @counter,
12316 new.f_charbig = '####updated per insert trigger####';
12317 SET @counter = @counter + 1;
12318 END|
12319 SET @counter = 1;
12320 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12321 INSERT INTO t1 (f_char1, f_char2, f_charbig)
12322 SELECT CAST(f_int1 AS CHAR),
12323 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12324 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12325 ORDER BY f_int1;
12326 DROP TRIGGER trg_3;
12327         
12328 # check trigger-12 success:     1
12329 DELETE FROM t1
12330 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12331 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12332 AND f_charbig = '####updated per insert trigger####';
12333 ANALYZE  TABLE t1;
12334 Table   Op      Msg_type        Msg_text
12335 test.t1 analyze status  OK
12336 CHECK    TABLE t1 EXTENDED;
12337 Table   Op      Msg_type        Msg_text
12338 test.t1 check   status  OK
12339 CHECKSUM TABLE t1 EXTENDED;
12340 Table   Checksum
12341 test.t1 <some_value>
12342 OPTIMIZE TABLE t1;
12343 Table   Op      Msg_type        Msg_text
12344 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12345 test.t1 optimize        status  OK
12346 # check layout success:    1
12347 REPAIR   TABLE t1 EXTENDED;
12348 Table   Op      Msg_type        Msg_text
12349 test.t1 repair  note    The storage engine for the table doesn't support repair
12350 # check layout success:    1
12351 TRUNCATE t1;
12352         
12353 # check TRUNCATE success:       1
12354 # check layout success:    1
12355 # End usability test (inc/partition_check.inc)
12356 DROP TABLE t1;
12357 CREATE TABLE t1 (
12358 f_int1 INTEGER,
12359 f_int2 INTEGER,
12360 f_char1 CHAR(20),
12361 f_char2 CHAR(20),
12362 f_charbig VARCHAR(1000)
12363 , UNIQUE INDEX uidx1 (f_int1,f_int2)
12365 PARTITION BY KEY(f_int1) PARTITIONS 5;
12366 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12367 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12368 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12369 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
12370 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12371 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12372 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12373 # Start usability test (inc/partition_check.inc)
12374 create_command
12375 SHOW CREATE TABLE t1;
12376 Table   Create Table
12377 t1      CREATE TABLE `t1` (
12378   `f_int1` int(11) DEFAULT NULL,
12379   `f_int2` mediumint(9) DEFAULT NULL,
12380   `f_char1` char(20) DEFAULT NULL,
12381   `f_char2` char(20) DEFAULT NULL,
12382   `f_charbig` varchar(1000) DEFAULT NULL,
12383   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12384 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
12385 /*!50100 PARTITION BY KEY (f_int1)
12386 PARTITIONS 5 */
12388 # check prerequisites-1 success:    1
12389 # check COUNT(*) success:    1
12390 # check MIN/MAX(f_int1) success:    1
12391 # check MIN/MAX(f_int2) success:    1
12392 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12393 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12394 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12395 WHERE f_int1 IN (2,3);
12396 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12397 # check prerequisites-3 success:    1
12398 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12399 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12400 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12401 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12402 WHERE f_int1 IN (2,3);
12403 DELETE FROM t1 WHERE f_charbig = 'delete me';
12404 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12405 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12406 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12407 WHERE f_int1 IN (2,3);
12408 DELETE FROM t1 WHERE f_charbig = 'delete me';
12409 # check read via f_int1 success: 1
12410 # check read via f_int2 success: 1
12411         
12412 # check multiple-1 success:     1
12413 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12414         
12415 # check multiple-2 success:     1
12416 INSERT INTO t1 SELECT * FROM t0_template
12417 WHERE MOD(f_int1,3) = 0;
12418         
12419 # check multiple-3 success:     1
12420 UPDATE t1 SET f_int1 = f_int1 + @max_row
12421 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12422 AND @max_row_div2 + @max_row_div4;
12423         
12424 # check multiple-4 success:     1
12425 DELETE FROM t1
12426 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12427 AND @max_row_div2 + @max_row_div4 + @max_row;
12428         
12429 # check multiple-5 success:     1
12430 SELECT COUNT(*) INTO @try_count FROM t0_template
12431 WHERE MOD(f_int1,3) = 0
12432 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12433 SELECT COUNT(*) INTO @clash_count
12434 FROM t1 INNER JOIN t0_template USING(f_int1)
12435 WHERE MOD(f_int1,3) = 0
12436 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12437 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12438 INSERT INTO t1
12439 SET f_int1 = @cur_value , f_int2 = @cur_value,
12440 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12441 f_charbig = '#SINGLE#';
12442         
12443 # check single-1 success:       1
12444 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12445 INSERT INTO t1
12446 SET f_int1 = @cur_value , f_int2 = @cur_value,
12447 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12448 f_charbig = '#SINGLE#';
12449         
12450 # check single-2 success:       1
12451 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12452 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12453 UPDATE t1 SET f_int1 = @cur_value2
12454 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12455         
12456 # check single-3 success:       1
12457 SET @cur_value1= -1;
12458 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12459 UPDATE t1 SET f_int1 = @cur_value1
12460 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12461         
12462 # check single-4 success:       1
12463 SELECT MAX(f_int1) INTO @cur_value FROM t1;
12464 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12465         
12466 # check single-5 success:       1
12467 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12468         
12469 # check single-6 success:       1
12470 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12471 Warnings:
12472 Warning 1264    Out of range value for column 'f_int2' at row 1
12473         
12474 # check single-7 success:       1
12475 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12476 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12477 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12478 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12479 f_charbig = '#NULL#';
12480 INSERT INTO t1
12481 SET f_int1 = NULL , f_int2 = -@max_row,
12482 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12483 f_charbig = '#NULL#';
12484 # check null success:    1
12485         
12486 # check null-1 success:         1
12487 UPDATE t1 SET f_int1 = -@max_row
12488 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12489 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12490         
12491 # check null-2 success:         1
12492 UPDATE t1 SET f_int1 = NULL
12493 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12494 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12495         
12496 # check null-3 success:         1
12497 DELETE FROM t1
12498 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12499 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12500         
12501 # check null-4 success:         1
12502 DELETE FROM t1
12503 WHERE f_int1 = 0 AND f_int2 = 0
12504 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12505 AND f_charbig = '#NULL#';
12506 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12507 SELECT f_int1, f_int1, '', '', 'was inserted'
12508    FROM t0_template source_tab
12509 WHERE MOD(f_int1,3) = 0
12510 AND f_int1 BETWEEN @max_row_div2 AND @max_row
12511 ON DUPLICATE KEY
12512 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12513 f_int2 = 2 * @max_row + source_tab.f_int1,
12514 f_charbig = 'was updated';
12515         
12516 # check unique-1-a success:     1
12517         
12518 # check unique-1-b success:     1
12519 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12520 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12521 f_int2 = CAST(f_char1 AS SIGNED INT),
12522 f_charbig = CONCAT('===',f_char1,'===')
12523 WHERE f_charbig = 'was updated';
12524 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12525 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12526    FROM t0_template source_tab
12527 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12528         
12529 # check replace success:        1
12530 DELETE FROM t1
12531 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12532 DELETE FROM t1
12533 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12534 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12535 UPDATE t1 SET f_int2 = f_int1,
12536 f_char1 = CAST(f_int1 AS CHAR),
12537 f_char2 = CAST(f_int1 AS CHAR),
12538 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12539 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12540 SET AUTOCOMMIT= 0;
12541 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12542 SELECT f_int1, f_int1, '', '', 'was inserted'
12543 FROM t0_template source_tab
12544 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12545         
12546 # check transactions-1 success:         1
12547 COMMIT WORK;
12548         
12549 # check transactions-2 success:         1
12550 ROLLBACK WORK;
12551         
12552 # check transactions-3 success:         1
12553 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12554 COMMIT WORK;
12555 ROLLBACK WORK;
12556         
12557 # check transactions-4 success:         1
12558 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12559 SELECT f_int1, f_int1, '', '', 'was inserted'
12560 FROM t0_template source_tab
12561 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12562         
12563 # check transactions-5 success:         1
12564 ROLLBACK WORK;
12565         
12566 # check transactions-6 success:         1
12567 # INFO: Storage engine used for t1 seems to be transactional.
12568 COMMIT;
12569         
12570 # check transactions-7 success:         1
12571 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12572 COMMIT WORK;
12573 SET @@session.sql_mode = 'traditional';
12574 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12575 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12576 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12577 '', '', 'was inserted' FROM t0_template
12578 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12579 ERROR 22012: Division by 0
12580 COMMIT;
12581         
12582 # check transactions-8 success:         1
12583 # INFO: Storage engine used for t1 seems to be able to revert
12584 #       changes made by the failing statement.
12585 SET @@session.sql_mode = '';
12586 SET AUTOCOMMIT= 1;
12587 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12588 COMMIT WORK;
12589 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12590         
12591 # check special-1 success:      1
12592 UPDATE t1 SET f_charbig = '';
12593         
12594 # check special-2 success:      1
12595 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12596 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12597 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12598 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12599 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12600 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12601 'just inserted' FROM t0_template
12602 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12603 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12604 BEGIN
12605 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12606 f_charbig = 'updated by trigger'
12607       WHERE f_int1 = new.f_int1;
12608 END|
12609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12610 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12612         
12613 # check trigger-1 success:      1
12614 DROP TRIGGER trg_1;
12615 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12616 f_int2 = CAST(f_char1 AS SIGNED INT),
12617 f_charbig = 'just inserted'
12618    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12619 DELETE FROM t0_aux
12620 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12621 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12622 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12623 'just inserted' FROM t0_template
12624 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12625 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12626 BEGIN
12627 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12628 f_charbig = 'updated by trigger'
12629       WHERE f_int1 = new.f_int1;
12630 END|
12631 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12632 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12633 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12634         
12635 # check trigger-2 success:      1
12636 DROP TRIGGER trg_1;
12637 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12638 f_int2 = CAST(f_char1 AS SIGNED INT),
12639 f_charbig = 'just inserted'
12640    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12641 DELETE FROM t0_aux
12642 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12643 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12644 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12645 'just inserted' FROM t0_template
12646 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12647 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12648 BEGIN
12649 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12650 f_charbig = 'updated by trigger'
12651       WHERE f_int1 = new.f_int1;
12652 END|
12653 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12654 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12655         
12656 # check trigger-3 success:      1
12657 DROP TRIGGER trg_1;
12658 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12659 f_int2 = CAST(f_char1 AS SIGNED INT),
12660 f_charbig = 'just inserted'
12661    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12662 DELETE FROM t0_aux
12663 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12664 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12665 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12666 'just inserted' FROM t0_template
12667 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12668 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12669 BEGIN
12670 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12671 f_charbig = 'updated by trigger'
12672       WHERE f_int1 = - old.f_int1;
12673 END|
12674 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12675 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12676         
12677 # check trigger-4 success:      1
12678 DROP TRIGGER trg_1;
12679 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12680 f_int2 = CAST(f_char1 AS SIGNED INT),
12681 f_charbig = 'just inserted'
12682    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12683 DELETE FROM t0_aux
12684 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12685 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12686 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12687 'just inserted' FROM t0_template
12688 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12689 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12690 BEGIN
12691 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12692 f_charbig = 'updated by trigger'
12693       WHERE f_int1 = new.f_int1;
12694 END|
12695 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12696 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12697         
12698 # check trigger-5 success:      1
12699 DROP TRIGGER trg_1;
12700 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12701 f_int2 = CAST(f_char1 AS SIGNED INT),
12702 f_charbig = 'just inserted'
12703    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12704 DELETE FROM t0_aux
12705 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12706 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12707 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12708 'just inserted' FROM t0_template
12709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12710 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12711 BEGIN
12712 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12713 f_charbig = 'updated by trigger'
12714       WHERE f_int1 = - old.f_int1;
12715 END|
12716 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12717 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12718         
12719 # check trigger-6 success:      1
12720 DROP TRIGGER trg_1;
12721 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12722 f_int2 = CAST(f_char1 AS SIGNED INT),
12723 f_charbig = 'just inserted'
12724    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12725 DELETE FROM t0_aux
12726 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12727 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12728 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12729 'just inserted' FROM t0_template
12730 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12731 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12732 BEGIN
12733 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12734 f_charbig = 'updated by trigger'
12735       WHERE f_int1 = - old.f_int1;
12736 END|
12737 DELETE FROM t0_aux
12738 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12739         
12740 # check trigger-7 success:      1
12741 DROP TRIGGER trg_1;
12742 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12743 f_int2 = CAST(f_char1 AS SIGNED INT),
12744 f_charbig = 'just inserted'
12745    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12746 DELETE FROM t0_aux
12747 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12748 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12749 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12750 'just inserted' FROM t0_template
12751 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12752 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12753 BEGIN
12754 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12755 f_charbig = 'updated by trigger'
12756       WHERE f_int1 = - old.f_int1;
12757 END|
12758 DELETE FROM t0_aux
12759 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12760         
12761 # check trigger-8 success:      1
12762 DROP TRIGGER trg_1;
12763 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12764 f_int2 = CAST(f_char1 AS SIGNED INT),
12765 f_charbig = 'just inserted'
12766    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12767 DELETE FROM t0_aux
12768 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12769 DELETE FROM t1
12770 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12771 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12772 BEGIN
12773 SET new.f_int1 = old.f_int1 + @max_row,
12774 new.f_int2 = old.f_int2 - @max_row,
12775 new.f_charbig = '####updated per update trigger####';
12776 END|
12777 UPDATE t1
12778 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12779 f_charbig = '####updated per update statement itself####';
12780         
12781 # check trigger-9 success:      1
12782 DROP TRIGGER trg_2;
12783 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12784 f_int2 = CAST(f_char1 AS SIGNED INT),
12785 f_charbig = CONCAT('===',f_char1,'===');
12786 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12787 BEGIN
12788 SET new.f_int1 = new.f_int1 + @max_row,
12789 new.f_int2 = new.f_int2 - @max_row,
12790 new.f_charbig = '####updated per update trigger####';
12791 END|
12792 UPDATE t1
12793 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12794 f_charbig = '####updated per update statement itself####';
12795         
12796 # check trigger-10 success:     1
12797 DROP TRIGGER trg_2;
12798 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12799 f_int2 = CAST(f_char1 AS SIGNED INT),
12800 f_charbig = CONCAT('===',f_char1,'===');
12801 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12802 BEGIN
12803 SET new.f_int1 = @my_max1 + @counter,
12804 new.f_int2 = @my_min2 - @counter,
12805 new.f_charbig = '####updated per insert trigger####';
12806 SET @counter = @counter + 1;
12807 END|
12808 SET @counter = 1;
12809 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12810 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12811 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12812 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12813 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12814 ORDER BY f_int1;
12815 DROP TRIGGER trg_3;
12816         
12817 # check trigger-11 success:     1
12818 DELETE FROM t1
12819 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12820 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12821 AND f_charbig = '####updated per insert trigger####';
12822 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12823 BEGIN
12824 SET new.f_int1 = @my_max1 + @counter,
12825 new.f_int2 = @my_min2 - @counter,
12826 new.f_charbig = '####updated per insert trigger####';
12827 SET @counter = @counter + 1;
12828 END|
12829 SET @counter = 1;
12830 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12831 INSERT INTO t1 (f_char1, f_char2, f_charbig)
12832 SELECT CAST(f_int1 AS CHAR),
12833 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12834 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12835 ORDER BY f_int1;
12836 DROP TRIGGER trg_3;
12837         
12838 # check trigger-12 success:     1
12839 DELETE FROM t1
12840 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12841 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12842 AND f_charbig = '####updated per insert trigger####';
12843 ANALYZE  TABLE t1;
12844 Table   Op      Msg_type        Msg_text
12845 test.t1 analyze status  OK
12846 CHECK    TABLE t1 EXTENDED;
12847 Table   Op      Msg_type        Msg_text
12848 test.t1 check   status  OK
12849 CHECKSUM TABLE t1 EXTENDED;
12850 Table   Checksum
12851 test.t1 <some_value>
12852 OPTIMIZE TABLE t1;
12853 Table   Op      Msg_type        Msg_text
12854 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12855 test.t1 optimize        status  OK
12856 # check layout success:    1
12857 REPAIR   TABLE t1 EXTENDED;
12858 Table   Op      Msg_type        Msg_text
12859 test.t1 repair  note    The storage engine for the table doesn't support repair
12860 # check layout success:    1
12861 TRUNCATE t1;
12862         
12863 # check TRUNCATE success:       1
12864 # check layout success:    1
12865 # End usability test (inc/partition_check.inc)
12866 DROP TABLE t1;
12867 CREATE TABLE t1 (
12868 f_int1 INTEGER,
12869 f_int2 INTEGER,
12870 f_char1 CHAR(20),
12871 f_char2 CHAR(20),
12872 f_charbig VARCHAR(1000)
12873 , UNIQUE INDEX uidx1 (f_int1,f_int2)
12875 PARTITION BY LIST(MOD(f_int1,4))
12876 (PARTITION part_3 VALUES IN (-3),
12877 PARTITION part_2 VALUES IN (-2),
12878 PARTITION part_1 VALUES IN (-1),
12879 PARTITION part_N VALUES IN (NULL),
12880 PARTITION part0 VALUES IN (0),
12881 PARTITION part1 VALUES IN (1),
12882 PARTITION part2 VALUES IN (2),
12883 PARTITION part3 VALUES IN (3));
12884 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12885 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12886 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12887 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
12888 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12889 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12890 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12891 # Start usability test (inc/partition_check.inc)
12892 create_command
12893 SHOW CREATE TABLE t1;
12894 Table   Create Table
12895 t1      CREATE TABLE `t1` (
12896   `f_int1` int(11) DEFAULT NULL,
12897   `f_int2` mediumint(9) DEFAULT NULL,
12898   `f_char1` char(20) DEFAULT NULL,
12899   `f_char2` char(20) DEFAULT NULL,
12900   `f_charbig` varchar(1000) DEFAULT NULL,
12901   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12902 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
12903 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
12904 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
12905  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
12906  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
12907  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
12908  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
12909  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
12910  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
12911  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
12913 # check prerequisites-1 success:    1
12914 # check COUNT(*) success:    1
12915 # check MIN/MAX(f_int1) success:    1
12916 # check MIN/MAX(f_int2) success:    1
12917 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12918 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12919 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12920 WHERE f_int1 IN (2,3);
12921 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12922 # check prerequisites-3 success:    1
12923 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12924 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12925 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12926 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12927 WHERE f_int1 IN (2,3);
12928 DELETE FROM t1 WHERE f_charbig = 'delete me';
12929 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12930 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12931 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12932 WHERE f_int1 IN (2,3);
12933 DELETE FROM t1 WHERE f_charbig = 'delete me';
12934 # check read via f_int1 success: 1
12935 # check read via f_int2 success: 1
12936         
12937 # check multiple-1 success:     1
12938 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12939         
12940 # check multiple-2 success:     1
12941 INSERT INTO t1 SELECT * FROM t0_template
12942 WHERE MOD(f_int1,3) = 0;
12943         
12944 # check multiple-3 success:     1
12945 UPDATE t1 SET f_int1 = f_int1 + @max_row
12946 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12947 AND @max_row_div2 + @max_row_div4;
12948         
12949 # check multiple-4 success:     1
12950 DELETE FROM t1
12951 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12952 AND @max_row_div2 + @max_row_div4 + @max_row;
12953         
12954 # check multiple-5 success:     1
12955 SELECT COUNT(*) INTO @try_count FROM t0_template
12956 WHERE MOD(f_int1,3) = 0
12957 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12958 SELECT COUNT(*) INTO @clash_count
12959 FROM t1 INNER JOIN t0_template USING(f_int1)
12960 WHERE MOD(f_int1,3) = 0
12961 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12962 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12963 INSERT INTO t1
12964 SET f_int1 = @cur_value , f_int2 = @cur_value,
12965 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12966 f_charbig = '#SINGLE#';
12967         
12968 # check single-1 success:       1
12969 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12970 INSERT INTO t1
12971 SET f_int1 = @cur_value , f_int2 = @cur_value,
12972 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12973 f_charbig = '#SINGLE#';
12974         
12975 # check single-2 success:       1
12976 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12977 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12978 UPDATE t1 SET f_int1 = @cur_value2
12979 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12980         
12981 # check single-3 success:       1
12982 SET @cur_value1= -1;
12983 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12984 UPDATE t1 SET f_int1 = @cur_value1
12985 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12986         
12987 # check single-4 success:       1
12988 SELECT MAX(f_int1) INTO @cur_value FROM t1;
12989 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12990         
12991 # check single-5 success:       1
12992 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12993         
12994 # check single-6 success:       1
12995 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12996 Warnings:
12997 Warning 1264    Out of range value for column 'f_int2' at row 1
12998         
12999 # check single-7 success:       1
13000 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13001 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13002 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13003 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13004 f_charbig = '#NULL#';
13005 INSERT INTO t1
13006 SET f_int1 = NULL , f_int2 = -@max_row,
13007 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13008 f_charbig = '#NULL#';
13009 # check null success:    1
13010         
13011 # check null-1 success:         1
13012 UPDATE t1 SET f_int1 = -@max_row
13013 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13014 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13015         
13016 # check null-2 success:         1
13017 UPDATE t1 SET f_int1 = NULL
13018 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13019 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13020         
13021 # check null-3 success:         1
13022 DELETE FROM t1
13023 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13024 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13025         
13026 # check null-4 success:         1
13027 DELETE FROM t1
13028 WHERE f_int1 = 0 AND f_int2 = 0
13029 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13030 AND f_charbig = '#NULL#';
13031 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13032 SELECT f_int1, f_int1, '', '', 'was inserted'
13033    FROM t0_template source_tab
13034 WHERE MOD(f_int1,3) = 0
13035 AND f_int1 BETWEEN @max_row_div2 AND @max_row
13036 ON DUPLICATE KEY
13037 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13038 f_int2 = 2 * @max_row + source_tab.f_int1,
13039 f_charbig = 'was updated';
13040         
13041 # check unique-1-a success:     1
13042         
13043 # check unique-1-b success:     1
13044 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13045 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13046 f_int2 = CAST(f_char1 AS SIGNED INT),
13047 f_charbig = CONCAT('===',f_char1,'===')
13048 WHERE f_charbig = 'was updated';
13049 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13050 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13051    FROM t0_template source_tab
13052 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13053         
13054 # check replace success:        1
13055 DELETE FROM t1
13056 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13057 DELETE FROM t1
13058 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13059 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13060 UPDATE t1 SET f_int2 = f_int1,
13061 f_char1 = CAST(f_int1 AS CHAR),
13062 f_char2 = CAST(f_int1 AS CHAR),
13063 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13064 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13065 SET AUTOCOMMIT= 0;
13066 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13067 SELECT f_int1, f_int1, '', '', 'was inserted'
13068 FROM t0_template source_tab
13069 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13070         
13071 # check transactions-1 success:         1
13072 COMMIT WORK;
13073         
13074 # check transactions-2 success:         1
13075 ROLLBACK WORK;
13076         
13077 # check transactions-3 success:         1
13078 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13079 COMMIT WORK;
13080 ROLLBACK WORK;
13081         
13082 # check transactions-4 success:         1
13083 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13084 SELECT f_int1, f_int1, '', '', 'was inserted'
13085 FROM t0_template source_tab
13086 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13087         
13088 # check transactions-5 success:         1
13089 ROLLBACK WORK;
13090         
13091 # check transactions-6 success:         1
13092 # INFO: Storage engine used for t1 seems to be transactional.
13093 COMMIT;
13094         
13095 # check transactions-7 success:         1
13096 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13097 COMMIT WORK;
13098 SET @@session.sql_mode = 'traditional';
13099 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13100 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13101 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13102 '', '', 'was inserted' FROM t0_template
13103 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13104 ERROR 22012: Division by 0
13105 COMMIT;
13106         
13107 # check transactions-8 success:         1
13108 # INFO: Storage engine used for t1 seems to be able to revert
13109 #       changes made by the failing statement.
13110 SET @@session.sql_mode = '';
13111 SET AUTOCOMMIT= 1;
13112 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13113 COMMIT WORK;
13114 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13115         
13116 # check special-1 success:      1
13117 UPDATE t1 SET f_charbig = '';
13118         
13119 # check special-2 success:      1
13120 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13121 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13122 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13123 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13124 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13125 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13126 'just inserted' FROM t0_template
13127 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13128 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13129 BEGIN
13130 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13131 f_charbig = 'updated by trigger'
13132       WHERE f_int1 = new.f_int1;
13133 END|
13134 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13135 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13136 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13137         
13138 # check trigger-1 success:      1
13139 DROP TRIGGER trg_1;
13140 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13141 f_int2 = CAST(f_char1 AS SIGNED INT),
13142 f_charbig = 'just inserted'
13143    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13144 DELETE FROM t0_aux
13145 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13146 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13147 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13148 'just inserted' FROM t0_template
13149 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13150 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13151 BEGIN
13152 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13153 f_charbig = 'updated by trigger'
13154       WHERE f_int1 = new.f_int1;
13155 END|
13156 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13157 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13158 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13159         
13160 # check trigger-2 success:      1
13161 DROP TRIGGER trg_1;
13162 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13163 f_int2 = CAST(f_char1 AS SIGNED INT),
13164 f_charbig = 'just inserted'
13165    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13166 DELETE FROM t0_aux
13167 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13168 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13169 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13170 'just inserted' FROM t0_template
13171 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13172 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13173 BEGIN
13174 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13175 f_charbig = 'updated by trigger'
13176       WHERE f_int1 = new.f_int1;
13177 END|
13178 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13179 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13180         
13181 # check trigger-3 success:      1
13182 DROP TRIGGER trg_1;
13183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13184 f_int2 = CAST(f_char1 AS SIGNED INT),
13185 f_charbig = 'just inserted'
13186    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13187 DELETE FROM t0_aux
13188 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13189 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13190 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13191 'just inserted' FROM t0_template
13192 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13193 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13194 BEGIN
13195 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13196 f_charbig = 'updated by trigger'
13197       WHERE f_int1 = - old.f_int1;
13198 END|
13199 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13200 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13201         
13202 # check trigger-4 success:      1
13203 DROP TRIGGER trg_1;
13204 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13205 f_int2 = CAST(f_char1 AS SIGNED INT),
13206 f_charbig = 'just inserted'
13207    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13208 DELETE FROM t0_aux
13209 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13210 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13211 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13212 'just inserted' FROM t0_template
13213 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13214 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13215 BEGIN
13216 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13217 f_charbig = 'updated by trigger'
13218       WHERE f_int1 = new.f_int1;
13219 END|
13220 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13221 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13222         
13223 # check trigger-5 success:      1
13224 DROP TRIGGER trg_1;
13225 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13226 f_int2 = CAST(f_char1 AS SIGNED INT),
13227 f_charbig = 'just inserted'
13228    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13229 DELETE FROM t0_aux
13230 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13231 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13232 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13233 'just inserted' FROM t0_template
13234 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13235 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13236 BEGIN
13237 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13238 f_charbig = 'updated by trigger'
13239       WHERE f_int1 = - old.f_int1;
13240 END|
13241 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13242 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13243         
13244 # check trigger-6 success:      1
13245 DROP TRIGGER trg_1;
13246 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13247 f_int2 = CAST(f_char1 AS SIGNED INT),
13248 f_charbig = 'just inserted'
13249    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13250 DELETE FROM t0_aux
13251 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13252 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13253 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13254 'just inserted' FROM t0_template
13255 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13256 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13257 BEGIN
13258 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13259 f_charbig = 'updated by trigger'
13260       WHERE f_int1 = - old.f_int1;
13261 END|
13262 DELETE FROM t0_aux
13263 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13264         
13265 # check trigger-7 success:      1
13266 DROP TRIGGER trg_1;
13267 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13268 f_int2 = CAST(f_char1 AS SIGNED INT),
13269 f_charbig = 'just inserted'
13270    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13271 DELETE FROM t0_aux
13272 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13273 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13274 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13275 'just inserted' FROM t0_template
13276 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13277 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13278 BEGIN
13279 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13280 f_charbig = 'updated by trigger'
13281       WHERE f_int1 = - old.f_int1;
13282 END|
13283 DELETE FROM t0_aux
13284 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13285         
13286 # check trigger-8 success:      1
13287 DROP TRIGGER trg_1;
13288 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13289 f_int2 = CAST(f_char1 AS SIGNED INT),
13290 f_charbig = 'just inserted'
13291    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13292 DELETE FROM t0_aux
13293 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13294 DELETE FROM t1
13295 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13296 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13297 BEGIN
13298 SET new.f_int1 = old.f_int1 + @max_row,
13299 new.f_int2 = old.f_int2 - @max_row,
13300 new.f_charbig = '####updated per update trigger####';
13301 END|
13302 UPDATE t1
13303 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13304 f_charbig = '####updated per update statement itself####';
13305         
13306 # check trigger-9 success:      1
13307 DROP TRIGGER trg_2;
13308 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13309 f_int2 = CAST(f_char1 AS SIGNED INT),
13310 f_charbig = CONCAT('===',f_char1,'===');
13311 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13312 BEGIN
13313 SET new.f_int1 = new.f_int1 + @max_row,
13314 new.f_int2 = new.f_int2 - @max_row,
13315 new.f_charbig = '####updated per update trigger####';
13316 END|
13317 UPDATE t1
13318 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13319 f_charbig = '####updated per update statement itself####';
13320         
13321 # check trigger-10 success:     1
13322 DROP TRIGGER trg_2;
13323 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13324 f_int2 = CAST(f_char1 AS SIGNED INT),
13325 f_charbig = CONCAT('===',f_char1,'===');
13326 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13327 BEGIN
13328 SET new.f_int1 = @my_max1 + @counter,
13329 new.f_int2 = @my_min2 - @counter,
13330 new.f_charbig = '####updated per insert trigger####';
13331 SET @counter = @counter + 1;
13332 END|
13333 SET @counter = 1;
13334 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13335 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13336 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13337 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13338 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13339 ORDER BY f_int1;
13340 DROP TRIGGER trg_3;
13341         
13342 # check trigger-11 success:     1
13343 DELETE FROM t1
13344 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13345 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13346 AND f_charbig = '####updated per insert trigger####';
13347 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13348 BEGIN
13349 SET new.f_int1 = @my_max1 + @counter,
13350 new.f_int2 = @my_min2 - @counter,
13351 new.f_charbig = '####updated per insert trigger####';
13352 SET @counter = @counter + 1;
13353 END|
13354 SET @counter = 1;
13355 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13356 INSERT INTO t1 (f_char1, f_char2, f_charbig)
13357 SELECT CAST(f_int1 AS CHAR),
13358 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13359 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13360 ORDER BY f_int1;
13361 DROP TRIGGER trg_3;
13362         
13363 # check trigger-12 success:     1
13364 DELETE FROM t1
13365 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13366 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13367 AND f_charbig = '####updated per insert trigger####';
13368 ANALYZE  TABLE t1;
13369 Table   Op      Msg_type        Msg_text
13370 test.t1 analyze status  OK
13371 CHECK    TABLE t1 EXTENDED;
13372 Table   Op      Msg_type        Msg_text
13373 test.t1 check   status  OK
13374 CHECKSUM TABLE t1 EXTENDED;
13375 Table   Checksum
13376 test.t1 <some_value>
13377 OPTIMIZE TABLE t1;
13378 Table   Op      Msg_type        Msg_text
13379 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13380 test.t1 optimize        status  OK
13381 # check layout success:    1
13382 REPAIR   TABLE t1 EXTENDED;
13383 Table   Op      Msg_type        Msg_text
13384 test.t1 repair  note    The storage engine for the table doesn't support repair
13385 # check layout success:    1
13386 TRUNCATE t1;
13387         
13388 # check TRUNCATE success:       1
13389 # check layout success:    1
13390 # End usability test (inc/partition_check.inc)
13391 DROP TABLE t1;
13392 CREATE TABLE t1 (
13393 f_int1 INTEGER,
13394 f_int2 INTEGER,
13395 f_char1 CHAR(20),
13396 f_char2 CHAR(20),
13397 f_charbig VARCHAR(1000)
13398 , UNIQUE INDEX uidx1 (f_int1,f_int2)
13400 PARTITION BY RANGE(f_int1)
13401 (PARTITION parta VALUES LESS THAN (0),
13402 PARTITION partb VALUES LESS THAN (5),
13403 PARTITION partc VALUES LESS THAN (10),
13404 PARTITION partd VALUES LESS THAN (10 + 5),
13405 PARTITION parte VALUES LESS THAN (20),
13406 PARTITION partf VALUES LESS THAN (2147483646));
13407 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13408 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13409 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13410 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
13411 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13412 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13413 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13414 # Start usability test (inc/partition_check.inc)
13415 create_command
13416 SHOW CREATE TABLE t1;
13417 Table   Create Table
13418 t1      CREATE TABLE `t1` (
13419   `f_int1` int(11) DEFAULT NULL,
13420   `f_int2` mediumint(9) DEFAULT NULL,
13421   `f_char1` char(20) DEFAULT NULL,
13422   `f_char2` char(20) DEFAULT NULL,
13423   `f_charbig` varchar(1000) DEFAULT NULL,
13424   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
13425 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
13426 /*!50100 PARTITION BY RANGE (f_int1)
13427 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
13428  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
13429  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
13430  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
13431  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
13432  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13434 # check prerequisites-1 success:    1
13435 # check COUNT(*) success:    1
13436 # check MIN/MAX(f_int1) success:    1
13437 # check MIN/MAX(f_int2) success:    1
13438 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13439 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13440 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13441 WHERE f_int1 IN (2,3);
13442 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13443 # check prerequisites-3 success:    1
13444 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13445 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13446 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13447 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13448 WHERE f_int1 IN (2,3);
13449 DELETE FROM t1 WHERE f_charbig = 'delete me';
13450 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13451 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13452 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13453 WHERE f_int1 IN (2,3);
13454 DELETE FROM t1 WHERE f_charbig = 'delete me';
13455 # check read via f_int1 success: 1
13456 # check read via f_int2 success: 1
13457         
13458 # check multiple-1 success:     1
13459 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13460         
13461 # check multiple-2 success:     1
13462 INSERT INTO t1 SELECT * FROM t0_template
13463 WHERE MOD(f_int1,3) = 0;
13464         
13465 # check multiple-3 success:     1
13466 UPDATE t1 SET f_int1 = f_int1 + @max_row
13467 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13468 AND @max_row_div2 + @max_row_div4;
13469         
13470 # check multiple-4 success:     1
13471 DELETE FROM t1
13472 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13473 AND @max_row_div2 + @max_row_div4 + @max_row;
13474         
13475 # check multiple-5 success:     1
13476 SELECT COUNT(*) INTO @try_count FROM t0_template
13477 WHERE MOD(f_int1,3) = 0
13478 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13479 SELECT COUNT(*) INTO @clash_count
13480 FROM t1 INNER JOIN t0_template USING(f_int1)
13481 WHERE MOD(f_int1,3) = 0
13482 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13483 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13484 INSERT INTO t1
13485 SET f_int1 = @cur_value , f_int2 = @cur_value,
13486 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13487 f_charbig = '#SINGLE#';
13488         
13489 # check single-1 success:       1
13490 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13491 INSERT INTO t1
13492 SET f_int1 = @cur_value , f_int2 = @cur_value,
13493 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13494 f_charbig = '#SINGLE#';
13495         
13496 # check single-2 success:       1
13497 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13498 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13499 UPDATE t1 SET f_int1 = @cur_value2
13500 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13501         
13502 # check single-3 success:       1
13503 SET @cur_value1= -1;
13504 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13505 UPDATE t1 SET f_int1 = @cur_value1
13506 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13507         
13508 # check single-4 success:       1
13509 SELECT MAX(f_int1) INTO @cur_value FROM t1;
13510 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13511         
13512 # check single-5 success:       1
13513 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13514         
13515 # check single-6 success:       1
13516 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13517 ERROR HY000: Table has no partition for value 2147483647
13518 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13519 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13520 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13521 f_charbig = '#NULL#';
13522 INSERT INTO t1
13523 SET f_int1 = NULL , f_int2 = -@max_row,
13524 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13525 f_charbig = '#NULL#';
13526 # check null success:    1
13527         
13528 # check null-1 success:         1
13529 UPDATE t1 SET f_int1 = -@max_row
13530 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13531 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13532         
13533 # check null-2 success:         1
13534 UPDATE t1 SET f_int1 = NULL
13535 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13536 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13537         
13538 # check null-3 success:         1
13539 DELETE FROM t1
13540 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13541 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13542         
13543 # check null-4 success:         1
13544 DELETE FROM t1
13545 WHERE f_int1 = 0 AND f_int2 = 0
13546 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13547 AND f_charbig = '#NULL#';
13548 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13549 SELECT f_int1, f_int1, '', '', 'was inserted'
13550    FROM t0_template source_tab
13551 WHERE MOD(f_int1,3) = 0
13552 AND f_int1 BETWEEN @max_row_div2 AND @max_row
13553 ON DUPLICATE KEY
13554 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13555 f_int2 = 2 * @max_row + source_tab.f_int1,
13556 f_charbig = 'was updated';
13557         
13558 # check unique-1-a success:     1
13559         
13560 # check unique-1-b success:     1
13561 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13562 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13563 f_int2 = CAST(f_char1 AS SIGNED INT),
13564 f_charbig = CONCAT('===',f_char1,'===')
13565 WHERE f_charbig = 'was updated';
13566 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13567 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13568    FROM t0_template source_tab
13569 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13570         
13571 # check replace success:        1
13572 DELETE FROM t1
13573 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13574 DELETE FROM t1
13575 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13576 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13577 UPDATE t1 SET f_int2 = f_int1,
13578 f_char1 = CAST(f_int1 AS CHAR),
13579 f_char2 = CAST(f_int1 AS CHAR),
13580 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13581 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13582 SET AUTOCOMMIT= 0;
13583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13584 SELECT f_int1, f_int1, '', '', 'was inserted'
13585 FROM t0_template source_tab
13586 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13587         
13588 # check transactions-1 success:         1
13589 COMMIT WORK;
13590         
13591 # check transactions-2 success:         1
13592 ROLLBACK WORK;
13593         
13594 # check transactions-3 success:         1
13595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13596 COMMIT WORK;
13597 ROLLBACK WORK;
13598         
13599 # check transactions-4 success:         1
13600 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13601 SELECT f_int1, f_int1, '', '', 'was inserted'
13602 FROM t0_template source_tab
13603 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13604         
13605 # check transactions-5 success:         1
13606 ROLLBACK WORK;
13607         
13608 # check transactions-6 success:         1
13609 # INFO: Storage engine used for t1 seems to be transactional.
13610 COMMIT;
13611         
13612 # check transactions-7 success:         1
13613 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13614 COMMIT WORK;
13615 SET @@session.sql_mode = 'traditional';
13616 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13617 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13618 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13619 '', '', 'was inserted' FROM t0_template
13620 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13621 ERROR 22012: Division by 0
13622 COMMIT;
13623         
13624 # check transactions-8 success:         1
13625 # INFO: Storage engine used for t1 seems to be able to revert
13626 #       changes made by the failing statement.
13627 SET @@session.sql_mode = '';
13628 SET AUTOCOMMIT= 1;
13629 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13630 COMMIT WORK;
13631 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13632         
13633 # check special-1 success:      1
13634 UPDATE t1 SET f_charbig = '';
13635         
13636 # check special-2 success:      1
13637 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13638 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13639 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13640 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13641 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13642 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13643 'just inserted' FROM t0_template
13644 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13645 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13646 BEGIN
13647 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13648 f_charbig = 'updated by trigger'
13649       WHERE f_int1 = new.f_int1;
13650 END|
13651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13652 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13653 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13654         
13655 # check trigger-1 success:      1
13656 DROP TRIGGER trg_1;
13657 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13658 f_int2 = CAST(f_char1 AS SIGNED INT),
13659 f_charbig = 'just inserted'
13660    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13661 DELETE FROM t0_aux
13662 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13663 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13664 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13665 'just inserted' FROM t0_template
13666 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13667 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13668 BEGIN
13669 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13670 f_charbig = 'updated by trigger'
13671       WHERE f_int1 = new.f_int1;
13672 END|
13673 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13674 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13676         
13677 # check trigger-2 success:      1
13678 DROP TRIGGER trg_1;
13679 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13680 f_int2 = CAST(f_char1 AS SIGNED INT),
13681 f_charbig = 'just inserted'
13682    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13683 DELETE FROM t0_aux
13684 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13685 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13686 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13687 'just inserted' FROM t0_template
13688 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13689 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13690 BEGIN
13691 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13692 f_charbig = 'updated by trigger'
13693       WHERE f_int1 = new.f_int1;
13694 END|
13695 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13696 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13697         
13698 # check trigger-3 success:      1
13699 DROP TRIGGER trg_1;
13700 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13701 f_int2 = CAST(f_char1 AS SIGNED INT),
13702 f_charbig = 'just inserted'
13703    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13704 DELETE FROM t0_aux
13705 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13706 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13707 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13708 'just inserted' FROM t0_template
13709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13710 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13711 BEGIN
13712 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13713 f_charbig = 'updated by trigger'
13714       WHERE f_int1 = - old.f_int1;
13715 END|
13716 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13717 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13718         
13719 # check trigger-4 success:      1
13720 DROP TRIGGER trg_1;
13721 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13722 f_int2 = CAST(f_char1 AS SIGNED INT),
13723 f_charbig = 'just inserted'
13724    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13725 DELETE FROM t0_aux
13726 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13727 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13728 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13729 'just inserted' FROM t0_template
13730 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13731 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13732 BEGIN
13733 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13734 f_charbig = 'updated by trigger'
13735       WHERE f_int1 = new.f_int1;
13736 END|
13737 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13738 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13739         
13740 # check trigger-5 success:      1
13741 DROP TRIGGER trg_1;
13742 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13743 f_int2 = CAST(f_char1 AS SIGNED INT),
13744 f_charbig = 'just inserted'
13745    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13746 DELETE FROM t0_aux
13747 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13748 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13749 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13750 'just inserted' FROM t0_template
13751 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13752 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13753 BEGIN
13754 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13755 f_charbig = 'updated by trigger'
13756       WHERE f_int1 = - old.f_int1;
13757 END|
13758 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13759 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13760         
13761 # check trigger-6 success:      1
13762 DROP TRIGGER trg_1;
13763 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13764 f_int2 = CAST(f_char1 AS SIGNED INT),
13765 f_charbig = 'just inserted'
13766    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13767 DELETE FROM t0_aux
13768 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13769 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13770 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13771 'just inserted' FROM t0_template
13772 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13773 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13774 BEGIN
13775 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13776 f_charbig = 'updated by trigger'
13777       WHERE f_int1 = - old.f_int1;
13778 END|
13779 DELETE FROM t0_aux
13780 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13781         
13782 # check trigger-7 success:      1
13783 DROP TRIGGER trg_1;
13784 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13785 f_int2 = CAST(f_char1 AS SIGNED INT),
13786 f_charbig = 'just inserted'
13787    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13788 DELETE FROM t0_aux
13789 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13790 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13791 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13792 'just inserted' FROM t0_template
13793 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13794 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13795 BEGIN
13796 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13797 f_charbig = 'updated by trigger'
13798       WHERE f_int1 = - old.f_int1;
13799 END|
13800 DELETE FROM t0_aux
13801 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13802         
13803 # check trigger-8 success:      1
13804 DROP TRIGGER trg_1;
13805 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13806 f_int2 = CAST(f_char1 AS SIGNED INT),
13807 f_charbig = 'just inserted'
13808    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13809 DELETE FROM t0_aux
13810 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13811 DELETE FROM t1
13812 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13813 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13814 BEGIN
13815 SET new.f_int1 = old.f_int1 + @max_row,
13816 new.f_int2 = old.f_int2 - @max_row,
13817 new.f_charbig = '####updated per update trigger####';
13818 END|
13819 UPDATE t1
13820 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13821 f_charbig = '####updated per update statement itself####';
13822         
13823 # check trigger-9 success:      1
13824 DROP TRIGGER trg_2;
13825 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13826 f_int2 = CAST(f_char1 AS SIGNED INT),
13827 f_charbig = CONCAT('===',f_char1,'===');
13828 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13829 BEGIN
13830 SET new.f_int1 = new.f_int1 + @max_row,
13831 new.f_int2 = new.f_int2 - @max_row,
13832 new.f_charbig = '####updated per update trigger####';
13833 END|
13834 UPDATE t1
13835 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13836 f_charbig = '####updated per update statement itself####';
13837         
13838 # check trigger-10 success:     1
13839 DROP TRIGGER trg_2;
13840 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13841 f_int2 = CAST(f_char1 AS SIGNED INT),
13842 f_charbig = CONCAT('===',f_char1,'===');
13843 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13844 BEGIN
13845 SET new.f_int1 = @my_max1 + @counter,
13846 new.f_int2 = @my_min2 - @counter,
13847 new.f_charbig = '####updated per insert trigger####';
13848 SET @counter = @counter + 1;
13849 END|
13850 SET @counter = 1;
13851 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13852 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13853 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13854 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13855 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13856 ORDER BY f_int1;
13857 DROP TRIGGER trg_3;
13858         
13859 # check trigger-11 success:     1
13860 DELETE FROM t1
13861 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13862 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13863 AND f_charbig = '####updated per insert trigger####';
13864 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13865 BEGIN
13866 SET new.f_int1 = @my_max1 + @counter,
13867 new.f_int2 = @my_min2 - @counter,
13868 new.f_charbig = '####updated per insert trigger####';
13869 SET @counter = @counter + 1;
13870 END|
13871 SET @counter = 1;
13872 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13873 INSERT INTO t1 (f_char1, f_char2, f_charbig)
13874 SELECT CAST(f_int1 AS CHAR),
13875 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13876 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13877 ORDER BY f_int1;
13878 DROP TRIGGER trg_3;
13879         
13880 # check trigger-12 success:     1
13881 DELETE FROM t1
13882 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13883 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13884 AND f_charbig = '####updated per insert trigger####';
13885 ANALYZE  TABLE t1;
13886 Table   Op      Msg_type        Msg_text
13887 test.t1 analyze status  OK
13888 CHECK    TABLE t1 EXTENDED;
13889 Table   Op      Msg_type        Msg_text
13890 test.t1 check   status  OK
13891 CHECKSUM TABLE t1 EXTENDED;
13892 Table   Checksum
13893 test.t1 <some_value>
13894 OPTIMIZE TABLE t1;
13895 Table   Op      Msg_type        Msg_text
13896 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13897 test.t1 optimize        status  OK
13898 # check layout success:    1
13899 REPAIR   TABLE t1 EXTENDED;
13900 Table   Op      Msg_type        Msg_text
13901 test.t1 repair  note    The storage engine for the table doesn't support repair
13902 # check layout success:    1
13903 TRUNCATE t1;
13904         
13905 # check TRUNCATE success:       1
13906 # check layout success:    1
13907 # End usability test (inc/partition_check.inc)
13908 DROP TABLE t1;
13909 CREATE TABLE t1 (
13910 f_int1 INTEGER,
13911 f_int2 INTEGER,
13912 f_char1 CHAR(20),
13913 f_char2 CHAR(20),
13914 f_charbig VARCHAR(1000)
13915 , UNIQUE INDEX uidx1 (f_int1,f_int2)
13917 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
13918 (PARTITION parta VALUES LESS THAN (0),
13919 PARTITION partb VALUES LESS THAN (5),
13920 PARTITION partc VALUES LESS THAN (10),
13921 PARTITION partd VALUES LESS THAN (2147483646));
13922 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13923 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13924 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13925 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
13926 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13927 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13928 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13929 # Start usability test (inc/partition_check.inc)
13930 create_command
13931 SHOW CREATE TABLE t1;
13932 Table   Create Table
13933 t1      CREATE TABLE `t1` (
13934   `f_int1` int(11) DEFAULT NULL,
13935   `f_int2` mediumint(9) DEFAULT NULL,
13936   `f_char1` char(20) DEFAULT NULL,
13937   `f_char2` char(20) DEFAULT NULL,
13938   `f_charbig` varchar(1000) DEFAULT NULL,
13939   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
13940 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
13941 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
13942 SUBPARTITION BY HASH (f_int1)
13943 SUBPARTITIONS 2
13944 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
13945  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
13946  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
13947  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13949 # check prerequisites-1 success:    1
13950 # check COUNT(*) success:    1
13951 # check MIN/MAX(f_int1) success:    1
13952 # check MIN/MAX(f_int2) success:    1
13953 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13954 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13955 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13956 WHERE f_int1 IN (2,3);
13957 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13958 # check prerequisites-3 success:    1
13959 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13960 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13961 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13962 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13963 WHERE f_int1 IN (2,3);
13964 DELETE FROM t1 WHERE f_charbig = 'delete me';
13965 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13966 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13967 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13968 WHERE f_int1 IN (2,3);
13969 DELETE FROM t1 WHERE f_charbig = 'delete me';
13970 # check read via f_int1 success: 1
13971 # check read via f_int2 success: 1
13972         
13973 # check multiple-1 success:     1
13974 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13975         
13976 # check multiple-2 success:     1
13977 INSERT INTO t1 SELECT * FROM t0_template
13978 WHERE MOD(f_int1,3) = 0;
13979         
13980 # check multiple-3 success:     1
13981 UPDATE t1 SET f_int1 = f_int1 + @max_row
13982 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13983 AND @max_row_div2 + @max_row_div4;
13984         
13985 # check multiple-4 success:     1
13986 DELETE FROM t1
13987 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13988 AND @max_row_div2 + @max_row_div4 + @max_row;
13989         
13990 # check multiple-5 success:     1
13991 SELECT COUNT(*) INTO @try_count FROM t0_template
13992 WHERE MOD(f_int1,3) = 0
13993 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13994 SELECT COUNT(*) INTO @clash_count
13995 FROM t1 INNER JOIN t0_template USING(f_int1)
13996 WHERE MOD(f_int1,3) = 0
13997 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13998 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13999 INSERT INTO t1
14000 SET f_int1 = @cur_value , f_int2 = @cur_value,
14001 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14002 f_charbig = '#SINGLE#';
14003         
14004 # check single-1 success:       1
14005 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14006 INSERT INTO t1
14007 SET f_int1 = @cur_value , f_int2 = @cur_value,
14008 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14009 f_charbig = '#SINGLE#';
14010         
14011 # check single-2 success:       1
14012 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14013 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14014 UPDATE t1 SET f_int1 = @cur_value2
14015 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14016         
14017 # check single-3 success:       1
14018 SET @cur_value1= -1;
14019 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14020 UPDATE t1 SET f_int1 = @cur_value1
14021 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14022         
14023 # check single-4 success:       1
14024 SELECT MAX(f_int1) INTO @cur_value FROM t1;
14025 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14026         
14027 # check single-5 success:       1
14028 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14029         
14030 # check single-6 success:       1
14031 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14032 Warnings:
14033 Warning 1264    Out of range value for column 'f_int2' at row 1
14034         
14035 # check single-7 success:       1
14036 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14037 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14038 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14039 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14040 f_charbig = '#NULL#';
14041 INSERT INTO t1
14042 SET f_int1 = NULL , f_int2 = -@max_row,
14043 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14044 f_charbig = '#NULL#';
14045 # check null success:    1
14046         
14047 # check null-1 success:         1
14048 UPDATE t1 SET f_int1 = -@max_row
14049 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14050 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14051         
14052 # check null-2 success:         1
14053 UPDATE t1 SET f_int1 = NULL
14054 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14055 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14056         
14057 # check null-3 success:         1
14058 DELETE FROM t1
14059 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14060 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14061         
14062 # check null-4 success:         1
14063 DELETE FROM t1
14064 WHERE f_int1 = 0 AND f_int2 = 0
14065 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14066 AND f_charbig = '#NULL#';
14067 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14068 SELECT f_int1, f_int1, '', '', 'was inserted'
14069    FROM t0_template source_tab
14070 WHERE MOD(f_int1,3) = 0
14071 AND f_int1 BETWEEN @max_row_div2 AND @max_row
14072 ON DUPLICATE KEY
14073 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14074 f_int2 = 2 * @max_row + source_tab.f_int1,
14075 f_charbig = 'was updated';
14076         
14077 # check unique-1-a success:     1
14078         
14079 # check unique-1-b success:     1
14080 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14081 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14082 f_int2 = CAST(f_char1 AS SIGNED INT),
14083 f_charbig = CONCAT('===',f_char1,'===')
14084 WHERE f_charbig = 'was updated';
14085 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14086 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14087    FROM t0_template source_tab
14088 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14089         
14090 # check replace success:        1
14091 DELETE FROM t1
14092 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14093 DELETE FROM t1
14094 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14095 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14096 UPDATE t1 SET f_int2 = f_int1,
14097 f_char1 = CAST(f_int1 AS CHAR),
14098 f_char2 = CAST(f_int1 AS CHAR),
14099 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14100 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14101 SET AUTOCOMMIT= 0;
14102 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14103 SELECT f_int1, f_int1, '', '', 'was inserted'
14104 FROM t0_template source_tab
14105 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14106         
14107 # check transactions-1 success:         1
14108 COMMIT WORK;
14109         
14110 # check transactions-2 success:         1
14111 ROLLBACK WORK;
14112         
14113 # check transactions-3 success:         1
14114 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14115 COMMIT WORK;
14116 ROLLBACK WORK;
14117         
14118 # check transactions-4 success:         1
14119 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14120 SELECT f_int1, f_int1, '', '', 'was inserted'
14121 FROM t0_template source_tab
14122 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14123         
14124 # check transactions-5 success:         1
14125 ROLLBACK WORK;
14126         
14127 # check transactions-6 success:         1
14128 # INFO: Storage engine used for t1 seems to be transactional.
14129 COMMIT;
14130         
14131 # check transactions-7 success:         1
14132 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14133 COMMIT WORK;
14134 SET @@session.sql_mode = 'traditional';
14135 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14136 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14137 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14138 '', '', 'was inserted' FROM t0_template
14139 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14140 ERROR 22012: Division by 0
14141 COMMIT;
14142         
14143 # check transactions-8 success:         1
14144 # INFO: Storage engine used for t1 seems to be able to revert
14145 #       changes made by the failing statement.
14146 SET @@session.sql_mode = '';
14147 SET AUTOCOMMIT= 1;
14148 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14149 COMMIT WORK;
14150 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14151         
14152 # check special-1 success:      1
14153 UPDATE t1 SET f_charbig = '';
14154         
14155 # check special-2 success:      1
14156 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14157 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14158 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14159 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14160 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14161 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14162 'just inserted' FROM t0_template
14163 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14164 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14165 BEGIN
14166 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14167 f_charbig = 'updated by trigger'
14168       WHERE f_int1 = new.f_int1;
14169 END|
14170 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14171 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14172 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14173         
14174 # check trigger-1 success:      1
14175 DROP TRIGGER trg_1;
14176 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14177 f_int2 = CAST(f_char1 AS SIGNED INT),
14178 f_charbig = 'just inserted'
14179    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14180 DELETE FROM t0_aux
14181 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14182 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14183 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14184 'just inserted' FROM t0_template
14185 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14186 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14187 BEGIN
14188 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14189 f_charbig = 'updated by trigger'
14190       WHERE f_int1 = new.f_int1;
14191 END|
14192 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14193 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14194 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14195         
14196 # check trigger-2 success:      1
14197 DROP TRIGGER trg_1;
14198 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14199 f_int2 = CAST(f_char1 AS SIGNED INT),
14200 f_charbig = 'just inserted'
14201    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14202 DELETE FROM t0_aux
14203 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14204 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14205 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14206 'just inserted' FROM t0_template
14207 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14208 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14209 BEGIN
14210 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14211 f_charbig = 'updated by trigger'
14212       WHERE f_int1 = new.f_int1;
14213 END|
14214 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14215 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14216         
14217 # check trigger-3 success:      1
14218 DROP TRIGGER trg_1;
14219 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14220 f_int2 = CAST(f_char1 AS SIGNED INT),
14221 f_charbig = 'just inserted'
14222    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14223 DELETE FROM t0_aux
14224 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14225 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14226 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14227 'just inserted' FROM t0_template
14228 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14229 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14230 BEGIN
14231 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14232 f_charbig = 'updated by trigger'
14233       WHERE f_int1 = - old.f_int1;
14234 END|
14235 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14236 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14237         
14238 # check trigger-4 success:      1
14239 DROP TRIGGER trg_1;
14240 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14241 f_int2 = CAST(f_char1 AS SIGNED INT),
14242 f_charbig = 'just inserted'
14243    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14244 DELETE FROM t0_aux
14245 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14246 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14247 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14248 'just inserted' FROM t0_template
14249 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14250 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14251 BEGIN
14252 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14253 f_charbig = 'updated by trigger'
14254       WHERE f_int1 = new.f_int1;
14255 END|
14256 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14257 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14258         
14259 # check trigger-5 success:      1
14260 DROP TRIGGER trg_1;
14261 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14262 f_int2 = CAST(f_char1 AS SIGNED INT),
14263 f_charbig = 'just inserted'
14264    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14265 DELETE FROM t0_aux
14266 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14267 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14268 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14269 'just inserted' FROM t0_template
14270 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14271 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14272 BEGIN
14273 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14274 f_charbig = 'updated by trigger'
14275       WHERE f_int1 = - old.f_int1;
14276 END|
14277 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14278 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14279         
14280 # check trigger-6 success:      1
14281 DROP TRIGGER trg_1;
14282 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14283 f_int2 = CAST(f_char1 AS SIGNED INT),
14284 f_charbig = 'just inserted'
14285    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14286 DELETE FROM t0_aux
14287 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14288 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14289 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14290 'just inserted' FROM t0_template
14291 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14292 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14293 BEGIN
14294 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14295 f_charbig = 'updated by trigger'
14296       WHERE f_int1 = - old.f_int1;
14297 END|
14298 DELETE FROM t0_aux
14299 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14300         
14301 # check trigger-7 success:      1
14302 DROP TRIGGER trg_1;
14303 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14304 f_int2 = CAST(f_char1 AS SIGNED INT),
14305 f_charbig = 'just inserted'
14306    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14307 DELETE FROM t0_aux
14308 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14309 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14310 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14311 'just inserted' FROM t0_template
14312 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14313 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14314 BEGIN
14315 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14316 f_charbig = 'updated by trigger'
14317       WHERE f_int1 = - old.f_int1;
14318 END|
14319 DELETE FROM t0_aux
14320 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14321         
14322 # check trigger-8 success:      1
14323 DROP TRIGGER trg_1;
14324 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14325 f_int2 = CAST(f_char1 AS SIGNED INT),
14326 f_charbig = 'just inserted'
14327    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14328 DELETE FROM t0_aux
14329 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14330 DELETE FROM t1
14331 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14332 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14333 BEGIN
14334 SET new.f_int1 = old.f_int1 + @max_row,
14335 new.f_int2 = old.f_int2 - @max_row,
14336 new.f_charbig = '####updated per update trigger####';
14337 END|
14338 UPDATE t1
14339 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14340 f_charbig = '####updated per update statement itself####';
14341         
14342 # check trigger-9 success:      1
14343 DROP TRIGGER trg_2;
14344 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14345 f_int2 = CAST(f_char1 AS SIGNED INT),
14346 f_charbig = CONCAT('===',f_char1,'===');
14347 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14348 BEGIN
14349 SET new.f_int1 = new.f_int1 + @max_row,
14350 new.f_int2 = new.f_int2 - @max_row,
14351 new.f_charbig = '####updated per update trigger####';
14352 END|
14353 UPDATE t1
14354 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14355 f_charbig = '####updated per update statement itself####';
14356         
14357 # check trigger-10 success:     1
14358 DROP TRIGGER trg_2;
14359 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14360 f_int2 = CAST(f_char1 AS SIGNED INT),
14361 f_charbig = CONCAT('===',f_char1,'===');
14362 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14363 BEGIN
14364 SET new.f_int1 = @my_max1 + @counter,
14365 new.f_int2 = @my_min2 - @counter,
14366 new.f_charbig = '####updated per insert trigger####';
14367 SET @counter = @counter + 1;
14368 END|
14369 SET @counter = 1;
14370 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14371 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14372 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14373 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14374 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14375 ORDER BY f_int1;
14376 DROP TRIGGER trg_3;
14377         
14378 # check trigger-11 success:     1
14379 DELETE FROM t1
14380 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14381 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14382 AND f_charbig = '####updated per insert trigger####';
14383 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14384 BEGIN
14385 SET new.f_int1 = @my_max1 + @counter,
14386 new.f_int2 = @my_min2 - @counter,
14387 new.f_charbig = '####updated per insert trigger####';
14388 SET @counter = @counter + 1;
14389 END|
14390 SET @counter = 1;
14391 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14392 INSERT INTO t1 (f_char1, f_char2, f_charbig)
14393 SELECT CAST(f_int1 AS CHAR),
14394 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14395 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14396 ORDER BY f_int1;
14397 DROP TRIGGER trg_3;
14398         
14399 # check trigger-12 success:     1
14400 DELETE FROM t1
14401 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14402 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14403 AND f_charbig = '####updated per insert trigger####';
14404 ANALYZE  TABLE t1;
14405 Table   Op      Msg_type        Msg_text
14406 test.t1 analyze status  OK
14407 CHECK    TABLE t1 EXTENDED;
14408 Table   Op      Msg_type        Msg_text
14409 test.t1 check   status  OK
14410 CHECKSUM TABLE t1 EXTENDED;
14411 Table   Checksum
14412 test.t1 <some_value>
14413 OPTIMIZE TABLE t1;
14414 Table   Op      Msg_type        Msg_text
14415 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14416 test.t1 optimize        status  OK
14417 # check layout success:    1
14418 REPAIR   TABLE t1 EXTENDED;
14419 Table   Op      Msg_type        Msg_text
14420 test.t1 repair  note    The storage engine for the table doesn't support repair
14421 # check layout success:    1
14422 TRUNCATE t1;
14423         
14424 # check TRUNCATE success:       1
14425 # check layout success:    1
14426 # End usability test (inc/partition_check.inc)
14427 DROP TABLE t1;
14428 CREATE TABLE t1 (
14429 f_int1 INTEGER,
14430 f_int2 INTEGER,
14431 f_char1 CHAR(20),
14432 f_char2 CHAR(20),
14433 f_charbig VARCHAR(1000)
14434 , UNIQUE INDEX uidx1 (f_int1,f_int2)
14436 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
14437 (PARTITION part1 VALUES LESS THAN (0)
14438 (SUBPARTITION subpart11, SUBPARTITION subpart12),
14439 PARTITION part2 VALUES LESS THAN (5)
14440 (SUBPARTITION subpart21, SUBPARTITION subpart22),
14441 PARTITION part3 VALUES LESS THAN (10)
14442 (SUBPARTITION subpart31, SUBPARTITION subpart32),
14443 PARTITION part4 VALUES LESS THAN (2147483646)
14444 (SUBPARTITION subpart41, SUBPARTITION subpart42));
14445 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14446 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14447 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14448 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
14449 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14450 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14451 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14452 # Start usability test (inc/partition_check.inc)
14453 create_command
14454 SHOW CREATE TABLE t1;
14455 Table   Create Table
14456 t1      CREATE TABLE `t1` (
14457   `f_int1` int(11) DEFAULT NULL,
14458   `f_int2` mediumint(9) DEFAULT NULL,
14459   `f_char1` char(20) DEFAULT NULL,
14460   `f_char2` char(20) DEFAULT NULL,
14461   `f_charbig` varchar(1000) DEFAULT NULL,
14462   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
14463 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
14464 /*!50100 PARTITION BY RANGE (f_int1)
14465 SUBPARTITION BY KEY (f_int1)
14466 (PARTITION part1 VALUES LESS THAN (0)
14467  (SUBPARTITION subpart11 ENGINE = InnoDB,
14468   SUBPARTITION subpart12 ENGINE = InnoDB),
14469  PARTITION part2 VALUES LESS THAN (5)
14470  (SUBPARTITION subpart21 ENGINE = InnoDB,
14471   SUBPARTITION subpart22 ENGINE = InnoDB),
14472  PARTITION part3 VALUES LESS THAN (10)
14473  (SUBPARTITION subpart31 ENGINE = InnoDB,
14474   SUBPARTITION subpart32 ENGINE = InnoDB),
14475  PARTITION part4 VALUES LESS THAN (2147483646)
14476  (SUBPARTITION subpart41 ENGINE = InnoDB,
14477   SUBPARTITION subpart42 ENGINE = InnoDB)) */
14479 # check prerequisites-1 success:    1
14480 # check COUNT(*) success:    1
14481 # check MIN/MAX(f_int1) success:    1
14482 # check MIN/MAX(f_int2) success:    1
14483 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14484 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14485 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14486 WHERE f_int1 IN (2,3);
14487 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14488 # check prerequisites-3 success:    1
14489 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14490 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14491 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14492 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14493 WHERE f_int1 IN (2,3);
14494 DELETE FROM t1 WHERE f_charbig = 'delete me';
14495 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14496 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14497 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14498 WHERE f_int1 IN (2,3);
14499 DELETE FROM t1 WHERE f_charbig = 'delete me';
14500 # check read via f_int1 success: 1
14501 # check read via f_int2 success: 1
14502         
14503 # check multiple-1 success:     1
14504 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14505         
14506 # check multiple-2 success:     1
14507 INSERT INTO t1 SELECT * FROM t0_template
14508 WHERE MOD(f_int1,3) = 0;
14509         
14510 # check multiple-3 success:     1
14511 UPDATE t1 SET f_int1 = f_int1 + @max_row
14512 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14513 AND @max_row_div2 + @max_row_div4;
14514         
14515 # check multiple-4 success:     1
14516 DELETE FROM t1
14517 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14518 AND @max_row_div2 + @max_row_div4 + @max_row;
14519         
14520 # check multiple-5 success:     1
14521 SELECT COUNT(*) INTO @try_count FROM t0_template
14522 WHERE MOD(f_int1,3) = 0
14523 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14524 SELECT COUNT(*) INTO @clash_count
14525 FROM t1 INNER JOIN t0_template USING(f_int1)
14526 WHERE MOD(f_int1,3) = 0
14527 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14528 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14529 INSERT INTO t1
14530 SET f_int1 = @cur_value , f_int2 = @cur_value,
14531 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14532 f_charbig = '#SINGLE#';
14533         
14534 # check single-1 success:       1
14535 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14536 INSERT INTO t1
14537 SET f_int1 = @cur_value , f_int2 = @cur_value,
14538 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14539 f_charbig = '#SINGLE#';
14540         
14541 # check single-2 success:       1
14542 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14543 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14544 UPDATE t1 SET f_int1 = @cur_value2
14545 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14546         
14547 # check single-3 success:       1
14548 SET @cur_value1= -1;
14549 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14550 UPDATE t1 SET f_int1 = @cur_value1
14551 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14552         
14553 # check single-4 success:       1
14554 SELECT MAX(f_int1) INTO @cur_value FROM t1;
14555 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14556         
14557 # check single-5 success:       1
14558 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14559         
14560 # check single-6 success:       1
14561 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14562 ERROR HY000: Table has no partition for value 2147483647
14563 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14564 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14565 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14566 f_charbig = '#NULL#';
14567 INSERT INTO t1
14568 SET f_int1 = NULL , f_int2 = -@max_row,
14569 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14570 f_charbig = '#NULL#';
14571 # check null success:    1
14572         
14573 # check null-1 success:         1
14574 UPDATE t1 SET f_int1 = -@max_row
14575 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14576 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14577         
14578 # check null-2 success:         1
14579 UPDATE t1 SET f_int1 = NULL
14580 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14581 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14582         
14583 # check null-3 success:         1
14584 DELETE FROM t1
14585 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14586 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14587         
14588 # check null-4 success:         1
14589 DELETE FROM t1
14590 WHERE f_int1 = 0 AND f_int2 = 0
14591 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14592 AND f_charbig = '#NULL#';
14593 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14594 SELECT f_int1, f_int1, '', '', 'was inserted'
14595    FROM t0_template source_tab
14596 WHERE MOD(f_int1,3) = 0
14597 AND f_int1 BETWEEN @max_row_div2 AND @max_row
14598 ON DUPLICATE KEY
14599 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14600 f_int2 = 2 * @max_row + source_tab.f_int1,
14601 f_charbig = 'was updated';
14602         
14603 # check unique-1-a success:     1
14604         
14605 # check unique-1-b success:     1
14606 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14607 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14608 f_int2 = CAST(f_char1 AS SIGNED INT),
14609 f_charbig = CONCAT('===',f_char1,'===')
14610 WHERE f_charbig = 'was updated';
14611 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14612 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14613    FROM t0_template source_tab
14614 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14615         
14616 # check replace success:        1
14617 DELETE FROM t1
14618 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14619 DELETE FROM t1
14620 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14621 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14622 UPDATE t1 SET f_int2 = f_int1,
14623 f_char1 = CAST(f_int1 AS CHAR),
14624 f_char2 = CAST(f_int1 AS CHAR),
14625 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14626 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14627 SET AUTOCOMMIT= 0;
14628 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14629 SELECT f_int1, f_int1, '', '', 'was inserted'
14630 FROM t0_template source_tab
14631 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14632         
14633 # check transactions-1 success:         1
14634 COMMIT WORK;
14635         
14636 # check transactions-2 success:         1
14637 ROLLBACK WORK;
14638         
14639 # check transactions-3 success:         1
14640 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14641 COMMIT WORK;
14642 ROLLBACK WORK;
14643         
14644 # check transactions-4 success:         1
14645 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14646 SELECT f_int1, f_int1, '', '', 'was inserted'
14647 FROM t0_template source_tab
14648 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14649         
14650 # check transactions-5 success:         1
14651 ROLLBACK WORK;
14652         
14653 # check transactions-6 success:         1
14654 # INFO: Storage engine used for t1 seems to be transactional.
14655 COMMIT;
14656         
14657 # check transactions-7 success:         1
14658 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14659 COMMIT WORK;
14660 SET @@session.sql_mode = 'traditional';
14661 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14662 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14663 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14664 '', '', 'was inserted' FROM t0_template
14665 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14666 ERROR 22012: Division by 0
14667 COMMIT;
14668         
14669 # check transactions-8 success:         1
14670 # INFO: Storage engine used for t1 seems to be able to revert
14671 #       changes made by the failing statement.
14672 SET @@session.sql_mode = '';
14673 SET AUTOCOMMIT= 1;
14674 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14675 COMMIT WORK;
14676 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14677         
14678 # check special-1 success:      1
14679 UPDATE t1 SET f_charbig = '';
14680         
14681 # check special-2 success:      1
14682 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14683 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14684 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14685 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14686 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14687 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14688 'just inserted' FROM t0_template
14689 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14690 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14691 BEGIN
14692 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14693 f_charbig = 'updated by trigger'
14694       WHERE f_int1 = new.f_int1;
14695 END|
14696 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14697 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14698 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14699         
14700 # check trigger-1 success:      1
14701 DROP TRIGGER trg_1;
14702 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14703 f_int2 = CAST(f_char1 AS SIGNED INT),
14704 f_charbig = 'just inserted'
14705    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14706 DELETE FROM t0_aux
14707 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14708 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14709 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14710 'just inserted' FROM t0_template
14711 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14712 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14713 BEGIN
14714 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14715 f_charbig = 'updated by trigger'
14716       WHERE f_int1 = new.f_int1;
14717 END|
14718 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14719 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14720 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14721         
14722 # check trigger-2 success:      1
14723 DROP TRIGGER trg_1;
14724 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14725 f_int2 = CAST(f_char1 AS SIGNED INT),
14726 f_charbig = 'just inserted'
14727    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14728 DELETE FROM t0_aux
14729 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14730 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14731 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14732 'just inserted' FROM t0_template
14733 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14734 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14735 BEGIN
14736 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14737 f_charbig = 'updated by trigger'
14738       WHERE f_int1 = new.f_int1;
14739 END|
14740 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14741 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14742         
14743 # check trigger-3 success:      1
14744 DROP TRIGGER trg_1;
14745 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14746 f_int2 = CAST(f_char1 AS SIGNED INT),
14747 f_charbig = 'just inserted'
14748    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14749 DELETE FROM t0_aux
14750 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14751 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14752 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14753 'just inserted' FROM t0_template
14754 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14755 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14756 BEGIN
14757 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14758 f_charbig = 'updated by trigger'
14759       WHERE f_int1 = - old.f_int1;
14760 END|
14761 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14762 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14763         
14764 # check trigger-4 success:      1
14765 DROP TRIGGER trg_1;
14766 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14767 f_int2 = CAST(f_char1 AS SIGNED INT),
14768 f_charbig = 'just inserted'
14769    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14770 DELETE FROM t0_aux
14771 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14772 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14773 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14774 'just inserted' FROM t0_template
14775 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14776 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14777 BEGIN
14778 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14779 f_charbig = 'updated by trigger'
14780       WHERE f_int1 = new.f_int1;
14781 END|
14782 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14783 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14784         
14785 # check trigger-5 success:      1
14786 DROP TRIGGER trg_1;
14787 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14788 f_int2 = CAST(f_char1 AS SIGNED INT),
14789 f_charbig = 'just inserted'
14790    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14791 DELETE FROM t0_aux
14792 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14793 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14794 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14795 'just inserted' FROM t0_template
14796 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14797 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14798 BEGIN
14799 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14800 f_charbig = 'updated by trigger'
14801       WHERE f_int1 = - old.f_int1;
14802 END|
14803 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14804 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14805         
14806 # check trigger-6 success:      1
14807 DROP TRIGGER trg_1;
14808 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14809 f_int2 = CAST(f_char1 AS SIGNED INT),
14810 f_charbig = 'just inserted'
14811    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14812 DELETE FROM t0_aux
14813 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14814 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14815 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14816 'just inserted' FROM t0_template
14817 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14818 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14819 BEGIN
14820 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14821 f_charbig = 'updated by trigger'
14822       WHERE f_int1 = - old.f_int1;
14823 END|
14824 DELETE FROM t0_aux
14825 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14826         
14827 # check trigger-7 success:      1
14828 DROP TRIGGER trg_1;
14829 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14830 f_int2 = CAST(f_char1 AS SIGNED INT),
14831 f_charbig = 'just inserted'
14832    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14833 DELETE FROM t0_aux
14834 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14835 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14836 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14837 'just inserted' FROM t0_template
14838 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14839 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14840 BEGIN
14841 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14842 f_charbig = 'updated by trigger'
14843       WHERE f_int1 = - old.f_int1;
14844 END|
14845 DELETE FROM t0_aux
14846 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14847         
14848 # check trigger-8 success:      1
14849 DROP TRIGGER trg_1;
14850 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14851 f_int2 = CAST(f_char1 AS SIGNED INT),
14852 f_charbig = 'just inserted'
14853    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14854 DELETE FROM t0_aux
14855 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14856 DELETE FROM t1
14857 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14858 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14859 BEGIN
14860 SET new.f_int1 = old.f_int1 + @max_row,
14861 new.f_int2 = old.f_int2 - @max_row,
14862 new.f_charbig = '####updated per update trigger####';
14863 END|
14864 UPDATE t1
14865 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14866 f_charbig = '####updated per update statement itself####';
14867         
14868 # check trigger-9 success:      1
14869 DROP TRIGGER trg_2;
14870 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14871 f_int2 = CAST(f_char1 AS SIGNED INT),
14872 f_charbig = CONCAT('===',f_char1,'===');
14873 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14874 BEGIN
14875 SET new.f_int1 = new.f_int1 + @max_row,
14876 new.f_int2 = new.f_int2 - @max_row,
14877 new.f_charbig = '####updated per update trigger####';
14878 END|
14879 UPDATE t1
14880 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14881 f_charbig = '####updated per update statement itself####';
14882         
14883 # check trigger-10 success:     1
14884 DROP TRIGGER trg_2;
14885 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14886 f_int2 = CAST(f_char1 AS SIGNED INT),
14887 f_charbig = CONCAT('===',f_char1,'===');
14888 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14889 BEGIN
14890 SET new.f_int1 = @my_max1 + @counter,
14891 new.f_int2 = @my_min2 - @counter,
14892 new.f_charbig = '####updated per insert trigger####';
14893 SET @counter = @counter + 1;
14894 END|
14895 SET @counter = 1;
14896 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14897 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14898 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14899 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14900 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14901 ORDER BY f_int1;
14902 DROP TRIGGER trg_3;
14903         
14904 # check trigger-11 success:     1
14905 DELETE FROM t1
14906 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14907 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14908 AND f_charbig = '####updated per insert trigger####';
14909 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14910 BEGIN
14911 SET new.f_int1 = @my_max1 + @counter,
14912 new.f_int2 = @my_min2 - @counter,
14913 new.f_charbig = '####updated per insert trigger####';
14914 SET @counter = @counter + 1;
14915 END|
14916 SET @counter = 1;
14917 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14918 INSERT INTO t1 (f_char1, f_char2, f_charbig)
14919 SELECT CAST(f_int1 AS CHAR),
14920 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14921 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14922 ORDER BY f_int1;
14923 DROP TRIGGER trg_3;
14924         
14925 # check trigger-12 success:     1
14926 DELETE FROM t1
14927 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14928 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14929 AND f_charbig = '####updated per insert trigger####';
14930 ANALYZE  TABLE t1;
14931 Table   Op      Msg_type        Msg_text
14932 test.t1 analyze status  OK
14933 CHECK    TABLE t1 EXTENDED;
14934 Table   Op      Msg_type        Msg_text
14935 test.t1 check   status  OK
14936 CHECKSUM TABLE t1 EXTENDED;
14937 Table   Checksum
14938 test.t1 <some_value>
14939 OPTIMIZE TABLE t1;
14940 Table   Op      Msg_type        Msg_text
14941 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14942 test.t1 optimize        status  OK
14943 # check layout success:    1
14944 REPAIR   TABLE t1 EXTENDED;
14945 Table   Op      Msg_type        Msg_text
14946 test.t1 repair  note    The storage engine for the table doesn't support repair
14947 # check layout success:    1
14948 TRUNCATE t1;
14949         
14950 # check TRUNCATE success:       1
14951 # check layout success:    1
14952 # End usability test (inc/partition_check.inc)
14953 DROP TABLE t1;
14954 CREATE TABLE t1 (
14955 f_int1 INTEGER,
14956 f_int2 INTEGER,
14957 f_char1 CHAR(20),
14958 f_char2 CHAR(20),
14959 f_charbig VARCHAR(1000)
14960 , UNIQUE INDEX uidx1 (f_int1,f_int2)
14962 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
14963 (PARTITION part1 VALUES IN (0)
14964 (SUBPARTITION sp11, SUBPARTITION sp12),
14965 PARTITION part2 VALUES IN (1)
14966 (SUBPARTITION sp21, SUBPARTITION sp22),
14967 PARTITION part3 VALUES IN (2)
14968 (SUBPARTITION sp31, SUBPARTITION sp32),
14969 PARTITION part4 VALUES IN (NULL)
14970 (SUBPARTITION sp41, SUBPARTITION sp42));
14971 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14972 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14973 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14974 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
14975 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14976 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14977 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14978 # Start usability test (inc/partition_check.inc)
14979 create_command
14980 SHOW CREATE TABLE t1;
14981 Table   Create Table
14982 t1      CREATE TABLE `t1` (
14983   `f_int1` int(11) DEFAULT NULL,
14984   `f_int2` mediumint(9) DEFAULT NULL,
14985   `f_char1` char(20) DEFAULT NULL,
14986   `f_char2` char(20) DEFAULT NULL,
14987   `f_charbig` varchar(1000) DEFAULT NULL,
14988   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
14989 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
14990 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
14991 SUBPARTITION BY HASH (f_int1 + 1)
14992 (PARTITION part1 VALUES IN (0)
14993  (SUBPARTITION sp11 ENGINE = InnoDB,
14994   SUBPARTITION sp12 ENGINE = InnoDB),
14995  PARTITION part2 VALUES IN (1)
14996  (SUBPARTITION sp21 ENGINE = InnoDB,
14997   SUBPARTITION sp22 ENGINE = InnoDB),
14998  PARTITION part3 VALUES IN (2)
14999  (SUBPARTITION sp31 ENGINE = InnoDB,
15000   SUBPARTITION sp32 ENGINE = InnoDB),
15001  PARTITION part4 VALUES IN (NULL)
15002  (SUBPARTITION sp41 ENGINE = InnoDB,
15003   SUBPARTITION sp42 ENGINE = InnoDB)) */
15005 # check prerequisites-1 success:    1
15006 # check COUNT(*) success:    1
15007 # check MIN/MAX(f_int1) success:    1
15008 # check MIN/MAX(f_int2) success:    1
15009 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15010 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15011 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15012 WHERE f_int1 IN (2,3);
15013 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15014 # check prerequisites-3 success:    1
15015 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15016 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15017 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15018 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15019 WHERE f_int1 IN (2,3);
15020 DELETE FROM t1 WHERE f_charbig = 'delete me';
15021 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15022 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15023 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15024 WHERE f_int1 IN (2,3);
15025 DELETE FROM t1 WHERE f_charbig = 'delete me';
15026 # check read via f_int1 success: 1
15027 # check read via f_int2 success: 1
15028         
15029 # check multiple-1 success:     1
15030 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15031         
15032 # check multiple-2 success:     1
15033 INSERT INTO t1 SELECT * FROM t0_template
15034 WHERE MOD(f_int1,3) = 0;
15035         
15036 # check multiple-3 success:     1
15037 UPDATE t1 SET f_int1 = f_int1 + @max_row
15038 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15039 AND @max_row_div2 + @max_row_div4;
15040         
15041 # check multiple-4 success:     1
15042 DELETE FROM t1
15043 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15044 AND @max_row_div2 + @max_row_div4 + @max_row;
15045         
15046 # check multiple-5 success:     1
15047 SELECT COUNT(*) INTO @try_count FROM t0_template
15048 WHERE MOD(f_int1,3) = 0
15049 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15050 SELECT COUNT(*) INTO @clash_count
15051 FROM t1 INNER JOIN t0_template USING(f_int1)
15052 WHERE MOD(f_int1,3) = 0
15053 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15054 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15055 INSERT INTO t1
15056 SET f_int1 = @cur_value , f_int2 = @cur_value,
15057 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15058 f_charbig = '#SINGLE#';
15059         
15060 # check single-1 success:       1
15061 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15062 INSERT INTO t1
15063 SET f_int1 = @cur_value , f_int2 = @cur_value,
15064 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15065 f_charbig = '#SINGLE#';
15066         
15067 # check single-2 success:       1
15068 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15069 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15070 UPDATE t1 SET f_int1 = @cur_value2
15071 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15072         
15073 # check single-3 success:       1
15074 SET @cur_value1= -1;
15075 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15076 UPDATE t1 SET f_int1 = @cur_value1
15077 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15078         
15079 # check single-4 success:       1
15080 SELECT MAX(f_int1) INTO @cur_value FROM t1;
15081 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15082         
15083 # check single-5 success:       1
15084 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15085         
15086 # check single-6 success:       1
15087 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15088 Warnings:
15089 Warning 1264    Out of range value for column 'f_int2' at row 1
15090         
15091 # check single-7 success:       1
15092 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15093 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15094 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15095 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15096 f_charbig = '#NULL#';
15097 INSERT INTO t1
15098 SET f_int1 = NULL , f_int2 = -@max_row,
15099 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15100 f_charbig = '#NULL#';
15101 # check null success:    1
15102         
15103 # check null-1 success:         1
15104 UPDATE t1 SET f_int1 = -@max_row
15105 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15106 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15107         
15108 # check null-2 success:         1
15109 UPDATE t1 SET f_int1 = NULL
15110 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15111 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15112         
15113 # check null-3 success:         1
15114 DELETE FROM t1
15115 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15116 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15117         
15118 # check null-4 success:         1
15119 DELETE FROM t1
15120 WHERE f_int1 = 0 AND f_int2 = 0
15121 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15122 AND f_charbig = '#NULL#';
15123 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15124 SELECT f_int1, f_int1, '', '', 'was inserted'
15125    FROM t0_template source_tab
15126 WHERE MOD(f_int1,3) = 0
15127 AND f_int1 BETWEEN @max_row_div2 AND @max_row
15128 ON DUPLICATE KEY
15129 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15130 f_int2 = 2 * @max_row + source_tab.f_int1,
15131 f_charbig = 'was updated';
15132         
15133 # check unique-1-a success:     1
15134         
15135 # check unique-1-b success:     1
15136 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15137 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15138 f_int2 = CAST(f_char1 AS SIGNED INT),
15139 f_charbig = CONCAT('===',f_char1,'===')
15140 WHERE f_charbig = 'was updated';
15141 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15142 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15143    FROM t0_template source_tab
15144 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15145         
15146 # check replace success:        1
15147 DELETE FROM t1
15148 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15149 DELETE FROM t1
15150 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15151 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15152 UPDATE t1 SET f_int2 = f_int1,
15153 f_char1 = CAST(f_int1 AS CHAR),
15154 f_char2 = CAST(f_int1 AS CHAR),
15155 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15156 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15157 SET AUTOCOMMIT= 0;
15158 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15159 SELECT f_int1, f_int1, '', '', 'was inserted'
15160 FROM t0_template source_tab
15161 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15162         
15163 # check transactions-1 success:         1
15164 COMMIT WORK;
15165         
15166 # check transactions-2 success:         1
15167 ROLLBACK WORK;
15168         
15169 # check transactions-3 success:         1
15170 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15171 COMMIT WORK;
15172 ROLLBACK WORK;
15173         
15174 # check transactions-4 success:         1
15175 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15176 SELECT f_int1, f_int1, '', '', 'was inserted'
15177 FROM t0_template source_tab
15178 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15179         
15180 # check transactions-5 success:         1
15181 ROLLBACK WORK;
15182         
15183 # check transactions-6 success:         1
15184 # INFO: Storage engine used for t1 seems to be transactional.
15185 COMMIT;
15186         
15187 # check transactions-7 success:         1
15188 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15189 COMMIT WORK;
15190 SET @@session.sql_mode = 'traditional';
15191 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15192 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15193 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15194 '', '', 'was inserted' FROM t0_template
15195 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15196 ERROR 22012: Division by 0
15197 COMMIT;
15198         
15199 # check transactions-8 success:         1
15200 # INFO: Storage engine used for t1 seems to be able to revert
15201 #       changes made by the failing statement.
15202 SET @@session.sql_mode = '';
15203 SET AUTOCOMMIT= 1;
15204 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15205 COMMIT WORK;
15206 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15207         
15208 # check special-1 success:      1
15209 UPDATE t1 SET f_charbig = '';
15210         
15211 # check special-2 success:      1
15212 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15213 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15214 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15215 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15216 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15217 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15218 'just inserted' FROM t0_template
15219 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15220 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15221 BEGIN
15222 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15223 f_charbig = 'updated by trigger'
15224       WHERE f_int1 = new.f_int1;
15225 END|
15226 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15227 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15228 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15229         
15230 # check trigger-1 success:      1
15231 DROP TRIGGER trg_1;
15232 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15233 f_int2 = CAST(f_char1 AS SIGNED INT),
15234 f_charbig = 'just inserted'
15235    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15236 DELETE FROM t0_aux
15237 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15238 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15239 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15240 'just inserted' FROM t0_template
15241 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15242 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15243 BEGIN
15244 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15245 f_charbig = 'updated by trigger'
15246       WHERE f_int1 = new.f_int1;
15247 END|
15248 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15249 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15250 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15251         
15252 # check trigger-2 success:      1
15253 DROP TRIGGER trg_1;
15254 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15255 f_int2 = CAST(f_char1 AS SIGNED INT),
15256 f_charbig = 'just inserted'
15257    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15258 DELETE FROM t0_aux
15259 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15260 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15261 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15262 'just inserted' FROM t0_template
15263 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15264 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15265 BEGIN
15266 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15267 f_charbig = 'updated by trigger'
15268       WHERE f_int1 = new.f_int1;
15269 END|
15270 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15271 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15272         
15273 # check trigger-3 success:      1
15274 DROP TRIGGER trg_1;
15275 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15276 f_int2 = CAST(f_char1 AS SIGNED INT),
15277 f_charbig = 'just inserted'
15278    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15279 DELETE FROM t0_aux
15280 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15281 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15282 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15283 'just inserted' FROM t0_template
15284 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15285 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15286 BEGIN
15287 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15288 f_charbig = 'updated by trigger'
15289       WHERE f_int1 = - old.f_int1;
15290 END|
15291 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15292 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15293         
15294 # check trigger-4 success:      1
15295 DROP TRIGGER trg_1;
15296 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15297 f_int2 = CAST(f_char1 AS SIGNED INT),
15298 f_charbig = 'just inserted'
15299    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15300 DELETE FROM t0_aux
15301 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15302 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15303 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15304 'just inserted' FROM t0_template
15305 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15306 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15307 BEGIN
15308 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15309 f_charbig = 'updated by trigger'
15310       WHERE f_int1 = new.f_int1;
15311 END|
15312 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15313 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15314         
15315 # check trigger-5 success:      1
15316 DROP TRIGGER trg_1;
15317 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15318 f_int2 = CAST(f_char1 AS SIGNED INT),
15319 f_charbig = 'just inserted'
15320    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15321 DELETE FROM t0_aux
15322 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15323 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15324 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15325 'just inserted' FROM t0_template
15326 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15327 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15328 BEGIN
15329 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15330 f_charbig = 'updated by trigger'
15331       WHERE f_int1 = - old.f_int1;
15332 END|
15333 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15334 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15335         
15336 # check trigger-6 success:      1
15337 DROP TRIGGER trg_1;
15338 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15339 f_int2 = CAST(f_char1 AS SIGNED INT),
15340 f_charbig = 'just inserted'
15341    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15342 DELETE FROM t0_aux
15343 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15344 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15345 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15346 'just inserted' FROM t0_template
15347 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15348 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15349 BEGIN
15350 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15351 f_charbig = 'updated by trigger'
15352       WHERE f_int1 = - old.f_int1;
15353 END|
15354 DELETE FROM t0_aux
15355 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15356         
15357 # check trigger-7 success:      1
15358 DROP TRIGGER trg_1;
15359 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15360 f_int2 = CAST(f_char1 AS SIGNED INT),
15361 f_charbig = 'just inserted'
15362    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15363 DELETE FROM t0_aux
15364 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15365 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15366 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15367 'just inserted' FROM t0_template
15368 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15369 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15370 BEGIN
15371 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15372 f_charbig = 'updated by trigger'
15373       WHERE f_int1 = - old.f_int1;
15374 END|
15375 DELETE FROM t0_aux
15376 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15377         
15378 # check trigger-8 success:      1
15379 DROP TRIGGER trg_1;
15380 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15381 f_int2 = CAST(f_char1 AS SIGNED INT),
15382 f_charbig = 'just inserted'
15383    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15384 DELETE FROM t0_aux
15385 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15386 DELETE FROM t1
15387 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15388 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15389 BEGIN
15390 SET new.f_int1 = old.f_int1 + @max_row,
15391 new.f_int2 = old.f_int2 - @max_row,
15392 new.f_charbig = '####updated per update trigger####';
15393 END|
15394 UPDATE t1
15395 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15396 f_charbig = '####updated per update statement itself####';
15397         
15398 # check trigger-9 success:      1
15399 DROP TRIGGER trg_2;
15400 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15401 f_int2 = CAST(f_char1 AS SIGNED INT),
15402 f_charbig = CONCAT('===',f_char1,'===');
15403 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15404 BEGIN
15405 SET new.f_int1 = new.f_int1 + @max_row,
15406 new.f_int2 = new.f_int2 - @max_row,
15407 new.f_charbig = '####updated per update trigger####';
15408 END|
15409 UPDATE t1
15410 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15411 f_charbig = '####updated per update statement itself####';
15412         
15413 # check trigger-10 success:     1
15414 DROP TRIGGER trg_2;
15415 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15416 f_int2 = CAST(f_char1 AS SIGNED INT),
15417 f_charbig = CONCAT('===',f_char1,'===');
15418 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15419 BEGIN
15420 SET new.f_int1 = @my_max1 + @counter,
15421 new.f_int2 = @my_min2 - @counter,
15422 new.f_charbig = '####updated per insert trigger####';
15423 SET @counter = @counter + 1;
15424 END|
15425 SET @counter = 1;
15426 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15427 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15428 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15429 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15430 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15431 ORDER BY f_int1;
15432 DROP TRIGGER trg_3;
15433         
15434 # check trigger-11 success:     1
15435 DELETE FROM t1
15436 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15437 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15438 AND f_charbig = '####updated per insert trigger####';
15439 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15440 BEGIN
15441 SET new.f_int1 = @my_max1 + @counter,
15442 new.f_int2 = @my_min2 - @counter,
15443 new.f_charbig = '####updated per insert trigger####';
15444 SET @counter = @counter + 1;
15445 END|
15446 SET @counter = 1;
15447 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15448 INSERT INTO t1 (f_char1, f_char2, f_charbig)
15449 SELECT CAST(f_int1 AS CHAR),
15450 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15451 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15452 ORDER BY f_int1;
15453 DROP TRIGGER trg_3;
15454         
15455 # check trigger-12 success:     1
15456 DELETE FROM t1
15457 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15458 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15459 AND f_charbig = '####updated per insert trigger####';
15460 ANALYZE  TABLE t1;
15461 Table   Op      Msg_type        Msg_text
15462 test.t1 analyze status  OK
15463 CHECK    TABLE t1 EXTENDED;
15464 Table   Op      Msg_type        Msg_text
15465 test.t1 check   status  OK
15466 CHECKSUM TABLE t1 EXTENDED;
15467 Table   Checksum
15468 test.t1 <some_value>
15469 OPTIMIZE TABLE t1;
15470 Table   Op      Msg_type        Msg_text
15471 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15472 test.t1 optimize        status  OK
15473 # check layout success:    1
15474 REPAIR   TABLE t1 EXTENDED;
15475 Table   Op      Msg_type        Msg_text
15476 test.t1 repair  note    The storage engine for the table doesn't support repair
15477 # check layout success:    1
15478 TRUNCATE t1;
15479         
15480 # check TRUNCATE success:       1
15481 # check layout success:    1
15482 # End usability test (inc/partition_check.inc)
15483 DROP TABLE t1;
15484 CREATE TABLE t1 (
15485 f_int1 INTEGER,
15486 f_int2 INTEGER,
15487 f_char1 CHAR(20),
15488 f_char2 CHAR(20),
15489 f_charbig VARCHAR(1000)
15490 , UNIQUE INDEX uidx1 (f_int1,f_int2)
15492 PARTITION BY LIST(ABS(MOD(f_int1,2)))
15493 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
15494 (PARTITION part1 VALUES IN (0),
15495 PARTITION part2 VALUES IN (1),
15496 PARTITION part3 VALUES IN (NULL));
15497 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15498 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15499 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15500 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
15501 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15502 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15503 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15504 # Start usability test (inc/partition_check.inc)
15505 create_command
15506 SHOW CREATE TABLE t1;
15507 Table   Create Table
15508 t1      CREATE TABLE `t1` (
15509   `f_int1` int(11) DEFAULT NULL,
15510   `f_int2` mediumint(9) DEFAULT NULL,
15511   `f_char1` char(20) DEFAULT NULL,
15512   `f_char2` char(20) DEFAULT NULL,
15513   `f_charbig` varchar(1000) DEFAULT NULL,
15514   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
15515 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
15516 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
15517 SUBPARTITION BY KEY (f_int1)
15518 SUBPARTITIONS 3
15519 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
15520  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
15521  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
15523 # check prerequisites-1 success:    1
15524 # check COUNT(*) success:    1
15525 # check MIN/MAX(f_int1) success:    1
15526 # check MIN/MAX(f_int2) success:    1
15527 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15528 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15529 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15530 WHERE f_int1 IN (2,3);
15531 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15532 # check prerequisites-3 success:    1
15533 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15534 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15535 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15536 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15537 WHERE f_int1 IN (2,3);
15538 DELETE FROM t1 WHERE f_charbig = 'delete me';
15539 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15540 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15541 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15542 WHERE f_int1 IN (2,3);
15543 DELETE FROM t1 WHERE f_charbig = 'delete me';
15544 # check read via f_int1 success: 1
15545 # check read via f_int2 success: 1
15546         
15547 # check multiple-1 success:     1
15548 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15549         
15550 # check multiple-2 success:     1
15551 INSERT INTO t1 SELECT * FROM t0_template
15552 WHERE MOD(f_int1,3) = 0;
15553         
15554 # check multiple-3 success:     1
15555 UPDATE t1 SET f_int1 = f_int1 + @max_row
15556 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15557 AND @max_row_div2 + @max_row_div4;
15558         
15559 # check multiple-4 success:     1
15560 DELETE FROM t1
15561 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15562 AND @max_row_div2 + @max_row_div4 + @max_row;
15563         
15564 # check multiple-5 success:     1
15565 SELECT COUNT(*) INTO @try_count FROM t0_template
15566 WHERE MOD(f_int1,3) = 0
15567 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15568 SELECT COUNT(*) INTO @clash_count
15569 FROM t1 INNER JOIN t0_template USING(f_int1)
15570 WHERE MOD(f_int1,3) = 0
15571 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15572 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15573 INSERT INTO t1
15574 SET f_int1 = @cur_value , f_int2 = @cur_value,
15575 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15576 f_charbig = '#SINGLE#';
15577         
15578 # check single-1 success:       1
15579 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15580 INSERT INTO t1
15581 SET f_int1 = @cur_value , f_int2 = @cur_value,
15582 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15583 f_charbig = '#SINGLE#';
15584         
15585 # check single-2 success:       1
15586 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15587 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15588 UPDATE t1 SET f_int1 = @cur_value2
15589 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15590         
15591 # check single-3 success:       1
15592 SET @cur_value1= -1;
15593 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15594 UPDATE t1 SET f_int1 = @cur_value1
15595 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15596         
15597 # check single-4 success:       1
15598 SELECT MAX(f_int1) INTO @cur_value FROM t1;
15599 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15600         
15601 # check single-5 success:       1
15602 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15603         
15604 # check single-6 success:       1
15605 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15606 Warnings:
15607 Warning 1264    Out of range value for column 'f_int2' at row 1
15608         
15609 # check single-7 success:       1
15610 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15611 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15612 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15613 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15614 f_charbig = '#NULL#';
15615 INSERT INTO t1
15616 SET f_int1 = NULL , f_int2 = -@max_row,
15617 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15618 f_charbig = '#NULL#';
15619 # check null success:    1
15620         
15621 # check null-1 success:         1
15622 UPDATE t1 SET f_int1 = -@max_row
15623 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15624 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15625         
15626 # check null-2 success:         1
15627 UPDATE t1 SET f_int1 = NULL
15628 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15629 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15630         
15631 # check null-3 success:         1
15632 DELETE FROM t1
15633 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15634 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15635         
15636 # check null-4 success:         1
15637 DELETE FROM t1
15638 WHERE f_int1 = 0 AND f_int2 = 0
15639 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15640 AND f_charbig = '#NULL#';
15641 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15642 SELECT f_int1, f_int1, '', '', 'was inserted'
15643    FROM t0_template source_tab
15644 WHERE MOD(f_int1,3) = 0
15645 AND f_int1 BETWEEN @max_row_div2 AND @max_row
15646 ON DUPLICATE KEY
15647 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15648 f_int2 = 2 * @max_row + source_tab.f_int1,
15649 f_charbig = 'was updated';
15650         
15651 # check unique-1-a success:     1
15652         
15653 # check unique-1-b success:     1
15654 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15655 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15656 f_int2 = CAST(f_char1 AS SIGNED INT),
15657 f_charbig = CONCAT('===',f_char1,'===')
15658 WHERE f_charbig = 'was updated';
15659 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15660 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15661    FROM t0_template source_tab
15662 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15663         
15664 # check replace success:        1
15665 DELETE FROM t1
15666 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15667 DELETE FROM t1
15668 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15669 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15670 UPDATE t1 SET f_int2 = f_int1,
15671 f_char1 = CAST(f_int1 AS CHAR),
15672 f_char2 = CAST(f_int1 AS CHAR),
15673 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15674 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15675 SET AUTOCOMMIT= 0;
15676 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15677 SELECT f_int1, f_int1, '', '', 'was inserted'
15678 FROM t0_template source_tab
15679 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15680         
15681 # check transactions-1 success:         1
15682 COMMIT WORK;
15683         
15684 # check transactions-2 success:         1
15685 ROLLBACK WORK;
15686         
15687 # check transactions-3 success:         1
15688 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15689 COMMIT WORK;
15690 ROLLBACK WORK;
15691         
15692 # check transactions-4 success:         1
15693 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15694 SELECT f_int1, f_int1, '', '', 'was inserted'
15695 FROM t0_template source_tab
15696 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15697         
15698 # check transactions-5 success:         1
15699 ROLLBACK WORK;
15700         
15701 # check transactions-6 success:         1
15702 # INFO: Storage engine used for t1 seems to be transactional.
15703 COMMIT;
15704         
15705 # check transactions-7 success:         1
15706 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15707 COMMIT WORK;
15708 SET @@session.sql_mode = 'traditional';
15709 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15710 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15711 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15712 '', '', 'was inserted' FROM t0_template
15713 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15714 ERROR 22012: Division by 0
15715 COMMIT;
15716         
15717 # check transactions-8 success:         1
15718 # INFO: Storage engine used for t1 seems to be able to revert
15719 #       changes made by the failing statement.
15720 SET @@session.sql_mode = '';
15721 SET AUTOCOMMIT= 1;
15722 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15723 COMMIT WORK;
15724 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15725         
15726 # check special-1 success:      1
15727 UPDATE t1 SET f_charbig = '';
15728         
15729 # check special-2 success:      1
15730 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15731 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15732 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15733 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15734 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15735 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15736 'just inserted' FROM t0_template
15737 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15738 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15739 BEGIN
15740 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15741 f_charbig = 'updated by trigger'
15742       WHERE f_int1 = new.f_int1;
15743 END|
15744 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15745 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15746 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15747         
15748 # check trigger-1 success:      1
15749 DROP TRIGGER trg_1;
15750 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15751 f_int2 = CAST(f_char1 AS SIGNED INT),
15752 f_charbig = 'just inserted'
15753    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15754 DELETE FROM t0_aux
15755 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15758 'just inserted' FROM t0_template
15759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15760 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15761 BEGIN
15762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15763 f_charbig = 'updated by trigger'
15764       WHERE f_int1 = new.f_int1;
15765 END|
15766 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15767 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15768 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15769         
15770 # check trigger-2 success:      1
15771 DROP TRIGGER trg_1;
15772 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15773 f_int2 = CAST(f_char1 AS SIGNED INT),
15774 f_charbig = 'just inserted'
15775    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15776 DELETE FROM t0_aux
15777 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15778 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15779 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15780 'just inserted' FROM t0_template
15781 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15782 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15783 BEGIN
15784 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15785 f_charbig = 'updated by trigger'
15786       WHERE f_int1 = new.f_int1;
15787 END|
15788 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15789 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15790         
15791 # check trigger-3 success:      1
15792 DROP TRIGGER trg_1;
15793 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15794 f_int2 = CAST(f_char1 AS SIGNED INT),
15795 f_charbig = 'just inserted'
15796    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15797 DELETE FROM t0_aux
15798 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15799 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15800 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15801 'just inserted' FROM t0_template
15802 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15803 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15804 BEGIN
15805 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15806 f_charbig = 'updated by trigger'
15807       WHERE f_int1 = - old.f_int1;
15808 END|
15809 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15810 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15811         
15812 # check trigger-4 success:      1
15813 DROP TRIGGER trg_1;
15814 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15815 f_int2 = CAST(f_char1 AS SIGNED INT),
15816 f_charbig = 'just inserted'
15817    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15818 DELETE FROM t0_aux
15819 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15820 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15821 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15822 'just inserted' FROM t0_template
15823 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15824 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15825 BEGIN
15826 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15827 f_charbig = 'updated by trigger'
15828       WHERE f_int1 = new.f_int1;
15829 END|
15830 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15831 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15832         
15833 # check trigger-5 success:      1
15834 DROP TRIGGER trg_1;
15835 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15836 f_int2 = CAST(f_char1 AS SIGNED INT),
15837 f_charbig = 'just inserted'
15838    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15839 DELETE FROM t0_aux
15840 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15841 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15842 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15843 'just inserted' FROM t0_template
15844 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15845 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15846 BEGIN
15847 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15848 f_charbig = 'updated by trigger'
15849       WHERE f_int1 = - old.f_int1;
15850 END|
15851 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15852 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15853         
15854 # check trigger-6 success:      1
15855 DROP TRIGGER trg_1;
15856 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15857 f_int2 = CAST(f_char1 AS SIGNED INT),
15858 f_charbig = 'just inserted'
15859    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15860 DELETE FROM t0_aux
15861 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15862 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15863 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15864 'just inserted' FROM t0_template
15865 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15866 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15867 BEGIN
15868 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15869 f_charbig = 'updated by trigger'
15870       WHERE f_int1 = - old.f_int1;
15871 END|
15872 DELETE FROM t0_aux
15873 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15874         
15875 # check trigger-7 success:      1
15876 DROP TRIGGER trg_1;
15877 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15878 f_int2 = CAST(f_char1 AS SIGNED INT),
15879 f_charbig = 'just inserted'
15880    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15881 DELETE FROM t0_aux
15882 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15883 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15884 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15885 'just inserted' FROM t0_template
15886 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15887 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15888 BEGIN
15889 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15890 f_charbig = 'updated by trigger'
15891       WHERE f_int1 = - old.f_int1;
15892 END|
15893 DELETE FROM t0_aux
15894 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15895         
15896 # check trigger-8 success:      1
15897 DROP TRIGGER trg_1;
15898 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15899 f_int2 = CAST(f_char1 AS SIGNED INT),
15900 f_charbig = 'just inserted'
15901    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15902 DELETE FROM t0_aux
15903 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15904 DELETE FROM t1
15905 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15906 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15907 BEGIN
15908 SET new.f_int1 = old.f_int1 + @max_row,
15909 new.f_int2 = old.f_int2 - @max_row,
15910 new.f_charbig = '####updated per update trigger####';
15911 END|
15912 UPDATE t1
15913 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15914 f_charbig = '####updated per update statement itself####';
15915         
15916 # check trigger-9 success:      1
15917 DROP TRIGGER trg_2;
15918 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15919 f_int2 = CAST(f_char1 AS SIGNED INT),
15920 f_charbig = CONCAT('===',f_char1,'===');
15921 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15922 BEGIN
15923 SET new.f_int1 = new.f_int1 + @max_row,
15924 new.f_int2 = new.f_int2 - @max_row,
15925 new.f_charbig = '####updated per update trigger####';
15926 END|
15927 UPDATE t1
15928 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15929 f_charbig = '####updated per update statement itself####';
15930         
15931 # check trigger-10 success:     1
15932 DROP TRIGGER trg_2;
15933 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15934 f_int2 = CAST(f_char1 AS SIGNED INT),
15935 f_charbig = CONCAT('===',f_char1,'===');
15936 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15937 BEGIN
15938 SET new.f_int1 = @my_max1 + @counter,
15939 new.f_int2 = @my_min2 - @counter,
15940 new.f_charbig = '####updated per insert trigger####';
15941 SET @counter = @counter + 1;
15942 END|
15943 SET @counter = 1;
15944 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15945 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15946 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15947 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15948 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15949 ORDER BY f_int1;
15950 DROP TRIGGER trg_3;
15951         
15952 # check trigger-11 success:     1
15953 DELETE FROM t1
15954 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15955 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15956 AND f_charbig = '####updated per insert trigger####';
15957 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15958 BEGIN
15959 SET new.f_int1 = @my_max1 + @counter,
15960 new.f_int2 = @my_min2 - @counter,
15961 new.f_charbig = '####updated per insert trigger####';
15962 SET @counter = @counter + 1;
15963 END|
15964 SET @counter = 1;
15965 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15966 INSERT INTO t1 (f_char1, f_char2, f_charbig)
15967 SELECT CAST(f_int1 AS CHAR),
15968 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15969 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15970 ORDER BY f_int1;
15971 DROP TRIGGER trg_3;
15972         
15973 # check trigger-12 success:     1
15974 DELETE FROM t1
15975 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15976 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15977 AND f_charbig = '####updated per insert trigger####';
15978 ANALYZE  TABLE t1;
15979 Table   Op      Msg_type        Msg_text
15980 test.t1 analyze status  OK
15981 CHECK    TABLE t1 EXTENDED;
15982 Table   Op      Msg_type        Msg_text
15983 test.t1 check   status  OK
15984 CHECKSUM TABLE t1 EXTENDED;
15985 Table   Checksum
15986 test.t1 <some_value>
15987 OPTIMIZE TABLE t1;
15988 Table   Op      Msg_type        Msg_text
15989 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15990 test.t1 optimize        status  OK
15991 # check layout success:    1
15992 REPAIR   TABLE t1 EXTENDED;
15993 Table   Op      Msg_type        Msg_text
15994 test.t1 repair  note    The storage engine for the table doesn't support repair
15995 # check layout success:    1
15996 TRUNCATE t1;
15997         
15998 # check TRUNCATE success:       1
15999 # check layout success:    1
16000 # End usability test (inc/partition_check.inc)
16001 DROP TABLE t1;
16002 DROP TABLE IF EXISTS t1;
16003 CREATE TABLE t1 (
16004 f_int1 INTEGER,
16005 f_int2 INTEGER,
16006 f_char1 CHAR(20),
16007 f_char2 CHAR(20),
16008 f_charbig VARCHAR(1000)
16009 , UNIQUE INDEX uidx1 (f_int2,f_int1)
16011 PARTITION BY HASH(f_int1) PARTITIONS 2;
16012 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16013 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16014 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16015 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
16016 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16017 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16018 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16019 # Start usability test (inc/partition_check.inc)
16020 create_command
16021 SHOW CREATE TABLE t1;
16022 Table   Create Table
16023 t1      CREATE TABLE `t1` (
16024   `f_int1` int(11) DEFAULT NULL,
16025   `f_int2` mediumint(9) DEFAULT NULL,
16026   `f_char1` char(20) DEFAULT NULL,
16027   `f_char2` char(20) DEFAULT NULL,
16028   `f_charbig` varchar(1000) DEFAULT NULL,
16029   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16030 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
16031 /*!50100 PARTITION BY HASH (f_int1)
16032 PARTITIONS 2 */
16034 # check prerequisites-1 success:    1
16035 # check COUNT(*) success:    1
16036 # check MIN/MAX(f_int1) success:    1
16037 # check MIN/MAX(f_int2) success:    1
16038 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16039 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16040 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16041 WHERE f_int1 IN (2,3);
16042 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16043 # check prerequisites-3 success:    1
16044 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16045 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16046 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16047 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16048 WHERE f_int1 IN (2,3);
16049 DELETE FROM t1 WHERE f_charbig = 'delete me';
16050 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16051 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16052 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16053 WHERE f_int1 IN (2,3);
16054 DELETE FROM t1 WHERE f_charbig = 'delete me';
16055 # check read via f_int1 success: 1
16056 # check read via f_int2 success: 1
16057         
16058 # check multiple-1 success:     1
16059 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16060         
16061 # check multiple-2 success:     1
16062 INSERT INTO t1 SELECT * FROM t0_template
16063 WHERE MOD(f_int1,3) = 0;
16064         
16065 # check multiple-3 success:     1
16066 UPDATE t1 SET f_int1 = f_int1 + @max_row
16067 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16068 AND @max_row_div2 + @max_row_div4;
16069         
16070 # check multiple-4 success:     1
16071 DELETE FROM t1
16072 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16073 AND @max_row_div2 + @max_row_div4 + @max_row;
16074         
16075 # check multiple-5 success:     1
16076 SELECT COUNT(*) INTO @try_count FROM t0_template
16077 WHERE MOD(f_int1,3) = 0
16078 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16079 SELECT COUNT(*) INTO @clash_count
16080 FROM t1 INNER JOIN t0_template USING(f_int1)
16081 WHERE MOD(f_int1,3) = 0
16082 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16083 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16084 INSERT INTO t1
16085 SET f_int1 = @cur_value , f_int2 = @cur_value,
16086 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16087 f_charbig = '#SINGLE#';
16088         
16089 # check single-1 success:       1
16090 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16091 INSERT INTO t1
16092 SET f_int1 = @cur_value , f_int2 = @cur_value,
16093 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16094 f_charbig = '#SINGLE#';
16095         
16096 # check single-2 success:       1
16097 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16098 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16099 UPDATE t1 SET f_int1 = @cur_value2
16100 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16101         
16102 # check single-3 success:       1
16103 SET @cur_value1= -1;
16104 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16105 UPDATE t1 SET f_int1 = @cur_value1
16106 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16107         
16108 # check single-4 success:       1
16109 SELECT MAX(f_int1) INTO @cur_value FROM t1;
16110 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16111         
16112 # check single-5 success:       1
16113 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16114         
16115 # check single-6 success:       1
16116 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16117 Warnings:
16118 Warning 1264    Out of range value for column 'f_int2' at row 1
16119         
16120 # check single-7 success:       1
16121 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16122 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16123 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16124 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16125 f_charbig = '#NULL#';
16126 INSERT INTO t1
16127 SET f_int1 = NULL , f_int2 = -@max_row,
16128 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16129 f_charbig = '#NULL#';
16130 # check null success:    1
16131         
16132 # check null-1 success:         1
16133 UPDATE t1 SET f_int1 = -@max_row
16134 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16135 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16136         
16137 # check null-2 success:         1
16138 UPDATE t1 SET f_int1 = NULL
16139 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16140 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16141         
16142 # check null-3 success:         1
16143 DELETE FROM t1
16144 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16145 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16146         
16147 # check null-4 success:         1
16148 DELETE FROM t1
16149 WHERE f_int1 = 0 AND f_int2 = 0
16150 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16151 AND f_charbig = '#NULL#';
16152 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16153 SELECT f_int1, f_int1, '', '', 'was inserted'
16154    FROM t0_template source_tab
16155 WHERE MOD(f_int1,3) = 0
16156 AND f_int1 BETWEEN @max_row_div2 AND @max_row
16157 ON DUPLICATE KEY
16158 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16159 f_int2 = 2 * @max_row + source_tab.f_int1,
16160 f_charbig = 'was updated';
16161         
16162 # check unique-1-a success:     1
16163         
16164 # check unique-1-b success:     1
16165 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16166 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16167 f_int2 = CAST(f_char1 AS SIGNED INT),
16168 f_charbig = CONCAT('===',f_char1,'===')
16169 WHERE f_charbig = 'was updated';
16170 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16171 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16172    FROM t0_template source_tab
16173 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16174         
16175 # check replace success:        1
16176 DELETE FROM t1
16177 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16178 DELETE FROM t1
16179 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16180 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16181 UPDATE t1 SET f_int2 = f_int1,
16182 f_char1 = CAST(f_int1 AS CHAR),
16183 f_char2 = CAST(f_int1 AS CHAR),
16184 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16185 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16186 SET AUTOCOMMIT= 0;
16187 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16188 SELECT f_int1, f_int1, '', '', 'was inserted'
16189 FROM t0_template source_tab
16190 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16191         
16192 # check transactions-1 success:         1
16193 COMMIT WORK;
16194         
16195 # check transactions-2 success:         1
16196 ROLLBACK WORK;
16197         
16198 # check transactions-3 success:         1
16199 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16200 COMMIT WORK;
16201 ROLLBACK WORK;
16202         
16203 # check transactions-4 success:         1
16204 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16205 SELECT f_int1, f_int1, '', '', 'was inserted'
16206 FROM t0_template source_tab
16207 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16208         
16209 # check transactions-5 success:         1
16210 ROLLBACK WORK;
16211         
16212 # check transactions-6 success:         1
16213 # INFO: Storage engine used for t1 seems to be transactional.
16214 COMMIT;
16215         
16216 # check transactions-7 success:         1
16217 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16218 COMMIT WORK;
16219 SET @@session.sql_mode = 'traditional';
16220 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16221 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16222 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16223 '', '', 'was inserted' FROM t0_template
16224 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16225 ERROR 22012: Division by 0
16226 COMMIT;
16227         
16228 # check transactions-8 success:         1
16229 # INFO: Storage engine used for t1 seems to be able to revert
16230 #       changes made by the failing statement.
16231 SET @@session.sql_mode = '';
16232 SET AUTOCOMMIT= 1;
16233 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16234 COMMIT WORK;
16235 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16236         
16237 # check special-1 success:      1
16238 UPDATE t1 SET f_charbig = '';
16239         
16240 # check special-2 success:      1
16241 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16242 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16243 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16244 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16245 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16246 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16247 'just inserted' FROM t0_template
16248 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16249 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16250 BEGIN
16251 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16252 f_charbig = 'updated by trigger'
16253       WHERE f_int1 = new.f_int1;
16254 END|
16255 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16256 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16257 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16258         
16259 # check trigger-1 success:      1
16260 DROP TRIGGER trg_1;
16261 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16262 f_int2 = CAST(f_char1 AS SIGNED INT),
16263 f_charbig = 'just inserted'
16264    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16265 DELETE FROM t0_aux
16266 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16267 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16268 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16269 'just inserted' FROM t0_template
16270 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16271 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16272 BEGIN
16273 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16274 f_charbig = 'updated by trigger'
16275       WHERE f_int1 = new.f_int1;
16276 END|
16277 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16278 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16280         
16281 # check trigger-2 success:      1
16282 DROP TRIGGER trg_1;
16283 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16284 f_int2 = CAST(f_char1 AS SIGNED INT),
16285 f_charbig = 'just inserted'
16286    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16287 DELETE FROM t0_aux
16288 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16289 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16290 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16291 'just inserted' FROM t0_template
16292 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16293 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16294 BEGIN
16295 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16296 f_charbig = 'updated by trigger'
16297       WHERE f_int1 = new.f_int1;
16298 END|
16299 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16300 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16301         
16302 # check trigger-3 success:      1
16303 DROP TRIGGER trg_1;
16304 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16305 f_int2 = CAST(f_char1 AS SIGNED INT),
16306 f_charbig = 'just inserted'
16307    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16308 DELETE FROM t0_aux
16309 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16310 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16311 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16312 'just inserted' FROM t0_template
16313 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16314 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16315 BEGIN
16316 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16317 f_charbig = 'updated by trigger'
16318       WHERE f_int1 = - old.f_int1;
16319 END|
16320 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16321 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16322         
16323 # check trigger-4 success:      1
16324 DROP TRIGGER trg_1;
16325 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16326 f_int2 = CAST(f_char1 AS SIGNED INT),
16327 f_charbig = 'just inserted'
16328    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16329 DELETE FROM t0_aux
16330 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16331 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16332 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16333 'just inserted' FROM t0_template
16334 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16335 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16336 BEGIN
16337 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16338 f_charbig = 'updated by trigger'
16339       WHERE f_int1 = new.f_int1;
16340 END|
16341 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16342 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16343         
16344 # check trigger-5 success:      1
16345 DROP TRIGGER trg_1;
16346 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16347 f_int2 = CAST(f_char1 AS SIGNED INT),
16348 f_charbig = 'just inserted'
16349    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16350 DELETE FROM t0_aux
16351 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16352 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16353 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16354 'just inserted' FROM t0_template
16355 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16356 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16357 BEGIN
16358 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16359 f_charbig = 'updated by trigger'
16360       WHERE f_int1 = - old.f_int1;
16361 END|
16362 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16363 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16364         
16365 # check trigger-6 success:      1
16366 DROP TRIGGER trg_1;
16367 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16368 f_int2 = CAST(f_char1 AS SIGNED INT),
16369 f_charbig = 'just inserted'
16370    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16371 DELETE FROM t0_aux
16372 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16373 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16374 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16375 'just inserted' FROM t0_template
16376 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16377 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16378 BEGIN
16379 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16380 f_charbig = 'updated by trigger'
16381       WHERE f_int1 = - old.f_int1;
16382 END|
16383 DELETE FROM t0_aux
16384 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16385         
16386 # check trigger-7 success:      1
16387 DROP TRIGGER trg_1;
16388 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16389 f_int2 = CAST(f_char1 AS SIGNED INT),
16390 f_charbig = 'just inserted'
16391    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16392 DELETE FROM t0_aux
16393 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16394 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16395 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16396 'just inserted' FROM t0_template
16397 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16398 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16399 BEGIN
16400 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16401 f_charbig = 'updated by trigger'
16402       WHERE f_int1 = - old.f_int1;
16403 END|
16404 DELETE FROM t0_aux
16405 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16406         
16407 # check trigger-8 success:      1
16408 DROP TRIGGER trg_1;
16409 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16410 f_int2 = CAST(f_char1 AS SIGNED INT),
16411 f_charbig = 'just inserted'
16412    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16413 DELETE FROM t0_aux
16414 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16415 DELETE FROM t1
16416 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16417 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16418 BEGIN
16419 SET new.f_int1 = old.f_int1 + @max_row,
16420 new.f_int2 = old.f_int2 - @max_row,
16421 new.f_charbig = '####updated per update trigger####';
16422 END|
16423 UPDATE t1
16424 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16425 f_charbig = '####updated per update statement itself####';
16426         
16427 # check trigger-9 success:      1
16428 DROP TRIGGER trg_2;
16429 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16430 f_int2 = CAST(f_char1 AS SIGNED INT),
16431 f_charbig = CONCAT('===',f_char1,'===');
16432 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16433 BEGIN
16434 SET new.f_int1 = new.f_int1 + @max_row,
16435 new.f_int2 = new.f_int2 - @max_row,
16436 new.f_charbig = '####updated per update trigger####';
16437 END|
16438 UPDATE t1
16439 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16440 f_charbig = '####updated per update statement itself####';
16441         
16442 # check trigger-10 success:     1
16443 DROP TRIGGER trg_2;
16444 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16445 f_int2 = CAST(f_char1 AS SIGNED INT),
16446 f_charbig = CONCAT('===',f_char1,'===');
16447 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16448 BEGIN
16449 SET new.f_int1 = @my_max1 + @counter,
16450 new.f_int2 = @my_min2 - @counter,
16451 new.f_charbig = '####updated per insert trigger####';
16452 SET @counter = @counter + 1;
16453 END|
16454 SET @counter = 1;
16455 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16456 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16457 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16458 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16459 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16460 ORDER BY f_int1;
16461 DROP TRIGGER trg_3;
16462         
16463 # check trigger-11 success:     1
16464 DELETE FROM t1
16465 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16466 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16467 AND f_charbig = '####updated per insert trigger####';
16468 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16469 BEGIN
16470 SET new.f_int1 = @my_max1 + @counter,
16471 new.f_int2 = @my_min2 - @counter,
16472 new.f_charbig = '####updated per insert trigger####';
16473 SET @counter = @counter + 1;
16474 END|
16475 SET @counter = 1;
16476 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16477 INSERT INTO t1 (f_char1, f_char2, f_charbig)
16478 SELECT CAST(f_int1 AS CHAR),
16479 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16480 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16481 ORDER BY f_int1;
16482 DROP TRIGGER trg_3;
16483         
16484 # check trigger-12 success:     1
16485 DELETE FROM t1
16486 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16487 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16488 AND f_charbig = '####updated per insert trigger####';
16489 ANALYZE  TABLE t1;
16490 Table   Op      Msg_type        Msg_text
16491 test.t1 analyze status  OK
16492 CHECK    TABLE t1 EXTENDED;
16493 Table   Op      Msg_type        Msg_text
16494 test.t1 check   status  OK
16495 CHECKSUM TABLE t1 EXTENDED;
16496 Table   Checksum
16497 test.t1 <some_value>
16498 OPTIMIZE TABLE t1;
16499 Table   Op      Msg_type        Msg_text
16500 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
16501 test.t1 optimize        status  OK
16502 # check layout success:    1
16503 REPAIR   TABLE t1 EXTENDED;
16504 Table   Op      Msg_type        Msg_text
16505 test.t1 repair  note    The storage engine for the table doesn't support repair
16506 # check layout success:    1
16507 TRUNCATE t1;
16508         
16509 # check TRUNCATE success:       1
16510 # check layout success:    1
16511 # End usability test (inc/partition_check.inc)
16512 DROP TABLE t1;
16513 CREATE TABLE t1 (
16514 f_int1 INTEGER,
16515 f_int2 INTEGER,
16516 f_char1 CHAR(20),
16517 f_char2 CHAR(20),
16518 f_charbig VARCHAR(1000)
16519 , UNIQUE INDEX uidx1 (f_int2,f_int1)
16521 PARTITION BY KEY(f_int1) PARTITIONS 5;
16522 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16523 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16524 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16525 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
16526 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16527 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16528 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16529 # Start usability test (inc/partition_check.inc)
16530 create_command
16531 SHOW CREATE TABLE t1;
16532 Table   Create Table
16533 t1      CREATE TABLE `t1` (
16534   `f_int1` int(11) DEFAULT NULL,
16535   `f_int2` mediumint(9) DEFAULT NULL,
16536   `f_char1` char(20) DEFAULT NULL,
16537   `f_char2` char(20) DEFAULT NULL,
16538   `f_charbig` varchar(1000) DEFAULT NULL,
16539   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16540 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
16541 /*!50100 PARTITION BY KEY (f_int1)
16542 PARTITIONS 5 */
16544 # check prerequisites-1 success:    1
16545 # check COUNT(*) success:    1
16546 # check MIN/MAX(f_int1) success:    1
16547 # check MIN/MAX(f_int2) success:    1
16548 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16549 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16550 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16551 WHERE f_int1 IN (2,3);
16552 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16553 # check prerequisites-3 success:    1
16554 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16555 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16556 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16557 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16558 WHERE f_int1 IN (2,3);
16559 DELETE FROM t1 WHERE f_charbig = 'delete me';
16560 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16561 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16562 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16563 WHERE f_int1 IN (2,3);
16564 DELETE FROM t1 WHERE f_charbig = 'delete me';
16565 # check read via f_int1 success: 1
16566 # check read via f_int2 success: 1
16567         
16568 # check multiple-1 success:     1
16569 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16570         
16571 # check multiple-2 success:     1
16572 INSERT INTO t1 SELECT * FROM t0_template
16573 WHERE MOD(f_int1,3) = 0;
16574         
16575 # check multiple-3 success:     1
16576 UPDATE t1 SET f_int1 = f_int1 + @max_row
16577 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16578 AND @max_row_div2 + @max_row_div4;
16579         
16580 # check multiple-4 success:     1
16581 DELETE FROM t1
16582 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16583 AND @max_row_div2 + @max_row_div4 + @max_row;
16584         
16585 # check multiple-5 success:     1
16586 SELECT COUNT(*) INTO @try_count FROM t0_template
16587 WHERE MOD(f_int1,3) = 0
16588 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16589 SELECT COUNT(*) INTO @clash_count
16590 FROM t1 INNER JOIN t0_template USING(f_int1)
16591 WHERE MOD(f_int1,3) = 0
16592 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16593 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16594 INSERT INTO t1
16595 SET f_int1 = @cur_value , f_int2 = @cur_value,
16596 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16597 f_charbig = '#SINGLE#';
16598         
16599 # check single-1 success:       1
16600 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16601 INSERT INTO t1
16602 SET f_int1 = @cur_value , f_int2 = @cur_value,
16603 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16604 f_charbig = '#SINGLE#';
16605         
16606 # check single-2 success:       1
16607 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16608 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16609 UPDATE t1 SET f_int1 = @cur_value2
16610 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16611         
16612 # check single-3 success:       1
16613 SET @cur_value1= -1;
16614 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16615 UPDATE t1 SET f_int1 = @cur_value1
16616 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16617         
16618 # check single-4 success:       1
16619 SELECT MAX(f_int1) INTO @cur_value FROM t1;
16620 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16621         
16622 # check single-5 success:       1
16623 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16624         
16625 # check single-6 success:       1
16626 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16627 Warnings:
16628 Warning 1264    Out of range value for column 'f_int2' at row 1
16629         
16630 # check single-7 success:       1
16631 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16632 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16633 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16634 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16635 f_charbig = '#NULL#';
16636 INSERT INTO t1
16637 SET f_int1 = NULL , f_int2 = -@max_row,
16638 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16639 f_charbig = '#NULL#';
16640 # check null success:    1
16641         
16642 # check null-1 success:         1
16643 UPDATE t1 SET f_int1 = -@max_row
16644 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16645 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16646         
16647 # check null-2 success:         1
16648 UPDATE t1 SET f_int1 = NULL
16649 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16650 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16651         
16652 # check null-3 success:         1
16653 DELETE FROM t1
16654 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16655 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16656         
16657 # check null-4 success:         1
16658 DELETE FROM t1
16659 WHERE f_int1 = 0 AND f_int2 = 0
16660 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16661 AND f_charbig = '#NULL#';
16662 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16663 SELECT f_int1, f_int1, '', '', 'was inserted'
16664    FROM t0_template source_tab
16665 WHERE MOD(f_int1,3) = 0
16666 AND f_int1 BETWEEN @max_row_div2 AND @max_row
16667 ON DUPLICATE KEY
16668 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16669 f_int2 = 2 * @max_row + source_tab.f_int1,
16670 f_charbig = 'was updated';
16671         
16672 # check unique-1-a success:     1
16673         
16674 # check unique-1-b success:     1
16675 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16676 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16677 f_int2 = CAST(f_char1 AS SIGNED INT),
16678 f_charbig = CONCAT('===',f_char1,'===')
16679 WHERE f_charbig = 'was updated';
16680 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16681 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16682    FROM t0_template source_tab
16683 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16684         
16685 # check replace success:        1
16686 DELETE FROM t1
16687 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16688 DELETE FROM t1
16689 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16690 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16691 UPDATE t1 SET f_int2 = f_int1,
16692 f_char1 = CAST(f_int1 AS CHAR),
16693 f_char2 = CAST(f_int1 AS CHAR),
16694 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16695 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16696 SET AUTOCOMMIT= 0;
16697 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16698 SELECT f_int1, f_int1, '', '', 'was inserted'
16699 FROM t0_template source_tab
16700 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16701         
16702 # check transactions-1 success:         1
16703 COMMIT WORK;
16704         
16705 # check transactions-2 success:         1
16706 ROLLBACK WORK;
16707         
16708 # check transactions-3 success:         1
16709 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16710 COMMIT WORK;
16711 ROLLBACK WORK;
16712         
16713 # check transactions-4 success:         1
16714 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16715 SELECT f_int1, f_int1, '', '', 'was inserted'
16716 FROM t0_template source_tab
16717 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16718         
16719 # check transactions-5 success:         1
16720 ROLLBACK WORK;
16721         
16722 # check transactions-6 success:         1
16723 # INFO: Storage engine used for t1 seems to be transactional.
16724 COMMIT;
16725         
16726 # check transactions-7 success:         1
16727 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16728 COMMIT WORK;
16729 SET @@session.sql_mode = 'traditional';
16730 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16731 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16732 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16733 '', '', 'was inserted' FROM t0_template
16734 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16735 ERROR 22012: Division by 0
16736 COMMIT;
16737         
16738 # check transactions-8 success:         1
16739 # INFO: Storage engine used for t1 seems to be able to revert
16740 #       changes made by the failing statement.
16741 SET @@session.sql_mode = '';
16742 SET AUTOCOMMIT= 1;
16743 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16744 COMMIT WORK;
16745 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16746         
16747 # check special-1 success:      1
16748 UPDATE t1 SET f_charbig = '';
16749         
16750 # check special-2 success:      1
16751 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16752 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16753 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16754 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16755 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16756 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16757 'just inserted' FROM t0_template
16758 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16759 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16760 BEGIN
16761 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16762 f_charbig = 'updated by trigger'
16763       WHERE f_int1 = new.f_int1;
16764 END|
16765 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16766 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16767 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16768         
16769 # check trigger-1 success:      1
16770 DROP TRIGGER trg_1;
16771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16772 f_int2 = CAST(f_char1 AS SIGNED INT),
16773 f_charbig = 'just inserted'
16774    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16775 DELETE FROM t0_aux
16776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16777 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16778 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16779 'just inserted' FROM t0_template
16780 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16781 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16782 BEGIN
16783 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16784 f_charbig = 'updated by trigger'
16785       WHERE f_int1 = new.f_int1;
16786 END|
16787 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16788 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16789 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16790         
16791 # check trigger-2 success:      1
16792 DROP TRIGGER trg_1;
16793 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16794 f_int2 = CAST(f_char1 AS SIGNED INT),
16795 f_charbig = 'just inserted'
16796    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16797 DELETE FROM t0_aux
16798 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16799 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16800 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16801 'just inserted' FROM t0_template
16802 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16803 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16804 BEGIN
16805 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16806 f_charbig = 'updated by trigger'
16807       WHERE f_int1 = new.f_int1;
16808 END|
16809 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16810 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16811         
16812 # check trigger-3 success:      1
16813 DROP TRIGGER trg_1;
16814 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16815 f_int2 = CAST(f_char1 AS SIGNED INT),
16816 f_charbig = 'just inserted'
16817    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16818 DELETE FROM t0_aux
16819 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16820 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16821 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16822 'just inserted' FROM t0_template
16823 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16824 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16825 BEGIN
16826 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16827 f_charbig = 'updated by trigger'
16828       WHERE f_int1 = - old.f_int1;
16829 END|
16830 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16831 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16832         
16833 # check trigger-4 success:      1
16834 DROP TRIGGER trg_1;
16835 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16836 f_int2 = CAST(f_char1 AS SIGNED INT),
16837 f_charbig = 'just inserted'
16838    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16839 DELETE FROM t0_aux
16840 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16841 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16842 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16843 'just inserted' FROM t0_template
16844 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16845 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16846 BEGIN
16847 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16848 f_charbig = 'updated by trigger'
16849       WHERE f_int1 = new.f_int1;
16850 END|
16851 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16852 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16853         
16854 # check trigger-5 success:      1
16855 DROP TRIGGER trg_1;
16856 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16857 f_int2 = CAST(f_char1 AS SIGNED INT),
16858 f_charbig = 'just inserted'
16859    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16860 DELETE FROM t0_aux
16861 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16862 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16863 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16864 'just inserted' FROM t0_template
16865 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16866 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16867 BEGIN
16868 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16869 f_charbig = 'updated by trigger'
16870       WHERE f_int1 = - old.f_int1;
16871 END|
16872 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16873 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16874         
16875 # check trigger-6 success:      1
16876 DROP TRIGGER trg_1;
16877 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16878 f_int2 = CAST(f_char1 AS SIGNED INT),
16879 f_charbig = 'just inserted'
16880    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16881 DELETE FROM t0_aux
16882 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16883 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16884 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16885 'just inserted' FROM t0_template
16886 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16887 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16888 BEGIN
16889 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16890 f_charbig = 'updated by trigger'
16891       WHERE f_int1 = - old.f_int1;
16892 END|
16893 DELETE FROM t0_aux
16894 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16895         
16896 # check trigger-7 success:      1
16897 DROP TRIGGER trg_1;
16898 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16899 f_int2 = CAST(f_char1 AS SIGNED INT),
16900 f_charbig = 'just inserted'
16901    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16902 DELETE FROM t0_aux
16903 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16904 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16905 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16906 'just inserted' FROM t0_template
16907 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16908 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16909 BEGIN
16910 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16911 f_charbig = 'updated by trigger'
16912       WHERE f_int1 = - old.f_int1;
16913 END|
16914 DELETE FROM t0_aux
16915 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16916         
16917 # check trigger-8 success:      1
16918 DROP TRIGGER trg_1;
16919 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16920 f_int2 = CAST(f_char1 AS SIGNED INT),
16921 f_charbig = 'just inserted'
16922    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16923 DELETE FROM t0_aux
16924 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16925 DELETE FROM t1
16926 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16927 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16928 BEGIN
16929 SET new.f_int1 = old.f_int1 + @max_row,
16930 new.f_int2 = old.f_int2 - @max_row,
16931 new.f_charbig = '####updated per update trigger####';
16932 END|
16933 UPDATE t1
16934 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16935 f_charbig = '####updated per update statement itself####';
16936         
16937 # check trigger-9 success:      1
16938 DROP TRIGGER trg_2;
16939 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16940 f_int2 = CAST(f_char1 AS SIGNED INT),
16941 f_charbig = CONCAT('===',f_char1,'===');
16942 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16943 BEGIN
16944 SET new.f_int1 = new.f_int1 + @max_row,
16945 new.f_int2 = new.f_int2 - @max_row,
16946 new.f_charbig = '####updated per update trigger####';
16947 END|
16948 UPDATE t1
16949 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16950 f_charbig = '####updated per update statement itself####';
16951         
16952 # check trigger-10 success:     1
16953 DROP TRIGGER trg_2;
16954 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16955 f_int2 = CAST(f_char1 AS SIGNED INT),
16956 f_charbig = CONCAT('===',f_char1,'===');
16957 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16958 BEGIN
16959 SET new.f_int1 = @my_max1 + @counter,
16960 new.f_int2 = @my_min2 - @counter,
16961 new.f_charbig = '####updated per insert trigger####';
16962 SET @counter = @counter + 1;
16963 END|
16964 SET @counter = 1;
16965 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16966 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16967 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16968 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16969 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16970 ORDER BY f_int1;
16971 DROP TRIGGER trg_3;
16972         
16973 # check trigger-11 success:     1
16974 DELETE FROM t1
16975 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16976 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16977 AND f_charbig = '####updated per insert trigger####';
16978 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16979 BEGIN
16980 SET new.f_int1 = @my_max1 + @counter,
16981 new.f_int2 = @my_min2 - @counter,
16982 new.f_charbig = '####updated per insert trigger####';
16983 SET @counter = @counter + 1;
16984 END|
16985 SET @counter = 1;
16986 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16987 INSERT INTO t1 (f_char1, f_char2, f_charbig)
16988 SELECT CAST(f_int1 AS CHAR),
16989 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16990 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16991 ORDER BY f_int1;
16992 DROP TRIGGER trg_3;
16993         
16994 # check trigger-12 success:     1
16995 DELETE FROM t1
16996 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16997 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16998 AND f_charbig = '####updated per insert trigger####';
16999 ANALYZE  TABLE t1;
17000 Table   Op      Msg_type        Msg_text
17001 test.t1 analyze status  OK
17002 CHECK    TABLE t1 EXTENDED;
17003 Table   Op      Msg_type        Msg_text
17004 test.t1 check   status  OK
17005 CHECKSUM TABLE t1 EXTENDED;
17006 Table   Checksum
17007 test.t1 <some_value>
17008 OPTIMIZE TABLE t1;
17009 Table   Op      Msg_type        Msg_text
17010 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
17011 test.t1 optimize        status  OK
17012 # check layout success:    1
17013 REPAIR   TABLE t1 EXTENDED;
17014 Table   Op      Msg_type        Msg_text
17015 test.t1 repair  note    The storage engine for the table doesn't support repair
17016 # check layout success:    1
17017 TRUNCATE t1;
17018         
17019 # check TRUNCATE success:       1
17020 # check layout success:    1
17021 # End usability test (inc/partition_check.inc)
17022 DROP TABLE t1;
17023 CREATE TABLE t1 (
17024 f_int1 INTEGER,
17025 f_int2 INTEGER,
17026 f_char1 CHAR(20),
17027 f_char2 CHAR(20),
17028 f_charbig VARCHAR(1000)
17029 , UNIQUE INDEX uidx1 (f_int2,f_int1)
17031 PARTITION BY LIST(MOD(f_int1,4))
17032 (PARTITION part_3 VALUES IN (-3),
17033 PARTITION part_2 VALUES IN (-2),
17034 PARTITION part_1 VALUES IN (-1),
17035 PARTITION part_N VALUES IN (NULL),
17036 PARTITION part0 VALUES IN (0),
17037 PARTITION part1 VALUES IN (1),
17038 PARTITION part2 VALUES IN (2),
17039 PARTITION part3 VALUES IN (3));
17040 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17041 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17042 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17043 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
17044 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17045 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17046 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17047 # Start usability test (inc/partition_check.inc)
17048 create_command
17049 SHOW CREATE TABLE t1;
17050 Table   Create Table
17051 t1      CREATE TABLE `t1` (
17052   `f_int1` int(11) DEFAULT NULL,
17053   `f_int2` mediumint(9) DEFAULT NULL,
17054   `f_char1` char(20) DEFAULT NULL,
17055   `f_char2` char(20) DEFAULT NULL,
17056   `f_charbig` varchar(1000) DEFAULT NULL,
17057   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
17058 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
17059 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
17060 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
17061  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
17062  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
17063  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
17064  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
17065  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
17066  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
17067  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
17069 # check prerequisites-1 success:    1
17070 # check COUNT(*) success:    1
17071 # check MIN/MAX(f_int1) success:    1
17072 # check MIN/MAX(f_int2) success:    1
17073 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17074 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17075 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17076 WHERE f_int1 IN (2,3);
17077 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
17078 # check prerequisites-3 success:    1
17079 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17080 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17081 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17082 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17083 WHERE f_int1 IN (2,3);
17084 DELETE FROM t1 WHERE f_charbig = 'delete me';
17085 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17086 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17087 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17088 WHERE f_int1 IN (2,3);
17089 DELETE FROM t1 WHERE f_charbig = 'delete me';
17090 # check read via f_int1 success: 1
17091 # check read via f_int2 success: 1
17092         
17093 # check multiple-1 success:     1
17094 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17095         
17096 # check multiple-2 success:     1
17097 INSERT INTO t1 SELECT * FROM t0_template
17098 WHERE MOD(f_int1,3) = 0;
17099         
17100 # check multiple-3 success:     1
17101 UPDATE t1 SET f_int1 = f_int1 + @max_row
17102 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17103 AND @max_row_div2 + @max_row_div4;
17104         
17105 # check multiple-4 success:     1
17106 DELETE FROM t1
17107 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17108 AND @max_row_div2 + @max_row_div4 + @max_row;
17109         
17110 # check multiple-5 success:     1
17111 SELECT COUNT(*) INTO @try_count FROM t0_template
17112 WHERE MOD(f_int1,3) = 0
17113 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17114 SELECT COUNT(*) INTO @clash_count
17115 FROM t1 INNER JOIN t0_template USING(f_int1)
17116 WHERE MOD(f_int1,3) = 0
17117 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17118 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17119 INSERT INTO t1
17120 SET f_int1 = @cur_value , f_int2 = @cur_value,
17121 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17122 f_charbig = '#SINGLE#';
17123         
17124 # check single-1 success:       1
17125 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17126 INSERT INTO t1
17127 SET f_int1 = @cur_value , f_int2 = @cur_value,
17128 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17129 f_charbig = '#SINGLE#';
17130         
17131 # check single-2 success:       1
17132 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17133 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17134 UPDATE t1 SET f_int1 = @cur_value2
17135 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17136         
17137 # check single-3 success:       1
17138 SET @cur_value1= -1;
17139 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17140 UPDATE t1 SET f_int1 = @cur_value1
17141 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17142         
17143 # check single-4 success:       1
17144 SELECT MAX(f_int1) INTO @cur_value FROM t1;
17145 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17146         
17147 # check single-5 success:       1
17148 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17149         
17150 # check single-6 success:       1
17151 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17152 Warnings:
17153 Warning 1264    Out of range value for column 'f_int2' at row 1
17154         
17155 # check single-7 success:       1
17156 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
17157 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17158 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17159 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17160 f_charbig = '#NULL#';
17161 INSERT INTO t1
17162 SET f_int1 = NULL , f_int2 = -@max_row,
17163 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17164 f_charbig = '#NULL#';
17165 # check null success:    1
17166         
17167 # check null-1 success:         1
17168 UPDATE t1 SET f_int1 = -@max_row
17169 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17170 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17171         
17172 # check null-2 success:         1
17173 UPDATE t1 SET f_int1 = NULL
17174 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17175 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17176         
17177 # check null-3 success:         1
17178 DELETE FROM t1
17179 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17180 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17181         
17182 # check null-4 success:         1
17183 DELETE FROM t1
17184 WHERE f_int1 = 0 AND f_int2 = 0
17185 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17186 AND f_charbig = '#NULL#';
17187 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17188 SELECT f_int1, f_int1, '', '', 'was inserted'
17189    FROM t0_template source_tab
17190 WHERE MOD(f_int1,3) = 0
17191 AND f_int1 BETWEEN @max_row_div2 AND @max_row
17192 ON DUPLICATE KEY
17193 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17194 f_int2 = 2 * @max_row + source_tab.f_int1,
17195 f_charbig = 'was updated';
17196         
17197 # check unique-1-a success:     1
17198         
17199 # check unique-1-b success:     1
17200 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17201 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17202 f_int2 = CAST(f_char1 AS SIGNED INT),
17203 f_charbig = CONCAT('===',f_char1,'===')
17204 WHERE f_charbig = 'was updated';
17205 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17206 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17207    FROM t0_template source_tab
17208 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17209         
17210 # check replace success:        1
17211 DELETE FROM t1
17212 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17213 DELETE FROM t1
17214 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17215 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17216 UPDATE t1 SET f_int2 = f_int1,
17217 f_char1 = CAST(f_int1 AS CHAR),
17218 f_char2 = CAST(f_int1 AS CHAR),
17219 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17220 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17221 SET AUTOCOMMIT= 0;
17222 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17223 SELECT f_int1, f_int1, '', '', 'was inserted'
17224 FROM t0_template source_tab
17225 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17226         
17227 # check transactions-1 success:         1
17228 COMMIT WORK;
17229         
17230 # check transactions-2 success:         1
17231 ROLLBACK WORK;
17232         
17233 # check transactions-3 success:         1
17234 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17235 COMMIT WORK;
17236 ROLLBACK WORK;
17237         
17238 # check transactions-4 success:         1
17239 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17240 SELECT f_int1, f_int1, '', '', 'was inserted'
17241 FROM t0_template source_tab
17242 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17243         
17244 # check transactions-5 success:         1
17245 ROLLBACK WORK;
17246         
17247 # check transactions-6 success:         1
17248 # INFO: Storage engine used for t1 seems to be transactional.
17249 COMMIT;
17250         
17251 # check transactions-7 success:         1
17252 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17253 COMMIT WORK;
17254 SET @@session.sql_mode = 'traditional';
17255 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17256 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17257 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17258 '', '', 'was inserted' FROM t0_template
17259 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17260 ERROR 22012: Division by 0
17261 COMMIT;
17262         
17263 # check transactions-8 success:         1
17264 # INFO: Storage engine used for t1 seems to be able to revert
17265 #       changes made by the failing statement.
17266 SET @@session.sql_mode = '';
17267 SET AUTOCOMMIT= 1;
17268 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17269 COMMIT WORK;
17270 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17271         
17272 # check special-1 success:      1
17273 UPDATE t1 SET f_charbig = '';
17274         
17275 # check special-2 success:      1
17276 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17277 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17278 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17280 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17281 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17282 'just inserted' FROM t0_template
17283 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17284 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17285 BEGIN
17286 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17287 f_charbig = 'updated by trigger'
17288       WHERE f_int1 = new.f_int1;
17289 END|
17290 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17291 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17292 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17293         
17294 # check trigger-1 success:      1
17295 DROP TRIGGER trg_1;
17296 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17297 f_int2 = CAST(f_char1 AS SIGNED INT),
17298 f_charbig = 'just inserted'
17299    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17300 DELETE FROM t0_aux
17301 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17302 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17303 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17304 'just inserted' FROM t0_template
17305 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17306 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17307 BEGIN
17308 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17309 f_charbig = 'updated by trigger'
17310       WHERE f_int1 = new.f_int1;
17311 END|
17312 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17313 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17314 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17315         
17316 # check trigger-2 success:      1
17317 DROP TRIGGER trg_1;
17318 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17319 f_int2 = CAST(f_char1 AS SIGNED INT),
17320 f_charbig = 'just inserted'
17321    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17322 DELETE FROM t0_aux
17323 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17324 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17325 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17326 'just inserted' FROM t0_template
17327 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17328 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17329 BEGIN
17330 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17331 f_charbig = 'updated by trigger'
17332       WHERE f_int1 = new.f_int1;
17333 END|
17334 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17335 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17336         
17337 # check trigger-3 success:      1
17338 DROP TRIGGER trg_1;
17339 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17340 f_int2 = CAST(f_char1 AS SIGNED INT),
17341 f_charbig = 'just inserted'
17342    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17343 DELETE FROM t0_aux
17344 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17345 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17346 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17347 'just inserted' FROM t0_template
17348 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17349 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17350 BEGIN
17351 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17352 f_charbig = 'updated by trigger'
17353       WHERE f_int1 = - old.f_int1;
17354 END|
17355 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17356 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17357         
17358 # check trigger-4 success:      1
17359 DROP TRIGGER trg_1;
17360 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17361 f_int2 = CAST(f_char1 AS SIGNED INT),
17362 f_charbig = 'just inserted'
17363    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17364 DELETE FROM t0_aux
17365 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17366 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17367 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17368 'just inserted' FROM t0_template
17369 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17370 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17371 BEGIN
17372 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17373 f_charbig = 'updated by trigger'
17374       WHERE f_int1 = new.f_int1;
17375 END|
17376 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17377 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17378         
17379 # check trigger-5 success:      1
17380 DROP TRIGGER trg_1;
17381 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17382 f_int2 = CAST(f_char1 AS SIGNED INT),
17383 f_charbig = 'just inserted'
17384    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17385 DELETE FROM t0_aux
17386 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17387 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17388 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17389 'just inserted' FROM t0_template
17390 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17391 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17392 BEGIN
17393 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17394 f_charbig = 'updated by trigger'
17395       WHERE f_int1 = - old.f_int1;
17396 END|
17397 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17398 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17399         
17400 # check trigger-6 success:      1
17401 DROP TRIGGER trg_1;
17402 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17403 f_int2 = CAST(f_char1 AS SIGNED INT),
17404 f_charbig = 'just inserted'
17405    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17406 DELETE FROM t0_aux
17407 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17408 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17409 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17410 'just inserted' FROM t0_template
17411 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17412 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17413 BEGIN
17414 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17415 f_charbig = 'updated by trigger'
17416       WHERE f_int1 = - old.f_int1;
17417 END|
17418 DELETE FROM t0_aux
17419 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17420         
17421 # check trigger-7 success:      1
17422 DROP TRIGGER trg_1;
17423 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17424 f_int2 = CAST(f_char1 AS SIGNED INT),
17425 f_charbig = 'just inserted'
17426    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17427 DELETE FROM t0_aux
17428 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17429 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17430 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17431 'just inserted' FROM t0_template
17432 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17433 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17434 BEGIN
17435 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17436 f_charbig = 'updated by trigger'
17437       WHERE f_int1 = - old.f_int1;
17438 END|
17439 DELETE FROM t0_aux
17440 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17441         
17442 # check trigger-8 success:      1
17443 DROP TRIGGER trg_1;
17444 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17445 f_int2 = CAST(f_char1 AS SIGNED INT),
17446 f_charbig = 'just inserted'
17447    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17448 DELETE FROM t0_aux
17449 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17450 DELETE FROM t1
17451 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17452 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17453 BEGIN
17454 SET new.f_int1 = old.f_int1 + @max_row,
17455 new.f_int2 = old.f_int2 - @max_row,
17456 new.f_charbig = '####updated per update trigger####';
17457 END|
17458 UPDATE t1
17459 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17460 f_charbig = '####updated per update statement itself####';
17461         
17462 # check trigger-9 success:      1
17463 DROP TRIGGER trg_2;
17464 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17465 f_int2 = CAST(f_char1 AS SIGNED INT),
17466 f_charbig = CONCAT('===',f_char1,'===');
17467 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17468 BEGIN
17469 SET new.f_int1 = new.f_int1 + @max_row,
17470 new.f_int2 = new.f_int2 - @max_row,
17471 new.f_charbig = '####updated per update trigger####';
17472 END|
17473 UPDATE t1
17474 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17475 f_charbig = '####updated per update statement itself####';
17476         
17477 # check trigger-10 success:     1
17478 DROP TRIGGER trg_2;
17479 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17480 f_int2 = CAST(f_char1 AS SIGNED INT),
17481 f_charbig = CONCAT('===',f_char1,'===');
17482 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17483 BEGIN
17484 SET new.f_int1 = @my_max1 + @counter,
17485 new.f_int2 = @my_min2 - @counter,
17486 new.f_charbig = '####updated per insert trigger####';
17487 SET @counter = @counter + 1;
17488 END|
17489 SET @counter = 1;
17490 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17491 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17492 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17493 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17494 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17495 ORDER BY f_int1;
17496 DROP TRIGGER trg_3;
17497         
17498 # check trigger-11 success:     1
17499 DELETE FROM t1
17500 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17501 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17502 AND f_charbig = '####updated per insert trigger####';
17503 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17504 BEGIN
17505 SET new.f_int1 = @my_max1 + @counter,
17506 new.f_int2 = @my_min2 - @counter,
17507 new.f_charbig = '####updated per insert trigger####';
17508 SET @counter = @counter + 1;
17509 END|
17510 SET @counter = 1;
17511 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17512 INSERT INTO t1 (f_char1, f_char2, f_charbig)
17513 SELECT CAST(f_int1 AS CHAR),
17514 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17515 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17516 ORDER BY f_int1;
17517 DROP TRIGGER trg_3;
17518         
17519 # check trigger-12 success:     1
17520 DELETE FROM t1
17521 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17522 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17523 AND f_charbig = '####updated per insert trigger####';
17524 ANALYZE  TABLE t1;
17525 Table   Op      Msg_type        Msg_text
17526 test.t1 analyze status  OK
17527 CHECK    TABLE t1 EXTENDED;
17528 Table   Op      Msg_type        Msg_text
17529 test.t1 check   status  OK
17530 CHECKSUM TABLE t1 EXTENDED;
17531 Table   Checksum
17532 test.t1 <some_value>
17533 OPTIMIZE TABLE t1;
17534 Table   Op      Msg_type        Msg_text
17535 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
17536 test.t1 optimize        status  OK
17537 # check layout success:    1
17538 REPAIR   TABLE t1 EXTENDED;
17539 Table   Op      Msg_type        Msg_text
17540 test.t1 repair  note    The storage engine for the table doesn't support repair
17541 # check layout success:    1
17542 TRUNCATE t1;
17543         
17544 # check TRUNCATE success:       1
17545 # check layout success:    1
17546 # End usability test (inc/partition_check.inc)
17547 DROP TABLE t1;
17548 CREATE TABLE t1 (
17549 f_int1 INTEGER,
17550 f_int2 INTEGER,
17551 f_char1 CHAR(20),
17552 f_char2 CHAR(20),
17553 f_charbig VARCHAR(1000)
17554 , UNIQUE INDEX uidx1 (f_int2,f_int1)
17556 PARTITION BY RANGE(f_int1)
17557 (PARTITION parta VALUES LESS THAN (0),
17558 PARTITION partb VALUES LESS THAN (5),
17559 PARTITION partc VALUES LESS THAN (10),
17560 PARTITION partd VALUES LESS THAN (10 + 5),
17561 PARTITION parte VALUES LESS THAN (20),
17562 PARTITION partf VALUES LESS THAN (2147483646));
17563 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17564 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17565 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17566 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
17567 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17568 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17569 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17570 # Start usability test (inc/partition_check.inc)
17571 create_command
17572 SHOW CREATE TABLE t1;
17573 Table   Create Table
17574 t1      CREATE TABLE `t1` (
17575   `f_int1` int(11) DEFAULT NULL,
17576   `f_int2` mediumint(9) DEFAULT NULL,
17577   `f_char1` char(20) DEFAULT NULL,
17578   `f_char2` char(20) DEFAULT NULL,
17579   `f_charbig` varchar(1000) DEFAULT NULL,
17580   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
17581 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
17582 /*!50100 PARTITION BY RANGE (f_int1)
17583 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
17584  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
17585  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
17586  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
17587  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
17588  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
17590 # check prerequisites-1 success:    1
17591 # check COUNT(*) success:    1
17592 # check MIN/MAX(f_int1) success:    1
17593 # check MIN/MAX(f_int2) success:    1
17594 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17595 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17596 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17597 WHERE f_int1 IN (2,3);
17598 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
17599 # check prerequisites-3 success:    1
17600 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17601 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17602 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17603 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17604 WHERE f_int1 IN (2,3);
17605 DELETE FROM t1 WHERE f_charbig = 'delete me';
17606 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17607 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17608 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17609 WHERE f_int1 IN (2,3);
17610 DELETE FROM t1 WHERE f_charbig = 'delete me';
17611 # check read via f_int1 success: 1
17612 # check read via f_int2 success: 1
17613         
17614 # check multiple-1 success:     1
17615 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17616         
17617 # check multiple-2 success:     1
17618 INSERT INTO t1 SELECT * FROM t0_template
17619 WHERE MOD(f_int1,3) = 0;
17620         
17621 # check multiple-3 success:     1
17622 UPDATE t1 SET f_int1 = f_int1 + @max_row
17623 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17624 AND @max_row_div2 + @max_row_div4;
17625         
17626 # check multiple-4 success:     1
17627 DELETE FROM t1
17628 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17629 AND @max_row_div2 + @max_row_div4 + @max_row;
17630         
17631 # check multiple-5 success:     1
17632 SELECT COUNT(*) INTO @try_count FROM t0_template
17633 WHERE MOD(f_int1,3) = 0
17634 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17635 SELECT COUNT(*) INTO @clash_count
17636 FROM t1 INNER JOIN t0_template USING(f_int1)
17637 WHERE MOD(f_int1,3) = 0
17638 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17639 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17640 INSERT INTO t1
17641 SET f_int1 = @cur_value , f_int2 = @cur_value,
17642 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17643 f_charbig = '#SINGLE#';
17644         
17645 # check single-1 success:       1
17646 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17647 INSERT INTO t1
17648 SET f_int1 = @cur_value , f_int2 = @cur_value,
17649 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17650 f_charbig = '#SINGLE#';
17651         
17652 # check single-2 success:       1
17653 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17654 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17655 UPDATE t1 SET f_int1 = @cur_value2
17656 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17657         
17658 # check single-3 success:       1
17659 SET @cur_value1= -1;
17660 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17661 UPDATE t1 SET f_int1 = @cur_value1
17662 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17663         
17664 # check single-4 success:       1
17665 SELECT MAX(f_int1) INTO @cur_value FROM t1;
17666 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17667         
17668 # check single-5 success:       1
17669 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17670         
17671 # check single-6 success:       1
17672 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17673 ERROR HY000: Table has no partition for value 2147483647
17674 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17675 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17676 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17677 f_charbig = '#NULL#';
17678 INSERT INTO t1
17679 SET f_int1 = NULL , f_int2 = -@max_row,
17680 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17681 f_charbig = '#NULL#';
17682 # check null success:    1
17683         
17684 # check null-1 success:         1
17685 UPDATE t1 SET f_int1 = -@max_row
17686 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17687 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17688         
17689 # check null-2 success:         1
17690 UPDATE t1 SET f_int1 = NULL
17691 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17692 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17693         
17694 # check null-3 success:         1
17695 DELETE FROM t1
17696 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17697 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17698         
17699 # check null-4 success:         1
17700 DELETE FROM t1
17701 WHERE f_int1 = 0 AND f_int2 = 0
17702 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17703 AND f_charbig = '#NULL#';
17704 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17705 SELECT f_int1, f_int1, '', '', 'was inserted'
17706    FROM t0_template source_tab
17707 WHERE MOD(f_int1,3) = 0
17708 AND f_int1 BETWEEN @max_row_div2 AND @max_row
17709 ON DUPLICATE KEY
17710 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17711 f_int2 = 2 * @max_row + source_tab.f_int1,
17712 f_charbig = 'was updated';
17713         
17714 # check unique-1-a success:     1
17715         
17716 # check unique-1-b success:     1
17717 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17718 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17719 f_int2 = CAST(f_char1 AS SIGNED INT),
17720 f_charbig = CONCAT('===',f_char1,'===')
17721 WHERE f_charbig = 'was updated';
17722 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17723 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17724    FROM t0_template source_tab
17725 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17726         
17727 # check replace success:        1
17728 DELETE FROM t1
17729 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17730 DELETE FROM t1
17731 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17732 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17733 UPDATE t1 SET f_int2 = f_int1,
17734 f_char1 = CAST(f_int1 AS CHAR),
17735 f_char2 = CAST(f_int1 AS CHAR),
17736 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17737 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17738 SET AUTOCOMMIT= 0;
17739 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17740 SELECT f_int1, f_int1, '', '', 'was inserted'
17741 FROM t0_template source_tab
17742 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17743         
17744 # check transactions-1 success:         1
17745 COMMIT WORK;
17746         
17747 # check transactions-2 success:         1
17748 ROLLBACK WORK;
17749         
17750 # check transactions-3 success:         1
17751 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17752 COMMIT WORK;
17753 ROLLBACK WORK;
17754         
17755 # check transactions-4 success:         1
17756 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17757 SELECT f_int1, f_int1, '', '', 'was inserted'
17758 FROM t0_template source_tab
17759 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17760         
17761 # check transactions-5 success:         1
17762 ROLLBACK WORK;
17763         
17764 # check transactions-6 success:         1
17765 # INFO: Storage engine used for t1 seems to be transactional.
17766 COMMIT;
17767         
17768 # check transactions-7 success:         1
17769 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17770 COMMIT WORK;
17771 SET @@session.sql_mode = 'traditional';
17772 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17773 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17774 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17775 '', '', 'was inserted' FROM t0_template
17776 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17777 ERROR 22012: Division by 0
17778 COMMIT;
17779         
17780 # check transactions-8 success:         1
17781 # INFO: Storage engine used for t1 seems to be able to revert
17782 #       changes made by the failing statement.
17783 SET @@session.sql_mode = '';
17784 SET AUTOCOMMIT= 1;
17785 DELETE FROM t1 WHERE f_charbig = 'was inserted';
17786 COMMIT WORK;
17787 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17788         
17789 # check special-1 success:      1
17790 UPDATE t1 SET f_charbig = '';
17791         
17792 # check special-2 success:      1
17793 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17794 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17795 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17796 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17797 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17798 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17799 'just inserted' FROM t0_template
17800 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17801 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17802 BEGIN
17803 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17804 f_charbig = 'updated by trigger'
17805       WHERE f_int1 = new.f_int1;
17806 END|
17807 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17808 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17809 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17810         
17811 # check trigger-1 success:      1
17812 DROP TRIGGER trg_1;
17813 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17814 f_int2 = CAST(f_char1 AS SIGNED INT),
17815 f_charbig = 'just inserted'
17816    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17817 DELETE FROM t0_aux
17818 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17819 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17820 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17821 'just inserted' FROM t0_template
17822 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17823 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17824 BEGIN
17825 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17826 f_charbig = 'updated by trigger'
17827       WHERE f_int1 = new.f_int1;
17828 END|
17829 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17830 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17831 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17832         
17833 # check trigger-2 success:      1
17834 DROP TRIGGER trg_1;
17835 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17836 f_int2 = CAST(f_char1 AS SIGNED INT),
17837 f_charbig = 'just inserted'
17838    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17839 DELETE FROM t0_aux
17840 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17841 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17842 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17843 'just inserted' FROM t0_template
17844 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17845 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17846 BEGIN
17847 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17848 f_charbig = 'updated by trigger'
17849       WHERE f_int1 = new.f_int1;
17850 END|
17851 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17852 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17853         
17854 # check trigger-3 success:      1
17855 DROP TRIGGER trg_1;
17856 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17857 f_int2 = CAST(f_char1 AS SIGNED INT),
17858 f_charbig = 'just inserted'
17859    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17860 DELETE FROM t0_aux
17861 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17862 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17863 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17864 'just inserted' FROM t0_template
17865 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17866 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17867 BEGIN
17868 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17869 f_charbig = 'updated by trigger'
17870       WHERE f_int1 = - old.f_int1;
17871 END|
17872 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17873 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17874         
17875 # check trigger-4 success:      1
17876 DROP TRIGGER trg_1;
17877 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17878 f_int2 = CAST(f_char1 AS SIGNED INT),
17879 f_charbig = 'just inserted'
17880    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17881 DELETE FROM t0_aux
17882 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17883 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17884 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17885 'just inserted' FROM t0_template
17886 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17887 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17888 BEGIN
17889 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17890 f_charbig = 'updated by trigger'
17891       WHERE f_int1 = new.f_int1;
17892 END|
17893 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17894 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17895         
17896 # check trigger-5 success:      1
17897 DROP TRIGGER trg_1;
17898 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17899 f_int2 = CAST(f_char1 AS SIGNED INT),
17900 f_charbig = 'just inserted'
17901    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17902 DELETE FROM t0_aux
17903 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17904 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17905 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17906 'just inserted' FROM t0_template
17907 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17908 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17909 BEGIN
17910 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17911 f_charbig = 'updated by trigger'
17912       WHERE f_int1 = - old.f_int1;
17913 END|
17914 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17915 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17916         
17917 # check trigger-6 success:      1
17918 DROP TRIGGER trg_1;
17919 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17920 f_int2 = CAST(f_char1 AS SIGNED INT),
17921 f_charbig = 'just inserted'
17922    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17923 DELETE FROM t0_aux
17924 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17925 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17926 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17927 'just inserted' FROM t0_template
17928 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17929 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17930 BEGIN
17931 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17932 f_charbig = 'updated by trigger'
17933       WHERE f_int1 = - old.f_int1;
17934 END|
17935 DELETE FROM t0_aux
17936 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17937         
17938 # check trigger-7 success:      1
17939 DROP TRIGGER trg_1;
17940 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17941 f_int2 = CAST(f_char1 AS SIGNED INT),
17942 f_charbig = 'just inserted'
17943    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17944 DELETE FROM t0_aux
17945 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17946 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17947 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17948 'just inserted' FROM t0_template
17949 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17950 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17951 BEGIN
17952 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17953 f_charbig = 'updated by trigger'
17954       WHERE f_int1 = - old.f_int1;
17955 END|
17956 DELETE FROM t0_aux
17957 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17958         
17959 # check trigger-8 success:      1
17960 DROP TRIGGER trg_1;
17961 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17962 f_int2 = CAST(f_char1 AS SIGNED INT),
17963 f_charbig = 'just inserted'
17964    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17965 DELETE FROM t0_aux
17966 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17967 DELETE FROM t1
17968 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17969 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17970 BEGIN
17971 SET new.f_int1 = old.f_int1 + @max_row,
17972 new.f_int2 = old.f_int2 - @max_row,
17973 new.f_charbig = '####updated per update trigger####';
17974 END|
17975 UPDATE t1
17976 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17977 f_charbig = '####updated per update statement itself####';
17978         
17979 # check trigger-9 success:      1
17980 DROP TRIGGER trg_2;
17981 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17982 f_int2 = CAST(f_char1 AS SIGNED INT),
17983 f_charbig = CONCAT('===',f_char1,'===');
17984 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17985 BEGIN
17986 SET new.f_int1 = new.f_int1 + @max_row,
17987 new.f_int2 = new.f_int2 - @max_row,
17988 new.f_charbig = '####updated per update trigger####';
17989 END|
17990 UPDATE t1
17991 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17992 f_charbig = '####updated per update statement itself####';
17993         
17994 # check trigger-10 success:     1
17995 DROP TRIGGER trg_2;
17996 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17997 f_int2 = CAST(f_char1 AS SIGNED INT),
17998 f_charbig = CONCAT('===',f_char1,'===');
17999 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18000 BEGIN
18001 SET new.f_int1 = @my_max1 + @counter,
18002 new.f_int2 = @my_min2 - @counter,
18003 new.f_charbig = '####updated per insert trigger####';
18004 SET @counter = @counter + 1;
18005 END|
18006 SET @counter = 1;
18007 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18008 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18009 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18010 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18011 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18012 ORDER BY f_int1;
18013 DROP TRIGGER trg_3;
18014         
18015 # check trigger-11 success:     1
18016 DELETE FROM t1
18017 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18018 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18019 AND f_charbig = '####updated per insert trigger####';
18020 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18021 BEGIN
18022 SET new.f_int1 = @my_max1 + @counter,
18023 new.f_int2 = @my_min2 - @counter,
18024 new.f_charbig = '####updated per insert trigger####';
18025 SET @counter = @counter + 1;
18026 END|
18027 SET @counter = 1;
18028 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18029 INSERT INTO t1 (f_char1, f_char2, f_charbig)
18030 SELECT CAST(f_int1 AS CHAR),
18031 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18032 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18033 ORDER BY f_int1;
18034 DROP TRIGGER trg_3;
18035         
18036 # check trigger-12 success:     1
18037 DELETE FROM t1
18038 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18039 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18040 AND f_charbig = '####updated per insert trigger####';
18041 ANALYZE  TABLE t1;
18042 Table   Op      Msg_type        Msg_text
18043 test.t1 analyze status  OK
18044 CHECK    TABLE t1 EXTENDED;
18045 Table   Op      Msg_type        Msg_text
18046 test.t1 check   status  OK
18047 CHECKSUM TABLE t1 EXTENDED;
18048 Table   Checksum
18049 test.t1 <some_value>
18050 OPTIMIZE TABLE t1;
18051 Table   Op      Msg_type        Msg_text
18052 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
18053 test.t1 optimize        status  OK
18054 # check layout success:    1
18055 REPAIR   TABLE t1 EXTENDED;
18056 Table   Op      Msg_type        Msg_text
18057 test.t1 repair  note    The storage engine for the table doesn't support repair
18058 # check layout success:    1
18059 TRUNCATE t1;
18060         
18061 # check TRUNCATE success:       1
18062 # check layout success:    1
18063 # End usability test (inc/partition_check.inc)
18064 DROP TABLE t1;
18065 CREATE TABLE t1 (
18066 f_int1 INTEGER,
18067 f_int2 INTEGER,
18068 f_char1 CHAR(20),
18069 f_char2 CHAR(20),
18070 f_charbig VARCHAR(1000)
18071 , UNIQUE INDEX uidx1 (f_int2,f_int1)
18073 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
18074 (PARTITION parta VALUES LESS THAN (0),
18075 PARTITION partb VALUES LESS THAN (5),
18076 PARTITION partc VALUES LESS THAN (10),
18077 PARTITION partd VALUES LESS THAN (2147483646));
18078 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18079 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18080 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18081 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
18082 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18083 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18084 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18085 # Start usability test (inc/partition_check.inc)
18086 create_command
18087 SHOW CREATE TABLE t1;
18088 Table   Create Table
18089 t1      CREATE TABLE `t1` (
18090   `f_int1` int(11) DEFAULT NULL,
18091   `f_int2` mediumint(9) DEFAULT NULL,
18092   `f_char1` char(20) DEFAULT NULL,
18093   `f_char2` char(20) DEFAULT NULL,
18094   `f_charbig` varchar(1000) DEFAULT NULL,
18095   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
18096 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
18097 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
18098 SUBPARTITION BY HASH (f_int1)
18099 SUBPARTITIONS 2
18100 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
18101  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
18102  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
18103  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
18105 # check prerequisites-1 success:    1
18106 # check COUNT(*) success:    1
18107 # check MIN/MAX(f_int1) success:    1
18108 # check MIN/MAX(f_int2) success:    1
18109 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18110 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18111 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18112 WHERE f_int1 IN (2,3);
18113 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18114 # check prerequisites-3 success:    1
18115 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18116 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18117 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18118 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18119 WHERE f_int1 IN (2,3);
18120 DELETE FROM t1 WHERE f_charbig = 'delete me';
18121 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18122 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18123 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18124 WHERE f_int1 IN (2,3);
18125 DELETE FROM t1 WHERE f_charbig = 'delete me';
18126 # check read via f_int1 success: 1
18127 # check read via f_int2 success: 1
18128         
18129 # check multiple-1 success:     1
18130 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18131         
18132 # check multiple-2 success:     1
18133 INSERT INTO t1 SELECT * FROM t0_template
18134 WHERE MOD(f_int1,3) = 0;
18135         
18136 # check multiple-3 success:     1
18137 UPDATE t1 SET f_int1 = f_int1 + @max_row
18138 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18139 AND @max_row_div2 + @max_row_div4;
18140         
18141 # check multiple-4 success:     1
18142 DELETE FROM t1
18143 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18144 AND @max_row_div2 + @max_row_div4 + @max_row;
18145         
18146 # check multiple-5 success:     1
18147 SELECT COUNT(*) INTO @try_count FROM t0_template
18148 WHERE MOD(f_int1,3) = 0
18149 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18150 SELECT COUNT(*) INTO @clash_count
18151 FROM t1 INNER JOIN t0_template USING(f_int1)
18152 WHERE MOD(f_int1,3) = 0
18153 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18154 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18155 INSERT INTO t1
18156 SET f_int1 = @cur_value , f_int2 = @cur_value,
18157 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18158 f_charbig = '#SINGLE#';
18159         
18160 # check single-1 success:       1
18161 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18162 INSERT INTO t1
18163 SET f_int1 = @cur_value , f_int2 = @cur_value,
18164 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18165 f_charbig = '#SINGLE#';
18166         
18167 # check single-2 success:       1
18168 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18169 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18170 UPDATE t1 SET f_int1 = @cur_value2
18171 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18172         
18173 # check single-3 success:       1
18174 SET @cur_value1= -1;
18175 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18176 UPDATE t1 SET f_int1 = @cur_value1
18177 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18178         
18179 # check single-4 success:       1
18180 SELECT MAX(f_int1) INTO @cur_value FROM t1;
18181 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18182         
18183 # check single-5 success:       1
18184 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18185         
18186 # check single-6 success:       1
18187 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18188 Warnings:
18189 Warning 1264    Out of range value for column 'f_int2' at row 1
18190         
18191 # check single-7 success:       1
18192 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
18193 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18194 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18195 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18196 f_charbig = '#NULL#';
18197 INSERT INTO t1
18198 SET f_int1 = NULL , f_int2 = -@max_row,
18199 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18200 f_charbig = '#NULL#';
18201 # check null success:    1
18202         
18203 # check null-1 success:         1
18204 UPDATE t1 SET f_int1 = -@max_row
18205 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18206 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18207         
18208 # check null-2 success:         1
18209 UPDATE t1 SET f_int1 = NULL
18210 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18211 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18212         
18213 # check null-3 success:         1
18214 DELETE FROM t1
18215 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18216 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18217         
18218 # check null-4 success:         1
18219 DELETE FROM t1
18220 WHERE f_int1 = 0 AND f_int2 = 0
18221 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18222 AND f_charbig = '#NULL#';
18223 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18224 SELECT f_int1, f_int1, '', '', 'was inserted'
18225    FROM t0_template source_tab
18226 WHERE MOD(f_int1,3) = 0
18227 AND f_int1 BETWEEN @max_row_div2 AND @max_row
18228 ON DUPLICATE KEY
18229 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18230 f_int2 = 2 * @max_row + source_tab.f_int1,
18231 f_charbig = 'was updated';
18232         
18233 # check unique-1-a success:     1
18234         
18235 # check unique-1-b success:     1
18236 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18237 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18238 f_int2 = CAST(f_char1 AS SIGNED INT),
18239 f_charbig = CONCAT('===',f_char1,'===')
18240 WHERE f_charbig = 'was updated';
18241 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18242 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18243    FROM t0_template source_tab
18244 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18245         
18246 # check replace success:        1
18247 DELETE FROM t1
18248 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18249 DELETE FROM t1
18250 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18251 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18252 UPDATE t1 SET f_int2 = f_int1,
18253 f_char1 = CAST(f_int1 AS CHAR),
18254 f_char2 = CAST(f_int1 AS CHAR),
18255 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18256 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18257 SET AUTOCOMMIT= 0;
18258 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18259 SELECT f_int1, f_int1, '', '', 'was inserted'
18260 FROM t0_template source_tab
18261 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18262         
18263 # check transactions-1 success:         1
18264 COMMIT WORK;
18265         
18266 # check transactions-2 success:         1
18267 ROLLBACK WORK;
18268         
18269 # check transactions-3 success:         1
18270 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18271 COMMIT WORK;
18272 ROLLBACK WORK;
18273         
18274 # check transactions-4 success:         1
18275 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18276 SELECT f_int1, f_int1, '', '', 'was inserted'
18277 FROM t0_template source_tab
18278 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18279         
18280 # check transactions-5 success:         1
18281 ROLLBACK WORK;
18282         
18283 # check transactions-6 success:         1
18284 # INFO: Storage engine used for t1 seems to be transactional.
18285 COMMIT;
18286         
18287 # check transactions-7 success:         1
18288 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18289 COMMIT WORK;
18290 SET @@session.sql_mode = 'traditional';
18291 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18292 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18293 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18294 '', '', 'was inserted' FROM t0_template
18295 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18296 ERROR 22012: Division by 0
18297 COMMIT;
18298         
18299 # check transactions-8 success:         1
18300 # INFO: Storage engine used for t1 seems to be able to revert
18301 #       changes made by the failing statement.
18302 SET @@session.sql_mode = '';
18303 SET AUTOCOMMIT= 1;
18304 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18305 COMMIT WORK;
18306 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18307         
18308 # check special-1 success:      1
18309 UPDATE t1 SET f_charbig = '';
18310         
18311 # check special-2 success:      1
18312 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18313 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18314 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18315 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18316 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18317 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18318 'just inserted' FROM t0_template
18319 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18320 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18321 BEGIN
18322 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18323 f_charbig = 'updated by trigger'
18324       WHERE f_int1 = new.f_int1;
18325 END|
18326 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18327 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18328 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18329         
18330 # check trigger-1 success:      1
18331 DROP TRIGGER trg_1;
18332 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18333 f_int2 = CAST(f_char1 AS SIGNED INT),
18334 f_charbig = 'just inserted'
18335    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18336 DELETE FROM t0_aux
18337 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18338 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18339 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18340 'just inserted' FROM t0_template
18341 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18342 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18343 BEGIN
18344 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18345 f_charbig = 'updated by trigger'
18346       WHERE f_int1 = new.f_int1;
18347 END|
18348 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18349 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18350 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18351         
18352 # check trigger-2 success:      1
18353 DROP TRIGGER trg_1;
18354 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18355 f_int2 = CAST(f_char1 AS SIGNED INT),
18356 f_charbig = 'just inserted'
18357    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18358 DELETE FROM t0_aux
18359 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18360 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18361 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18362 'just inserted' FROM t0_template
18363 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18364 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18365 BEGIN
18366 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18367 f_charbig = 'updated by trigger'
18368       WHERE f_int1 = new.f_int1;
18369 END|
18370 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18371 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18372         
18373 # check trigger-3 success:      1
18374 DROP TRIGGER trg_1;
18375 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18376 f_int2 = CAST(f_char1 AS SIGNED INT),
18377 f_charbig = 'just inserted'
18378    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18379 DELETE FROM t0_aux
18380 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18381 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18382 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18383 'just inserted' FROM t0_template
18384 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18385 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18386 BEGIN
18387 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18388 f_charbig = 'updated by trigger'
18389       WHERE f_int1 = - old.f_int1;
18390 END|
18391 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18392 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18393         
18394 # check trigger-4 success:      1
18395 DROP TRIGGER trg_1;
18396 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18397 f_int2 = CAST(f_char1 AS SIGNED INT),
18398 f_charbig = 'just inserted'
18399    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18400 DELETE FROM t0_aux
18401 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18402 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18403 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18404 'just inserted' FROM t0_template
18405 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18406 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18407 BEGIN
18408 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18409 f_charbig = 'updated by trigger'
18410       WHERE f_int1 = new.f_int1;
18411 END|
18412 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18413 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18414         
18415 # check trigger-5 success:      1
18416 DROP TRIGGER trg_1;
18417 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18418 f_int2 = CAST(f_char1 AS SIGNED INT),
18419 f_charbig = 'just inserted'
18420    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18421 DELETE FROM t0_aux
18422 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18423 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18424 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18425 'just inserted' FROM t0_template
18426 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18427 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18428 BEGIN
18429 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18430 f_charbig = 'updated by trigger'
18431       WHERE f_int1 = - old.f_int1;
18432 END|
18433 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18434 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18435         
18436 # check trigger-6 success:      1
18437 DROP TRIGGER trg_1;
18438 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18439 f_int2 = CAST(f_char1 AS SIGNED INT),
18440 f_charbig = 'just inserted'
18441    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18442 DELETE FROM t0_aux
18443 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18444 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18445 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18446 'just inserted' FROM t0_template
18447 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18448 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18449 BEGIN
18450 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18451 f_charbig = 'updated by trigger'
18452       WHERE f_int1 = - old.f_int1;
18453 END|
18454 DELETE FROM t0_aux
18455 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18456         
18457 # check trigger-7 success:      1
18458 DROP TRIGGER trg_1;
18459 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18460 f_int2 = CAST(f_char1 AS SIGNED INT),
18461 f_charbig = 'just inserted'
18462    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18463 DELETE FROM t0_aux
18464 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18465 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18466 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18467 'just inserted' FROM t0_template
18468 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18469 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18470 BEGIN
18471 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18472 f_charbig = 'updated by trigger'
18473       WHERE f_int1 = - old.f_int1;
18474 END|
18475 DELETE FROM t0_aux
18476 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18477         
18478 # check trigger-8 success:      1
18479 DROP TRIGGER trg_1;
18480 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18481 f_int2 = CAST(f_char1 AS SIGNED INT),
18482 f_charbig = 'just inserted'
18483    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18484 DELETE FROM t0_aux
18485 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18486 DELETE FROM t1
18487 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18488 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18489 BEGIN
18490 SET new.f_int1 = old.f_int1 + @max_row,
18491 new.f_int2 = old.f_int2 - @max_row,
18492 new.f_charbig = '####updated per update trigger####';
18493 END|
18494 UPDATE t1
18495 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18496 f_charbig = '####updated per update statement itself####';
18497         
18498 # check trigger-9 success:      1
18499 DROP TRIGGER trg_2;
18500 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18501 f_int2 = CAST(f_char1 AS SIGNED INT),
18502 f_charbig = CONCAT('===',f_char1,'===');
18503 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18504 BEGIN
18505 SET new.f_int1 = new.f_int1 + @max_row,
18506 new.f_int2 = new.f_int2 - @max_row,
18507 new.f_charbig = '####updated per update trigger####';
18508 END|
18509 UPDATE t1
18510 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18511 f_charbig = '####updated per update statement itself####';
18512         
18513 # check trigger-10 success:     1
18514 DROP TRIGGER trg_2;
18515 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18516 f_int2 = CAST(f_char1 AS SIGNED INT),
18517 f_charbig = CONCAT('===',f_char1,'===');
18518 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18519 BEGIN
18520 SET new.f_int1 = @my_max1 + @counter,
18521 new.f_int2 = @my_min2 - @counter,
18522 new.f_charbig = '####updated per insert trigger####';
18523 SET @counter = @counter + 1;
18524 END|
18525 SET @counter = 1;
18526 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18527 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18528 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18529 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18530 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18531 ORDER BY f_int1;
18532 DROP TRIGGER trg_3;
18533         
18534 # check trigger-11 success:     1
18535 DELETE FROM t1
18536 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18537 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18538 AND f_charbig = '####updated per insert trigger####';
18539 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18540 BEGIN
18541 SET new.f_int1 = @my_max1 + @counter,
18542 new.f_int2 = @my_min2 - @counter,
18543 new.f_charbig = '####updated per insert trigger####';
18544 SET @counter = @counter + 1;
18545 END|
18546 SET @counter = 1;
18547 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18548 INSERT INTO t1 (f_char1, f_char2, f_charbig)
18549 SELECT CAST(f_int1 AS CHAR),
18550 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18551 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18552 ORDER BY f_int1;
18553 DROP TRIGGER trg_3;
18554         
18555 # check trigger-12 success:     1
18556 DELETE FROM t1
18557 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18558 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18559 AND f_charbig = '####updated per insert trigger####';
18560 ANALYZE  TABLE t1;
18561 Table   Op      Msg_type        Msg_text
18562 test.t1 analyze status  OK
18563 CHECK    TABLE t1 EXTENDED;
18564 Table   Op      Msg_type        Msg_text
18565 test.t1 check   status  OK
18566 CHECKSUM TABLE t1 EXTENDED;
18567 Table   Checksum
18568 test.t1 <some_value>
18569 OPTIMIZE TABLE t1;
18570 Table   Op      Msg_type        Msg_text
18571 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
18572 test.t1 optimize        status  OK
18573 # check layout success:    1
18574 REPAIR   TABLE t1 EXTENDED;
18575 Table   Op      Msg_type        Msg_text
18576 test.t1 repair  note    The storage engine for the table doesn't support repair
18577 # check layout success:    1
18578 TRUNCATE t1;
18579         
18580 # check TRUNCATE success:       1
18581 # check layout success:    1
18582 # End usability test (inc/partition_check.inc)
18583 DROP TABLE t1;
18584 CREATE TABLE t1 (
18585 f_int1 INTEGER,
18586 f_int2 INTEGER,
18587 f_char1 CHAR(20),
18588 f_char2 CHAR(20),
18589 f_charbig VARCHAR(1000)
18590 , UNIQUE INDEX uidx1 (f_int2,f_int1)
18592 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
18593 (PARTITION part1 VALUES LESS THAN (0)
18594 (SUBPARTITION subpart11, SUBPARTITION subpart12),
18595 PARTITION part2 VALUES LESS THAN (5)
18596 (SUBPARTITION subpart21, SUBPARTITION subpart22),
18597 PARTITION part3 VALUES LESS THAN (10)
18598 (SUBPARTITION subpart31, SUBPARTITION subpart32),
18599 PARTITION part4 VALUES LESS THAN (2147483646)
18600 (SUBPARTITION subpart41, SUBPARTITION subpart42));
18601 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18602 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18603 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18604 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
18605 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18606 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18607 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18608 # Start usability test (inc/partition_check.inc)
18609 create_command
18610 SHOW CREATE TABLE t1;
18611 Table   Create Table
18612 t1      CREATE TABLE `t1` (
18613   `f_int1` int(11) DEFAULT NULL,
18614   `f_int2` mediumint(9) DEFAULT NULL,
18615   `f_char1` char(20) DEFAULT NULL,
18616   `f_char2` char(20) DEFAULT NULL,
18617   `f_charbig` varchar(1000) DEFAULT NULL,
18618   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
18619 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
18620 /*!50100 PARTITION BY RANGE (f_int1)
18621 SUBPARTITION BY KEY (f_int1)
18622 (PARTITION part1 VALUES LESS THAN (0)
18623  (SUBPARTITION subpart11 ENGINE = InnoDB,
18624   SUBPARTITION subpart12 ENGINE = InnoDB),
18625  PARTITION part2 VALUES LESS THAN (5)
18626  (SUBPARTITION subpart21 ENGINE = InnoDB,
18627   SUBPARTITION subpart22 ENGINE = InnoDB),
18628  PARTITION part3 VALUES LESS THAN (10)
18629  (SUBPARTITION subpart31 ENGINE = InnoDB,
18630   SUBPARTITION subpart32 ENGINE = InnoDB),
18631  PARTITION part4 VALUES LESS THAN (2147483646)
18632  (SUBPARTITION subpart41 ENGINE = InnoDB,
18633   SUBPARTITION subpart42 ENGINE = InnoDB)) */
18635 # check prerequisites-1 success:    1
18636 # check COUNT(*) success:    1
18637 # check MIN/MAX(f_int1) success:    1
18638 # check MIN/MAX(f_int2) success:    1
18639 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18640 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18641 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18642 WHERE f_int1 IN (2,3);
18643 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18644 # check prerequisites-3 success:    1
18645 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18646 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18647 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18648 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18649 WHERE f_int1 IN (2,3);
18650 DELETE FROM t1 WHERE f_charbig = 'delete me';
18651 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18652 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18653 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18654 WHERE f_int1 IN (2,3);
18655 DELETE FROM t1 WHERE f_charbig = 'delete me';
18656 # check read via f_int1 success: 1
18657 # check read via f_int2 success: 1
18658         
18659 # check multiple-1 success:     1
18660 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18661         
18662 # check multiple-2 success:     1
18663 INSERT INTO t1 SELECT * FROM t0_template
18664 WHERE MOD(f_int1,3) = 0;
18665         
18666 # check multiple-3 success:     1
18667 UPDATE t1 SET f_int1 = f_int1 + @max_row
18668 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18669 AND @max_row_div2 + @max_row_div4;
18670         
18671 # check multiple-4 success:     1
18672 DELETE FROM t1
18673 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18674 AND @max_row_div2 + @max_row_div4 + @max_row;
18675         
18676 # check multiple-5 success:     1
18677 SELECT COUNT(*) INTO @try_count FROM t0_template
18678 WHERE MOD(f_int1,3) = 0
18679 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18680 SELECT COUNT(*) INTO @clash_count
18681 FROM t1 INNER JOIN t0_template USING(f_int1)
18682 WHERE MOD(f_int1,3) = 0
18683 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18684 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18685 INSERT INTO t1
18686 SET f_int1 = @cur_value , f_int2 = @cur_value,
18687 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18688 f_charbig = '#SINGLE#';
18689         
18690 # check single-1 success:       1
18691 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18692 INSERT INTO t1
18693 SET f_int1 = @cur_value , f_int2 = @cur_value,
18694 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18695 f_charbig = '#SINGLE#';
18696         
18697 # check single-2 success:       1
18698 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18699 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18700 UPDATE t1 SET f_int1 = @cur_value2
18701 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18702         
18703 # check single-3 success:       1
18704 SET @cur_value1= -1;
18705 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18706 UPDATE t1 SET f_int1 = @cur_value1
18707 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18708         
18709 # check single-4 success:       1
18710 SELECT MAX(f_int1) INTO @cur_value FROM t1;
18711 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18712         
18713 # check single-5 success:       1
18714 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18715         
18716 # check single-6 success:       1
18717 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18718 ERROR HY000: Table has no partition for value 2147483647
18719 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18720 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18721 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18722 f_charbig = '#NULL#';
18723 INSERT INTO t1
18724 SET f_int1 = NULL , f_int2 = -@max_row,
18725 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18726 f_charbig = '#NULL#';
18727 # check null success:    1
18728         
18729 # check null-1 success:         1
18730 UPDATE t1 SET f_int1 = -@max_row
18731 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18732 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18733         
18734 # check null-2 success:         1
18735 UPDATE t1 SET f_int1 = NULL
18736 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18737 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18738         
18739 # check null-3 success:         1
18740 DELETE FROM t1
18741 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18742 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18743         
18744 # check null-4 success:         1
18745 DELETE FROM t1
18746 WHERE f_int1 = 0 AND f_int2 = 0
18747 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18748 AND f_charbig = '#NULL#';
18749 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18750 SELECT f_int1, f_int1, '', '', 'was inserted'
18751    FROM t0_template source_tab
18752 WHERE MOD(f_int1,3) = 0
18753 AND f_int1 BETWEEN @max_row_div2 AND @max_row
18754 ON DUPLICATE KEY
18755 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18756 f_int2 = 2 * @max_row + source_tab.f_int1,
18757 f_charbig = 'was updated';
18758         
18759 # check unique-1-a success:     1
18760         
18761 # check unique-1-b success:     1
18762 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18763 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18764 f_int2 = CAST(f_char1 AS SIGNED INT),
18765 f_charbig = CONCAT('===',f_char1,'===')
18766 WHERE f_charbig = 'was updated';
18767 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18768 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18769    FROM t0_template source_tab
18770 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18771         
18772 # check replace success:        1
18773 DELETE FROM t1
18774 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18775 DELETE FROM t1
18776 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18777 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18778 UPDATE t1 SET f_int2 = f_int1,
18779 f_char1 = CAST(f_int1 AS CHAR),
18780 f_char2 = CAST(f_int1 AS CHAR),
18781 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18782 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18783 SET AUTOCOMMIT= 0;
18784 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18785 SELECT f_int1, f_int1, '', '', 'was inserted'
18786 FROM t0_template source_tab
18787 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18788         
18789 # check transactions-1 success:         1
18790 COMMIT WORK;
18791         
18792 # check transactions-2 success:         1
18793 ROLLBACK WORK;
18794         
18795 # check transactions-3 success:         1
18796 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18797 COMMIT WORK;
18798 ROLLBACK WORK;
18799         
18800 # check transactions-4 success:         1
18801 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18802 SELECT f_int1, f_int1, '', '', 'was inserted'
18803 FROM t0_template source_tab
18804 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18805         
18806 # check transactions-5 success:         1
18807 ROLLBACK WORK;
18808         
18809 # check transactions-6 success:         1
18810 # INFO: Storage engine used for t1 seems to be transactional.
18811 COMMIT;
18812         
18813 # check transactions-7 success:         1
18814 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18815 COMMIT WORK;
18816 SET @@session.sql_mode = 'traditional';
18817 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18818 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18819 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18820 '', '', 'was inserted' FROM t0_template
18821 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18822 ERROR 22012: Division by 0
18823 COMMIT;
18824         
18825 # check transactions-8 success:         1
18826 # INFO: Storage engine used for t1 seems to be able to revert
18827 #       changes made by the failing statement.
18828 SET @@session.sql_mode = '';
18829 SET AUTOCOMMIT= 1;
18830 DELETE FROM t1 WHERE f_charbig = 'was inserted';
18831 COMMIT WORK;
18832 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18833         
18834 # check special-1 success:      1
18835 UPDATE t1 SET f_charbig = '';
18836         
18837 # check special-2 success:      1
18838 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18839 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18840 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18841 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18842 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18843 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18844 'just inserted' FROM t0_template
18845 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18846 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18847 BEGIN
18848 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18849 f_charbig = 'updated by trigger'
18850       WHERE f_int1 = new.f_int1;
18851 END|
18852 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18853 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18854 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18855         
18856 # check trigger-1 success:      1
18857 DROP TRIGGER trg_1;
18858 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18859 f_int2 = CAST(f_char1 AS SIGNED INT),
18860 f_charbig = 'just inserted'
18861    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18862 DELETE FROM t0_aux
18863 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18864 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18865 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18866 'just inserted' FROM t0_template
18867 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18868 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18869 BEGIN
18870 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18871 f_charbig = 'updated by trigger'
18872       WHERE f_int1 = new.f_int1;
18873 END|
18874 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18875 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18876 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18877         
18878 # check trigger-2 success:      1
18879 DROP TRIGGER trg_1;
18880 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18881 f_int2 = CAST(f_char1 AS SIGNED INT),
18882 f_charbig = 'just inserted'
18883    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18884 DELETE FROM t0_aux
18885 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18886 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18887 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18888 'just inserted' FROM t0_template
18889 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18890 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18891 BEGIN
18892 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18893 f_charbig = 'updated by trigger'
18894       WHERE f_int1 = new.f_int1;
18895 END|
18896 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18897 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18898         
18899 # check trigger-3 success:      1
18900 DROP TRIGGER trg_1;
18901 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18902 f_int2 = CAST(f_char1 AS SIGNED INT),
18903 f_charbig = 'just inserted'
18904    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18905 DELETE FROM t0_aux
18906 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18907 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18908 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18909 'just inserted' FROM t0_template
18910 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18911 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18912 BEGIN
18913 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18914 f_charbig = 'updated by trigger'
18915       WHERE f_int1 = - old.f_int1;
18916 END|
18917 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18918 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18919         
18920 # check trigger-4 success:      1
18921 DROP TRIGGER trg_1;
18922 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18923 f_int2 = CAST(f_char1 AS SIGNED INT),
18924 f_charbig = 'just inserted'
18925    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18926 DELETE FROM t0_aux
18927 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18928 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18929 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18930 'just inserted' FROM t0_template
18931 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18932 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18933 BEGIN
18934 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18935 f_charbig = 'updated by trigger'
18936       WHERE f_int1 = new.f_int1;
18937 END|
18938 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18939 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18940         
18941 # check trigger-5 success:      1
18942 DROP TRIGGER trg_1;
18943 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18944 f_int2 = CAST(f_char1 AS SIGNED INT),
18945 f_charbig = 'just inserted'
18946    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18947 DELETE FROM t0_aux
18948 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18949 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18950 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18951 'just inserted' FROM t0_template
18952 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18953 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18954 BEGIN
18955 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18956 f_charbig = 'updated by trigger'
18957       WHERE f_int1 = - old.f_int1;
18958 END|
18959 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18960 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18961         
18962 # check trigger-6 success:      1
18963 DROP TRIGGER trg_1;
18964 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18965 f_int2 = CAST(f_char1 AS SIGNED INT),
18966 f_charbig = 'just inserted'
18967    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18968 DELETE FROM t0_aux
18969 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18970 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18971 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18972 'just inserted' FROM t0_template
18973 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18974 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18975 BEGIN
18976 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18977 f_charbig = 'updated by trigger'
18978       WHERE f_int1 = - old.f_int1;
18979 END|
18980 DELETE FROM t0_aux
18981 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18982         
18983 # check trigger-7 success:      1
18984 DROP TRIGGER trg_1;
18985 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18986 f_int2 = CAST(f_char1 AS SIGNED INT),
18987 f_charbig = 'just inserted'
18988    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18989 DELETE FROM t0_aux
18990 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18991 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18992 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18993 'just inserted' FROM t0_template
18994 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18995 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18996 BEGIN
18997 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18998 f_charbig = 'updated by trigger'
18999       WHERE f_int1 = - old.f_int1;
19000 END|
19001 DELETE FROM t0_aux
19002 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19003         
19004 # check trigger-8 success:      1
19005 DROP TRIGGER trg_1;
19006 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19007 f_int2 = CAST(f_char1 AS SIGNED INT),
19008 f_charbig = 'just inserted'
19009    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19010 DELETE FROM t0_aux
19011 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19012 DELETE FROM t1
19013 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19014 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19015 BEGIN
19016 SET new.f_int1 = old.f_int1 + @max_row,
19017 new.f_int2 = old.f_int2 - @max_row,
19018 new.f_charbig = '####updated per update trigger####';
19019 END|
19020 UPDATE t1
19021 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19022 f_charbig = '####updated per update statement itself####';
19023         
19024 # check trigger-9 success:      1
19025 DROP TRIGGER trg_2;
19026 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19027 f_int2 = CAST(f_char1 AS SIGNED INT),
19028 f_charbig = CONCAT('===',f_char1,'===');
19029 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19030 BEGIN
19031 SET new.f_int1 = new.f_int1 + @max_row,
19032 new.f_int2 = new.f_int2 - @max_row,
19033 new.f_charbig = '####updated per update trigger####';
19034 END|
19035 UPDATE t1
19036 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19037 f_charbig = '####updated per update statement itself####';
19038         
19039 # check trigger-10 success:     1
19040 DROP TRIGGER trg_2;
19041 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19042 f_int2 = CAST(f_char1 AS SIGNED INT),
19043 f_charbig = CONCAT('===',f_char1,'===');
19044 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19045 BEGIN
19046 SET new.f_int1 = @my_max1 + @counter,
19047 new.f_int2 = @my_min2 - @counter,
19048 new.f_charbig = '####updated per insert trigger####';
19049 SET @counter = @counter + 1;
19050 END|
19051 SET @counter = 1;
19052 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19053 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19054 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19055 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19056 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19057 ORDER BY f_int1;
19058 DROP TRIGGER trg_3;
19059         
19060 # check trigger-11 success:     1
19061 DELETE FROM t1
19062 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19063 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19064 AND f_charbig = '####updated per insert trigger####';
19065 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19066 BEGIN
19067 SET new.f_int1 = @my_max1 + @counter,
19068 new.f_int2 = @my_min2 - @counter,
19069 new.f_charbig = '####updated per insert trigger####';
19070 SET @counter = @counter + 1;
19071 END|
19072 SET @counter = 1;
19073 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19074 INSERT INTO t1 (f_char1, f_char2, f_charbig)
19075 SELECT CAST(f_int1 AS CHAR),
19076 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19077 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19078 ORDER BY f_int1;
19079 DROP TRIGGER trg_3;
19080         
19081 # check trigger-12 success:     1
19082 DELETE FROM t1
19083 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19084 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19085 AND f_charbig = '####updated per insert trigger####';
19086 ANALYZE  TABLE t1;
19087 Table   Op      Msg_type        Msg_text
19088 test.t1 analyze status  OK
19089 CHECK    TABLE t1 EXTENDED;
19090 Table   Op      Msg_type        Msg_text
19091 test.t1 check   status  OK
19092 CHECKSUM TABLE t1 EXTENDED;
19093 Table   Checksum
19094 test.t1 <some_value>
19095 OPTIMIZE TABLE t1;
19096 Table   Op      Msg_type        Msg_text
19097 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
19098 test.t1 optimize        status  OK
19099 # check layout success:    1
19100 REPAIR   TABLE t1 EXTENDED;
19101 Table   Op      Msg_type        Msg_text
19102 test.t1 repair  note    The storage engine for the table doesn't support repair
19103 # check layout success:    1
19104 TRUNCATE t1;
19105         
19106 # check TRUNCATE success:       1
19107 # check layout success:    1
19108 # End usability test (inc/partition_check.inc)
19109 DROP TABLE t1;
19110 CREATE TABLE t1 (
19111 f_int1 INTEGER,
19112 f_int2 INTEGER,
19113 f_char1 CHAR(20),
19114 f_char2 CHAR(20),
19115 f_charbig VARCHAR(1000)
19116 , UNIQUE INDEX uidx1 (f_int2,f_int1)
19118 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
19119 (PARTITION part1 VALUES IN (0)
19120 (SUBPARTITION sp11, SUBPARTITION sp12),
19121 PARTITION part2 VALUES IN (1)
19122 (SUBPARTITION sp21, SUBPARTITION sp22),
19123 PARTITION part3 VALUES IN (2)
19124 (SUBPARTITION sp31, SUBPARTITION sp32),
19125 PARTITION part4 VALUES IN (NULL)
19126 (SUBPARTITION sp41, SUBPARTITION sp42));
19127 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19128 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19129 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19130 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
19131 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19132 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19133 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19134 # Start usability test (inc/partition_check.inc)
19135 create_command
19136 SHOW CREATE TABLE t1;
19137 Table   Create Table
19138 t1      CREATE TABLE `t1` (
19139   `f_int1` int(11) DEFAULT NULL,
19140   `f_int2` mediumint(9) DEFAULT NULL,
19141   `f_char1` char(20) DEFAULT NULL,
19142   `f_char2` char(20) DEFAULT NULL,
19143   `f_charbig` varchar(1000) DEFAULT NULL,
19144   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
19145 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
19146 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
19147 SUBPARTITION BY HASH (f_int1 + 1)
19148 (PARTITION part1 VALUES IN (0)
19149  (SUBPARTITION sp11 ENGINE = InnoDB,
19150   SUBPARTITION sp12 ENGINE = InnoDB),
19151  PARTITION part2 VALUES IN (1)
19152  (SUBPARTITION sp21 ENGINE = InnoDB,
19153   SUBPARTITION sp22 ENGINE = InnoDB),
19154  PARTITION part3 VALUES IN (2)
19155  (SUBPARTITION sp31 ENGINE = InnoDB,
19156   SUBPARTITION sp32 ENGINE = InnoDB),
19157  PARTITION part4 VALUES IN (NULL)
19158  (SUBPARTITION sp41 ENGINE = InnoDB,
19159   SUBPARTITION sp42 ENGINE = InnoDB)) */
19161 # check prerequisites-1 success:    1
19162 # check COUNT(*) success:    1
19163 # check MIN/MAX(f_int1) success:    1
19164 # check MIN/MAX(f_int2) success:    1
19165 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19166 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19167 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19168 WHERE f_int1 IN (2,3);
19169 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19170 # check prerequisites-3 success:    1
19171 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19172 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19173 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19174 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19175 WHERE f_int1 IN (2,3);
19176 DELETE FROM t1 WHERE f_charbig = 'delete me';
19177 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19178 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19179 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19180 WHERE f_int1 IN (2,3);
19181 DELETE FROM t1 WHERE f_charbig = 'delete me';
19182 # check read via f_int1 success: 1
19183 # check read via f_int2 success: 1
19184         
19185 # check multiple-1 success:     1
19186 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19187         
19188 # check multiple-2 success:     1
19189 INSERT INTO t1 SELECT * FROM t0_template
19190 WHERE MOD(f_int1,3) = 0;
19191         
19192 # check multiple-3 success:     1
19193 UPDATE t1 SET f_int1 = f_int1 + @max_row
19194 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19195 AND @max_row_div2 + @max_row_div4;
19196         
19197 # check multiple-4 success:     1
19198 DELETE FROM t1
19199 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19200 AND @max_row_div2 + @max_row_div4 + @max_row;
19201         
19202 # check multiple-5 success:     1
19203 SELECT COUNT(*) INTO @try_count FROM t0_template
19204 WHERE MOD(f_int1,3) = 0
19205 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19206 SELECT COUNT(*) INTO @clash_count
19207 FROM t1 INNER JOIN t0_template USING(f_int1)
19208 WHERE MOD(f_int1,3) = 0
19209 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19210 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19211 INSERT INTO t1
19212 SET f_int1 = @cur_value , f_int2 = @cur_value,
19213 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19214 f_charbig = '#SINGLE#';
19215         
19216 # check single-1 success:       1
19217 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19218 INSERT INTO t1
19219 SET f_int1 = @cur_value , f_int2 = @cur_value,
19220 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19221 f_charbig = '#SINGLE#';
19222         
19223 # check single-2 success:       1
19224 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19225 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19226 UPDATE t1 SET f_int1 = @cur_value2
19227 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19228         
19229 # check single-3 success:       1
19230 SET @cur_value1= -1;
19231 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19232 UPDATE t1 SET f_int1 = @cur_value1
19233 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19234         
19235 # check single-4 success:       1
19236 SELECT MAX(f_int1) INTO @cur_value FROM t1;
19237 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19238         
19239 # check single-5 success:       1
19240 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19241         
19242 # check single-6 success:       1
19243 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19244 Warnings:
19245 Warning 1264    Out of range value for column 'f_int2' at row 1
19246         
19247 # check single-7 success:       1
19248 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19249 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19250 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19251 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19252 f_charbig = '#NULL#';
19253 INSERT INTO t1
19254 SET f_int1 = NULL , f_int2 = -@max_row,
19255 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19256 f_charbig = '#NULL#';
19257 # check null success:    1
19258         
19259 # check null-1 success:         1
19260 UPDATE t1 SET f_int1 = -@max_row
19261 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19262 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19263         
19264 # check null-2 success:         1
19265 UPDATE t1 SET f_int1 = NULL
19266 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19267 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19268         
19269 # check null-3 success:         1
19270 DELETE FROM t1
19271 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19272 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19273         
19274 # check null-4 success:         1
19275 DELETE FROM t1
19276 WHERE f_int1 = 0 AND f_int2 = 0
19277 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19278 AND f_charbig = '#NULL#';
19279 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19280 SELECT f_int1, f_int1, '', '', 'was inserted'
19281    FROM t0_template source_tab
19282 WHERE MOD(f_int1,3) = 0
19283 AND f_int1 BETWEEN @max_row_div2 AND @max_row
19284 ON DUPLICATE KEY
19285 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19286 f_int2 = 2 * @max_row + source_tab.f_int1,
19287 f_charbig = 'was updated';
19288         
19289 # check unique-1-a success:     1
19290         
19291 # check unique-1-b success:     1
19292 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19293 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19294 f_int2 = CAST(f_char1 AS SIGNED INT),
19295 f_charbig = CONCAT('===',f_char1,'===')
19296 WHERE f_charbig = 'was updated';
19297 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19298 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19299    FROM t0_template source_tab
19300 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19301         
19302 # check replace success:        1
19303 DELETE FROM t1
19304 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19305 DELETE FROM t1
19306 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19307 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19308 UPDATE t1 SET f_int2 = f_int1,
19309 f_char1 = CAST(f_int1 AS CHAR),
19310 f_char2 = CAST(f_int1 AS CHAR),
19311 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19312 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19313 SET AUTOCOMMIT= 0;
19314 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19315 SELECT f_int1, f_int1, '', '', 'was inserted'
19316 FROM t0_template source_tab
19317 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19318         
19319 # check transactions-1 success:         1
19320 COMMIT WORK;
19321         
19322 # check transactions-2 success:         1
19323 ROLLBACK WORK;
19324         
19325 # check transactions-3 success:         1
19326 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19327 COMMIT WORK;
19328 ROLLBACK WORK;
19329         
19330 # check transactions-4 success:         1
19331 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19332 SELECT f_int1, f_int1, '', '', 'was inserted'
19333 FROM t0_template source_tab
19334 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19335         
19336 # check transactions-5 success:         1
19337 ROLLBACK WORK;
19338         
19339 # check transactions-6 success:         1
19340 # INFO: Storage engine used for t1 seems to be transactional.
19341 COMMIT;
19342         
19343 # check transactions-7 success:         1
19344 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19345 COMMIT WORK;
19346 SET @@session.sql_mode = 'traditional';
19347 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19348 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19349 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19350 '', '', 'was inserted' FROM t0_template
19351 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19352 ERROR 22012: Division by 0
19353 COMMIT;
19354         
19355 # check transactions-8 success:         1
19356 # INFO: Storage engine used for t1 seems to be able to revert
19357 #       changes made by the failing statement.
19358 SET @@session.sql_mode = '';
19359 SET AUTOCOMMIT= 1;
19360 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19361 COMMIT WORK;
19362 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19363         
19364 # check special-1 success:      1
19365 UPDATE t1 SET f_charbig = '';
19366         
19367 # check special-2 success:      1
19368 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19369 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19370 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19371 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19372 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19373 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19374 'just inserted' FROM t0_template
19375 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19376 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19377 BEGIN
19378 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19379 f_charbig = 'updated by trigger'
19380       WHERE f_int1 = new.f_int1;
19381 END|
19382 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19383 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19384 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19385         
19386 # check trigger-1 success:      1
19387 DROP TRIGGER trg_1;
19388 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19389 f_int2 = CAST(f_char1 AS SIGNED INT),
19390 f_charbig = 'just inserted'
19391    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19392 DELETE FROM t0_aux
19393 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19394 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19395 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19396 'just inserted' FROM t0_template
19397 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19398 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19399 BEGIN
19400 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19401 f_charbig = 'updated by trigger'
19402       WHERE f_int1 = new.f_int1;
19403 END|
19404 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19405 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19406 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19407         
19408 # check trigger-2 success:      1
19409 DROP TRIGGER trg_1;
19410 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19411 f_int2 = CAST(f_char1 AS SIGNED INT),
19412 f_charbig = 'just inserted'
19413    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19414 DELETE FROM t0_aux
19415 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19416 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19417 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19418 'just inserted' FROM t0_template
19419 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19420 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19421 BEGIN
19422 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19423 f_charbig = 'updated by trigger'
19424       WHERE f_int1 = new.f_int1;
19425 END|
19426 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19427 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19428         
19429 # check trigger-3 success:      1
19430 DROP TRIGGER trg_1;
19431 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19432 f_int2 = CAST(f_char1 AS SIGNED INT),
19433 f_charbig = 'just inserted'
19434    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19435 DELETE FROM t0_aux
19436 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19437 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19438 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19439 'just inserted' FROM t0_template
19440 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19441 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19442 BEGIN
19443 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19444 f_charbig = 'updated by trigger'
19445       WHERE f_int1 = - old.f_int1;
19446 END|
19447 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19448 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19449         
19450 # check trigger-4 success:      1
19451 DROP TRIGGER trg_1;
19452 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19453 f_int2 = CAST(f_char1 AS SIGNED INT),
19454 f_charbig = 'just inserted'
19455    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19456 DELETE FROM t0_aux
19457 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19458 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19459 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19460 'just inserted' FROM t0_template
19461 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19462 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19463 BEGIN
19464 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19465 f_charbig = 'updated by trigger'
19466       WHERE f_int1 = new.f_int1;
19467 END|
19468 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19469 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19470         
19471 # check trigger-5 success:      1
19472 DROP TRIGGER trg_1;
19473 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19474 f_int2 = CAST(f_char1 AS SIGNED INT),
19475 f_charbig = 'just inserted'
19476    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19477 DELETE FROM t0_aux
19478 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19479 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19480 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19481 'just inserted' FROM t0_template
19482 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19483 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19484 BEGIN
19485 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19486 f_charbig = 'updated by trigger'
19487       WHERE f_int1 = - old.f_int1;
19488 END|
19489 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19490 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19491         
19492 # check trigger-6 success:      1
19493 DROP TRIGGER trg_1;
19494 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19495 f_int2 = CAST(f_char1 AS SIGNED INT),
19496 f_charbig = 'just inserted'
19497    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19498 DELETE FROM t0_aux
19499 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19500 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19501 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19502 'just inserted' FROM t0_template
19503 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19504 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19505 BEGIN
19506 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19507 f_charbig = 'updated by trigger'
19508       WHERE f_int1 = - old.f_int1;
19509 END|
19510 DELETE FROM t0_aux
19511 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19512         
19513 # check trigger-7 success:      1
19514 DROP TRIGGER trg_1;
19515 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19516 f_int2 = CAST(f_char1 AS SIGNED INT),
19517 f_charbig = 'just inserted'
19518    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19519 DELETE FROM t0_aux
19520 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19523 'just inserted' FROM t0_template
19524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19525 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19526 BEGIN
19527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19528 f_charbig = 'updated by trigger'
19529       WHERE f_int1 = - old.f_int1;
19530 END|
19531 DELETE FROM t0_aux
19532 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19533         
19534 # check trigger-8 success:      1
19535 DROP TRIGGER trg_1;
19536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19537 f_int2 = CAST(f_char1 AS SIGNED INT),
19538 f_charbig = 'just inserted'
19539    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19540 DELETE FROM t0_aux
19541 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19542 DELETE FROM t1
19543 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19544 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19545 BEGIN
19546 SET new.f_int1 = old.f_int1 + @max_row,
19547 new.f_int2 = old.f_int2 - @max_row,
19548 new.f_charbig = '####updated per update trigger####';
19549 END|
19550 UPDATE t1
19551 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19552 f_charbig = '####updated per update statement itself####';
19553         
19554 # check trigger-9 success:      1
19555 DROP TRIGGER trg_2;
19556 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19557 f_int2 = CAST(f_char1 AS SIGNED INT),
19558 f_charbig = CONCAT('===',f_char1,'===');
19559 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19560 BEGIN
19561 SET new.f_int1 = new.f_int1 + @max_row,
19562 new.f_int2 = new.f_int2 - @max_row,
19563 new.f_charbig = '####updated per update trigger####';
19564 END|
19565 UPDATE t1
19566 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19567 f_charbig = '####updated per update statement itself####';
19568         
19569 # check trigger-10 success:     1
19570 DROP TRIGGER trg_2;
19571 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19572 f_int2 = CAST(f_char1 AS SIGNED INT),
19573 f_charbig = CONCAT('===',f_char1,'===');
19574 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19575 BEGIN
19576 SET new.f_int1 = @my_max1 + @counter,
19577 new.f_int2 = @my_min2 - @counter,
19578 new.f_charbig = '####updated per insert trigger####';
19579 SET @counter = @counter + 1;
19580 END|
19581 SET @counter = 1;
19582 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19584 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19585 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19586 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19587 ORDER BY f_int1;
19588 DROP TRIGGER trg_3;
19589         
19590 # check trigger-11 success:     1
19591 DELETE FROM t1
19592 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19593 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19594 AND f_charbig = '####updated per insert trigger####';
19595 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19596 BEGIN
19597 SET new.f_int1 = @my_max1 + @counter,
19598 new.f_int2 = @my_min2 - @counter,
19599 new.f_charbig = '####updated per insert trigger####';
19600 SET @counter = @counter + 1;
19601 END|
19602 SET @counter = 1;
19603 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19604 INSERT INTO t1 (f_char1, f_char2, f_charbig)
19605 SELECT CAST(f_int1 AS CHAR),
19606 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19607 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19608 ORDER BY f_int1;
19609 DROP TRIGGER trg_3;
19610         
19611 # check trigger-12 success:     1
19612 DELETE FROM t1
19613 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19614 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19615 AND f_charbig = '####updated per insert trigger####';
19616 ANALYZE  TABLE t1;
19617 Table   Op      Msg_type        Msg_text
19618 test.t1 analyze status  OK
19619 CHECK    TABLE t1 EXTENDED;
19620 Table   Op      Msg_type        Msg_text
19621 test.t1 check   status  OK
19622 CHECKSUM TABLE t1 EXTENDED;
19623 Table   Checksum
19624 test.t1 <some_value>
19625 OPTIMIZE TABLE t1;
19626 Table   Op      Msg_type        Msg_text
19627 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
19628 test.t1 optimize        status  OK
19629 # check layout success:    1
19630 REPAIR   TABLE t1 EXTENDED;
19631 Table   Op      Msg_type        Msg_text
19632 test.t1 repair  note    The storage engine for the table doesn't support repair
19633 # check layout success:    1
19634 TRUNCATE t1;
19635         
19636 # check TRUNCATE success:       1
19637 # check layout success:    1
19638 # End usability test (inc/partition_check.inc)
19639 DROP TABLE t1;
19640 CREATE TABLE t1 (
19641 f_int1 INTEGER,
19642 f_int2 INTEGER,
19643 f_char1 CHAR(20),
19644 f_char2 CHAR(20),
19645 f_charbig VARCHAR(1000)
19646 , UNIQUE INDEX uidx1 (f_int2,f_int1)
19648 PARTITION BY LIST(ABS(MOD(f_int1,2)))
19649 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
19650 (PARTITION part1 VALUES IN (0),
19651 PARTITION part2 VALUES IN (1),
19652 PARTITION part3 VALUES IN (NULL));
19653 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19654 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19655 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19656 ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
19657 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19658 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19659 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19660 # Start usability test (inc/partition_check.inc)
19661 create_command
19662 SHOW CREATE TABLE t1;
19663 Table   Create Table
19664 t1      CREATE TABLE `t1` (
19665   `f_int1` int(11) DEFAULT NULL,
19666   `f_int2` mediumint(9) DEFAULT NULL,
19667   `f_char1` char(20) DEFAULT NULL,
19668   `f_char2` char(20) DEFAULT NULL,
19669   `f_charbig` varchar(1000) DEFAULT NULL,
19670   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
19671 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
19672 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
19673 SUBPARTITION BY KEY (f_int1)
19674 SUBPARTITIONS 3
19675 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
19676  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
19677  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
19679 # check prerequisites-1 success:    1
19680 # check COUNT(*) success:    1
19681 # check MIN/MAX(f_int1) success:    1
19682 # check MIN/MAX(f_int2) success:    1
19683 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19684 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19685 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19686 WHERE f_int1 IN (2,3);
19687 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19688 # check prerequisites-3 success:    1
19689 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19690 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19691 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19692 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19693 WHERE f_int1 IN (2,3);
19694 DELETE FROM t1 WHERE f_charbig = 'delete me';
19695 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19696 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19697 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19698 WHERE f_int1 IN (2,3);
19699 DELETE FROM t1 WHERE f_charbig = 'delete me';
19700 # check read via f_int1 success: 1
19701 # check read via f_int2 success: 1
19702         
19703 # check multiple-1 success:     1
19704 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19705         
19706 # check multiple-2 success:     1
19707 INSERT INTO t1 SELECT * FROM t0_template
19708 WHERE MOD(f_int1,3) = 0;
19709         
19710 # check multiple-3 success:     1
19711 UPDATE t1 SET f_int1 = f_int1 + @max_row
19712 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19713 AND @max_row_div2 + @max_row_div4;
19714         
19715 # check multiple-4 success:     1
19716 DELETE FROM t1
19717 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19718 AND @max_row_div2 + @max_row_div4 + @max_row;
19719         
19720 # check multiple-5 success:     1
19721 SELECT COUNT(*) INTO @try_count FROM t0_template
19722 WHERE MOD(f_int1,3) = 0
19723 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19724 SELECT COUNT(*) INTO @clash_count
19725 FROM t1 INNER JOIN t0_template USING(f_int1)
19726 WHERE MOD(f_int1,3) = 0
19727 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19728 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19729 INSERT INTO t1
19730 SET f_int1 = @cur_value , f_int2 = @cur_value,
19731 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19732 f_charbig = '#SINGLE#';
19733         
19734 # check single-1 success:       1
19735 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19736 INSERT INTO t1
19737 SET f_int1 = @cur_value , f_int2 = @cur_value,
19738 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19739 f_charbig = '#SINGLE#';
19740         
19741 # check single-2 success:       1
19742 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19743 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19744 UPDATE t1 SET f_int1 = @cur_value2
19745 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19746         
19747 # check single-3 success:       1
19748 SET @cur_value1= -1;
19749 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19750 UPDATE t1 SET f_int1 = @cur_value1
19751 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19752         
19753 # check single-4 success:       1
19754 SELECT MAX(f_int1) INTO @cur_value FROM t1;
19755 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19756         
19757 # check single-5 success:       1
19758 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19759         
19760 # check single-6 success:       1
19761 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19762 Warnings:
19763 Warning 1264    Out of range value for column 'f_int2' at row 1
19764         
19765 # check single-7 success:       1
19766 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19767 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19768 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19769 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19770 f_charbig = '#NULL#';
19771 INSERT INTO t1
19772 SET f_int1 = NULL , f_int2 = -@max_row,
19773 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19774 f_charbig = '#NULL#';
19775 # check null success:    1
19776         
19777 # check null-1 success:         1
19778 UPDATE t1 SET f_int1 = -@max_row
19779 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19780 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19781         
19782 # check null-2 success:         1
19783 UPDATE t1 SET f_int1 = NULL
19784 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19785 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19786         
19787 # check null-3 success:         1
19788 DELETE FROM t1
19789 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19790 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19791         
19792 # check null-4 success:         1
19793 DELETE FROM t1
19794 WHERE f_int1 = 0 AND f_int2 = 0
19795 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19796 AND f_charbig = '#NULL#';
19797 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19798 SELECT f_int1, f_int1, '', '', 'was inserted'
19799    FROM t0_template source_tab
19800 WHERE MOD(f_int1,3) = 0
19801 AND f_int1 BETWEEN @max_row_div2 AND @max_row
19802 ON DUPLICATE KEY
19803 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19804 f_int2 = 2 * @max_row + source_tab.f_int1,
19805 f_charbig = 'was updated';
19806         
19807 # check unique-1-a success:     1
19808         
19809 # check unique-1-b success:     1
19810 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19811 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19812 f_int2 = CAST(f_char1 AS SIGNED INT),
19813 f_charbig = CONCAT('===',f_char1,'===')
19814 WHERE f_charbig = 'was updated';
19815 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19816 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19817    FROM t0_template source_tab
19818 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19819         
19820 # check replace success:        1
19821 DELETE FROM t1
19822 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19823 DELETE FROM t1
19824 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19825 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19826 UPDATE t1 SET f_int2 = f_int1,
19827 f_char1 = CAST(f_int1 AS CHAR),
19828 f_char2 = CAST(f_int1 AS CHAR),
19829 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19830 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19831 SET AUTOCOMMIT= 0;
19832 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19833 SELECT f_int1, f_int1, '', '', 'was inserted'
19834 FROM t0_template source_tab
19835 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19836         
19837 # check transactions-1 success:         1
19838 COMMIT WORK;
19839         
19840 # check transactions-2 success:         1
19841 ROLLBACK WORK;
19842         
19843 # check transactions-3 success:         1
19844 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19845 COMMIT WORK;
19846 ROLLBACK WORK;
19847         
19848 # check transactions-4 success:         1
19849 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19850 SELECT f_int1, f_int1, '', '', 'was inserted'
19851 FROM t0_template source_tab
19852 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19853         
19854 # check transactions-5 success:         1
19855 ROLLBACK WORK;
19856         
19857 # check transactions-6 success:         1
19858 # INFO: Storage engine used for t1 seems to be transactional.
19859 COMMIT;
19860         
19861 # check transactions-7 success:         1
19862 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19863 COMMIT WORK;
19864 SET @@session.sql_mode = 'traditional';
19865 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19866 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19867 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19868 '', '', 'was inserted' FROM t0_template
19869 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19870 ERROR 22012: Division by 0
19871 COMMIT;
19872         
19873 # check transactions-8 success:         1
19874 # INFO: Storage engine used for t1 seems to be able to revert
19875 #       changes made by the failing statement.
19876 SET @@session.sql_mode = '';
19877 SET AUTOCOMMIT= 1;
19878 DELETE FROM t1 WHERE f_charbig = 'was inserted';
19879 COMMIT WORK;
19880 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19881         
19882 # check special-1 success:      1
19883 UPDATE t1 SET f_charbig = '';
19884         
19885 # check special-2 success:      1
19886 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19887 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19888 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19889 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19890 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19891 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19892 'just inserted' FROM t0_template
19893 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19894 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19895 BEGIN
19896 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19897 f_charbig = 'updated by trigger'
19898       WHERE f_int1 = new.f_int1;
19899 END|
19900 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19901 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19902 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19903         
19904 # check trigger-1 success:      1
19905 DROP TRIGGER trg_1;
19906 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19907 f_int2 = CAST(f_char1 AS SIGNED INT),
19908 f_charbig = 'just inserted'
19909    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19910 DELETE FROM t0_aux
19911 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19912 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19913 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19914 'just inserted' FROM t0_template
19915 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19916 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19917 BEGIN
19918 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19919 f_charbig = 'updated by trigger'
19920       WHERE f_int1 = new.f_int1;
19921 END|
19922 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19923 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19924 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19925         
19926 # check trigger-2 success:      1
19927 DROP TRIGGER trg_1;
19928 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19929 f_int2 = CAST(f_char1 AS SIGNED INT),
19930 f_charbig = 'just inserted'
19931    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19932 DELETE FROM t0_aux
19933 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19934 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19935 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19936 'just inserted' FROM t0_template
19937 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19938 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19939 BEGIN
19940 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19941 f_charbig = 'updated by trigger'
19942       WHERE f_int1 = new.f_int1;
19943 END|
19944 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19945 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19946         
19947 # check trigger-3 success:      1
19948 DROP TRIGGER trg_1;
19949 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19950 f_int2 = CAST(f_char1 AS SIGNED INT),
19951 f_charbig = 'just inserted'
19952    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19953 DELETE FROM t0_aux
19954 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19955 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19956 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19957 'just inserted' FROM t0_template
19958 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19959 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19960 BEGIN
19961 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19962 f_charbig = 'updated by trigger'
19963       WHERE f_int1 = - old.f_int1;
19964 END|
19965 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19966 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19967         
19968 # check trigger-4 success:      1
19969 DROP TRIGGER trg_1;
19970 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19971 f_int2 = CAST(f_char1 AS SIGNED INT),
19972 f_charbig = 'just inserted'
19973    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19974 DELETE FROM t0_aux
19975 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19976 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19977 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19978 'just inserted' FROM t0_template
19979 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19980 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19981 BEGIN
19982 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19983 f_charbig = 'updated by trigger'
19984       WHERE f_int1 = new.f_int1;
19985 END|
19986 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19987 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19988         
19989 # check trigger-5 success:      1
19990 DROP TRIGGER trg_1;
19991 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19992 f_int2 = CAST(f_char1 AS SIGNED INT),
19993 f_charbig = 'just inserted'
19994    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19995 DELETE FROM t0_aux
19996 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19997 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19998 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19999 'just inserted' FROM t0_template
20000 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20001 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20002 BEGIN
20003 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20004 f_charbig = 'updated by trigger'
20005       WHERE f_int1 = - old.f_int1;
20006 END|
20007 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20008 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20009         
20010 # check trigger-6 success:      1
20011 DROP TRIGGER trg_1;
20012 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20013 f_int2 = CAST(f_char1 AS SIGNED INT),
20014 f_charbig = 'just inserted'
20015    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20016 DELETE FROM t0_aux
20017 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20018 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20019 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20020 'just inserted' FROM t0_template
20021 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20022 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20023 BEGIN
20024 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20025 f_charbig = 'updated by trigger'
20026       WHERE f_int1 = - old.f_int1;
20027 END|
20028 DELETE FROM t0_aux
20029 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20030         
20031 # check trigger-7 success:      1
20032 DROP TRIGGER trg_1;
20033 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20034 f_int2 = CAST(f_char1 AS SIGNED INT),
20035 f_charbig = 'just inserted'
20036    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20037 DELETE FROM t0_aux
20038 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20039 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20040 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20041 'just inserted' FROM t0_template
20042 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20043 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20044 BEGIN
20045 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20046 f_charbig = 'updated by trigger'
20047       WHERE f_int1 = - old.f_int1;
20048 END|
20049 DELETE FROM t0_aux
20050 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20051         
20052 # check trigger-8 success:      1
20053 DROP TRIGGER trg_1;
20054 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20055 f_int2 = CAST(f_char1 AS SIGNED INT),
20056 f_charbig = 'just inserted'
20057    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20058 DELETE FROM t0_aux
20059 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20060 DELETE FROM t1
20061 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20062 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20063 BEGIN
20064 SET new.f_int1 = old.f_int1 + @max_row,
20065 new.f_int2 = old.f_int2 - @max_row,
20066 new.f_charbig = '####updated per update trigger####';
20067 END|
20068 UPDATE t1
20069 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20070 f_charbig = '####updated per update statement itself####';
20071         
20072 # check trigger-9 success:      1
20073 DROP TRIGGER trg_2;
20074 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20075 f_int2 = CAST(f_char1 AS SIGNED INT),
20076 f_charbig = CONCAT('===',f_char1,'===');
20077 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20078 BEGIN
20079 SET new.f_int1 = new.f_int1 + @max_row,
20080 new.f_int2 = new.f_int2 - @max_row,
20081 new.f_charbig = '####updated per update trigger####';
20082 END|
20083 UPDATE t1
20084 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20085 f_charbig = '####updated per update statement itself####';
20086         
20087 # check trigger-10 success:     1
20088 DROP TRIGGER trg_2;
20089 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20090 f_int2 = CAST(f_char1 AS SIGNED INT),
20091 f_charbig = CONCAT('===',f_char1,'===');
20092 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20093 BEGIN
20094 SET new.f_int1 = @my_max1 + @counter,
20095 new.f_int2 = @my_min2 - @counter,
20096 new.f_charbig = '####updated per insert trigger####';
20097 SET @counter = @counter + 1;
20098 END|
20099 SET @counter = 1;
20100 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20101 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20102 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20103 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20104 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20105 ORDER BY f_int1;
20106 DROP TRIGGER trg_3;
20107         
20108 # check trigger-11 success:     1
20109 DELETE FROM t1
20110 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20111 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20112 AND f_charbig = '####updated per insert trigger####';
20113 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20114 BEGIN
20115 SET new.f_int1 = @my_max1 + @counter,
20116 new.f_int2 = @my_min2 - @counter,
20117 new.f_charbig = '####updated per insert trigger####';
20118 SET @counter = @counter + 1;
20119 END|
20120 SET @counter = 1;
20121 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20122 INSERT INTO t1 (f_char1, f_char2, f_charbig)
20123 SELECT CAST(f_int1 AS CHAR),
20124 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20125 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20126 ORDER BY f_int1;
20127 DROP TRIGGER trg_3;
20128         
20129 # check trigger-12 success:     1
20130 DELETE FROM t1
20131 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20132 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20133 AND f_charbig = '####updated per insert trigger####';
20134 ANALYZE  TABLE t1;
20135 Table   Op      Msg_type        Msg_text
20136 test.t1 analyze status  OK
20137 CHECK    TABLE t1 EXTENDED;
20138 Table   Op      Msg_type        Msg_text
20139 test.t1 check   status  OK
20140 CHECKSUM TABLE t1 EXTENDED;
20141 Table   Checksum
20142 test.t1 <some_value>
20143 OPTIMIZE TABLE t1;
20144 Table   Op      Msg_type        Msg_text
20145 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
20146 test.t1 optimize        status  OK
20147 # check layout success:    1
20148 REPAIR   TABLE t1 EXTENDED;
20149 Table   Op      Msg_type        Msg_text
20150 test.t1 repair  note    The storage engine for the table doesn't support repair
20151 # check layout success:    1
20152 TRUNCATE t1;
20153         
20154 # check TRUNCATE success:       1
20155 # check layout success:    1
20156 # End usability test (inc/partition_check.inc)
20157 DROP TABLE t1;
20158 #------------------------------------------------------------------------
20159 #  2.3   ALTER column f_int1 and f_int2 used in partitioning function
20160 #------------------------------------------------------------------------
20161 #  2.3.1 no PRIMARY KEY or UNIQUE INDEX exists
20162 DROP TABLE IF EXISTS t1;
20163 CREATE TABLE t1 (
20164 f_int1 INTEGER,
20165 f_int2 INTEGER,
20166 f_char1 CHAR(20),
20167 f_char2 CHAR(20),
20168 f_charbig VARCHAR(1000)
20171 PARTITION BY HASH(f_int1) PARTITIONS 2;
20172 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20173 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
20174 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
20175 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
20176 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20177 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
20178 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
20179 # Start usability test (inc/partition_check.inc)
20180 create_command
20181 SHOW CREATE TABLE t1;
20182 Table   Create Table
20183 t1      CREATE TABLE `t1` (
20184   `f_int1` mediumint(9) DEFAULT NULL,
20185   `f_int2` mediumint(9) DEFAULT NULL,
20186   `f_char1` char(20) DEFAULT NULL,
20187   `f_char2` char(20) DEFAULT NULL,
20188   `f_charbig` varchar(1000) DEFAULT NULL
20189 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
20190 /*!50100 PARTITION BY HASH (f_int1)
20191 PARTITIONS 2 */
20193 # check prerequisites-1 success:    1
20194 # check COUNT(*) success:    1
20195 # check MIN/MAX(f_int1) success:    1
20196 # check MIN/MAX(f_int2) success:    1
20197 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20198 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20199 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20200 WHERE f_int1 IN (2,3);
20201 # check prerequisites-3 success:    1
20202 DELETE FROM t1 WHERE f_charbig = 'delete me';
20203 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
20204 # check read via f_int1 success: 1
20205 # check read via f_int2 success: 1
20206         
20207 # check multiple-1 success:     1
20208 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20209         
20210 # check multiple-2 success:     1
20211 INSERT INTO t1 SELECT * FROM t0_template
20212 WHERE MOD(f_int1,3) = 0;
20213         
20214 # check multiple-3 success:     1
20215 UPDATE t1 SET f_int1 = f_int1 + @max_row
20216 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20217 AND @max_row_div2 + @max_row_div4;
20218         
20219 # check multiple-4 success:     1
20220 DELETE FROM t1
20221 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20222 AND @max_row_div2 + @max_row_div4 + @max_row;
20223         
20224 # check multiple-5 success:     1
20225 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20226 INSERT INTO t1
20227 SET f_int1 = @cur_value , f_int2 = @cur_value,
20228 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20229 f_charbig = '#SINGLE#';
20230         
20231 # check single-1 success:       1
20232 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20233 INSERT INTO t1
20234 SET f_int1 = @cur_value , f_int2 = @cur_value,
20235 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20236 f_charbig = '#SINGLE#';
20237         
20238 # check single-2 success:       1
20239 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20240 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20241 UPDATE t1 SET f_int1 = @cur_value2
20242 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20243         
20244 # check single-3 success:       1
20245 SET @cur_value1= -1;
20246 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20247 UPDATE t1 SET f_int1 = @cur_value1
20248 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20249         
20250 # check single-4 success:       1
20251 SELECT MAX(f_int1) INTO @cur_value FROM t1;
20252 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20253         
20254 # check single-5 success:       1
20255 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20256         
20257 # check single-6 success:       1
20258 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20259 Warnings:
20260 Warning 1264    Out of range value for column 'f_int1' at row 1
20261 Warning 1264    Out of range value for column 'f_int2' at row 1
20262         
20263 # check single-7 success:       1
20264 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
20265 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20266 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20267 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20268 f_charbig = '#NULL#';
20269 INSERT INTO t1
20270 SET f_int1 = NULL , f_int2 = -@max_row,
20271 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20272 f_charbig = '#NULL#';
20273 # check null success:    1
20274         
20275 # check null-1 success:         1
20276 UPDATE t1 SET f_int1 = -@max_row
20277 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20278 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20279         
20280 # check null-2 success:         1
20281 UPDATE t1 SET f_int1 = NULL
20282 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20283 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20284         
20285 # check null-3 success:         1
20286 DELETE FROM t1
20287 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20288 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20289         
20290 # check null-4 success:         1
20291 DELETE FROM t1
20292 WHERE f_int1 = 0 AND f_int2 = 0
20293 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20294 AND f_charbig = '#NULL#';
20295 SET AUTOCOMMIT= 0;
20296 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20297 SELECT f_int1, f_int1, '', '', 'was inserted'
20298 FROM t0_template source_tab
20299 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20300         
20301 # check transactions-1 success:         1
20302 COMMIT WORK;
20303         
20304 # check transactions-2 success:         1
20305 ROLLBACK WORK;
20306         
20307 # check transactions-3 success:         1
20308 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20309 COMMIT WORK;
20310 ROLLBACK WORK;
20311         
20312 # check transactions-4 success:         1
20313 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20314 SELECT f_int1, f_int1, '', '', 'was inserted'
20315 FROM t0_template source_tab
20316 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20317         
20318 # check transactions-5 success:         1
20319 ROLLBACK WORK;
20320         
20321 # check transactions-6 success:         1
20322 # INFO: Storage engine used for t1 seems to be transactional.
20323 COMMIT;
20324         
20325 # check transactions-7 success:         1
20326 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20327 COMMIT WORK;
20328 SET @@session.sql_mode = 'traditional';
20329 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20330 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20331 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20332 '', '', 'was inserted' FROM t0_template
20333 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20334 ERROR 22012: Division by 0
20335 COMMIT;
20336         
20337 # check transactions-8 success:         1
20338 # INFO: Storage engine used for t1 seems to be able to revert
20339 #       changes made by the failing statement.
20340 SET @@session.sql_mode = '';
20341 SET AUTOCOMMIT= 1;
20342 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20343 COMMIT WORK;
20344 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20345         
20346 # check special-1 success:      1
20347 UPDATE t1 SET f_charbig = '';
20348         
20349 # check special-2 success:      1
20350 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20351 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20352 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20353 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20354 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20355 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20356 'just inserted' FROM t0_template
20357 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20358 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20359 BEGIN
20360 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20361 f_charbig = 'updated by trigger'
20362       WHERE f_int1 = new.f_int1;
20363 END|
20364 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20365 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20366 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20367         
20368 # check trigger-1 success:      1
20369 DROP TRIGGER trg_1;
20370 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20371 f_int2 = CAST(f_char1 AS SIGNED INT),
20372 f_charbig = 'just inserted'
20373    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20374 DELETE FROM t0_aux
20375 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20376 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20377 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20378 'just inserted' FROM t0_template
20379 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20380 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20381 BEGIN
20382 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20383 f_charbig = 'updated by trigger'
20384       WHERE f_int1 = new.f_int1;
20385 END|
20386 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20387 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20388 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20389         
20390 # check trigger-2 success:      1
20391 DROP TRIGGER trg_1;
20392 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20393 f_int2 = CAST(f_char1 AS SIGNED INT),
20394 f_charbig = 'just inserted'
20395    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20396 DELETE FROM t0_aux
20397 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20398 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20399 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20400 'just inserted' FROM t0_template
20401 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20402 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20403 BEGIN
20404 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20405 f_charbig = 'updated by trigger'
20406       WHERE f_int1 = new.f_int1;
20407 END|
20408 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20409 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20410         
20411 # check trigger-3 success:      1
20412 DROP TRIGGER trg_1;
20413 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20414 f_int2 = CAST(f_char1 AS SIGNED INT),
20415 f_charbig = 'just inserted'
20416    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20417 DELETE FROM t0_aux
20418 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20419 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20420 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20421 'just inserted' FROM t0_template
20422 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20423 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20424 BEGIN
20425 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20426 f_charbig = 'updated by trigger'
20427       WHERE f_int1 = - old.f_int1;
20428 END|
20429 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20430 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20431         
20432 # check trigger-4 success:      1
20433 DROP TRIGGER trg_1;
20434 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20435 f_int2 = CAST(f_char1 AS SIGNED INT),
20436 f_charbig = 'just inserted'
20437    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20438 DELETE FROM t0_aux
20439 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20440 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20441 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20442 'just inserted' FROM t0_template
20443 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20444 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20445 BEGIN
20446 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20447 f_charbig = 'updated by trigger'
20448       WHERE f_int1 = new.f_int1;
20449 END|
20450 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20451 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20452         
20453 # check trigger-5 success:      1
20454 DROP TRIGGER trg_1;
20455 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20456 f_int2 = CAST(f_char1 AS SIGNED INT),
20457 f_charbig = 'just inserted'
20458    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20459 DELETE FROM t0_aux
20460 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20461 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20462 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20463 'just inserted' FROM t0_template
20464 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20465 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20466 BEGIN
20467 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20468 f_charbig = 'updated by trigger'
20469       WHERE f_int1 = - old.f_int1;
20470 END|
20471 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20472 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20473         
20474 # check trigger-6 success:      1
20475 DROP TRIGGER trg_1;
20476 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20477 f_int2 = CAST(f_char1 AS SIGNED INT),
20478 f_charbig = 'just inserted'
20479    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20480 DELETE FROM t0_aux
20481 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20482 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20483 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20484 'just inserted' FROM t0_template
20485 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20486 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20487 BEGIN
20488 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20489 f_charbig = 'updated by trigger'
20490       WHERE f_int1 = - old.f_int1;
20491 END|
20492 DELETE FROM t0_aux
20493 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20494         
20495 # check trigger-7 success:      1
20496 DROP TRIGGER trg_1;
20497 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20498 f_int2 = CAST(f_char1 AS SIGNED INT),
20499 f_charbig = 'just inserted'
20500    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20501 DELETE FROM t0_aux
20502 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20503 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20504 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20505 'just inserted' FROM t0_template
20506 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20507 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20508 BEGIN
20509 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20510 f_charbig = 'updated by trigger'
20511       WHERE f_int1 = - old.f_int1;
20512 END|
20513 DELETE FROM t0_aux
20514 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20515         
20516 # check trigger-8 success:      1
20517 DROP TRIGGER trg_1;
20518 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20519 f_int2 = CAST(f_char1 AS SIGNED INT),
20520 f_charbig = 'just inserted'
20521    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20522 DELETE FROM t0_aux
20523 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20524 DELETE FROM t1
20525 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20526 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20527 BEGIN
20528 SET new.f_int1 = old.f_int1 + @max_row,
20529 new.f_int2 = old.f_int2 - @max_row,
20530 new.f_charbig = '####updated per update trigger####';
20531 END|
20532 UPDATE t1
20533 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20534 f_charbig = '####updated per update statement itself####';
20535         
20536 # check trigger-9 success:      1
20537 DROP TRIGGER trg_2;
20538 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20539 f_int2 = CAST(f_char1 AS SIGNED INT),
20540 f_charbig = CONCAT('===',f_char1,'===');
20541 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20542 BEGIN
20543 SET new.f_int1 = new.f_int1 + @max_row,
20544 new.f_int2 = new.f_int2 - @max_row,
20545 new.f_charbig = '####updated per update trigger####';
20546 END|
20547 UPDATE t1
20548 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20549 f_charbig = '####updated per update statement itself####';
20550         
20551 # check trigger-10 success:     1
20552 DROP TRIGGER trg_2;
20553 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20554 f_int2 = CAST(f_char1 AS SIGNED INT),
20555 f_charbig = CONCAT('===',f_char1,'===');
20556 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20557 BEGIN
20558 SET new.f_int1 = @my_max1 + @counter,
20559 new.f_int2 = @my_min2 - @counter,
20560 new.f_charbig = '####updated per insert trigger####';
20561 SET @counter = @counter + 1;
20562 END|
20563 SET @counter = 1;
20564 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20565 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20566 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20567 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20569 ORDER BY f_int1;
20570 DROP TRIGGER trg_3;
20571         
20572 # check trigger-11 success:     1
20573 DELETE FROM t1
20574 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20575 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20576 AND f_charbig = '####updated per insert trigger####';
20577 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20578 BEGIN
20579 SET new.f_int1 = @my_max1 + @counter,
20580 new.f_int2 = @my_min2 - @counter,
20581 new.f_charbig = '####updated per insert trigger####';
20582 SET @counter = @counter + 1;
20583 END|
20584 SET @counter = 1;
20585 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20586 INSERT INTO t1 (f_char1, f_char2, f_charbig)
20587 SELECT CAST(f_int1 AS CHAR),
20588 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20590 ORDER BY f_int1;
20591 DROP TRIGGER trg_3;
20592         
20593 # check trigger-12 success:     1
20594 DELETE FROM t1
20595 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20596 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20597 AND f_charbig = '####updated per insert trigger####';
20598 ANALYZE  TABLE t1;
20599 Table   Op      Msg_type        Msg_text
20600 test.t1 analyze status  OK
20601 CHECK    TABLE t1 EXTENDED;
20602 Table   Op      Msg_type        Msg_text
20603 test.t1 check   status  OK
20604 CHECKSUM TABLE t1 EXTENDED;
20605 Table   Checksum
20606 test.t1 <some_value>
20607 OPTIMIZE TABLE t1;
20608 Table   Op      Msg_type        Msg_text
20609 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
20610 test.t1 optimize        status  OK
20611 # check layout success:    1
20612 REPAIR   TABLE t1 EXTENDED;
20613 Table   Op      Msg_type        Msg_text
20614 test.t1 repair  note    The storage engine for the table doesn't support repair
20615 # check layout success:    1
20616 TRUNCATE t1;
20617         
20618 # check TRUNCATE success:       1
20619 # check layout success:    1
20620 # End usability test (inc/partition_check.inc)
20621 DROP TABLE t1;
20622 CREATE TABLE t1 (
20623 f_int1 INTEGER,
20624 f_int2 INTEGER,
20625 f_char1 CHAR(20),
20626 f_char2 CHAR(20),
20627 f_charbig VARCHAR(1000)
20630 PARTITION BY KEY(f_int1) PARTITIONS 5;
20631 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20632 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
20633 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
20634 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
20635 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20636 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
20637 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
20638 # Start usability test (inc/partition_check.inc)
20639 create_command
20640 SHOW CREATE TABLE t1;
20641 Table   Create Table
20642 t1      CREATE TABLE `t1` (
20643   `f_int1` mediumint(9) DEFAULT NULL,
20644   `f_int2` mediumint(9) DEFAULT NULL,
20645   `f_char1` char(20) DEFAULT NULL,
20646   `f_char2` char(20) DEFAULT NULL,
20647   `f_charbig` varchar(1000) DEFAULT NULL
20648 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
20649 /*!50100 PARTITION BY KEY (f_int1)
20650 PARTITIONS 5 */
20652 # check prerequisites-1 success:    1
20653 # check COUNT(*) success:    1
20654 # check MIN/MAX(f_int1) success:    1
20655 # check MIN/MAX(f_int2) success:    1
20656 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20657 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20658 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20659 WHERE f_int1 IN (2,3);
20660 # check prerequisites-3 success:    1
20661 DELETE FROM t1 WHERE f_charbig = 'delete me';
20662 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
20663 # check read via f_int1 success: 1
20664 # check read via f_int2 success: 1
20665         
20666 # check multiple-1 success:     1
20667 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20668         
20669 # check multiple-2 success:     1
20670 INSERT INTO t1 SELECT * FROM t0_template
20671 WHERE MOD(f_int1,3) = 0;
20672         
20673 # check multiple-3 success:     1
20674 UPDATE t1 SET f_int1 = f_int1 + @max_row
20675 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20676 AND @max_row_div2 + @max_row_div4;
20677         
20678 # check multiple-4 success:     1
20679 DELETE FROM t1
20680 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20681 AND @max_row_div2 + @max_row_div4 + @max_row;
20682         
20683 # check multiple-5 success:     1
20684 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20685 INSERT INTO t1
20686 SET f_int1 = @cur_value , f_int2 = @cur_value,
20687 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20688 f_charbig = '#SINGLE#';
20689         
20690 # check single-1 success:       1
20691 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20692 INSERT INTO t1
20693 SET f_int1 = @cur_value , f_int2 = @cur_value,
20694 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20695 f_charbig = '#SINGLE#';
20696         
20697 # check single-2 success:       1
20698 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20699 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20700 UPDATE t1 SET f_int1 = @cur_value2
20701 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20702         
20703 # check single-3 success:       1
20704 SET @cur_value1= -1;
20705 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20706 UPDATE t1 SET f_int1 = @cur_value1
20707 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20708         
20709 # check single-4 success:       1
20710 SELECT MAX(f_int1) INTO @cur_value FROM t1;
20711 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20712         
20713 # check single-5 success:       1
20714 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20715         
20716 # check single-6 success:       1
20717 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20718 Warnings:
20719 Warning 1264    Out of range value for column 'f_int1' at row 1
20720 Warning 1264    Out of range value for column 'f_int2' at row 1
20721         
20722 # check single-7 success:       1
20723 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
20724 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20725 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20726 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20727 f_charbig = '#NULL#';
20728 INSERT INTO t1
20729 SET f_int1 = NULL , f_int2 = -@max_row,
20730 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20731 f_charbig = '#NULL#';
20732 # check null success:    1
20733         
20734 # check null-1 success:         1
20735 UPDATE t1 SET f_int1 = -@max_row
20736 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20737 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20738         
20739 # check null-2 success:         1
20740 UPDATE t1 SET f_int1 = NULL
20741 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20742 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20743         
20744 # check null-3 success:         1
20745 DELETE FROM t1
20746 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
20747 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
20748         
20749 # check null-4 success:         1
20750 DELETE FROM t1
20751 WHERE f_int1 = 0 AND f_int2 = 0
20752 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20753 AND f_charbig = '#NULL#';
20754 SET AUTOCOMMIT= 0;
20755 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20756 SELECT f_int1, f_int1, '', '', 'was inserted'
20757 FROM t0_template source_tab
20758 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20759         
20760 # check transactions-1 success:         1
20761 COMMIT WORK;
20762         
20763 # check transactions-2 success:         1
20764 ROLLBACK WORK;
20765         
20766 # check transactions-3 success:         1
20767 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20768 COMMIT WORK;
20769 ROLLBACK WORK;
20770         
20771 # check transactions-4 success:         1
20772 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20773 SELECT f_int1, f_int1, '', '', 'was inserted'
20774 FROM t0_template source_tab
20775 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20776         
20777 # check transactions-5 success:         1
20778 ROLLBACK WORK;
20779         
20780 # check transactions-6 success:         1
20781 # INFO: Storage engine used for t1 seems to be transactional.
20782 COMMIT;
20783         
20784 # check transactions-7 success:         1
20785 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20786 COMMIT WORK;
20787 SET @@session.sql_mode = 'traditional';
20788 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20789 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20790 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20791 '', '', 'was inserted' FROM t0_template
20792 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20793 ERROR 22012: Division by 0
20794 COMMIT;
20795         
20796 # check transactions-8 success:         1
20797 # INFO: Storage engine used for t1 seems to be able to revert
20798 #       changes made by the failing statement.
20799 SET @@session.sql_mode = '';
20800 SET AUTOCOMMIT= 1;
20801 DELETE FROM t1 WHERE f_charbig = 'was inserted';
20802 COMMIT WORK;
20803 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20804         
20805 # check special-1 success:      1
20806 UPDATE t1 SET f_charbig = '';
20807         
20808 # check special-2 success:      1
20809 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20810 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20811 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20812 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20813 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20814 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20815 'just inserted' FROM t0_template
20816 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20817 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20818 BEGIN
20819 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20820 f_charbig = 'updated by trigger'
20821       WHERE f_int1 = new.f_int1;
20822 END|
20823 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20824 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20825 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20826         
20827 # check trigger-1 success:      1
20828 DROP TRIGGER trg_1;
20829 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20830 f_int2 = CAST(f_char1 AS SIGNED INT),
20831 f_charbig = 'just inserted'
20832    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20833 DELETE FROM t0_aux
20834 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20835 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20836 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20837 'just inserted' FROM t0_template
20838 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20839 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20840 BEGIN
20841 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20842 f_charbig = 'updated by trigger'
20843       WHERE f_int1 = new.f_int1;
20844 END|
20845 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20846 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20847 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20848         
20849 # check trigger-2 success:      1
20850 DROP TRIGGER trg_1;
20851 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20852 f_int2 = CAST(f_char1 AS SIGNED INT),
20853 f_charbig = 'just inserted'
20854    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20855 DELETE FROM t0_aux
20856 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20857 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20858 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20859 'just inserted' FROM t0_template
20860 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20861 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20862 BEGIN
20863 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20864 f_charbig = 'updated by trigger'
20865       WHERE f_int1 = new.f_int1;
20866 END|
20867 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20868 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20869         
20870 # check trigger-3 success:      1
20871 DROP TRIGGER trg_1;
20872 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20873 f_int2 = CAST(f_char1 AS SIGNED INT),
20874 f_charbig = 'just inserted'
20875    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20876 DELETE FROM t0_aux
20877 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20878 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20879 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20880 'just inserted' FROM t0_template
20881 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20882 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20883 BEGIN
20884 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20885 f_charbig = 'updated by trigger'
20886       WHERE f_int1 = - old.f_int1;
20887 END|
20888 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20889 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20890         
20891 # check trigger-4 success:      1
20892 DROP TRIGGER trg_1;
20893 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20894 f_int2 = CAST(f_char1 AS SIGNED INT),
20895 f_charbig = 'just inserted'
20896    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20897 DELETE FROM t0_aux
20898 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20899 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20900 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20901 'just inserted' FROM t0_template
20902 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20903 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20904 BEGIN
20905 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20906 f_charbig = 'updated by trigger'
20907       WHERE f_int1 = new.f_int1;
20908 END|
20909 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20910 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20911         
20912 # check trigger-5 success:      1
20913 DROP TRIGGER trg_1;
20914 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20915 f_int2 = CAST(f_char1 AS SIGNED INT),
20916 f_charbig = 'just inserted'
20917    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20918 DELETE FROM t0_aux
20919 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20920 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20921 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20922 'just inserted' FROM t0_template
20923 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20924 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20925 BEGIN
20926 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20927 f_charbig = 'updated by trigger'
20928       WHERE f_int1 = - old.f_int1;
20929 END|
20930 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20931 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20932         
20933 # check trigger-6 success:      1
20934 DROP TRIGGER trg_1;
20935 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20936 f_int2 = CAST(f_char1 AS SIGNED INT),
20937 f_charbig = 'just inserted'
20938    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20939 DELETE FROM t0_aux
20940 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20941 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20942 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20943 'just inserted' FROM t0_template
20944 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20945 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20946 BEGIN
20947 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20948 f_charbig = 'updated by trigger'
20949       WHERE f_int1 = - old.f_int1;
20950 END|
20951 DELETE FROM t0_aux
20952 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20953         
20954 # check trigger-7 success:      1
20955 DROP TRIGGER trg_1;
20956 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20957 f_int2 = CAST(f_char1 AS SIGNED INT),
20958 f_charbig = 'just inserted'
20959    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20960 DELETE FROM t0_aux
20961 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20962 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20963 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20964 'just inserted' FROM t0_template
20965 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20966 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20967 BEGIN
20968 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20969 f_charbig = 'updated by trigger'
20970       WHERE f_int1 = - old.f_int1;
20971 END|
20972 DELETE FROM t0_aux
20973 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20974         
20975 # check trigger-8 success:      1
20976 DROP TRIGGER trg_1;
20977 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20978 f_int2 = CAST(f_char1 AS SIGNED INT),
20979 f_charbig = 'just inserted'
20980    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20981 DELETE FROM t0_aux
20982 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20983 DELETE FROM t1
20984 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20985 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20986 BEGIN
20987 SET new.f_int1 = old.f_int1 + @max_row,
20988 new.f_int2 = old.f_int2 - @max_row,
20989 new.f_charbig = '####updated per update trigger####';
20990 END|
20991 UPDATE t1
20992 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20993 f_charbig = '####updated per update statement itself####';
20994         
20995 # check trigger-9 success:      1
20996 DROP TRIGGER trg_2;
20997 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20998 f_int2 = CAST(f_char1 AS SIGNED INT),
20999 f_charbig = CONCAT('===',f_char1,'===');
21000 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21001 BEGIN
21002 SET new.f_int1 = new.f_int1 + @max_row,
21003 new.f_int2 = new.f_int2 - @max_row,
21004 new.f_charbig = '####updated per update trigger####';
21005 END|
21006 UPDATE t1
21007 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21008 f_charbig = '####updated per update statement itself####';
21009         
21010 # check trigger-10 success:     1
21011 DROP TRIGGER trg_2;
21012 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21013 f_int2 = CAST(f_char1 AS SIGNED INT),
21014 f_charbig = CONCAT('===',f_char1,'===');
21015 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21016 BEGIN
21017 SET new.f_int1 = @my_max1 + @counter,
21018 new.f_int2 = @my_min2 - @counter,
21019 new.f_charbig = '####updated per insert trigger####';
21020 SET @counter = @counter + 1;
21021 END|
21022 SET @counter = 1;
21023 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21024 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21025 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21026 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21027 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21028 ORDER BY f_int1;
21029 DROP TRIGGER trg_3;
21030         
21031 # check trigger-11 success:     1
21032 DELETE FROM t1
21033 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21034 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21035 AND f_charbig = '####updated per insert trigger####';
21036 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21037 BEGIN
21038 SET new.f_int1 = @my_max1 + @counter,
21039 new.f_int2 = @my_min2 - @counter,
21040 new.f_charbig = '####updated per insert trigger####';
21041 SET @counter = @counter + 1;
21042 END|
21043 SET @counter = 1;
21044 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21045 INSERT INTO t1 (f_char1, f_char2, f_charbig)
21046 SELECT CAST(f_int1 AS CHAR),
21047 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21048 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21049 ORDER BY f_int1;
21050 DROP TRIGGER trg_3;
21051         
21052 # check trigger-12 success:     1
21053 DELETE FROM t1
21054 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21055 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21056 AND f_charbig = '####updated per insert trigger####';
21057 ANALYZE  TABLE t1;
21058 Table   Op      Msg_type        Msg_text
21059 test.t1 analyze status  OK
21060 CHECK    TABLE t1 EXTENDED;
21061 Table   Op      Msg_type        Msg_text
21062 test.t1 check   status  OK
21063 CHECKSUM TABLE t1 EXTENDED;
21064 Table   Checksum
21065 test.t1 <some_value>
21066 OPTIMIZE TABLE t1;
21067 Table   Op      Msg_type        Msg_text
21068 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
21069 test.t1 optimize        status  OK
21070 # check layout success:    1
21071 REPAIR   TABLE t1 EXTENDED;
21072 Table   Op      Msg_type        Msg_text
21073 test.t1 repair  note    The storage engine for the table doesn't support repair
21074 # check layout success:    1
21075 TRUNCATE t1;
21076         
21077 # check TRUNCATE success:       1
21078 # check layout success:    1
21079 # End usability test (inc/partition_check.inc)
21080 DROP TABLE t1;
21081 CREATE TABLE t1 (
21082 f_int1 INTEGER,
21083 f_int2 INTEGER,
21084 f_char1 CHAR(20),
21085 f_char2 CHAR(20),
21086 f_charbig VARCHAR(1000)
21089 PARTITION BY LIST(MOD(f_int1,4))
21090 (PARTITION part_3 VALUES IN (-3),
21091 PARTITION part_2 VALUES IN (-2),
21092 PARTITION part_1 VALUES IN (-1),
21093 PARTITION part_N VALUES IN (NULL),
21094 PARTITION part0 VALUES IN (0),
21095 PARTITION part1 VALUES IN (1),
21096 PARTITION part2 VALUES IN (2),
21097 PARTITION part3 VALUES IN (3));
21098 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21099 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
21100 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
21101 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
21102 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21103 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
21104 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
21105 # Start usability test (inc/partition_check.inc)
21106 create_command
21107 SHOW CREATE TABLE t1;
21108 Table   Create Table
21109 t1      CREATE TABLE `t1` (
21110   `f_int1` mediumint(9) DEFAULT NULL,
21111   `f_int2` mediumint(9) DEFAULT NULL,
21112   `f_char1` char(20) DEFAULT NULL,
21113   `f_char2` char(20) DEFAULT NULL,
21114   `f_charbig` varchar(1000) DEFAULT NULL
21115 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
21116 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
21117 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
21118  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
21119  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
21120  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
21121  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
21122  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
21123  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
21124  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
21126 # check prerequisites-1 success:    1
21127 # check COUNT(*) success:    1
21128 # check MIN/MAX(f_int1) success:    1
21129 # check MIN/MAX(f_int2) success:    1
21130 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21131 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21132 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21133 WHERE f_int1 IN (2,3);
21134 # check prerequisites-3 success:    1
21135 DELETE FROM t1 WHERE f_charbig = 'delete me';
21136 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
21137 # check read via f_int1 success: 1
21138 # check read via f_int2 success: 1
21139         
21140 # check multiple-1 success:     1
21141 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21142         
21143 # check multiple-2 success:     1
21144 INSERT INTO t1 SELECT * FROM t0_template
21145 WHERE MOD(f_int1,3) = 0;
21146         
21147 # check multiple-3 success:     1
21148 UPDATE t1 SET f_int1 = f_int1 + @max_row
21149 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21150 AND @max_row_div2 + @max_row_div4;
21151         
21152 # check multiple-4 success:     1
21153 DELETE FROM t1
21154 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21155 AND @max_row_div2 + @max_row_div4 + @max_row;
21156         
21157 # check multiple-5 success:     1
21158 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21159 INSERT INTO t1
21160 SET f_int1 = @cur_value , f_int2 = @cur_value,
21161 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21162 f_charbig = '#SINGLE#';
21163         
21164 # check single-1 success:       1
21165 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21166 INSERT INTO t1
21167 SET f_int1 = @cur_value , f_int2 = @cur_value,
21168 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21169 f_charbig = '#SINGLE#';
21170         
21171 # check single-2 success:       1
21172 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21173 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21174 UPDATE t1 SET f_int1 = @cur_value2
21175 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21176         
21177 # check single-3 success:       1
21178 SET @cur_value1= -1;
21179 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21180 UPDATE t1 SET f_int1 = @cur_value1
21181 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21182         
21183 # check single-4 success:       1
21184 SELECT MAX(f_int1) INTO @cur_value FROM t1;
21185 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21186         
21187 # check single-5 success:       1
21188 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21189         
21190 # check single-6 success:       1
21191 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21192 Warnings:
21193 Warning 1264    Out of range value for column 'f_int1' at row 1
21194 Warning 1264    Out of range value for column 'f_int2' at row 1
21195         
21196 # check single-7 success:       1
21197 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
21198 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21199 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21200 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21201 f_charbig = '#NULL#';
21202 INSERT INTO t1
21203 SET f_int1 = NULL , f_int2 = -@max_row,
21204 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21205 f_charbig = '#NULL#';
21206 # check null success:    1
21207         
21208 # check null-1 success:         1
21209 UPDATE t1 SET f_int1 = -@max_row
21210 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21211 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21212         
21213 # check null-2 success:         1
21214 UPDATE t1 SET f_int1 = NULL
21215 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21216 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21217         
21218 # check null-3 success:         1
21219 DELETE FROM t1
21220 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21221 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21222         
21223 # check null-4 success:         1
21224 DELETE FROM t1
21225 WHERE f_int1 = 0 AND f_int2 = 0
21226 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21227 AND f_charbig = '#NULL#';
21228 SET AUTOCOMMIT= 0;
21229 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21230 SELECT f_int1, f_int1, '', '', 'was inserted'
21231 FROM t0_template source_tab
21232 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21233         
21234 # check transactions-1 success:         1
21235 COMMIT WORK;
21236         
21237 # check transactions-2 success:         1
21238 ROLLBACK WORK;
21239         
21240 # check transactions-3 success:         1
21241 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21242 COMMIT WORK;
21243 ROLLBACK WORK;
21244         
21245 # check transactions-4 success:         1
21246 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21247 SELECT f_int1, f_int1, '', '', 'was inserted'
21248 FROM t0_template source_tab
21249 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21250         
21251 # check transactions-5 success:         1
21252 ROLLBACK WORK;
21253         
21254 # check transactions-6 success:         1
21255 # INFO: Storage engine used for t1 seems to be transactional.
21256 COMMIT;
21257         
21258 # check transactions-7 success:         1
21259 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21260 COMMIT WORK;
21261 SET @@session.sql_mode = 'traditional';
21262 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21263 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21264 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21265 '', '', 'was inserted' FROM t0_template
21266 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21267 ERROR 22012: Division by 0
21268 COMMIT;
21269         
21270 # check transactions-8 success:         1
21271 # INFO: Storage engine used for t1 seems to be able to revert
21272 #       changes made by the failing statement.
21273 SET @@session.sql_mode = '';
21274 SET AUTOCOMMIT= 1;
21275 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21276 COMMIT WORK;
21277 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21278         
21279 # check special-1 success:      1
21280 UPDATE t1 SET f_charbig = '';
21281         
21282 # check special-2 success:      1
21283 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21284 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21285 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21286 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21287 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21288 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21289 'just inserted' FROM t0_template
21290 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21291 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21292 BEGIN
21293 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21294 f_charbig = 'updated by trigger'
21295       WHERE f_int1 = new.f_int1;
21296 END|
21297 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21298 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21299 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21300         
21301 # check trigger-1 success:      1
21302 DROP TRIGGER trg_1;
21303 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21304 f_int2 = CAST(f_char1 AS SIGNED INT),
21305 f_charbig = 'just inserted'
21306    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21307 DELETE FROM t0_aux
21308 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21309 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21310 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21311 'just inserted' FROM t0_template
21312 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21313 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21314 BEGIN
21315 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21316 f_charbig = 'updated by trigger'
21317       WHERE f_int1 = new.f_int1;
21318 END|
21319 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21320 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21321 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21322         
21323 # check trigger-2 success:      1
21324 DROP TRIGGER trg_1;
21325 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21326 f_int2 = CAST(f_char1 AS SIGNED INT),
21327 f_charbig = 'just inserted'
21328    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21329 DELETE FROM t0_aux
21330 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21331 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21332 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21333 'just inserted' FROM t0_template
21334 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21335 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21336 BEGIN
21337 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21338 f_charbig = 'updated by trigger'
21339       WHERE f_int1 = new.f_int1;
21340 END|
21341 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21342 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21343         
21344 # check trigger-3 success:      1
21345 DROP TRIGGER trg_1;
21346 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21347 f_int2 = CAST(f_char1 AS SIGNED INT),
21348 f_charbig = 'just inserted'
21349    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21350 DELETE FROM t0_aux
21351 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21352 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21353 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21354 'just inserted' FROM t0_template
21355 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21356 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21357 BEGIN
21358 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21359 f_charbig = 'updated by trigger'
21360       WHERE f_int1 = - old.f_int1;
21361 END|
21362 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21363 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21364         
21365 # check trigger-4 success:      1
21366 DROP TRIGGER trg_1;
21367 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21368 f_int2 = CAST(f_char1 AS SIGNED INT),
21369 f_charbig = 'just inserted'
21370    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21371 DELETE FROM t0_aux
21372 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21373 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21374 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21375 'just inserted' FROM t0_template
21376 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21377 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21378 BEGIN
21379 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21380 f_charbig = 'updated by trigger'
21381       WHERE f_int1 = new.f_int1;
21382 END|
21383 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21384 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21385         
21386 # check trigger-5 success:      1
21387 DROP TRIGGER trg_1;
21388 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21389 f_int2 = CAST(f_char1 AS SIGNED INT),
21390 f_charbig = 'just inserted'
21391    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21392 DELETE FROM t0_aux
21393 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21394 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21395 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21396 'just inserted' FROM t0_template
21397 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21398 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21399 BEGIN
21400 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21401 f_charbig = 'updated by trigger'
21402       WHERE f_int1 = - old.f_int1;
21403 END|
21404 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21405 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21406         
21407 # check trigger-6 success:      1
21408 DROP TRIGGER trg_1;
21409 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21410 f_int2 = CAST(f_char1 AS SIGNED INT),
21411 f_charbig = 'just inserted'
21412    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21413 DELETE FROM t0_aux
21414 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21415 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21416 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21417 'just inserted' FROM t0_template
21418 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21419 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21420 BEGIN
21421 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21422 f_charbig = 'updated by trigger'
21423       WHERE f_int1 = - old.f_int1;
21424 END|
21425 DELETE FROM t0_aux
21426 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21427         
21428 # check trigger-7 success:      1
21429 DROP TRIGGER trg_1;
21430 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21431 f_int2 = CAST(f_char1 AS SIGNED INT),
21432 f_charbig = 'just inserted'
21433    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21434 DELETE FROM t0_aux
21435 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21436 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21437 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21438 'just inserted' FROM t0_template
21439 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21440 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21441 BEGIN
21442 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21443 f_charbig = 'updated by trigger'
21444       WHERE f_int1 = - old.f_int1;
21445 END|
21446 DELETE FROM t0_aux
21447 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21448         
21449 # check trigger-8 success:      1
21450 DROP TRIGGER trg_1;
21451 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21452 f_int2 = CAST(f_char1 AS SIGNED INT),
21453 f_charbig = 'just inserted'
21454    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21455 DELETE FROM t0_aux
21456 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21457 DELETE FROM t1
21458 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21459 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21460 BEGIN
21461 SET new.f_int1 = old.f_int1 + @max_row,
21462 new.f_int2 = old.f_int2 - @max_row,
21463 new.f_charbig = '####updated per update trigger####';
21464 END|
21465 UPDATE t1
21466 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21467 f_charbig = '####updated per update statement itself####';
21468         
21469 # check trigger-9 success:      1
21470 DROP TRIGGER trg_2;
21471 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21472 f_int2 = CAST(f_char1 AS SIGNED INT),
21473 f_charbig = CONCAT('===',f_char1,'===');
21474 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21475 BEGIN
21476 SET new.f_int1 = new.f_int1 + @max_row,
21477 new.f_int2 = new.f_int2 - @max_row,
21478 new.f_charbig = '####updated per update trigger####';
21479 END|
21480 UPDATE t1
21481 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21482 f_charbig = '####updated per update statement itself####';
21483         
21484 # check trigger-10 success:     1
21485 DROP TRIGGER trg_2;
21486 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21487 f_int2 = CAST(f_char1 AS SIGNED INT),
21488 f_charbig = CONCAT('===',f_char1,'===');
21489 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21490 BEGIN
21491 SET new.f_int1 = @my_max1 + @counter,
21492 new.f_int2 = @my_min2 - @counter,
21493 new.f_charbig = '####updated per insert trigger####';
21494 SET @counter = @counter + 1;
21495 END|
21496 SET @counter = 1;
21497 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21498 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21499 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21500 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21501 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21502 ORDER BY f_int1;
21503 DROP TRIGGER trg_3;
21504         
21505 # check trigger-11 success:     1
21506 DELETE FROM t1
21507 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21508 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21509 AND f_charbig = '####updated per insert trigger####';
21510 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21511 BEGIN
21512 SET new.f_int1 = @my_max1 + @counter,
21513 new.f_int2 = @my_min2 - @counter,
21514 new.f_charbig = '####updated per insert trigger####';
21515 SET @counter = @counter + 1;
21516 END|
21517 SET @counter = 1;
21518 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21519 INSERT INTO t1 (f_char1, f_char2, f_charbig)
21520 SELECT CAST(f_int1 AS CHAR),
21521 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21522 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21523 ORDER BY f_int1;
21524 DROP TRIGGER trg_3;
21525         
21526 # check trigger-12 success:     1
21527 DELETE FROM t1
21528 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21529 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21530 AND f_charbig = '####updated per insert trigger####';
21531 ANALYZE  TABLE t1;
21532 Table   Op      Msg_type        Msg_text
21533 test.t1 analyze status  OK
21534 CHECK    TABLE t1 EXTENDED;
21535 Table   Op      Msg_type        Msg_text
21536 test.t1 check   status  OK
21537 CHECKSUM TABLE t1 EXTENDED;
21538 Table   Checksum
21539 test.t1 <some_value>
21540 OPTIMIZE TABLE t1;
21541 Table   Op      Msg_type        Msg_text
21542 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
21543 test.t1 optimize        status  OK
21544 # check layout success:    1
21545 REPAIR   TABLE t1 EXTENDED;
21546 Table   Op      Msg_type        Msg_text
21547 test.t1 repair  note    The storage engine for the table doesn't support repair
21548 # check layout success:    1
21549 TRUNCATE t1;
21550         
21551 # check TRUNCATE success:       1
21552 # check layout success:    1
21553 # End usability test (inc/partition_check.inc)
21554 DROP TABLE t1;
21555 CREATE TABLE t1 (
21556 f_int1 INTEGER,
21557 f_int2 INTEGER,
21558 f_char1 CHAR(20),
21559 f_char2 CHAR(20),
21560 f_charbig VARCHAR(1000)
21563 PARTITION BY RANGE(f_int1)
21564 (PARTITION parta VALUES LESS THAN (0),
21565 PARTITION partb VALUES LESS THAN (5),
21566 PARTITION partc VALUES LESS THAN (10),
21567 PARTITION partd VALUES LESS THAN (10 + 5),
21568 PARTITION parte VALUES LESS THAN (20),
21569 PARTITION partf VALUES LESS THAN (2147483646));
21570 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21571 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
21572 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
21573 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
21574 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21575 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
21576 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
21577 # Start usability test (inc/partition_check.inc)
21578 create_command
21579 SHOW CREATE TABLE t1;
21580 Table   Create Table
21581 t1      CREATE TABLE `t1` (
21582   `f_int1` mediumint(9) DEFAULT NULL,
21583   `f_int2` mediumint(9) DEFAULT NULL,
21584   `f_char1` char(20) DEFAULT NULL,
21585   `f_char2` char(20) DEFAULT NULL,
21586   `f_charbig` varchar(1000) DEFAULT NULL
21587 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
21588 /*!50100 PARTITION BY RANGE (f_int1)
21589 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
21590  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
21591  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
21592  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
21593  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
21594  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
21596 # check prerequisites-1 success:    1
21597 # check COUNT(*) success:    1
21598 # check MIN/MAX(f_int1) success:    1
21599 # check MIN/MAX(f_int2) success:    1
21600 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21601 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21602 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21603 WHERE f_int1 IN (2,3);
21604 # check prerequisites-3 success:    1
21605 DELETE FROM t1 WHERE f_charbig = 'delete me';
21606 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
21607 # check read via f_int1 success: 1
21608 # check read via f_int2 success: 1
21609         
21610 # check multiple-1 success:     1
21611 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21612         
21613 # check multiple-2 success:     1
21614 INSERT INTO t1 SELECT * FROM t0_template
21615 WHERE MOD(f_int1,3) = 0;
21616         
21617 # check multiple-3 success:     1
21618 UPDATE t1 SET f_int1 = f_int1 + @max_row
21619 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21620 AND @max_row_div2 + @max_row_div4;
21621         
21622 # check multiple-4 success:     1
21623 DELETE FROM t1
21624 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21625 AND @max_row_div2 + @max_row_div4 + @max_row;
21626         
21627 # check multiple-5 success:     1
21628 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21629 INSERT INTO t1
21630 SET f_int1 = @cur_value , f_int2 = @cur_value,
21631 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21632 f_charbig = '#SINGLE#';
21633         
21634 # check single-1 success:       1
21635 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21636 INSERT INTO t1
21637 SET f_int1 = @cur_value , f_int2 = @cur_value,
21638 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21639 f_charbig = '#SINGLE#';
21640         
21641 # check single-2 success:       1
21642 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21643 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21644 UPDATE t1 SET f_int1 = @cur_value2
21645 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21646         
21647 # check single-3 success:       1
21648 SET @cur_value1= -1;
21649 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21650 UPDATE t1 SET f_int1 = @cur_value1
21651 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21652         
21653 # check single-4 success:       1
21654 SELECT MAX(f_int1) INTO @cur_value FROM t1;
21655 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21656         
21657 # check single-5 success:       1
21658 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21659         
21660 # check single-6 success:       1
21661 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21662 Warnings:
21663 Warning 1264    Out of range value for column 'f_int1' at row 1
21664 Warning 1264    Out of range value for column 'f_int2' at row 1
21665         
21666 # check single-7 success:       1
21667 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
21668 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21669 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21670 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21671 f_charbig = '#NULL#';
21672 INSERT INTO t1
21673 SET f_int1 = NULL , f_int2 = -@max_row,
21674 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21675 f_charbig = '#NULL#';
21676 # check null success:    1
21677         
21678 # check null-1 success:         1
21679 UPDATE t1 SET f_int1 = -@max_row
21680 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21681 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21682         
21683 # check null-2 success:         1
21684 UPDATE t1 SET f_int1 = NULL
21685 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21686 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21687         
21688 # check null-3 success:         1
21689 DELETE FROM t1
21690 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
21691 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
21692         
21693 # check null-4 success:         1
21694 DELETE FROM t1
21695 WHERE f_int1 = 0 AND f_int2 = 0
21696 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21697 AND f_charbig = '#NULL#';
21698 SET AUTOCOMMIT= 0;
21699 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21700 SELECT f_int1, f_int1, '', '', 'was inserted'
21701 FROM t0_template source_tab
21702 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21703         
21704 # check transactions-1 success:         1
21705 COMMIT WORK;
21706         
21707 # check transactions-2 success:         1
21708 ROLLBACK WORK;
21709         
21710 # check transactions-3 success:         1
21711 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21712 COMMIT WORK;
21713 ROLLBACK WORK;
21714         
21715 # check transactions-4 success:         1
21716 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21717 SELECT f_int1, f_int1, '', '', 'was inserted'
21718 FROM t0_template source_tab
21719 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21720         
21721 # check transactions-5 success:         1
21722 ROLLBACK WORK;
21723         
21724 # check transactions-6 success:         1
21725 # INFO: Storage engine used for t1 seems to be transactional.
21726 COMMIT;
21727         
21728 # check transactions-7 success:         1
21729 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21730 COMMIT WORK;
21731 SET @@session.sql_mode = 'traditional';
21732 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21733 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21734 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21735 '', '', 'was inserted' FROM t0_template
21736 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21737 ERROR 22012: Division by 0
21738 COMMIT;
21739         
21740 # check transactions-8 success:         1
21741 # INFO: Storage engine used for t1 seems to be able to revert
21742 #       changes made by the failing statement.
21743 SET @@session.sql_mode = '';
21744 SET AUTOCOMMIT= 1;
21745 DELETE FROM t1 WHERE f_charbig = 'was inserted';
21746 COMMIT WORK;
21747 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21748         
21749 # check special-1 success:      1
21750 UPDATE t1 SET f_charbig = '';
21751         
21752 # check special-2 success:      1
21753 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21754 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21755 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21756 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21757 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21758 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21759 'just inserted' FROM t0_template
21760 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21761 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21762 BEGIN
21763 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21764 f_charbig = 'updated by trigger'
21765       WHERE f_int1 = new.f_int1;
21766 END|
21767 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21768 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21769 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21770         
21771 # check trigger-1 success:      1
21772 DROP TRIGGER trg_1;
21773 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21774 f_int2 = CAST(f_char1 AS SIGNED INT),
21775 f_charbig = 'just inserted'
21776    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21777 DELETE FROM t0_aux
21778 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21779 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21780 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21781 'just inserted' FROM t0_template
21782 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21783 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21784 BEGIN
21785 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21786 f_charbig = 'updated by trigger'
21787       WHERE f_int1 = new.f_int1;
21788 END|
21789 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21790 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21791 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21792         
21793 # check trigger-2 success:      1
21794 DROP TRIGGER trg_1;
21795 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21796 f_int2 = CAST(f_char1 AS SIGNED INT),
21797 f_charbig = 'just inserted'
21798    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21799 DELETE FROM t0_aux
21800 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21801 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21802 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21803 'just inserted' FROM t0_template
21804 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21805 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21806 BEGIN
21807 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21808 f_charbig = 'updated by trigger'
21809       WHERE f_int1 = new.f_int1;
21810 END|
21811 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21812 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21813         
21814 # check trigger-3 success:      1
21815 DROP TRIGGER trg_1;
21816 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21817 f_int2 = CAST(f_char1 AS SIGNED INT),
21818 f_charbig = 'just inserted'
21819    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21820 DELETE FROM t0_aux
21821 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21822 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21823 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21824 'just inserted' FROM t0_template
21825 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21826 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21827 BEGIN
21828 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21829 f_charbig = 'updated by trigger'
21830       WHERE f_int1 = - old.f_int1;
21831 END|
21832 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21833 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21834         
21835 # check trigger-4 success:      1
21836 DROP TRIGGER trg_1;
21837 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21838 f_int2 = CAST(f_char1 AS SIGNED INT),
21839 f_charbig = 'just inserted'
21840    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21841 DELETE FROM t0_aux
21842 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21843 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21844 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21845 'just inserted' FROM t0_template
21846 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21847 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21848 BEGIN
21849 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21850 f_charbig = 'updated by trigger'
21851       WHERE f_int1 = new.f_int1;
21852 END|
21853 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21854 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21855         
21856 # check trigger-5 success:      1
21857 DROP TRIGGER trg_1;
21858 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21859 f_int2 = CAST(f_char1 AS SIGNED INT),
21860 f_charbig = 'just inserted'
21861    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21862 DELETE FROM t0_aux
21863 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21864 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21865 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21866 'just inserted' FROM t0_template
21867 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21868 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21869 BEGIN
21870 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21871 f_charbig = 'updated by trigger'
21872       WHERE f_int1 = - old.f_int1;
21873 END|
21874 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21875 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21876         
21877 # check trigger-6 success:      1
21878 DROP TRIGGER trg_1;
21879 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21880 f_int2 = CAST(f_char1 AS SIGNED INT),
21881 f_charbig = 'just inserted'
21882    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21883 DELETE FROM t0_aux
21884 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21885 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21886 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21887 'just inserted' FROM t0_template
21888 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21889 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21890 BEGIN
21891 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21892 f_charbig = 'updated by trigger'
21893       WHERE f_int1 = - old.f_int1;
21894 END|
21895 DELETE FROM t0_aux
21896 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21897         
21898 # check trigger-7 success:      1
21899 DROP TRIGGER trg_1;
21900 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21901 f_int2 = CAST(f_char1 AS SIGNED INT),
21902 f_charbig = 'just inserted'
21903    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21904 DELETE FROM t0_aux
21905 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21906 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21907 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21908 'just inserted' FROM t0_template
21909 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21910 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21911 BEGIN
21912 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21913 f_charbig = 'updated by trigger'
21914       WHERE f_int1 = - old.f_int1;
21915 END|
21916 DELETE FROM t0_aux
21917 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21918         
21919 # check trigger-8 success:      1
21920 DROP TRIGGER trg_1;
21921 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21922 f_int2 = CAST(f_char1 AS SIGNED INT),
21923 f_charbig = 'just inserted'
21924    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21925 DELETE FROM t0_aux
21926 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21927 DELETE FROM t1
21928 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21929 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21930 BEGIN
21931 SET new.f_int1 = old.f_int1 + @max_row,
21932 new.f_int2 = old.f_int2 - @max_row,
21933 new.f_charbig = '####updated per update trigger####';
21934 END|
21935 UPDATE t1
21936 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21937 f_charbig = '####updated per update statement itself####';
21938         
21939 # check trigger-9 success:      1
21940 DROP TRIGGER trg_2;
21941 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21942 f_int2 = CAST(f_char1 AS SIGNED INT),
21943 f_charbig = CONCAT('===',f_char1,'===');
21944 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21945 BEGIN
21946 SET new.f_int1 = new.f_int1 + @max_row,
21947 new.f_int2 = new.f_int2 - @max_row,
21948 new.f_charbig = '####updated per update trigger####';
21949 END|
21950 UPDATE t1
21951 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21952 f_charbig = '####updated per update statement itself####';
21953         
21954 # check trigger-10 success:     1
21955 DROP TRIGGER trg_2;
21956 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21957 f_int2 = CAST(f_char1 AS SIGNED INT),
21958 f_charbig = CONCAT('===',f_char1,'===');
21959 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21960 BEGIN
21961 SET new.f_int1 = @my_max1 + @counter,
21962 new.f_int2 = @my_min2 - @counter,
21963 new.f_charbig = '####updated per insert trigger####';
21964 SET @counter = @counter + 1;
21965 END|
21966 SET @counter = 1;
21967 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21968 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21969 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21970 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21971 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21972 ORDER BY f_int1;
21973 DROP TRIGGER trg_3;
21974         
21975 # check trigger-11 success:     1
21976 DELETE FROM t1
21977 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21978 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21979 AND f_charbig = '####updated per insert trigger####';
21980 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21981 BEGIN
21982 SET new.f_int1 = @my_max1 + @counter,
21983 new.f_int2 = @my_min2 - @counter,
21984 new.f_charbig = '####updated per insert trigger####';
21985 SET @counter = @counter + 1;
21986 END|
21987 SET @counter = 1;
21988 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21989 INSERT INTO t1 (f_char1, f_char2, f_charbig)
21990 SELECT CAST(f_int1 AS CHAR),
21991 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21992 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21993 ORDER BY f_int1;
21994 DROP TRIGGER trg_3;
21995         
21996 # check trigger-12 success:     1
21997 DELETE FROM t1
21998 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21999 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22000 AND f_charbig = '####updated per insert trigger####';
22001 ANALYZE  TABLE t1;
22002 Table   Op      Msg_type        Msg_text
22003 test.t1 analyze status  OK
22004 CHECK    TABLE t1 EXTENDED;
22005 Table   Op      Msg_type        Msg_text
22006 test.t1 check   status  OK
22007 CHECKSUM TABLE t1 EXTENDED;
22008 Table   Checksum
22009 test.t1 <some_value>
22010 OPTIMIZE TABLE t1;
22011 Table   Op      Msg_type        Msg_text
22012 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
22013 test.t1 optimize        status  OK
22014 # check layout success:    1
22015 REPAIR   TABLE t1 EXTENDED;
22016 Table   Op      Msg_type        Msg_text
22017 test.t1 repair  note    The storage engine for the table doesn't support repair
22018 # check layout success:    1
22019 TRUNCATE t1;
22020         
22021 # check TRUNCATE success:       1
22022 # check layout success:    1
22023 # End usability test (inc/partition_check.inc)
22024 DROP TABLE t1;
22025 CREATE TABLE t1 (
22026 f_int1 INTEGER,
22027 f_int2 INTEGER,
22028 f_char1 CHAR(20),
22029 f_char2 CHAR(20),
22030 f_charbig VARCHAR(1000)
22033 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
22034 (PARTITION parta VALUES LESS THAN (0),
22035 PARTITION partb VALUES LESS THAN (5),
22036 PARTITION partc VALUES LESS THAN (10),
22037 PARTITION partd VALUES LESS THAN (2147483646));
22038 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22039 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22040 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
22041 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
22042 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22043 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22044 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
22045 # Start usability test (inc/partition_check.inc)
22046 create_command
22047 SHOW CREATE TABLE t1;
22048 Table   Create Table
22049 t1      CREATE TABLE `t1` (
22050   `f_int1` mediumint(9) DEFAULT NULL,
22051   `f_int2` mediumint(9) DEFAULT NULL,
22052   `f_char1` char(20) DEFAULT NULL,
22053   `f_char2` char(20) DEFAULT NULL,
22054   `f_charbig` varchar(1000) DEFAULT NULL
22055 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
22056 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
22057 SUBPARTITION BY HASH (f_int1)
22058 SUBPARTITIONS 2
22059 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
22060  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
22061  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
22062  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
22064 # check prerequisites-1 success:    1
22065 # check COUNT(*) success:    1
22066 # check MIN/MAX(f_int1) success:    1
22067 # check MIN/MAX(f_int2) success:    1
22068 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22069 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22070 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22071 WHERE f_int1 IN (2,3);
22072 # check prerequisites-3 success:    1
22073 DELETE FROM t1 WHERE f_charbig = 'delete me';
22074 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
22075 # check read via f_int1 success: 1
22076 # check read via f_int2 success: 1
22077         
22078 # check multiple-1 success:     1
22079 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22080         
22081 # check multiple-2 success:     1
22082 INSERT INTO t1 SELECT * FROM t0_template
22083 WHERE MOD(f_int1,3) = 0;
22084         
22085 # check multiple-3 success:     1
22086 UPDATE t1 SET f_int1 = f_int1 + @max_row
22087 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22088 AND @max_row_div2 + @max_row_div4;
22089         
22090 # check multiple-4 success:     1
22091 DELETE FROM t1
22092 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22093 AND @max_row_div2 + @max_row_div4 + @max_row;
22094         
22095 # check multiple-5 success:     1
22096 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22097 INSERT INTO t1
22098 SET f_int1 = @cur_value , f_int2 = @cur_value,
22099 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22100 f_charbig = '#SINGLE#';
22101         
22102 # check single-1 success:       1
22103 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22104 INSERT INTO t1
22105 SET f_int1 = @cur_value , f_int2 = @cur_value,
22106 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22107 f_charbig = '#SINGLE#';
22108         
22109 # check single-2 success:       1
22110 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22111 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22112 UPDATE t1 SET f_int1 = @cur_value2
22113 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22114         
22115 # check single-3 success:       1
22116 SET @cur_value1= -1;
22117 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22118 UPDATE t1 SET f_int1 = @cur_value1
22119 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22120         
22121 # check single-4 success:       1
22122 SELECT MAX(f_int1) INTO @cur_value FROM t1;
22123 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22124         
22125 # check single-5 success:       1
22126 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22127         
22128 # check single-6 success:       1
22129 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22130 Warnings:
22131 Warning 1264    Out of range value for column 'f_int1' at row 1
22132 Warning 1264    Out of range value for column 'f_int2' at row 1
22133         
22134 # check single-7 success:       1
22135 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
22136 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22137 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22138 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22139 f_charbig = '#NULL#';
22140 INSERT INTO t1
22141 SET f_int1 = NULL , f_int2 = -@max_row,
22142 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22143 f_charbig = '#NULL#';
22144 # check null success:    1
22145         
22146 # check null-1 success:         1
22147 UPDATE t1 SET f_int1 = -@max_row
22148 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22149 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22150         
22151 # check null-2 success:         1
22152 UPDATE t1 SET f_int1 = NULL
22153 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22154 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22155         
22156 # check null-3 success:         1
22157 DELETE FROM t1
22158 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22159 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22160         
22161 # check null-4 success:         1
22162 DELETE FROM t1
22163 WHERE f_int1 = 0 AND f_int2 = 0
22164 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22165 AND f_charbig = '#NULL#';
22166 SET AUTOCOMMIT= 0;
22167 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22168 SELECT f_int1, f_int1, '', '', 'was inserted'
22169 FROM t0_template source_tab
22170 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22171         
22172 # check transactions-1 success:         1
22173 COMMIT WORK;
22174         
22175 # check transactions-2 success:         1
22176 ROLLBACK WORK;
22177         
22178 # check transactions-3 success:         1
22179 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22180 COMMIT WORK;
22181 ROLLBACK WORK;
22182         
22183 # check transactions-4 success:         1
22184 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22185 SELECT f_int1, f_int1, '', '', 'was inserted'
22186 FROM t0_template source_tab
22187 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22188         
22189 # check transactions-5 success:         1
22190 ROLLBACK WORK;
22191         
22192 # check transactions-6 success:         1
22193 # INFO: Storage engine used for t1 seems to be transactional.
22194 COMMIT;
22195         
22196 # check transactions-7 success:         1
22197 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22198 COMMIT WORK;
22199 SET @@session.sql_mode = 'traditional';
22200 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22201 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22202 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22203 '', '', 'was inserted' FROM t0_template
22204 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22205 ERROR 22012: Division by 0
22206 COMMIT;
22207         
22208 # check transactions-8 success:         1
22209 # INFO: Storage engine used for t1 seems to be able to revert
22210 #       changes made by the failing statement.
22211 SET @@session.sql_mode = '';
22212 SET AUTOCOMMIT= 1;
22213 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22214 COMMIT WORK;
22215 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22216         
22217 # check special-1 success:      1
22218 UPDATE t1 SET f_charbig = '';
22219         
22220 # check special-2 success:      1
22221 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22222 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22223 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22224 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22225 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22226 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22227 'just inserted' FROM t0_template
22228 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22229 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22230 BEGIN
22231 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22232 f_charbig = 'updated by trigger'
22233       WHERE f_int1 = new.f_int1;
22234 END|
22235 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22236 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22237 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22238         
22239 # check trigger-1 success:      1
22240 DROP TRIGGER trg_1;
22241 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22242 f_int2 = CAST(f_char1 AS SIGNED INT),
22243 f_charbig = 'just inserted'
22244    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22245 DELETE FROM t0_aux
22246 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22247 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22248 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22249 'just inserted' FROM t0_template
22250 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22251 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22252 BEGIN
22253 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22254 f_charbig = 'updated by trigger'
22255       WHERE f_int1 = new.f_int1;
22256 END|
22257 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22258 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22259 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22260         
22261 # check trigger-2 success:      1
22262 DROP TRIGGER trg_1;
22263 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22264 f_int2 = CAST(f_char1 AS SIGNED INT),
22265 f_charbig = 'just inserted'
22266    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22267 DELETE FROM t0_aux
22268 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22269 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22270 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22271 'just inserted' FROM t0_template
22272 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22273 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22274 BEGIN
22275 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22276 f_charbig = 'updated by trigger'
22277       WHERE f_int1 = new.f_int1;
22278 END|
22279 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22280 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22281         
22282 # check trigger-3 success:      1
22283 DROP TRIGGER trg_1;
22284 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22285 f_int2 = CAST(f_char1 AS SIGNED INT),
22286 f_charbig = 'just inserted'
22287    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22288 DELETE FROM t0_aux
22289 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22290 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22291 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22292 'just inserted' FROM t0_template
22293 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22294 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22295 BEGIN
22296 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22297 f_charbig = 'updated by trigger'
22298       WHERE f_int1 = - old.f_int1;
22299 END|
22300 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22301 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22302         
22303 # check trigger-4 success:      1
22304 DROP TRIGGER trg_1;
22305 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22306 f_int2 = CAST(f_char1 AS SIGNED INT),
22307 f_charbig = 'just inserted'
22308    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22309 DELETE FROM t0_aux
22310 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22311 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22312 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22313 'just inserted' FROM t0_template
22314 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22315 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22316 BEGIN
22317 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22318 f_charbig = 'updated by trigger'
22319       WHERE f_int1 = new.f_int1;
22320 END|
22321 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22322 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22323         
22324 # check trigger-5 success:      1
22325 DROP TRIGGER trg_1;
22326 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22327 f_int2 = CAST(f_char1 AS SIGNED INT),
22328 f_charbig = 'just inserted'
22329    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22330 DELETE FROM t0_aux
22331 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22332 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22333 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22334 'just inserted' FROM t0_template
22335 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22336 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22337 BEGIN
22338 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22339 f_charbig = 'updated by trigger'
22340       WHERE f_int1 = - old.f_int1;
22341 END|
22342 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22343 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22344         
22345 # check trigger-6 success:      1
22346 DROP TRIGGER trg_1;
22347 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22348 f_int2 = CAST(f_char1 AS SIGNED INT),
22349 f_charbig = 'just inserted'
22350    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22351 DELETE FROM t0_aux
22352 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22353 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22354 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22355 'just inserted' FROM t0_template
22356 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22357 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
22358 BEGIN
22359 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22360 f_charbig = 'updated by trigger'
22361       WHERE f_int1 = - old.f_int1;
22362 END|
22363 DELETE FROM t0_aux
22364 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22365         
22366 # check trigger-7 success:      1
22367 DROP TRIGGER trg_1;
22368 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22369 f_int2 = CAST(f_char1 AS SIGNED INT),
22370 f_charbig = 'just inserted'
22371    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22372 DELETE FROM t0_aux
22373 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22374 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22375 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22376 'just inserted' FROM t0_template
22377 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22378 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
22379 BEGIN
22380 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22381 f_charbig = 'updated by trigger'
22382       WHERE f_int1 = - old.f_int1;
22383 END|
22384 DELETE FROM t0_aux
22385 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22386         
22387 # check trigger-8 success:      1
22388 DROP TRIGGER trg_1;
22389 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22390 f_int2 = CAST(f_char1 AS SIGNED INT),
22391 f_charbig = 'just inserted'
22392    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22393 DELETE FROM t0_aux
22394 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22395 DELETE FROM t1
22396 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22397 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22398 BEGIN
22399 SET new.f_int1 = old.f_int1 + @max_row,
22400 new.f_int2 = old.f_int2 - @max_row,
22401 new.f_charbig = '####updated per update trigger####';
22402 END|
22403 UPDATE t1
22404 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22405 f_charbig = '####updated per update statement itself####';
22406         
22407 # check trigger-9 success:      1
22408 DROP TRIGGER trg_2;
22409 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22410 f_int2 = CAST(f_char1 AS SIGNED INT),
22411 f_charbig = CONCAT('===',f_char1,'===');
22412 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22413 BEGIN
22414 SET new.f_int1 = new.f_int1 + @max_row,
22415 new.f_int2 = new.f_int2 - @max_row,
22416 new.f_charbig = '####updated per update trigger####';
22417 END|
22418 UPDATE t1
22419 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22420 f_charbig = '####updated per update statement itself####';
22421         
22422 # check trigger-10 success:     1
22423 DROP TRIGGER trg_2;
22424 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22425 f_int2 = CAST(f_char1 AS SIGNED INT),
22426 f_charbig = CONCAT('===',f_char1,'===');
22427 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22428 BEGIN
22429 SET new.f_int1 = @my_max1 + @counter,
22430 new.f_int2 = @my_min2 - @counter,
22431 new.f_charbig = '####updated per insert trigger####';
22432 SET @counter = @counter + 1;
22433 END|
22434 SET @counter = 1;
22435 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22436 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22437 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22438 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22439 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22440 ORDER BY f_int1;
22441 DROP TRIGGER trg_3;
22442         
22443 # check trigger-11 success:     1
22444 DELETE FROM t1
22445 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22446 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22447 AND f_charbig = '####updated per insert trigger####';
22448 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22449 BEGIN
22450 SET new.f_int1 = @my_max1 + @counter,
22451 new.f_int2 = @my_min2 - @counter,
22452 new.f_charbig = '####updated per insert trigger####';
22453 SET @counter = @counter + 1;
22454 END|
22455 SET @counter = 1;
22456 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22457 INSERT INTO t1 (f_char1, f_char2, f_charbig)
22458 SELECT CAST(f_int1 AS CHAR),
22459 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22460 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22461 ORDER BY f_int1;
22462 DROP TRIGGER trg_3;
22463         
22464 # check trigger-12 success:     1
22465 DELETE FROM t1
22466 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22467 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22468 AND f_charbig = '####updated per insert trigger####';
22469 ANALYZE  TABLE t1;
22470 Table   Op      Msg_type        Msg_text
22471 test.t1 analyze status  OK
22472 CHECK    TABLE t1 EXTENDED;
22473 Table   Op      Msg_type        Msg_text
22474 test.t1 check   status  OK
22475 CHECKSUM TABLE t1 EXTENDED;
22476 Table   Checksum
22477 test.t1 <some_value>
22478 OPTIMIZE TABLE t1;
22479 Table   Op      Msg_type        Msg_text
22480 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
22481 test.t1 optimize        status  OK
22482 # check layout success:    1
22483 REPAIR   TABLE t1 EXTENDED;
22484 Table   Op      Msg_type        Msg_text
22485 test.t1 repair  note    The storage engine for the table doesn't support repair
22486 # check layout success:    1
22487 TRUNCATE t1;
22488         
22489 # check TRUNCATE success:       1
22490 # check layout success:    1
22491 # End usability test (inc/partition_check.inc)
22492 DROP TABLE t1;
22493 CREATE TABLE t1 (
22494 f_int1 INTEGER,
22495 f_int2 INTEGER,
22496 f_char1 CHAR(20),
22497 f_char2 CHAR(20),
22498 f_charbig VARCHAR(1000)
22501 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
22502 (PARTITION part1 VALUES LESS THAN (0)
22503 (SUBPARTITION subpart11, SUBPARTITION subpart12),
22504 PARTITION part2 VALUES LESS THAN (5)
22505 (SUBPARTITION subpart21, SUBPARTITION subpart22),
22506 PARTITION part3 VALUES LESS THAN (10)
22507 (SUBPARTITION subpart31, SUBPARTITION subpart32),
22508 PARTITION part4 VALUES LESS THAN (2147483646)
22509 (SUBPARTITION subpart41, SUBPARTITION subpart42));
22510 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22511 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22512 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
22513 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
22514 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22515 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22516 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
22517 # Start usability test (inc/partition_check.inc)
22518 create_command
22519 SHOW CREATE TABLE t1;
22520 Table   Create Table
22521 t1      CREATE TABLE `t1` (
22522   `f_int1` mediumint(9) DEFAULT NULL,
22523   `f_int2` mediumint(9) DEFAULT NULL,
22524   `f_char1` char(20) DEFAULT NULL,
22525   `f_char2` char(20) DEFAULT NULL,
22526   `f_charbig` varchar(1000) DEFAULT NULL
22527 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
22528 /*!50100 PARTITION BY RANGE (f_int1)
22529 SUBPARTITION BY KEY (f_int1)
22530 (PARTITION part1 VALUES LESS THAN (0)
22531  (SUBPARTITION subpart11 ENGINE = InnoDB,
22532   SUBPARTITION subpart12 ENGINE = InnoDB),
22533  PARTITION part2 VALUES LESS THAN (5)
22534  (SUBPARTITION subpart21 ENGINE = InnoDB,
22535   SUBPARTITION subpart22 ENGINE = InnoDB),
22536  PARTITION part3 VALUES LESS THAN (10)
22537  (SUBPARTITION subpart31 ENGINE = InnoDB,
22538   SUBPARTITION subpart32 ENGINE = InnoDB),
22539  PARTITION part4 VALUES LESS THAN (2147483646)
22540  (SUBPARTITION subpart41 ENGINE = InnoDB,
22541   SUBPARTITION subpart42 ENGINE = InnoDB)) */
22543 # check prerequisites-1 success:    1
22544 # check COUNT(*) success:    1
22545 # check MIN/MAX(f_int1) success:    1
22546 # check MIN/MAX(f_int2) success:    1
22547 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22548 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22549 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22550 WHERE f_int1 IN (2,3);
22551 # check prerequisites-3 success:    1
22552 DELETE FROM t1 WHERE f_charbig = 'delete me';
22553 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
22554 # check read via f_int1 success: 1
22555 # check read via f_int2 success: 1
22556         
22557 # check multiple-1 success:     1
22558 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22559         
22560 # check multiple-2 success:     1
22561 INSERT INTO t1 SELECT * FROM t0_template
22562 WHERE MOD(f_int1,3) = 0;
22563         
22564 # check multiple-3 success:     1
22565 UPDATE t1 SET f_int1 = f_int1 + @max_row
22566 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22567 AND @max_row_div2 + @max_row_div4;
22568         
22569 # check multiple-4 success:     1
22570 DELETE FROM t1
22571 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22572 AND @max_row_div2 + @max_row_div4 + @max_row;
22573         
22574 # check multiple-5 success:     1
22575 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22576 INSERT INTO t1
22577 SET f_int1 = @cur_value , f_int2 = @cur_value,
22578 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22579 f_charbig = '#SINGLE#';
22580         
22581 # check single-1 success:       1
22582 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22583 INSERT INTO t1
22584 SET f_int1 = @cur_value , f_int2 = @cur_value,
22585 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22586 f_charbig = '#SINGLE#';
22587         
22588 # check single-2 success:       1
22589 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22590 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22591 UPDATE t1 SET f_int1 = @cur_value2
22592 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22593         
22594 # check single-3 success:       1
22595 SET @cur_value1= -1;
22596 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22597 UPDATE t1 SET f_int1 = @cur_value1
22598 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22599         
22600 # check single-4 success:       1
22601 SELECT MAX(f_int1) INTO @cur_value FROM t1;
22602 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22603         
22604 # check single-5 success:       1
22605 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22606         
22607 # check single-6 success:       1
22608 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22609 Warnings:
22610 Warning 1264    Out of range value for column 'f_int1' at row 1
22611 Warning 1264    Out of range value for column 'f_int2' at row 1
22612         
22613 # check single-7 success:       1
22614 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
22615 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22616 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22617 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22618 f_charbig = '#NULL#';
22619 INSERT INTO t1
22620 SET f_int1 = NULL , f_int2 = -@max_row,
22621 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22622 f_charbig = '#NULL#';
22623 # check null success:    1
22624         
22625 # check null-1 success:         1
22626 UPDATE t1 SET f_int1 = -@max_row
22627 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22628 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22629         
22630 # check null-2 success:         1
22631 UPDATE t1 SET f_int1 = NULL
22632 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22633 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22634         
22635 # check null-3 success:         1
22636 DELETE FROM t1
22637 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
22638 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
22639         
22640 # check null-4 success:         1
22641 DELETE FROM t1
22642 WHERE f_int1 = 0 AND f_int2 = 0
22643 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22644 AND f_charbig = '#NULL#';
22645 SET AUTOCOMMIT= 0;
22646 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22647 SELECT f_int1, f_int1, '', '', 'was inserted'
22648 FROM t0_template source_tab
22649 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22650         
22651 # check transactions-1 success:         1
22652 COMMIT WORK;
22653         
22654 # check transactions-2 success:         1
22655 ROLLBACK WORK;
22656         
22657 # check transactions-3 success:         1
22658 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22659 COMMIT WORK;
22660 ROLLBACK WORK;
22661         
22662 # check transactions-4 success:         1
22663 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22664 SELECT f_int1, f_int1, '', '', 'was inserted'
22665 FROM t0_template source_tab
22666 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22667         
22668 # check transactions-5 success:         1
22669 ROLLBACK WORK;
22670         
22671 # check transactions-6 success:         1
22672 # INFO: Storage engine used for t1 seems to be transactional.
22673 COMMIT;
22674         
22675 # check transactions-7 success:         1
22676 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22677 COMMIT WORK;
22678 SET @@session.sql_mode = 'traditional';
22679 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22680 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22681 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22682 '', '', 'was inserted' FROM t0_template
22683 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22684 ERROR 22012: Division by 0
22685 COMMIT;
22686         
22687 # check transactions-8 success:         1
22688 # INFO: Storage engine used for t1 seems to be able to revert
22689 #       changes made by the failing statement.
22690 SET @@session.sql_mode = '';
22691 SET AUTOCOMMIT= 1;
22692 DELETE FROM t1 WHERE f_charbig = 'was inserted';
22693 COMMIT WORK;
22694 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22695         
22696 # check special-1 success:      1
22697 UPDATE t1 SET f_charbig = '';
22698         
22699 # check special-2 success:      1
22700 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22701 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22702 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22703 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22704 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22705 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22706 'just inserted' FROM t0_template
22707 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22708 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22709 BEGIN
22710 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22711 f_charbig = 'updated by trigger'
22712       WHERE f_int1 = new.f_int1;
22713 END|
22714 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22715 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22716 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22717         
22718 # check trigger-1 success:      1
22719 DROP TRIGGER trg_1;
22720 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22721 f_int2 = CAST(f_char1 AS SIGNED INT),
22722 f_charbig = 'just inserted'
22723    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22724 DELETE FROM t0_aux
22725 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22726 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22727 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22728 'just inserted' FROM t0_template
22729 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22730 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22731 BEGIN
22732 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22733 f_charbig = 'updated by trigger'
22734       WHERE f_int1 = new.f_int1;
22735 END|
22736 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22737 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22738 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22739         
22740 # check trigger-2 success:      1
22741 DROP TRIGGER trg_1;
22742 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22743 f_int2 = CAST(f_char1 AS SIGNED INT),
22744 f_charbig = 'just inserted'
22745    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22746 DELETE FROM t0_aux
22747 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22748 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22749 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22750 'just inserted' FROM t0_template
22751 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22752 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22753 BEGIN
22754 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22755 f_charbig = 'updated by trigger'
22756       WHERE f_int1 = new.f_int1;
22757 END|
22758 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22759 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22760         
22761 # check trigger-3 success:      1
22762 DROP TRIGGER trg_1;
22763 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22764 f_int2 = CAST(f_char1 AS SIGNED INT),
22765 f_charbig = 'just inserted'
22766    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22767 DELETE FROM t0_aux
22768 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22769 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22770 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22771 'just inserted' FROM t0_template
22772 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22773 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22774 BEGIN
22775 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22776 f_charbig = 'updated by trigger'
22777       WHERE f_int1 = - old.f_int1;
22778 END|
22779 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22780 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22781         
22782 # check trigger-4 success:      1
22783 DROP TRIGGER trg_1;
22784 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22785 f_int2 = CAST(f_char1 AS SIGNED INT),
22786 f_charbig = 'just inserted'
22787    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22788 DELETE FROM t0_aux
22789 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22790 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22791 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22792 'just inserted' FROM t0_template
22793 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22794 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22795 BEGIN
22796 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22797 f_charbig = 'updated by trigger'
22798       WHERE f_int1 = new.f_int1;
22799 END|
22800 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22801 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22802         
22803 # check trigger-5 success:      1
22804 DROP TRIGGER trg_1;
22805 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22806 f_int2 = CAST(f_char1 AS SIGNED INT),
22807 f_charbig = 'just inserted'
22808    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22809 DELETE FROM t0_aux
22810 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22811 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22812 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22813 'just inserted' FROM t0_template
22814 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22815 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22816 BEGIN
22817 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22818 f_charbig = 'updated by trigger'
22819       WHERE f_int1 = - old.f_int1;
22820 END|
22821 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22822 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22823         
22824 # check trigger-6 success:      1
22825 DROP TRIGGER trg_1;
22826 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22827 f_int2 = CAST(f_char1 AS SIGNED INT),
22828 f_charbig = 'just inserted'
22829    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22830 DELETE FROM t0_aux
22831 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22832 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22833 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22834 'just inserted' FROM t0_template
22835 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22836 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
22837 BEGIN
22838 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22839 f_charbig = 'updated by trigger'
22840       WHERE f_int1 = - old.f_int1;
22841 END|
22842 DELETE FROM t0_aux
22843 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22844         
22845 # check trigger-7 success:      1
22846 DROP TRIGGER trg_1;
22847 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22848 f_int2 = CAST(f_char1 AS SIGNED INT),
22849 f_charbig = 'just inserted'
22850    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22851 DELETE FROM t0_aux
22852 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22853 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22854 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22855 'just inserted' FROM t0_template
22856 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22857 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
22858 BEGIN
22859 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22860 f_charbig = 'updated by trigger'
22861       WHERE f_int1 = - old.f_int1;
22862 END|
22863 DELETE FROM t0_aux
22864 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22865         
22866 # check trigger-8 success:      1
22867 DROP TRIGGER trg_1;
22868 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22869 f_int2 = CAST(f_char1 AS SIGNED INT),
22870 f_charbig = 'just inserted'
22871    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22872 DELETE FROM t0_aux
22873 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22874 DELETE FROM t1
22875 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22876 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22877 BEGIN
22878 SET new.f_int1 = old.f_int1 + @max_row,
22879 new.f_int2 = old.f_int2 - @max_row,
22880 new.f_charbig = '####updated per update trigger####';
22881 END|
22882 UPDATE t1
22883 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22884 f_charbig = '####updated per update statement itself####';
22885         
22886 # check trigger-9 success:      1
22887 DROP TRIGGER trg_2;
22888 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22889 f_int2 = CAST(f_char1 AS SIGNED INT),
22890 f_charbig = CONCAT('===',f_char1,'===');
22891 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22892 BEGIN
22893 SET new.f_int1 = new.f_int1 + @max_row,
22894 new.f_int2 = new.f_int2 - @max_row,
22895 new.f_charbig = '####updated per update trigger####';
22896 END|
22897 UPDATE t1
22898 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22899 f_charbig = '####updated per update statement itself####';
22900         
22901 # check trigger-10 success:     1
22902 DROP TRIGGER trg_2;
22903 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22904 f_int2 = CAST(f_char1 AS SIGNED INT),
22905 f_charbig = CONCAT('===',f_char1,'===');
22906 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22907 BEGIN
22908 SET new.f_int1 = @my_max1 + @counter,
22909 new.f_int2 = @my_min2 - @counter,
22910 new.f_charbig = '####updated per insert trigger####';
22911 SET @counter = @counter + 1;
22912 END|
22913 SET @counter = 1;
22914 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22915 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22916 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22917 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22918 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22919 ORDER BY f_int1;
22920 DROP TRIGGER trg_3;
22921         
22922 # check trigger-11 success:     1
22923 DELETE FROM t1
22924 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22925 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22926 AND f_charbig = '####updated per insert trigger####';
22927 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22928 BEGIN
22929 SET new.f_int1 = @my_max1 + @counter,
22930 new.f_int2 = @my_min2 - @counter,
22931 new.f_charbig = '####updated per insert trigger####';
22932 SET @counter = @counter + 1;
22933 END|
22934 SET @counter = 1;
22935 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22936 INSERT INTO t1 (f_char1, f_char2, f_charbig)
22937 SELECT CAST(f_int1 AS CHAR),
22938 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22939 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22940 ORDER BY f_int1;
22941 DROP TRIGGER trg_3;
22942         
22943 # check trigger-12 success:     1
22944 DELETE FROM t1
22945 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22946 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22947 AND f_charbig = '####updated per insert trigger####';
22948 ANALYZE  TABLE t1;
22949 Table   Op      Msg_type        Msg_text
22950 test.t1 analyze status  OK
22951 CHECK    TABLE t1 EXTENDED;
22952 Table   Op      Msg_type        Msg_text
22953 test.t1 check   status  OK
22954 CHECKSUM TABLE t1 EXTENDED;
22955 Table   Checksum
22956 test.t1 <some_value>
22957 OPTIMIZE TABLE t1;
22958 Table   Op      Msg_type        Msg_text
22959 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
22960 test.t1 optimize        status  OK
22961 # check layout success:    1
22962 REPAIR   TABLE t1 EXTENDED;
22963 Table   Op      Msg_type        Msg_text
22964 test.t1 repair  note    The storage engine for the table doesn't support repair
22965 # check layout success:    1
22966 TRUNCATE t1;
22967         
22968 # check TRUNCATE success:       1
22969 # check layout success:    1
22970 # End usability test (inc/partition_check.inc)
22971 DROP TABLE t1;
22972 CREATE TABLE t1 (
22973 f_int1 INTEGER,
22974 f_int2 INTEGER,
22975 f_char1 CHAR(20),
22976 f_char2 CHAR(20),
22977 f_charbig VARCHAR(1000)
22980 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
22981 (PARTITION part1 VALUES IN (0)
22982 (SUBPARTITION sp11, SUBPARTITION sp12),
22983 PARTITION part2 VALUES IN (1)
22984 (SUBPARTITION sp21, SUBPARTITION sp22),
22985 PARTITION part3 VALUES IN (2)
22986 (SUBPARTITION sp31, SUBPARTITION sp32),
22987 PARTITION part4 VALUES IN (NULL)
22988 (SUBPARTITION sp41, SUBPARTITION sp42));
22989 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22990 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22991 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
22992 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
22993 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22994 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
22995 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
22996 # Start usability test (inc/partition_check.inc)
22997 create_command
22998 SHOW CREATE TABLE t1;
22999 Table   Create Table
23000 t1      CREATE TABLE `t1` (
23001   `f_int1` mediumint(9) DEFAULT NULL,
23002   `f_int2` mediumint(9) DEFAULT NULL,
23003   `f_char1` char(20) DEFAULT NULL,
23004   `f_char2` char(20) DEFAULT NULL,
23005   `f_charbig` varchar(1000) DEFAULT NULL
23006 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
23007 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
23008 SUBPARTITION BY HASH (f_int1 + 1)
23009 (PARTITION part1 VALUES IN (0)
23010  (SUBPARTITION sp11 ENGINE = InnoDB,
23011   SUBPARTITION sp12 ENGINE = InnoDB),
23012  PARTITION part2 VALUES IN (1)
23013  (SUBPARTITION sp21 ENGINE = InnoDB,
23014   SUBPARTITION sp22 ENGINE = InnoDB),
23015  PARTITION part3 VALUES IN (2)
23016  (SUBPARTITION sp31 ENGINE = InnoDB,
23017   SUBPARTITION sp32 ENGINE = InnoDB),
23018  PARTITION part4 VALUES IN (NULL)
23019  (SUBPARTITION sp41 ENGINE = InnoDB,
23020   SUBPARTITION sp42 ENGINE = InnoDB)) */
23022 # check prerequisites-1 success:    1
23023 # check COUNT(*) success:    1
23024 # check MIN/MAX(f_int1) success:    1
23025 # check MIN/MAX(f_int2) success:    1
23026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23027 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23028 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23029 WHERE f_int1 IN (2,3);
23030 # check prerequisites-3 success:    1
23031 DELETE FROM t1 WHERE f_charbig = 'delete me';
23032 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
23033 # check read via f_int1 success: 1
23034 # check read via f_int2 success: 1
23035         
23036 # check multiple-1 success:     1
23037 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23038         
23039 # check multiple-2 success:     1
23040 INSERT INTO t1 SELECT * FROM t0_template
23041 WHERE MOD(f_int1,3) = 0;
23042         
23043 # check multiple-3 success:     1
23044 UPDATE t1 SET f_int1 = f_int1 + @max_row
23045 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23046 AND @max_row_div2 + @max_row_div4;
23047         
23048 # check multiple-4 success:     1
23049 DELETE FROM t1
23050 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23051 AND @max_row_div2 + @max_row_div4 + @max_row;
23052         
23053 # check multiple-5 success:     1
23054 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23055 INSERT INTO t1
23056 SET f_int1 = @cur_value , f_int2 = @cur_value,
23057 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23058 f_charbig = '#SINGLE#';
23059         
23060 # check single-1 success:       1
23061 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23062 INSERT INTO t1
23063 SET f_int1 = @cur_value , f_int2 = @cur_value,
23064 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23065 f_charbig = '#SINGLE#';
23066         
23067 # check single-2 success:       1
23068 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23069 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23070 UPDATE t1 SET f_int1 = @cur_value2
23071 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23072         
23073 # check single-3 success:       1
23074 SET @cur_value1= -1;
23075 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23076 UPDATE t1 SET f_int1 = @cur_value1
23077 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23078         
23079 # check single-4 success:       1
23080 SELECT MAX(f_int1) INTO @cur_value FROM t1;
23081 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23082         
23083 # check single-5 success:       1
23084 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23085         
23086 # check single-6 success:       1
23087 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23088 Warnings:
23089 Warning 1264    Out of range value for column 'f_int1' at row 1
23090 Warning 1264    Out of range value for column 'f_int2' at row 1
23091         
23092 # check single-7 success:       1
23093 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23094 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23095 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23096 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23097 f_charbig = '#NULL#';
23098 INSERT INTO t1
23099 SET f_int1 = NULL , f_int2 = -@max_row,
23100 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23101 f_charbig = '#NULL#';
23102 # check null success:    1
23103         
23104 # check null-1 success:         1
23105 UPDATE t1 SET f_int1 = -@max_row
23106 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23107 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23108         
23109 # check null-2 success:         1
23110 UPDATE t1 SET f_int1 = NULL
23111 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23112 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23113         
23114 # check null-3 success:         1
23115 DELETE FROM t1
23116 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23117 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23118         
23119 # check null-4 success:         1
23120 DELETE FROM t1
23121 WHERE f_int1 = 0 AND f_int2 = 0
23122 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23123 AND f_charbig = '#NULL#';
23124 SET AUTOCOMMIT= 0;
23125 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23126 SELECT f_int1, f_int1, '', '', 'was inserted'
23127 FROM t0_template source_tab
23128 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23129         
23130 # check transactions-1 success:         1
23131 COMMIT WORK;
23132         
23133 # check transactions-2 success:         1
23134 ROLLBACK WORK;
23135         
23136 # check transactions-3 success:         1
23137 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23138 COMMIT WORK;
23139 ROLLBACK WORK;
23140         
23141 # check transactions-4 success:         1
23142 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23143 SELECT f_int1, f_int1, '', '', 'was inserted'
23144 FROM t0_template source_tab
23145 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23146         
23147 # check transactions-5 success:         1
23148 ROLLBACK WORK;
23149         
23150 # check transactions-6 success:         1
23151 # INFO: Storage engine used for t1 seems to be transactional.
23152 COMMIT;
23153         
23154 # check transactions-7 success:         1
23155 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23156 COMMIT WORK;
23157 SET @@session.sql_mode = 'traditional';
23158 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23159 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23160 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23161 '', '', 'was inserted' FROM t0_template
23162 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23163 ERROR 22012: Division by 0
23164 COMMIT;
23165         
23166 # check transactions-8 success:         1
23167 # INFO: Storage engine used for t1 seems to be able to revert
23168 #       changes made by the failing statement.
23169 SET @@session.sql_mode = '';
23170 SET AUTOCOMMIT= 1;
23171 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23172 COMMIT WORK;
23173 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23174         
23175 # check special-1 success:      1
23176 UPDATE t1 SET f_charbig = '';
23177         
23178 # check special-2 success:      1
23179 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23180 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23181 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23182 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23183 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23184 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23185 'just inserted' FROM t0_template
23186 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23187 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23188 BEGIN
23189 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23190 f_charbig = 'updated by trigger'
23191       WHERE f_int1 = new.f_int1;
23192 END|
23193 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23194 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23195 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23196         
23197 # check trigger-1 success:      1
23198 DROP TRIGGER trg_1;
23199 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23200 f_int2 = CAST(f_char1 AS SIGNED INT),
23201 f_charbig = 'just inserted'
23202    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23203 DELETE FROM t0_aux
23204 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23205 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23206 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23207 'just inserted' FROM t0_template
23208 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23209 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23210 BEGIN
23211 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23212 f_charbig = 'updated by trigger'
23213       WHERE f_int1 = new.f_int1;
23214 END|
23215 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23216 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23217 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23218         
23219 # check trigger-2 success:      1
23220 DROP TRIGGER trg_1;
23221 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23222 f_int2 = CAST(f_char1 AS SIGNED INT),
23223 f_charbig = 'just inserted'
23224    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23225 DELETE FROM t0_aux
23226 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23227 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23228 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23229 'just inserted' FROM t0_template
23230 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23231 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23232 BEGIN
23233 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23234 f_charbig = 'updated by trigger'
23235       WHERE f_int1 = new.f_int1;
23236 END|
23237 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23238 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23239         
23240 # check trigger-3 success:      1
23241 DROP TRIGGER trg_1;
23242 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23243 f_int2 = CAST(f_char1 AS SIGNED INT),
23244 f_charbig = 'just inserted'
23245    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23246 DELETE FROM t0_aux
23247 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23248 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23249 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23250 'just inserted' FROM t0_template
23251 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23252 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23253 BEGIN
23254 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23255 f_charbig = 'updated by trigger'
23256       WHERE f_int1 = - old.f_int1;
23257 END|
23258 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23259 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23260         
23261 # check trigger-4 success:      1
23262 DROP TRIGGER trg_1;
23263 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23264 f_int2 = CAST(f_char1 AS SIGNED INT),
23265 f_charbig = 'just inserted'
23266    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23267 DELETE FROM t0_aux
23268 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23269 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23270 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23271 'just inserted' FROM t0_template
23272 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23273 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23274 BEGIN
23275 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23276 f_charbig = 'updated by trigger'
23277       WHERE f_int1 = new.f_int1;
23278 END|
23279 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23280 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23281         
23282 # check trigger-5 success:      1
23283 DROP TRIGGER trg_1;
23284 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23285 f_int2 = CAST(f_char1 AS SIGNED INT),
23286 f_charbig = 'just inserted'
23287    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23288 DELETE FROM t0_aux
23289 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23290 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23291 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23292 'just inserted' FROM t0_template
23293 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23294 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23295 BEGIN
23296 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23297 f_charbig = 'updated by trigger'
23298       WHERE f_int1 = - old.f_int1;
23299 END|
23300 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23301 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23302         
23303 # check trigger-6 success:      1
23304 DROP TRIGGER trg_1;
23305 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23306 f_int2 = CAST(f_char1 AS SIGNED INT),
23307 f_charbig = 'just inserted'
23308    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23309 DELETE FROM t0_aux
23310 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23311 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23312 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23313 'just inserted' FROM t0_template
23314 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23315 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23316 BEGIN
23317 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23318 f_charbig = 'updated by trigger'
23319       WHERE f_int1 = - old.f_int1;
23320 END|
23321 DELETE FROM t0_aux
23322 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23323         
23324 # check trigger-7 success:      1
23325 DROP TRIGGER trg_1;
23326 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23327 f_int2 = CAST(f_char1 AS SIGNED INT),
23328 f_charbig = 'just inserted'
23329    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23330 DELETE FROM t0_aux
23331 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23332 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23333 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23334 'just inserted' FROM t0_template
23335 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23336 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23337 BEGIN
23338 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23339 f_charbig = 'updated by trigger'
23340       WHERE f_int1 = - old.f_int1;
23341 END|
23342 DELETE FROM t0_aux
23343 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23344         
23345 # check trigger-8 success:      1
23346 DROP TRIGGER trg_1;
23347 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23348 f_int2 = CAST(f_char1 AS SIGNED INT),
23349 f_charbig = 'just inserted'
23350    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23351 DELETE FROM t0_aux
23352 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23353 DELETE FROM t1
23354 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23355 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23356 BEGIN
23357 SET new.f_int1 = old.f_int1 + @max_row,
23358 new.f_int2 = old.f_int2 - @max_row,
23359 new.f_charbig = '####updated per update trigger####';
23360 END|
23361 UPDATE t1
23362 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23363 f_charbig = '####updated per update statement itself####';
23364         
23365 # check trigger-9 success:      1
23366 DROP TRIGGER trg_2;
23367 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23368 f_int2 = CAST(f_char1 AS SIGNED INT),
23369 f_charbig = CONCAT('===',f_char1,'===');
23370 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23371 BEGIN
23372 SET new.f_int1 = new.f_int1 + @max_row,
23373 new.f_int2 = new.f_int2 - @max_row,
23374 new.f_charbig = '####updated per update trigger####';
23375 END|
23376 UPDATE t1
23377 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23378 f_charbig = '####updated per update statement itself####';
23379         
23380 # check trigger-10 success:     1
23381 DROP TRIGGER trg_2;
23382 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23383 f_int2 = CAST(f_char1 AS SIGNED INT),
23384 f_charbig = CONCAT('===',f_char1,'===');
23385 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23386 BEGIN
23387 SET new.f_int1 = @my_max1 + @counter,
23388 new.f_int2 = @my_min2 - @counter,
23389 new.f_charbig = '####updated per insert trigger####';
23390 SET @counter = @counter + 1;
23391 END|
23392 SET @counter = 1;
23393 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23394 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23395 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23396 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23397 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23398 ORDER BY f_int1;
23399 DROP TRIGGER trg_3;
23400         
23401 # check trigger-11 success:     1
23402 DELETE FROM t1
23403 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23404 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23405 AND f_charbig = '####updated per insert trigger####';
23406 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23407 BEGIN
23408 SET new.f_int1 = @my_max1 + @counter,
23409 new.f_int2 = @my_min2 - @counter,
23410 new.f_charbig = '####updated per insert trigger####';
23411 SET @counter = @counter + 1;
23412 END|
23413 SET @counter = 1;
23414 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23415 INSERT INTO t1 (f_char1, f_char2, f_charbig)
23416 SELECT CAST(f_int1 AS CHAR),
23417 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23418 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23419 ORDER BY f_int1;
23420 DROP TRIGGER trg_3;
23421         
23422 # check trigger-12 success:     1
23423 DELETE FROM t1
23424 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23425 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23426 AND f_charbig = '####updated per insert trigger####';
23427 ANALYZE  TABLE t1;
23428 Table   Op      Msg_type        Msg_text
23429 test.t1 analyze status  OK
23430 CHECK    TABLE t1 EXTENDED;
23431 Table   Op      Msg_type        Msg_text
23432 test.t1 check   status  OK
23433 CHECKSUM TABLE t1 EXTENDED;
23434 Table   Checksum
23435 test.t1 <some_value>
23436 OPTIMIZE TABLE t1;
23437 Table   Op      Msg_type        Msg_text
23438 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
23439 test.t1 optimize        status  OK
23440 # check layout success:    1
23441 REPAIR   TABLE t1 EXTENDED;
23442 Table   Op      Msg_type        Msg_text
23443 test.t1 repair  note    The storage engine for the table doesn't support repair
23444 # check layout success:    1
23445 TRUNCATE t1;
23446         
23447 # check TRUNCATE success:       1
23448 # check layout success:    1
23449 # End usability test (inc/partition_check.inc)
23450 DROP TABLE t1;
23451 CREATE TABLE t1 (
23452 f_int1 INTEGER,
23453 f_int2 INTEGER,
23454 f_char1 CHAR(20),
23455 f_char2 CHAR(20),
23456 f_charbig VARCHAR(1000)
23459 PARTITION BY LIST(ABS(MOD(f_int1,2)))
23460 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
23461 (PARTITION part1 VALUES IN (0),
23462 PARTITION part2 VALUES IN (1),
23463 PARTITION part3 VALUES IN (NULL));
23464 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23465 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
23466 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
23467 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
23468 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23469 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
23470 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
23471 # Start usability test (inc/partition_check.inc)
23472 create_command
23473 SHOW CREATE TABLE t1;
23474 Table   Create Table
23475 t1      CREATE TABLE `t1` (
23476   `f_int1` mediumint(9) DEFAULT NULL,
23477   `f_int2` mediumint(9) DEFAULT NULL,
23478   `f_char1` char(20) DEFAULT NULL,
23479   `f_char2` char(20) DEFAULT NULL,
23480   `f_charbig` varchar(1000) DEFAULT NULL
23481 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
23482 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
23483 SUBPARTITION BY KEY (f_int1)
23484 SUBPARTITIONS 3
23485 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
23486  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
23487  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
23489 # check prerequisites-1 success:    1
23490 # check COUNT(*) success:    1
23491 # check MIN/MAX(f_int1) success:    1
23492 # check MIN/MAX(f_int2) success:    1
23493 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23494 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23495 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23496 WHERE f_int1 IN (2,3);
23497 # check prerequisites-3 success:    1
23498 DELETE FROM t1 WHERE f_charbig = 'delete me';
23499 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
23500 # check read via f_int1 success: 1
23501 # check read via f_int2 success: 1
23502         
23503 # check multiple-1 success:     1
23504 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23505         
23506 # check multiple-2 success:     1
23507 INSERT INTO t1 SELECT * FROM t0_template
23508 WHERE MOD(f_int1,3) = 0;
23509         
23510 # check multiple-3 success:     1
23511 UPDATE t1 SET f_int1 = f_int1 + @max_row
23512 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23513 AND @max_row_div2 + @max_row_div4;
23514         
23515 # check multiple-4 success:     1
23516 DELETE FROM t1
23517 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23518 AND @max_row_div2 + @max_row_div4 + @max_row;
23519         
23520 # check multiple-5 success:     1
23521 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23522 INSERT INTO t1
23523 SET f_int1 = @cur_value , f_int2 = @cur_value,
23524 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23525 f_charbig = '#SINGLE#';
23526         
23527 # check single-1 success:       1
23528 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23529 INSERT INTO t1
23530 SET f_int1 = @cur_value , f_int2 = @cur_value,
23531 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23532 f_charbig = '#SINGLE#';
23533         
23534 # check single-2 success:       1
23535 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23536 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23537 UPDATE t1 SET f_int1 = @cur_value2
23538 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23539         
23540 # check single-3 success:       1
23541 SET @cur_value1= -1;
23542 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23543 UPDATE t1 SET f_int1 = @cur_value1
23544 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23545         
23546 # check single-4 success:       1
23547 SELECT MAX(f_int1) INTO @cur_value FROM t1;
23548 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23549         
23550 # check single-5 success:       1
23551 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23552         
23553 # check single-6 success:       1
23554 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23555 Warnings:
23556 Warning 1264    Out of range value for column 'f_int1' at row 1
23557 Warning 1264    Out of range value for column 'f_int2' at row 1
23558         
23559 # check single-7 success:       1
23560 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23561 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23562 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23563 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23564 f_charbig = '#NULL#';
23565 INSERT INTO t1
23566 SET f_int1 = NULL , f_int2 = -@max_row,
23567 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23568 f_charbig = '#NULL#';
23569 # check null success:    1
23570         
23571 # check null-1 success:         1
23572 UPDATE t1 SET f_int1 = -@max_row
23573 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23574 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23575         
23576 # check null-2 success:         1
23577 UPDATE t1 SET f_int1 = NULL
23578 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23579 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23580         
23581 # check null-3 success:         1
23582 DELETE FROM t1
23583 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
23584 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
23585         
23586 # check null-4 success:         1
23587 DELETE FROM t1
23588 WHERE f_int1 = 0 AND f_int2 = 0
23589 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23590 AND f_charbig = '#NULL#';
23591 SET AUTOCOMMIT= 0;
23592 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23593 SELECT f_int1, f_int1, '', '', 'was inserted'
23594 FROM t0_template source_tab
23595 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23596         
23597 # check transactions-1 success:         1
23598 COMMIT WORK;
23599         
23600 # check transactions-2 success:         1
23601 ROLLBACK WORK;
23602         
23603 # check transactions-3 success:         1
23604 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23605 COMMIT WORK;
23606 ROLLBACK WORK;
23607         
23608 # check transactions-4 success:         1
23609 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23610 SELECT f_int1, f_int1, '', '', 'was inserted'
23611 FROM t0_template source_tab
23612 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23613         
23614 # check transactions-5 success:         1
23615 ROLLBACK WORK;
23616         
23617 # check transactions-6 success:         1
23618 # INFO: Storage engine used for t1 seems to be transactional.
23619 COMMIT;
23620         
23621 # check transactions-7 success:         1
23622 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23623 COMMIT WORK;
23624 SET @@session.sql_mode = 'traditional';
23625 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23626 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23627 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23628 '', '', 'was inserted' FROM t0_template
23629 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23630 ERROR 22012: Division by 0
23631 COMMIT;
23632         
23633 # check transactions-8 success:         1
23634 # INFO: Storage engine used for t1 seems to be able to revert
23635 #       changes made by the failing statement.
23636 SET @@session.sql_mode = '';
23637 SET AUTOCOMMIT= 1;
23638 DELETE FROM t1 WHERE f_charbig = 'was inserted';
23639 COMMIT WORK;
23640 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23641         
23642 # check special-1 success:      1
23643 UPDATE t1 SET f_charbig = '';
23644         
23645 # check special-2 success:      1
23646 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23647 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23648 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23649 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23650 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23651 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23652 'just inserted' FROM t0_template
23653 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23654 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23655 BEGIN
23656 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23657 f_charbig = 'updated by trigger'
23658       WHERE f_int1 = new.f_int1;
23659 END|
23660 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23661 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23662 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23663         
23664 # check trigger-1 success:      1
23665 DROP TRIGGER trg_1;
23666 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23667 f_int2 = CAST(f_char1 AS SIGNED INT),
23668 f_charbig = 'just inserted'
23669    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23670 DELETE FROM t0_aux
23671 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23672 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23673 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23674 'just inserted' FROM t0_template
23675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23676 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23677 BEGIN
23678 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23679 f_charbig = 'updated by trigger'
23680       WHERE f_int1 = new.f_int1;
23681 END|
23682 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23683 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23684 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23685         
23686 # check trigger-2 success:      1
23687 DROP TRIGGER trg_1;
23688 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23689 f_int2 = CAST(f_char1 AS SIGNED INT),
23690 f_charbig = 'just inserted'
23691    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23692 DELETE FROM t0_aux
23693 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23694 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23695 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23696 'just inserted' FROM t0_template
23697 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23698 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23699 BEGIN
23700 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23701 f_charbig = 'updated by trigger'
23702       WHERE f_int1 = new.f_int1;
23703 END|
23704 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23705 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23706         
23707 # check trigger-3 success:      1
23708 DROP TRIGGER trg_1;
23709 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23710 f_int2 = CAST(f_char1 AS SIGNED INT),
23711 f_charbig = 'just inserted'
23712    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23713 DELETE FROM t0_aux
23714 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23715 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23716 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23717 'just inserted' FROM t0_template
23718 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23719 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23720 BEGIN
23721 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23722 f_charbig = 'updated by trigger'
23723       WHERE f_int1 = - old.f_int1;
23724 END|
23725 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23726 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23727         
23728 # check trigger-4 success:      1
23729 DROP TRIGGER trg_1;
23730 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23731 f_int2 = CAST(f_char1 AS SIGNED INT),
23732 f_charbig = 'just inserted'
23733    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23734 DELETE FROM t0_aux
23735 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23736 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23737 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23738 'just inserted' FROM t0_template
23739 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23740 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23741 BEGIN
23742 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23743 f_charbig = 'updated by trigger'
23744       WHERE f_int1 = new.f_int1;
23745 END|
23746 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23747 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23748         
23749 # check trigger-5 success:      1
23750 DROP TRIGGER trg_1;
23751 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23752 f_int2 = CAST(f_char1 AS SIGNED INT),
23753 f_charbig = 'just inserted'
23754    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23755 DELETE FROM t0_aux
23756 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23757 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23758 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23759 'just inserted' FROM t0_template
23760 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23761 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23762 BEGIN
23763 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23764 f_charbig = 'updated by trigger'
23765       WHERE f_int1 = - old.f_int1;
23766 END|
23767 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23768 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23769         
23770 # check trigger-6 success:      1
23771 DROP TRIGGER trg_1;
23772 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23773 f_int2 = CAST(f_char1 AS SIGNED INT),
23774 f_charbig = 'just inserted'
23775    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23776 DELETE FROM t0_aux
23777 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23778 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23779 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23780 'just inserted' FROM t0_template
23781 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23782 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23783 BEGIN
23784 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23785 f_charbig = 'updated by trigger'
23786       WHERE f_int1 = - old.f_int1;
23787 END|
23788 DELETE FROM t0_aux
23789 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23790         
23791 # check trigger-7 success:      1
23792 DROP TRIGGER trg_1;
23793 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23794 f_int2 = CAST(f_char1 AS SIGNED INT),
23795 f_charbig = 'just inserted'
23796    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23797 DELETE FROM t0_aux
23798 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23799 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23800 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23801 'just inserted' FROM t0_template
23802 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23803 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23804 BEGIN
23805 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23806 f_charbig = 'updated by trigger'
23807       WHERE f_int1 = - old.f_int1;
23808 END|
23809 DELETE FROM t0_aux
23810 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23811         
23812 # check trigger-8 success:      1
23813 DROP TRIGGER trg_1;
23814 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23815 f_int2 = CAST(f_char1 AS SIGNED INT),
23816 f_charbig = 'just inserted'
23817    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23818 DELETE FROM t0_aux
23819 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23820 DELETE FROM t1
23821 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23822 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23823 BEGIN
23824 SET new.f_int1 = old.f_int1 + @max_row,
23825 new.f_int2 = old.f_int2 - @max_row,
23826 new.f_charbig = '####updated per update trigger####';
23827 END|
23828 UPDATE t1
23829 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23830 f_charbig = '####updated per update statement itself####';
23831         
23832 # check trigger-9 success:      1
23833 DROP TRIGGER trg_2;
23834 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23835 f_int2 = CAST(f_char1 AS SIGNED INT),
23836 f_charbig = CONCAT('===',f_char1,'===');
23837 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23838 BEGIN
23839 SET new.f_int1 = new.f_int1 + @max_row,
23840 new.f_int2 = new.f_int2 - @max_row,
23841 new.f_charbig = '####updated per update trigger####';
23842 END|
23843 UPDATE t1
23844 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23845 f_charbig = '####updated per update statement itself####';
23846         
23847 # check trigger-10 success:     1
23848 DROP TRIGGER trg_2;
23849 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23850 f_int2 = CAST(f_char1 AS SIGNED INT),
23851 f_charbig = CONCAT('===',f_char1,'===');
23852 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23853 BEGIN
23854 SET new.f_int1 = @my_max1 + @counter,
23855 new.f_int2 = @my_min2 - @counter,
23856 new.f_charbig = '####updated per insert trigger####';
23857 SET @counter = @counter + 1;
23858 END|
23859 SET @counter = 1;
23860 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23861 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23862 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23863 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23864 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23865 ORDER BY f_int1;
23866 DROP TRIGGER trg_3;
23867         
23868 # check trigger-11 success:     1
23869 DELETE FROM t1
23870 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23871 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23872 AND f_charbig = '####updated per insert trigger####';
23873 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23874 BEGIN
23875 SET new.f_int1 = @my_max1 + @counter,
23876 new.f_int2 = @my_min2 - @counter,
23877 new.f_charbig = '####updated per insert trigger####';
23878 SET @counter = @counter + 1;
23879 END|
23880 SET @counter = 1;
23881 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23882 INSERT INTO t1 (f_char1, f_char2, f_charbig)
23883 SELECT CAST(f_int1 AS CHAR),
23884 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23885 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23886 ORDER BY f_int1;
23887 DROP TRIGGER trg_3;
23888         
23889 # check trigger-12 success:     1
23890 DELETE FROM t1
23891 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23892 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23893 AND f_charbig = '####updated per insert trigger####';
23894 ANALYZE  TABLE t1;
23895 Table   Op      Msg_type        Msg_text
23896 test.t1 analyze status  OK
23897 CHECK    TABLE t1 EXTENDED;
23898 Table   Op      Msg_type        Msg_text
23899 test.t1 check   status  OK
23900 CHECKSUM TABLE t1 EXTENDED;
23901 Table   Checksum
23902 test.t1 <some_value>
23903 OPTIMIZE TABLE t1;
23904 Table   Op      Msg_type        Msg_text
23905 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
23906 test.t1 optimize        status  OK
23907 # check layout success:    1
23908 REPAIR   TABLE t1 EXTENDED;
23909 Table   Op      Msg_type        Msg_text
23910 test.t1 repair  note    The storage engine for the table doesn't support repair
23911 # check layout success:    1
23912 TRUNCATE t1;
23913         
23914 # check TRUNCATE success:       1
23915 # check layout success:    1
23916 # End usability test (inc/partition_check.inc)
23917 DROP TABLE t1;
23918 DROP TABLE IF EXISTS t1;
23919 CREATE TABLE t1 (
23920 f_int1 INTEGER,
23921 f_int2 INTEGER,
23922 f_char1 CHAR(20),
23923 f_char2 CHAR(20),
23924 f_charbig VARCHAR(1000)
23927 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
23928 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23929 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
23930 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
23931 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
23932 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23933 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
23934 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
23935 # Start usability test (inc/partition_check.inc)
23936 create_command
23937 SHOW CREATE TABLE t1;
23938 Table   Create Table
23939 t1      CREATE TABLE `t1` (
23940   `f_int1` mediumint(9) DEFAULT NULL,
23941   `f_int2` mediumint(9) DEFAULT NULL,
23942   `f_char1` char(20) DEFAULT NULL,
23943   `f_char2` char(20) DEFAULT NULL,
23944   `f_charbig` varchar(1000) DEFAULT NULL
23945 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
23946 /*!50100 PARTITION BY HASH (f_int1 + f_int2)
23947 PARTITIONS 2 */
23949 # check prerequisites-1 success:    1
23950 # check COUNT(*) success:    1
23951 # check MIN/MAX(f_int1) success:    1
23952 # check MIN/MAX(f_int2) success:    1
23953 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23954 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23955 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23956 WHERE f_int1 IN (2,3);
23957 # check prerequisites-3 success:    1
23958 DELETE FROM t1 WHERE f_charbig = 'delete me';
23959 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
23960 # check read via f_int1 success: 1
23961 # check read via f_int2 success: 1
23962         
23963 # check multiple-1 success:     1
23964 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23965         
23966 # check multiple-2 success:     1
23967 INSERT INTO t1 SELECT * FROM t0_template
23968 WHERE MOD(f_int1,3) = 0;
23969         
23970 # check multiple-3 success:     1
23971 UPDATE t1 SET f_int1 = f_int1 + @max_row
23972 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23973 AND @max_row_div2 + @max_row_div4;
23974         
23975 # check multiple-4 success:     1
23976 DELETE FROM t1
23977 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23978 AND @max_row_div2 + @max_row_div4 + @max_row;
23979         
23980 # check multiple-5 success:     1
23981 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23982 INSERT INTO t1
23983 SET f_int1 = @cur_value , f_int2 = @cur_value,
23984 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23985 f_charbig = '#SINGLE#';
23986         
23987 # check single-1 success:       1
23988 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23989 INSERT INTO t1
23990 SET f_int1 = @cur_value , f_int2 = @cur_value,
23991 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23992 f_charbig = '#SINGLE#';
23993         
23994 # check single-2 success:       1
23995 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23996 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23997 UPDATE t1 SET f_int1 = @cur_value2
23998 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23999         
24000 # check single-3 success:       1
24001 SET @cur_value1= -1;
24002 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24003 UPDATE t1 SET f_int1 = @cur_value1
24004 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24005         
24006 # check single-4 success:       1
24007 SELECT MAX(f_int1) INTO @cur_value FROM t1;
24008 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24009         
24010 # check single-5 success:       1
24011 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24012         
24013 # check single-6 success:       1
24014 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24015 Warnings:
24016 Warning 1264    Out of range value for column 'f_int1' at row 1
24017 Warning 1264    Out of range value for column 'f_int2' at row 1
24018         
24019 # check single-7 success:       1
24020 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24021 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24022 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24023 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24024 f_charbig = '#NULL#';
24025 INSERT INTO t1
24026 SET f_int1 = NULL , f_int2 = -@max_row,
24027 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24028 f_charbig = '#NULL#';
24029 # check null success:    1
24030         
24031 # check null-1 success:         1
24032 UPDATE t1 SET f_int1 = -@max_row
24033 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24034 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24035         
24036 # check null-2 success:         1
24037 UPDATE t1 SET f_int1 = NULL
24038 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24039 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24040         
24041 # check null-3 success:         1
24042 DELETE FROM t1
24043 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24044 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24045         
24046 # check null-4 success:         1
24047 DELETE FROM t1
24048 WHERE f_int1 = 0 AND f_int2 = 0
24049 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24050 AND f_charbig = '#NULL#';
24051 SET AUTOCOMMIT= 0;
24052 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24053 SELECT f_int1, f_int1, '', '', 'was inserted'
24054 FROM t0_template source_tab
24055 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24056         
24057 # check transactions-1 success:         1
24058 COMMIT WORK;
24059         
24060 # check transactions-2 success:         1
24061 ROLLBACK WORK;
24062         
24063 # check transactions-3 success:         1
24064 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24065 COMMIT WORK;
24066 ROLLBACK WORK;
24067         
24068 # check transactions-4 success:         1
24069 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24070 SELECT f_int1, f_int1, '', '', 'was inserted'
24071 FROM t0_template source_tab
24072 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24073         
24074 # check transactions-5 success:         1
24075 ROLLBACK WORK;
24076         
24077 # check transactions-6 success:         1
24078 # INFO: Storage engine used for t1 seems to be transactional.
24079 COMMIT;
24080         
24081 # check transactions-7 success:         1
24082 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24083 COMMIT WORK;
24084 SET @@session.sql_mode = 'traditional';
24085 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24086 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24087 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24088 '', '', 'was inserted' FROM t0_template
24089 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24090 ERROR 22012: Division by 0
24091 COMMIT;
24092         
24093 # check transactions-8 success:         1
24094 # INFO: Storage engine used for t1 seems to be able to revert
24095 #       changes made by the failing statement.
24096 SET @@session.sql_mode = '';
24097 SET AUTOCOMMIT= 1;
24098 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24099 COMMIT WORK;
24100 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24101         
24102 # check special-1 success:      1
24103 UPDATE t1 SET f_charbig = '';
24104         
24105 # check special-2 success:      1
24106 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24107 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24108 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24109 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24110 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24111 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24112 'just inserted' FROM t0_template
24113 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24114 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24115 BEGIN
24116 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24117 f_charbig = 'updated by trigger'
24118       WHERE f_int1 = new.f_int1;
24119 END|
24120 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24121 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24123         
24124 # check trigger-1 success:      1
24125 DROP TRIGGER trg_1;
24126 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24127 f_int2 = CAST(f_char1 AS SIGNED INT),
24128 f_charbig = 'just inserted'
24129    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24130 DELETE FROM t0_aux
24131 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24132 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24133 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24134 'just inserted' FROM t0_template
24135 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24136 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24137 BEGIN
24138 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24139 f_charbig = 'updated by trigger'
24140       WHERE f_int1 = new.f_int1;
24141 END|
24142 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24143 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24144 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24145         
24146 # check trigger-2 success:      1
24147 DROP TRIGGER trg_1;
24148 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24149 f_int2 = CAST(f_char1 AS SIGNED INT),
24150 f_charbig = 'just inserted'
24151    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24152 DELETE FROM t0_aux
24153 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24154 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24155 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24156 'just inserted' FROM t0_template
24157 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24158 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24159 BEGIN
24160 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24161 f_charbig = 'updated by trigger'
24162       WHERE f_int1 = new.f_int1;
24163 END|
24164 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24165 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24166         
24167 # check trigger-3 success:      1
24168 DROP TRIGGER trg_1;
24169 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24170 f_int2 = CAST(f_char1 AS SIGNED INT),
24171 f_charbig = 'just inserted'
24172    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24173 DELETE FROM t0_aux
24174 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24177 'just inserted' FROM t0_template
24178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24179 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24180 BEGIN
24181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24182 f_charbig = 'updated by trigger'
24183       WHERE f_int1 = - old.f_int1;
24184 END|
24185 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24186 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24187         
24188 # check trigger-4 success:      1
24189 DROP TRIGGER trg_1;
24190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24191 f_int2 = CAST(f_char1 AS SIGNED INT),
24192 f_charbig = 'just inserted'
24193    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24194 DELETE FROM t0_aux
24195 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24196 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24197 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24198 'just inserted' FROM t0_template
24199 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24200 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24201 BEGIN
24202 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24203 f_charbig = 'updated by trigger'
24204       WHERE f_int1 = new.f_int1;
24205 END|
24206 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24207 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24208         
24209 # check trigger-5 success:      1
24210 DROP TRIGGER trg_1;
24211 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24212 f_int2 = CAST(f_char1 AS SIGNED INT),
24213 f_charbig = 'just inserted'
24214    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24215 DELETE FROM t0_aux
24216 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24217 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24218 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24219 'just inserted' FROM t0_template
24220 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24221 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24222 BEGIN
24223 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24224 f_charbig = 'updated by trigger'
24225       WHERE f_int1 = - old.f_int1;
24226 END|
24227 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24228 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24229         
24230 # check trigger-6 success:      1
24231 DROP TRIGGER trg_1;
24232 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24233 f_int2 = CAST(f_char1 AS SIGNED INT),
24234 f_charbig = 'just inserted'
24235    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24236 DELETE FROM t0_aux
24237 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24238 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24239 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24240 'just inserted' FROM t0_template
24241 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24242 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24243 BEGIN
24244 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24245 f_charbig = 'updated by trigger'
24246       WHERE f_int1 = - old.f_int1;
24247 END|
24248 DELETE FROM t0_aux
24249 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24250         
24251 # check trigger-7 success:      1
24252 DROP TRIGGER trg_1;
24253 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24254 f_int2 = CAST(f_char1 AS SIGNED INT),
24255 f_charbig = 'just inserted'
24256    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24257 DELETE FROM t0_aux
24258 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24259 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24260 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24261 'just inserted' FROM t0_template
24262 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24263 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24264 BEGIN
24265 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24266 f_charbig = 'updated by trigger'
24267       WHERE f_int1 = - old.f_int1;
24268 END|
24269 DELETE FROM t0_aux
24270 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24271         
24272 # check trigger-8 success:      1
24273 DROP TRIGGER trg_1;
24274 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24275 f_int2 = CAST(f_char1 AS SIGNED INT),
24276 f_charbig = 'just inserted'
24277    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24278 DELETE FROM t0_aux
24279 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24280 DELETE FROM t1
24281 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24282 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24283 BEGIN
24284 SET new.f_int1 = old.f_int1 + @max_row,
24285 new.f_int2 = old.f_int2 - @max_row,
24286 new.f_charbig = '####updated per update trigger####';
24287 END|
24288 UPDATE t1
24289 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24290 f_charbig = '####updated per update statement itself####';
24291         
24292 # check trigger-9 success:      1
24293 DROP TRIGGER trg_2;
24294 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24295 f_int2 = CAST(f_char1 AS SIGNED INT),
24296 f_charbig = CONCAT('===',f_char1,'===');
24297 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24298 BEGIN
24299 SET new.f_int1 = new.f_int1 + @max_row,
24300 new.f_int2 = new.f_int2 - @max_row,
24301 new.f_charbig = '####updated per update trigger####';
24302 END|
24303 UPDATE t1
24304 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24305 f_charbig = '####updated per update statement itself####';
24306         
24307 # check trigger-10 success:     1
24308 DROP TRIGGER trg_2;
24309 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24310 f_int2 = CAST(f_char1 AS SIGNED INT),
24311 f_charbig = CONCAT('===',f_char1,'===');
24312 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24313 BEGIN
24314 SET new.f_int1 = @my_max1 + @counter,
24315 new.f_int2 = @my_min2 - @counter,
24316 new.f_charbig = '####updated per insert trigger####';
24317 SET @counter = @counter + 1;
24318 END|
24319 SET @counter = 1;
24320 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24321 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24322 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24323 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24324 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24325 ORDER BY f_int1;
24326 DROP TRIGGER trg_3;
24327         
24328 # check trigger-11 success:     1
24329 DELETE FROM t1
24330 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24331 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24332 AND f_charbig = '####updated per insert trigger####';
24333 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24334 BEGIN
24335 SET new.f_int1 = @my_max1 + @counter,
24336 new.f_int2 = @my_min2 - @counter,
24337 new.f_charbig = '####updated per insert trigger####';
24338 SET @counter = @counter + 1;
24339 END|
24340 SET @counter = 1;
24341 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24342 INSERT INTO t1 (f_char1, f_char2, f_charbig)
24343 SELECT CAST(f_int1 AS CHAR),
24344 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24345 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24346 ORDER BY f_int1;
24347 DROP TRIGGER trg_3;
24348         
24349 # check trigger-12 success:     1
24350 DELETE FROM t1
24351 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24352 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24353 AND f_charbig = '####updated per insert trigger####';
24354 ANALYZE  TABLE t1;
24355 Table   Op      Msg_type        Msg_text
24356 test.t1 analyze status  OK
24357 CHECK    TABLE t1 EXTENDED;
24358 Table   Op      Msg_type        Msg_text
24359 test.t1 check   status  OK
24360 CHECKSUM TABLE t1 EXTENDED;
24361 Table   Checksum
24362 test.t1 <some_value>
24363 OPTIMIZE TABLE t1;
24364 Table   Op      Msg_type        Msg_text
24365 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
24366 test.t1 optimize        status  OK
24367 # check layout success:    1
24368 REPAIR   TABLE t1 EXTENDED;
24369 Table   Op      Msg_type        Msg_text
24370 test.t1 repair  note    The storage engine for the table doesn't support repair
24371 # check layout success:    1
24372 TRUNCATE t1;
24373         
24374 # check TRUNCATE success:       1
24375 # check layout success:    1
24376 # End usability test (inc/partition_check.inc)
24377 DROP TABLE t1;
24378 CREATE TABLE t1 (
24379 f_int1 INTEGER,
24380 f_int2 INTEGER,
24381 f_char1 CHAR(20),
24382 f_char2 CHAR(20),
24383 f_charbig VARCHAR(1000)
24386 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
24387 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24388 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
24389 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
24390 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
24391 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24392 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
24393 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
24394 # Start usability test (inc/partition_check.inc)
24395 create_command
24396 SHOW CREATE TABLE t1;
24397 Table   Create Table
24398 t1      CREATE TABLE `t1` (
24399   `f_int1` mediumint(9) DEFAULT NULL,
24400   `f_int2` mediumint(9) DEFAULT NULL,
24401   `f_char1` char(20) DEFAULT NULL,
24402   `f_char2` char(20) DEFAULT NULL,
24403   `f_charbig` varchar(1000) DEFAULT NULL
24404 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
24405 /*!50100 PARTITION BY KEY (f_int1,f_int2)
24406 PARTITIONS 5 */
24408 # check prerequisites-1 success:    1
24409 # check COUNT(*) success:    1
24410 # check MIN/MAX(f_int1) success:    1
24411 # check MIN/MAX(f_int2) success:    1
24412 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24413 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24414 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24415 WHERE f_int1 IN (2,3);
24416 # check prerequisites-3 success:    1
24417 DELETE FROM t1 WHERE f_charbig = 'delete me';
24418 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
24419 # check read via f_int1 success: 1
24420 # check read via f_int2 success: 1
24421         
24422 # check multiple-1 success:     1
24423 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24424         
24425 # check multiple-2 success:     1
24426 INSERT INTO t1 SELECT * FROM t0_template
24427 WHERE MOD(f_int1,3) = 0;
24428         
24429 # check multiple-3 success:     1
24430 UPDATE t1 SET f_int1 = f_int1 + @max_row
24431 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24432 AND @max_row_div2 + @max_row_div4;
24433         
24434 # check multiple-4 success:     1
24435 DELETE FROM t1
24436 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24437 AND @max_row_div2 + @max_row_div4 + @max_row;
24438         
24439 # check multiple-5 success:     1
24440 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24441 INSERT INTO t1
24442 SET f_int1 = @cur_value , f_int2 = @cur_value,
24443 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24444 f_charbig = '#SINGLE#';
24445         
24446 # check single-1 success:       1
24447 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24448 INSERT INTO t1
24449 SET f_int1 = @cur_value , f_int2 = @cur_value,
24450 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24451 f_charbig = '#SINGLE#';
24452         
24453 # check single-2 success:       1
24454 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24455 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24456 UPDATE t1 SET f_int1 = @cur_value2
24457 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24458         
24459 # check single-3 success:       1
24460 SET @cur_value1= -1;
24461 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24462 UPDATE t1 SET f_int1 = @cur_value1
24463 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24464         
24465 # check single-4 success:       1
24466 SELECT MAX(f_int1) INTO @cur_value FROM t1;
24467 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24468         
24469 # check single-5 success:       1
24470 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24471         
24472 # check single-6 success:       1
24473 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24474 Warnings:
24475 Warning 1264    Out of range value for column 'f_int1' at row 1
24476 Warning 1264    Out of range value for column 'f_int2' at row 1
24477         
24478 # check single-7 success:       1
24479 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24480 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24481 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24482 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24483 f_charbig = '#NULL#';
24484 INSERT INTO t1
24485 SET f_int1 = NULL , f_int2 = -@max_row,
24486 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24487 f_charbig = '#NULL#';
24488 # check null success:    1
24489         
24490 # check null-1 success:         1
24491 UPDATE t1 SET f_int1 = -@max_row
24492 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24493 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24494         
24495 # check null-2 success:         1
24496 UPDATE t1 SET f_int1 = NULL
24497 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24498 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24499         
24500 # check null-3 success:         1
24501 DELETE FROM t1
24502 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24503 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24504         
24505 # check null-4 success:         1
24506 DELETE FROM t1
24507 WHERE f_int1 = 0 AND f_int2 = 0
24508 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24509 AND f_charbig = '#NULL#';
24510 SET AUTOCOMMIT= 0;
24511 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24512 SELECT f_int1, f_int1, '', '', 'was inserted'
24513 FROM t0_template source_tab
24514 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24515         
24516 # check transactions-1 success:         1
24517 COMMIT WORK;
24518         
24519 # check transactions-2 success:         1
24520 ROLLBACK WORK;
24521         
24522 # check transactions-3 success:         1
24523 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24524 COMMIT WORK;
24525 ROLLBACK WORK;
24526         
24527 # check transactions-4 success:         1
24528 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24529 SELECT f_int1, f_int1, '', '', 'was inserted'
24530 FROM t0_template source_tab
24531 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24532         
24533 # check transactions-5 success:         1
24534 ROLLBACK WORK;
24535         
24536 # check transactions-6 success:         1
24537 # INFO: Storage engine used for t1 seems to be transactional.
24538 COMMIT;
24539         
24540 # check transactions-7 success:         1
24541 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24542 COMMIT WORK;
24543 SET @@session.sql_mode = 'traditional';
24544 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24545 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24546 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24547 '', '', 'was inserted' FROM t0_template
24548 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24549 ERROR 22012: Division by 0
24550 COMMIT;
24551         
24552 # check transactions-8 success:         1
24553 # INFO: Storage engine used for t1 seems to be able to revert
24554 #       changes made by the failing statement.
24555 SET @@session.sql_mode = '';
24556 SET AUTOCOMMIT= 1;
24557 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24558 COMMIT WORK;
24559 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24560         
24561 # check special-1 success:      1
24562 UPDATE t1 SET f_charbig = '';
24563         
24564 # check special-2 success:      1
24565 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24566 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24567 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24569 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24570 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24571 'just inserted' FROM t0_template
24572 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24573 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24574 BEGIN
24575 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24576 f_charbig = 'updated by trigger'
24577       WHERE f_int1 = new.f_int1;
24578 END|
24579 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24580 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24581 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24582         
24583 # check trigger-1 success:      1
24584 DROP TRIGGER trg_1;
24585 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24586 f_int2 = CAST(f_char1 AS SIGNED INT),
24587 f_charbig = 'just inserted'
24588    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24589 DELETE FROM t0_aux
24590 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24591 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24592 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24593 'just inserted' FROM t0_template
24594 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24595 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24596 BEGIN
24597 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24598 f_charbig = 'updated by trigger'
24599       WHERE f_int1 = new.f_int1;
24600 END|
24601 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24602 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24603 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24604         
24605 # check trigger-2 success:      1
24606 DROP TRIGGER trg_1;
24607 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24608 f_int2 = CAST(f_char1 AS SIGNED INT),
24609 f_charbig = 'just inserted'
24610    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24611 DELETE FROM t0_aux
24612 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24613 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24614 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24615 'just inserted' FROM t0_template
24616 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24617 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24618 BEGIN
24619 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24620 f_charbig = 'updated by trigger'
24621       WHERE f_int1 = new.f_int1;
24622 END|
24623 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24624 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24625         
24626 # check trigger-3 success:      1
24627 DROP TRIGGER trg_1;
24628 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24629 f_int2 = CAST(f_char1 AS SIGNED INT),
24630 f_charbig = 'just inserted'
24631    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24632 DELETE FROM t0_aux
24633 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24634 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24635 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24636 'just inserted' FROM t0_template
24637 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24638 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24639 BEGIN
24640 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24641 f_charbig = 'updated by trigger'
24642       WHERE f_int1 = - old.f_int1;
24643 END|
24644 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24645 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24646         
24647 # check trigger-4 success:      1
24648 DROP TRIGGER trg_1;
24649 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24650 f_int2 = CAST(f_char1 AS SIGNED INT),
24651 f_charbig = 'just inserted'
24652    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24653 DELETE FROM t0_aux
24654 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24655 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24656 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24657 'just inserted' FROM t0_template
24658 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24659 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24660 BEGIN
24661 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24662 f_charbig = 'updated by trigger'
24663       WHERE f_int1 = new.f_int1;
24664 END|
24665 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24666 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24667         
24668 # check trigger-5 success:      1
24669 DROP TRIGGER trg_1;
24670 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24671 f_int2 = CAST(f_char1 AS SIGNED INT),
24672 f_charbig = 'just inserted'
24673    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24674 DELETE FROM t0_aux
24675 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24676 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24677 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24678 'just inserted' FROM t0_template
24679 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24680 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24681 BEGIN
24682 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24683 f_charbig = 'updated by trigger'
24684       WHERE f_int1 = - old.f_int1;
24685 END|
24686 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24687 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24688         
24689 # check trigger-6 success:      1
24690 DROP TRIGGER trg_1;
24691 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24692 f_int2 = CAST(f_char1 AS SIGNED INT),
24693 f_charbig = 'just inserted'
24694    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24695 DELETE FROM t0_aux
24696 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24697 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24698 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24699 'just inserted' FROM t0_template
24700 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24701 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24702 BEGIN
24703 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24704 f_charbig = 'updated by trigger'
24705       WHERE f_int1 = - old.f_int1;
24706 END|
24707 DELETE FROM t0_aux
24708 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24709         
24710 # check trigger-7 success:      1
24711 DROP TRIGGER trg_1;
24712 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24713 f_int2 = CAST(f_char1 AS SIGNED INT),
24714 f_charbig = 'just inserted'
24715    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24716 DELETE FROM t0_aux
24717 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24718 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24719 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24720 'just inserted' FROM t0_template
24721 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24722 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24723 BEGIN
24724 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24725 f_charbig = 'updated by trigger'
24726       WHERE f_int1 = - old.f_int1;
24727 END|
24728 DELETE FROM t0_aux
24729 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24730         
24731 # check trigger-8 success:      1
24732 DROP TRIGGER trg_1;
24733 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24734 f_int2 = CAST(f_char1 AS SIGNED INT),
24735 f_charbig = 'just inserted'
24736    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24737 DELETE FROM t0_aux
24738 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24739 DELETE FROM t1
24740 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24741 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24742 BEGIN
24743 SET new.f_int1 = old.f_int1 + @max_row,
24744 new.f_int2 = old.f_int2 - @max_row,
24745 new.f_charbig = '####updated per update trigger####';
24746 END|
24747 UPDATE t1
24748 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24749 f_charbig = '####updated per update statement itself####';
24750         
24751 # check trigger-9 success:      1
24752 DROP TRIGGER trg_2;
24753 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24754 f_int2 = CAST(f_char1 AS SIGNED INT),
24755 f_charbig = CONCAT('===',f_char1,'===');
24756 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24757 BEGIN
24758 SET new.f_int1 = new.f_int1 + @max_row,
24759 new.f_int2 = new.f_int2 - @max_row,
24760 new.f_charbig = '####updated per update trigger####';
24761 END|
24762 UPDATE t1
24763 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24764 f_charbig = '####updated per update statement itself####';
24765         
24766 # check trigger-10 success:     1
24767 DROP TRIGGER trg_2;
24768 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24769 f_int2 = CAST(f_char1 AS SIGNED INT),
24770 f_charbig = CONCAT('===',f_char1,'===');
24771 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24772 BEGIN
24773 SET new.f_int1 = @my_max1 + @counter,
24774 new.f_int2 = @my_min2 - @counter,
24775 new.f_charbig = '####updated per insert trigger####';
24776 SET @counter = @counter + 1;
24777 END|
24778 SET @counter = 1;
24779 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24780 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24781 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24782 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24783 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24784 ORDER BY f_int1;
24785 DROP TRIGGER trg_3;
24786         
24787 # check trigger-11 success:     1
24788 DELETE FROM t1
24789 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24790 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24791 AND f_charbig = '####updated per insert trigger####';
24792 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24793 BEGIN
24794 SET new.f_int1 = @my_max1 + @counter,
24795 new.f_int2 = @my_min2 - @counter,
24796 new.f_charbig = '####updated per insert trigger####';
24797 SET @counter = @counter + 1;
24798 END|
24799 SET @counter = 1;
24800 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24801 INSERT INTO t1 (f_char1, f_char2, f_charbig)
24802 SELECT CAST(f_int1 AS CHAR),
24803 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24804 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24805 ORDER BY f_int1;
24806 DROP TRIGGER trg_3;
24807         
24808 # check trigger-12 success:     1
24809 DELETE FROM t1
24810 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24811 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24812 AND f_charbig = '####updated per insert trigger####';
24813 ANALYZE  TABLE t1;
24814 Table   Op      Msg_type        Msg_text
24815 test.t1 analyze status  OK
24816 CHECK    TABLE t1 EXTENDED;
24817 Table   Op      Msg_type        Msg_text
24818 test.t1 check   status  OK
24819 CHECKSUM TABLE t1 EXTENDED;
24820 Table   Checksum
24821 test.t1 <some_value>
24822 OPTIMIZE TABLE t1;
24823 Table   Op      Msg_type        Msg_text
24824 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
24825 test.t1 optimize        status  OK
24826 # check layout success:    1
24827 REPAIR   TABLE t1 EXTENDED;
24828 Table   Op      Msg_type        Msg_text
24829 test.t1 repair  note    The storage engine for the table doesn't support repair
24830 # check layout success:    1
24831 TRUNCATE t1;
24832         
24833 # check TRUNCATE success:       1
24834 # check layout success:    1
24835 # End usability test (inc/partition_check.inc)
24836 DROP TABLE t1;
24837 CREATE TABLE t1 (
24838 f_int1 INTEGER,
24839 f_int2 INTEGER,
24840 f_char1 CHAR(20),
24841 f_char2 CHAR(20),
24842 f_charbig VARCHAR(1000)
24845 PARTITION BY LIST(MOD(f_int1 + f_int2,4))
24846 (PARTITION part_3 VALUES IN (-3),
24847 PARTITION part_2 VALUES IN (-2),
24848 PARTITION part_1 VALUES IN (-1),
24849 PARTITION part_N VALUES IN (NULL),
24850 PARTITION part0 VALUES IN (0),
24851 PARTITION part1 VALUES IN (1),
24852 PARTITION part2 VALUES IN (2),
24853 PARTITION part3 VALUES IN (3));
24854 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24855 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
24856 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
24857 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
24858 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24859 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
24860 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
24861 # Start usability test (inc/partition_check.inc)
24862 create_command
24863 SHOW CREATE TABLE t1;
24864 Table   Create Table
24865 t1      CREATE TABLE `t1` (
24866   `f_int1` mediumint(9) DEFAULT NULL,
24867   `f_int2` mediumint(9) DEFAULT NULL,
24868   `f_char1` char(20) DEFAULT NULL,
24869   `f_char2` char(20) DEFAULT NULL,
24870   `f_charbig` varchar(1000) DEFAULT NULL
24871 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
24872 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
24873 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
24874  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
24875  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
24876  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
24877  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
24878  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
24879  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
24880  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
24882 # check prerequisites-1 success:    1
24883 # check COUNT(*) success:    1
24884 # check MIN/MAX(f_int1) success:    1
24885 # check MIN/MAX(f_int2) success:    1
24886 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24887 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24888 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24889 WHERE f_int1 IN (2,3);
24890 # check prerequisites-3 success:    1
24891 DELETE FROM t1 WHERE f_charbig = 'delete me';
24892 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
24893 # check read via f_int1 success: 1
24894 # check read via f_int2 success: 1
24895         
24896 # check multiple-1 success:     1
24897 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24898         
24899 # check multiple-2 success:     1
24900 INSERT INTO t1 SELECT * FROM t0_template
24901 WHERE MOD(f_int1,3) = 0;
24902         
24903 # check multiple-3 success:     1
24904 UPDATE t1 SET f_int1 = f_int1 + @max_row
24905 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24906 AND @max_row_div2 + @max_row_div4;
24907         
24908 # check multiple-4 success:     1
24909 DELETE FROM t1
24910 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24911 AND @max_row_div2 + @max_row_div4 + @max_row;
24912         
24913 # check multiple-5 success:     1
24914 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24915 INSERT INTO t1
24916 SET f_int1 = @cur_value , f_int2 = @cur_value,
24917 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24918 f_charbig = '#SINGLE#';
24919         
24920 # check single-1 success:       1
24921 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24922 INSERT INTO t1
24923 SET f_int1 = @cur_value , f_int2 = @cur_value,
24924 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24925 f_charbig = '#SINGLE#';
24926         
24927 # check single-2 success:       1
24928 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24929 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24930 UPDATE t1 SET f_int1 = @cur_value2
24931 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24932         
24933 # check single-3 success:       1
24934 SET @cur_value1= -1;
24935 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24936 UPDATE t1 SET f_int1 = @cur_value1
24937 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24938         
24939 # check single-4 success:       1
24940 SELECT MAX(f_int1) INTO @cur_value FROM t1;
24941 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24942         
24943 # check single-5 success:       1
24944 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24945         
24946 # check single-6 success:       1
24947 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24948 Warnings:
24949 Warning 1264    Out of range value for column 'f_int1' at row 1
24950 Warning 1264    Out of range value for column 'f_int2' at row 1
24951         
24952 # check single-7 success:       1
24953 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24954 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24955 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24956 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24957 f_charbig = '#NULL#';
24958 INSERT INTO t1
24959 SET f_int1 = NULL , f_int2 = -@max_row,
24960 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24961 f_charbig = '#NULL#';
24962 # check null success:    1
24963         
24964 # check null-1 success:         1
24965 UPDATE t1 SET f_int1 = -@max_row
24966 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24967 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24968         
24969 # check null-2 success:         1
24970 UPDATE t1 SET f_int1 = NULL
24971 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24972 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24973         
24974 # check null-3 success:         1
24975 DELETE FROM t1
24976 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
24977 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
24978         
24979 # check null-4 success:         1
24980 DELETE FROM t1
24981 WHERE f_int1 = 0 AND f_int2 = 0
24982 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24983 AND f_charbig = '#NULL#';
24984 SET AUTOCOMMIT= 0;
24985 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24986 SELECT f_int1, f_int1, '', '', 'was inserted'
24987 FROM t0_template source_tab
24988 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24989         
24990 # check transactions-1 success:         1
24991 COMMIT WORK;
24992         
24993 # check transactions-2 success:         1
24994 ROLLBACK WORK;
24995         
24996 # check transactions-3 success:         1
24997 DELETE FROM t1 WHERE f_charbig = 'was inserted';
24998 COMMIT WORK;
24999 ROLLBACK WORK;
25000         
25001 # check transactions-4 success:         1
25002 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25003 SELECT f_int1, f_int1, '', '', 'was inserted'
25004 FROM t0_template source_tab
25005 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25006         
25007 # check transactions-5 success:         1
25008 ROLLBACK WORK;
25009         
25010 # check transactions-6 success:         1
25011 # INFO: Storage engine used for t1 seems to be transactional.
25012 COMMIT;
25013         
25014 # check transactions-7 success:         1
25015 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25016 COMMIT WORK;
25017 SET @@session.sql_mode = 'traditional';
25018 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25019 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25020 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25021 '', '', 'was inserted' FROM t0_template
25022 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25023 ERROR 22012: Division by 0
25024 COMMIT;
25025         
25026 # check transactions-8 success:         1
25027 # INFO: Storage engine used for t1 seems to be able to revert
25028 #       changes made by the failing statement.
25029 SET @@session.sql_mode = '';
25030 SET AUTOCOMMIT= 1;
25031 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25032 COMMIT WORK;
25033 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25034         
25035 # check special-1 success:      1
25036 UPDATE t1 SET f_charbig = '';
25037         
25038 # check special-2 success:      1
25039 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25040 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25041 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25042 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25043 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25044 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25045 'just inserted' FROM t0_template
25046 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25047 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25048 BEGIN
25049 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25050 f_charbig = 'updated by trigger'
25051       WHERE f_int1 = new.f_int1;
25052 END|
25053 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25054 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25055 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25056         
25057 # check trigger-1 success:      1
25058 DROP TRIGGER trg_1;
25059 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25060 f_int2 = CAST(f_char1 AS SIGNED INT),
25061 f_charbig = 'just inserted'
25062    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25063 DELETE FROM t0_aux
25064 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25065 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25066 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25067 'just inserted' FROM t0_template
25068 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25069 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25070 BEGIN
25071 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25072 f_charbig = 'updated by trigger'
25073       WHERE f_int1 = new.f_int1;
25074 END|
25075 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25076 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25077 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25078         
25079 # check trigger-2 success:      1
25080 DROP TRIGGER trg_1;
25081 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25082 f_int2 = CAST(f_char1 AS SIGNED INT),
25083 f_charbig = 'just inserted'
25084    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25085 DELETE FROM t0_aux
25086 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25087 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25088 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25089 'just inserted' FROM t0_template
25090 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25091 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25092 BEGIN
25093 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25094 f_charbig = 'updated by trigger'
25095       WHERE f_int1 = new.f_int1;
25096 END|
25097 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25098 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25099         
25100 # check trigger-3 success:      1
25101 DROP TRIGGER trg_1;
25102 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25103 f_int2 = CAST(f_char1 AS SIGNED INT),
25104 f_charbig = 'just inserted'
25105    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25106 DELETE FROM t0_aux
25107 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25108 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25109 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25110 'just inserted' FROM t0_template
25111 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25112 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25113 BEGIN
25114 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25115 f_charbig = 'updated by trigger'
25116       WHERE f_int1 = - old.f_int1;
25117 END|
25118 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25119 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25120         
25121 # check trigger-4 success:      1
25122 DROP TRIGGER trg_1;
25123 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25124 f_int2 = CAST(f_char1 AS SIGNED INT),
25125 f_charbig = 'just inserted'
25126    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25127 DELETE FROM t0_aux
25128 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25129 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25130 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25131 'just inserted' FROM t0_template
25132 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25133 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25134 BEGIN
25135 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25136 f_charbig = 'updated by trigger'
25137       WHERE f_int1 = new.f_int1;
25138 END|
25139 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25140 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25141         
25142 # check trigger-5 success:      1
25143 DROP TRIGGER trg_1;
25144 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25145 f_int2 = CAST(f_char1 AS SIGNED INT),
25146 f_charbig = 'just inserted'
25147    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25148 DELETE FROM t0_aux
25149 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25150 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25151 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25152 'just inserted' FROM t0_template
25153 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25154 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25155 BEGIN
25156 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25157 f_charbig = 'updated by trigger'
25158       WHERE f_int1 = - old.f_int1;
25159 END|
25160 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25161 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25162         
25163 # check trigger-6 success:      1
25164 DROP TRIGGER trg_1;
25165 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25166 f_int2 = CAST(f_char1 AS SIGNED INT),
25167 f_charbig = 'just inserted'
25168    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25169 DELETE FROM t0_aux
25170 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25171 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25172 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25173 'just inserted' FROM t0_template
25174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25175 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25176 BEGIN
25177 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25178 f_charbig = 'updated by trigger'
25179       WHERE f_int1 = - old.f_int1;
25180 END|
25181 DELETE FROM t0_aux
25182 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25183         
25184 # check trigger-7 success:      1
25185 DROP TRIGGER trg_1;
25186 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25187 f_int2 = CAST(f_char1 AS SIGNED INT),
25188 f_charbig = 'just inserted'
25189    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25190 DELETE FROM t0_aux
25191 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25192 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25193 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25194 'just inserted' FROM t0_template
25195 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25196 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25197 BEGIN
25198 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25199 f_charbig = 'updated by trigger'
25200       WHERE f_int1 = - old.f_int1;
25201 END|
25202 DELETE FROM t0_aux
25203 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25204         
25205 # check trigger-8 success:      1
25206 DROP TRIGGER trg_1;
25207 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25208 f_int2 = CAST(f_char1 AS SIGNED INT),
25209 f_charbig = 'just inserted'
25210    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25211 DELETE FROM t0_aux
25212 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25213 DELETE FROM t1
25214 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25215 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25216 BEGIN
25217 SET new.f_int1 = old.f_int1 + @max_row,
25218 new.f_int2 = old.f_int2 - @max_row,
25219 new.f_charbig = '####updated per update trigger####';
25220 END|
25221 UPDATE t1
25222 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25223 f_charbig = '####updated per update statement itself####';
25224         
25225 # check trigger-9 success:      1
25226 DROP TRIGGER trg_2;
25227 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25228 f_int2 = CAST(f_char1 AS SIGNED INT),
25229 f_charbig = CONCAT('===',f_char1,'===');
25230 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25231 BEGIN
25232 SET new.f_int1 = new.f_int1 + @max_row,
25233 new.f_int2 = new.f_int2 - @max_row,
25234 new.f_charbig = '####updated per update trigger####';
25235 END|
25236 UPDATE t1
25237 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25238 f_charbig = '####updated per update statement itself####';
25239         
25240 # check trigger-10 success:     1
25241 DROP TRIGGER trg_2;
25242 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25243 f_int2 = CAST(f_char1 AS SIGNED INT),
25244 f_charbig = CONCAT('===',f_char1,'===');
25245 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25246 BEGIN
25247 SET new.f_int1 = @my_max1 + @counter,
25248 new.f_int2 = @my_min2 - @counter,
25249 new.f_charbig = '####updated per insert trigger####';
25250 SET @counter = @counter + 1;
25251 END|
25252 SET @counter = 1;
25253 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25254 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25255 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25256 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25257 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25258 ORDER BY f_int1;
25259 DROP TRIGGER trg_3;
25260         
25261 # check trigger-11 success:     1
25262 DELETE FROM t1
25263 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25264 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25265 AND f_charbig = '####updated per insert trigger####';
25266 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25267 BEGIN
25268 SET new.f_int1 = @my_max1 + @counter,
25269 new.f_int2 = @my_min2 - @counter,
25270 new.f_charbig = '####updated per insert trigger####';
25271 SET @counter = @counter + 1;
25272 END|
25273 SET @counter = 1;
25274 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25275 INSERT INTO t1 (f_char1, f_char2, f_charbig)
25276 SELECT CAST(f_int1 AS CHAR),
25277 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25278 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25279 ORDER BY f_int1;
25280 DROP TRIGGER trg_3;
25281         
25282 # check trigger-12 success:     1
25283 DELETE FROM t1
25284 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25285 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25286 AND f_charbig = '####updated per insert trigger####';
25287 ANALYZE  TABLE t1;
25288 Table   Op      Msg_type        Msg_text
25289 test.t1 analyze status  OK
25290 CHECK    TABLE t1 EXTENDED;
25291 Table   Op      Msg_type        Msg_text
25292 test.t1 check   status  OK
25293 CHECKSUM TABLE t1 EXTENDED;
25294 Table   Checksum
25295 test.t1 <some_value>
25296 OPTIMIZE TABLE t1;
25297 Table   Op      Msg_type        Msg_text
25298 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
25299 test.t1 optimize        status  OK
25300 # check layout success:    1
25301 REPAIR   TABLE t1 EXTENDED;
25302 Table   Op      Msg_type        Msg_text
25303 test.t1 repair  note    The storage engine for the table doesn't support repair
25304 # check layout success:    1
25305 TRUNCATE t1;
25306         
25307 # check TRUNCATE success:       1
25308 # check layout success:    1
25309 # End usability test (inc/partition_check.inc)
25310 DROP TABLE t1;
25311 CREATE TABLE t1 (
25312 f_int1 INTEGER,
25313 f_int2 INTEGER,
25314 f_char1 CHAR(20),
25315 f_char2 CHAR(20),
25316 f_charbig VARCHAR(1000)
25319 PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
25320 (PARTITION parta VALUES LESS THAN (0),
25321 PARTITION partb VALUES LESS THAN (5),
25322 PARTITION partc VALUES LESS THAN (10),
25323 PARTITION partd VALUES LESS THAN (10 + 5),
25324 PARTITION parte VALUES LESS THAN (20),
25325 PARTITION partf VALUES LESS THAN (2147483646));
25326 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25327 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
25328 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
25329 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
25330 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25331 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
25332 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
25333 # Start usability test (inc/partition_check.inc)
25334 create_command
25335 SHOW CREATE TABLE t1;
25336 Table   Create Table
25337 t1      CREATE TABLE `t1` (
25338   `f_int1` mediumint(9) DEFAULT NULL,
25339   `f_int2` mediumint(9) DEFAULT NULL,
25340   `f_char1` char(20) DEFAULT NULL,
25341   `f_char2` char(20) DEFAULT NULL,
25342   `f_charbig` varchar(1000) DEFAULT NULL
25343 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
25344 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
25345 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
25346  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
25347  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
25348  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
25349  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
25350  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
25352 # check prerequisites-1 success:    1
25353 # check COUNT(*) success:    1
25354 # check MIN/MAX(f_int1) success:    1
25355 # check MIN/MAX(f_int2) success:    1
25356 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25357 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25358 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25359 WHERE f_int1 IN (2,3);
25360 # check prerequisites-3 success:    1
25361 DELETE FROM t1 WHERE f_charbig = 'delete me';
25362 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
25363 # check read via f_int1 success: 1
25364 # check read via f_int2 success: 1
25365         
25366 # check multiple-1 success:     1
25367 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25368         
25369 # check multiple-2 success:     1
25370 INSERT INTO t1 SELECT * FROM t0_template
25371 WHERE MOD(f_int1,3) = 0;
25372         
25373 # check multiple-3 success:     1
25374 UPDATE t1 SET f_int1 = f_int1 + @max_row
25375 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25376 AND @max_row_div2 + @max_row_div4;
25377         
25378 # check multiple-4 success:     1
25379 DELETE FROM t1
25380 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25381 AND @max_row_div2 + @max_row_div4 + @max_row;
25382         
25383 # check multiple-5 success:     1
25384 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25385 INSERT INTO t1
25386 SET f_int1 = @cur_value , f_int2 = @cur_value,
25387 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25388 f_charbig = '#SINGLE#';
25389         
25390 # check single-1 success:       1
25391 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25392 INSERT INTO t1
25393 SET f_int1 = @cur_value , f_int2 = @cur_value,
25394 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25395 f_charbig = '#SINGLE#';
25396         
25397 # check single-2 success:       1
25398 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25399 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25400 UPDATE t1 SET f_int1 = @cur_value2
25401 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25402         
25403 # check single-3 success:       1
25404 SET @cur_value1= -1;
25405 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25406 UPDATE t1 SET f_int1 = @cur_value1
25407 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25408         
25409 # check single-4 success:       1
25410 SELECT MAX(f_int1) INTO @cur_value FROM t1;
25411 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25412         
25413 # check single-5 success:       1
25414 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25415         
25416 # check single-6 success:       1
25417 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25418 Warnings:
25419 Warning 1264    Out of range value for column 'f_int1' at row 1
25420 Warning 1264    Out of range value for column 'f_int2' at row 1
25421         
25422 # check single-7 success:       1
25423 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
25424 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25425 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25426 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25427 f_charbig = '#NULL#';
25428 INSERT INTO t1
25429 SET f_int1 = NULL , f_int2 = -@max_row,
25430 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25431 f_charbig = '#NULL#';
25432 # check null success:    1
25433         
25434 # check null-1 success:         1
25435 UPDATE t1 SET f_int1 = -@max_row
25436 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25437 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25438         
25439 # check null-2 success:         1
25440 UPDATE t1 SET f_int1 = NULL
25441 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25442 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25443         
25444 # check null-3 success:         1
25445 DELETE FROM t1
25446 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25447 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25448         
25449 # check null-4 success:         1
25450 DELETE FROM t1
25451 WHERE f_int1 = 0 AND f_int2 = 0
25452 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25453 AND f_charbig = '#NULL#';
25454 SET AUTOCOMMIT= 0;
25455 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25456 SELECT f_int1, f_int1, '', '', 'was inserted'
25457 FROM t0_template source_tab
25458 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25459         
25460 # check transactions-1 success:         1
25461 COMMIT WORK;
25462         
25463 # check transactions-2 success:         1
25464 ROLLBACK WORK;
25465         
25466 # check transactions-3 success:         1
25467 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25468 COMMIT WORK;
25469 ROLLBACK WORK;
25470         
25471 # check transactions-4 success:         1
25472 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25473 SELECT f_int1, f_int1, '', '', 'was inserted'
25474 FROM t0_template source_tab
25475 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25476         
25477 # check transactions-5 success:         1
25478 ROLLBACK WORK;
25479         
25480 # check transactions-6 success:         1
25481 # INFO: Storage engine used for t1 seems to be transactional.
25482 COMMIT;
25483         
25484 # check transactions-7 success:         1
25485 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25486 COMMIT WORK;
25487 SET @@session.sql_mode = 'traditional';
25488 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25489 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25490 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25491 '', '', 'was inserted' FROM t0_template
25492 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25493 ERROR 22012: Division by 0
25494 COMMIT;
25495         
25496 # check transactions-8 success:         1
25497 # INFO: Storage engine used for t1 seems to be able to revert
25498 #       changes made by the failing statement.
25499 SET @@session.sql_mode = '';
25500 SET AUTOCOMMIT= 1;
25501 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25502 COMMIT WORK;
25503 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25504         
25505 # check special-1 success:      1
25506 UPDATE t1 SET f_charbig = '';
25507         
25508 # check special-2 success:      1
25509 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25510 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25511 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25512 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25513 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25514 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25515 'just inserted' FROM t0_template
25516 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25517 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25518 BEGIN
25519 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25520 f_charbig = 'updated by trigger'
25521       WHERE f_int1 = new.f_int1;
25522 END|
25523 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25524 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25525 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25526         
25527 # check trigger-1 success:      1
25528 DROP TRIGGER trg_1;
25529 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25530 f_int2 = CAST(f_char1 AS SIGNED INT),
25531 f_charbig = 'just inserted'
25532    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25533 DELETE FROM t0_aux
25534 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25535 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25536 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25537 'just inserted' FROM t0_template
25538 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25539 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25540 BEGIN
25541 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25542 f_charbig = 'updated by trigger'
25543       WHERE f_int1 = new.f_int1;
25544 END|
25545 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25546 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25547 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25548         
25549 # check trigger-2 success:      1
25550 DROP TRIGGER trg_1;
25551 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25552 f_int2 = CAST(f_char1 AS SIGNED INT),
25553 f_charbig = 'just inserted'
25554    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25555 DELETE FROM t0_aux
25556 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25557 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25558 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25559 'just inserted' FROM t0_template
25560 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25561 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25562 BEGIN
25563 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25564 f_charbig = 'updated by trigger'
25565       WHERE f_int1 = new.f_int1;
25566 END|
25567 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25568 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25569         
25570 # check trigger-3 success:      1
25571 DROP TRIGGER trg_1;
25572 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25573 f_int2 = CAST(f_char1 AS SIGNED INT),
25574 f_charbig = 'just inserted'
25575    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25576 DELETE FROM t0_aux
25577 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25578 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25579 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25580 'just inserted' FROM t0_template
25581 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25582 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25583 BEGIN
25584 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25585 f_charbig = 'updated by trigger'
25586       WHERE f_int1 = - old.f_int1;
25587 END|
25588 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25589 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25590         
25591 # check trigger-4 success:      1
25592 DROP TRIGGER trg_1;
25593 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25594 f_int2 = CAST(f_char1 AS SIGNED INT),
25595 f_charbig = 'just inserted'
25596    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25597 DELETE FROM t0_aux
25598 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25599 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25600 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25601 'just inserted' FROM t0_template
25602 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25603 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25604 BEGIN
25605 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25606 f_charbig = 'updated by trigger'
25607       WHERE f_int1 = new.f_int1;
25608 END|
25609 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25610 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25611         
25612 # check trigger-5 success:      1
25613 DROP TRIGGER trg_1;
25614 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25615 f_int2 = CAST(f_char1 AS SIGNED INT),
25616 f_charbig = 'just inserted'
25617    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25618 DELETE FROM t0_aux
25619 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25620 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25621 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25622 'just inserted' FROM t0_template
25623 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25624 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25625 BEGIN
25626 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25627 f_charbig = 'updated by trigger'
25628       WHERE f_int1 = - old.f_int1;
25629 END|
25630 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25631 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25632         
25633 # check trigger-6 success:      1
25634 DROP TRIGGER trg_1;
25635 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25636 f_int2 = CAST(f_char1 AS SIGNED INT),
25637 f_charbig = 'just inserted'
25638    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25639 DELETE FROM t0_aux
25640 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25641 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25642 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25643 'just inserted' FROM t0_template
25644 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25645 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25646 BEGIN
25647 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25648 f_charbig = 'updated by trigger'
25649       WHERE f_int1 = - old.f_int1;
25650 END|
25651 DELETE FROM t0_aux
25652 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25653         
25654 # check trigger-7 success:      1
25655 DROP TRIGGER trg_1;
25656 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25657 f_int2 = CAST(f_char1 AS SIGNED INT),
25658 f_charbig = 'just inserted'
25659    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25660 DELETE FROM t0_aux
25661 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25662 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25663 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25664 'just inserted' FROM t0_template
25665 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25666 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25667 BEGIN
25668 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25669 f_charbig = 'updated by trigger'
25670       WHERE f_int1 = - old.f_int1;
25671 END|
25672 DELETE FROM t0_aux
25673 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25674         
25675 # check trigger-8 success:      1
25676 DROP TRIGGER trg_1;
25677 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25678 f_int2 = CAST(f_char1 AS SIGNED INT),
25679 f_charbig = 'just inserted'
25680    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25681 DELETE FROM t0_aux
25682 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25683 DELETE FROM t1
25684 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25685 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25686 BEGIN
25687 SET new.f_int1 = old.f_int1 + @max_row,
25688 new.f_int2 = old.f_int2 - @max_row,
25689 new.f_charbig = '####updated per update trigger####';
25690 END|
25691 UPDATE t1
25692 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25693 f_charbig = '####updated per update statement itself####';
25694         
25695 # check trigger-9 success:      1
25696 DROP TRIGGER trg_2;
25697 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25698 f_int2 = CAST(f_char1 AS SIGNED INT),
25699 f_charbig = CONCAT('===',f_char1,'===');
25700 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25701 BEGIN
25702 SET new.f_int1 = new.f_int1 + @max_row,
25703 new.f_int2 = new.f_int2 - @max_row,
25704 new.f_charbig = '####updated per update trigger####';
25705 END|
25706 UPDATE t1
25707 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25708 f_charbig = '####updated per update statement itself####';
25709         
25710 # check trigger-10 success:     1
25711 DROP TRIGGER trg_2;
25712 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25713 f_int2 = CAST(f_char1 AS SIGNED INT),
25714 f_charbig = CONCAT('===',f_char1,'===');
25715 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25716 BEGIN
25717 SET new.f_int1 = @my_max1 + @counter,
25718 new.f_int2 = @my_min2 - @counter,
25719 new.f_charbig = '####updated per insert trigger####';
25720 SET @counter = @counter + 1;
25721 END|
25722 SET @counter = 1;
25723 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25724 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25725 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25726 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25727 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25728 ORDER BY f_int1;
25729 DROP TRIGGER trg_3;
25730         
25731 # check trigger-11 success:     1
25732 DELETE FROM t1
25733 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25734 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25735 AND f_charbig = '####updated per insert trigger####';
25736 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25737 BEGIN
25738 SET new.f_int1 = @my_max1 + @counter,
25739 new.f_int2 = @my_min2 - @counter,
25740 new.f_charbig = '####updated per insert trigger####';
25741 SET @counter = @counter + 1;
25742 END|
25743 SET @counter = 1;
25744 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25745 INSERT INTO t1 (f_char1, f_char2, f_charbig)
25746 SELECT CAST(f_int1 AS CHAR),
25747 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25748 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25749 ORDER BY f_int1;
25750 DROP TRIGGER trg_3;
25751         
25752 # check trigger-12 success:     1
25753 DELETE FROM t1
25754 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25755 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25756 AND f_charbig = '####updated per insert trigger####';
25757 ANALYZE  TABLE t1;
25758 Table   Op      Msg_type        Msg_text
25759 test.t1 analyze status  OK
25760 CHECK    TABLE t1 EXTENDED;
25761 Table   Op      Msg_type        Msg_text
25762 test.t1 check   status  OK
25763 CHECKSUM TABLE t1 EXTENDED;
25764 Table   Checksum
25765 test.t1 <some_value>
25766 OPTIMIZE TABLE t1;
25767 Table   Op      Msg_type        Msg_text
25768 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
25769 test.t1 optimize        status  OK
25770 # check layout success:    1
25771 REPAIR   TABLE t1 EXTENDED;
25772 Table   Op      Msg_type        Msg_text
25773 test.t1 repair  note    The storage engine for the table doesn't support repair
25774 # check layout success:    1
25775 TRUNCATE t1;
25776         
25777 # check TRUNCATE success:       1
25778 # check layout success:    1
25779 # End usability test (inc/partition_check.inc)
25780 DROP TABLE t1;
25781 CREATE TABLE t1 (
25782 f_int1 INTEGER,
25783 f_int2 INTEGER,
25784 f_char1 CHAR(20),
25785 f_char2 CHAR(20),
25786 f_charbig VARCHAR(1000)
25789 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
25790 (PARTITION parta VALUES LESS THAN (0),
25791 PARTITION partb VALUES LESS THAN (5),
25792 PARTITION partc VALUES LESS THAN (10),
25793 PARTITION partd VALUES LESS THAN (2147483646));
25794 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25795 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
25796 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
25797 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
25798 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25799 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
25800 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
25801 # Start usability test (inc/partition_check.inc)
25802 create_command
25803 SHOW CREATE TABLE t1;
25804 Table   Create Table
25805 t1      CREATE TABLE `t1` (
25806   `f_int1` mediumint(9) DEFAULT NULL,
25807   `f_int2` mediumint(9) DEFAULT NULL,
25808   `f_char1` char(20) DEFAULT NULL,
25809   `f_char2` char(20) DEFAULT NULL,
25810   `f_charbig` varchar(1000) DEFAULT NULL
25811 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
25812 /*!50100 PARTITION BY RANGE (f_int1)
25813 SUBPARTITION BY HASH (f_int2)
25814 SUBPARTITIONS 2
25815 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
25816  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
25817  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
25818  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
25820 # check prerequisites-1 success:    1
25821 # check COUNT(*) success:    1
25822 # check MIN/MAX(f_int1) success:    1
25823 # check MIN/MAX(f_int2) success:    1
25824 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25825 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25826 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25827 WHERE f_int1 IN (2,3);
25828 # check prerequisites-3 success:    1
25829 DELETE FROM t1 WHERE f_charbig = 'delete me';
25830 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
25831 # check read via f_int1 success: 1
25832 # check read via f_int2 success: 1
25833         
25834 # check multiple-1 success:     1
25835 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25836         
25837 # check multiple-2 success:     1
25838 INSERT INTO t1 SELECT * FROM t0_template
25839 WHERE MOD(f_int1,3) = 0;
25840         
25841 # check multiple-3 success:     1
25842 UPDATE t1 SET f_int1 = f_int1 + @max_row
25843 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25844 AND @max_row_div2 + @max_row_div4;
25845         
25846 # check multiple-4 success:     1
25847 DELETE FROM t1
25848 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25849 AND @max_row_div2 + @max_row_div4 + @max_row;
25850         
25851 # check multiple-5 success:     1
25852 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25853 INSERT INTO t1
25854 SET f_int1 = @cur_value , f_int2 = @cur_value,
25855 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25856 f_charbig = '#SINGLE#';
25857         
25858 # check single-1 success:       1
25859 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25860 INSERT INTO t1
25861 SET f_int1 = @cur_value , f_int2 = @cur_value,
25862 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25863 f_charbig = '#SINGLE#';
25864         
25865 # check single-2 success:       1
25866 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25867 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25868 UPDATE t1 SET f_int1 = @cur_value2
25869 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25870         
25871 # check single-3 success:       1
25872 SET @cur_value1= -1;
25873 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25874 UPDATE t1 SET f_int1 = @cur_value1
25875 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25876         
25877 # check single-4 success:       1
25878 SELECT MAX(f_int1) INTO @cur_value FROM t1;
25879 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25880         
25881 # check single-5 success:       1
25882 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25883         
25884 # check single-6 success:       1
25885 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25886 Warnings:
25887 Warning 1264    Out of range value for column 'f_int1' at row 1
25888 Warning 1264    Out of range value for column 'f_int2' at row 1
25889         
25890 # check single-7 success:       1
25891 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
25892 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25893 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25894 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25895 f_charbig = '#NULL#';
25896 INSERT INTO t1
25897 SET f_int1 = NULL , f_int2 = -@max_row,
25898 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25899 f_charbig = '#NULL#';
25900 # check null success:    1
25901         
25902 # check null-1 success:         1
25903 UPDATE t1 SET f_int1 = -@max_row
25904 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25905 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25906         
25907 # check null-2 success:         1
25908 UPDATE t1 SET f_int1 = NULL
25909 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25910 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25911         
25912 # check null-3 success:         1
25913 DELETE FROM t1
25914 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
25915 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
25916         
25917 # check null-4 success:         1
25918 DELETE FROM t1
25919 WHERE f_int1 = 0 AND f_int2 = 0
25920 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25921 AND f_charbig = '#NULL#';
25922 SET AUTOCOMMIT= 0;
25923 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25924 SELECT f_int1, f_int1, '', '', 'was inserted'
25925 FROM t0_template source_tab
25926 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25927         
25928 # check transactions-1 success:         1
25929 COMMIT WORK;
25930         
25931 # check transactions-2 success:         1
25932 ROLLBACK WORK;
25933         
25934 # check transactions-3 success:         1
25935 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25936 COMMIT WORK;
25937 ROLLBACK WORK;
25938         
25939 # check transactions-4 success:         1
25940 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25941 SELECT f_int1, f_int1, '', '', 'was inserted'
25942 FROM t0_template source_tab
25943 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25944         
25945 # check transactions-5 success:         1
25946 ROLLBACK WORK;
25947         
25948 # check transactions-6 success:         1
25949 # INFO: Storage engine used for t1 seems to be transactional.
25950 COMMIT;
25951         
25952 # check transactions-7 success:         1
25953 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25954 COMMIT WORK;
25955 SET @@session.sql_mode = 'traditional';
25956 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25957 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25958 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25959 '', '', 'was inserted' FROM t0_template
25960 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25961 ERROR 22012: Division by 0
25962 COMMIT;
25963         
25964 # check transactions-8 success:         1
25965 # INFO: Storage engine used for t1 seems to be able to revert
25966 #       changes made by the failing statement.
25967 SET @@session.sql_mode = '';
25968 SET AUTOCOMMIT= 1;
25969 DELETE FROM t1 WHERE f_charbig = 'was inserted';
25970 COMMIT WORK;
25971 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25972         
25973 # check special-1 success:      1
25974 UPDATE t1 SET f_charbig = '';
25975         
25976 # check special-2 success:      1
25977 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25978 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25979 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25980 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25981 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25982 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25983 'just inserted' FROM t0_template
25984 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25985 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25986 BEGIN
25987 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25988 f_charbig = 'updated by trigger'
25989       WHERE f_int1 = new.f_int1;
25990 END|
25991 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25992 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25993 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25994         
25995 # check trigger-1 success:      1
25996 DROP TRIGGER trg_1;
25997 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25998 f_int2 = CAST(f_char1 AS SIGNED INT),
25999 f_charbig = 'just inserted'
26000    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26001 DELETE FROM t0_aux
26002 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26003 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26004 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26005 'just inserted' FROM t0_template
26006 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26007 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26008 BEGIN
26009 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26010 f_charbig = 'updated by trigger'
26011       WHERE f_int1 = new.f_int1;
26012 END|
26013 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26014 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26015 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26016         
26017 # check trigger-2 success:      1
26018 DROP TRIGGER trg_1;
26019 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26020 f_int2 = CAST(f_char1 AS SIGNED INT),
26021 f_charbig = 'just inserted'
26022    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26023 DELETE FROM t0_aux
26024 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26025 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26026 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26027 'just inserted' FROM t0_template
26028 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26029 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26030 BEGIN
26031 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26032 f_charbig = 'updated by trigger'
26033       WHERE f_int1 = new.f_int1;
26034 END|
26035 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26036 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26037         
26038 # check trigger-3 success:      1
26039 DROP TRIGGER trg_1;
26040 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26041 f_int2 = CAST(f_char1 AS SIGNED INT),
26042 f_charbig = 'just inserted'
26043    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26044 DELETE FROM t0_aux
26045 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26046 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26047 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26048 'just inserted' FROM t0_template
26049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26050 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26051 BEGIN
26052 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26053 f_charbig = 'updated by trigger'
26054       WHERE f_int1 = - old.f_int1;
26055 END|
26056 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26057 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26058         
26059 # check trigger-4 success:      1
26060 DROP TRIGGER trg_1;
26061 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26062 f_int2 = CAST(f_char1 AS SIGNED INT),
26063 f_charbig = 'just inserted'
26064    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26065 DELETE FROM t0_aux
26066 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26067 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26068 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26069 'just inserted' FROM t0_template
26070 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26071 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26072 BEGIN
26073 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26074 f_charbig = 'updated by trigger'
26075       WHERE f_int1 = new.f_int1;
26076 END|
26077 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26078 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26079         
26080 # check trigger-5 success:      1
26081 DROP TRIGGER trg_1;
26082 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26083 f_int2 = CAST(f_char1 AS SIGNED INT),
26084 f_charbig = 'just inserted'
26085    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26086 DELETE FROM t0_aux
26087 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26088 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26089 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26090 'just inserted' FROM t0_template
26091 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26092 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26093 BEGIN
26094 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26095 f_charbig = 'updated by trigger'
26096       WHERE f_int1 = - old.f_int1;
26097 END|
26098 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26099 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26100         
26101 # check trigger-6 success:      1
26102 DROP TRIGGER trg_1;
26103 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26104 f_int2 = CAST(f_char1 AS SIGNED INT),
26105 f_charbig = 'just inserted'
26106    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26107 DELETE FROM t0_aux
26108 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26109 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26110 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26111 'just inserted' FROM t0_template
26112 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26113 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26114 BEGIN
26115 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26116 f_charbig = 'updated by trigger'
26117       WHERE f_int1 = - old.f_int1;
26118 END|
26119 DELETE FROM t0_aux
26120 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26121         
26122 # check trigger-7 success:      1
26123 DROP TRIGGER trg_1;
26124 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26125 f_int2 = CAST(f_char1 AS SIGNED INT),
26126 f_charbig = 'just inserted'
26127    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26128 DELETE FROM t0_aux
26129 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26130 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26131 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26132 'just inserted' FROM t0_template
26133 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26134 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26135 BEGIN
26136 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26137 f_charbig = 'updated by trigger'
26138       WHERE f_int1 = - old.f_int1;
26139 END|
26140 DELETE FROM t0_aux
26141 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26142         
26143 # check trigger-8 success:      1
26144 DROP TRIGGER trg_1;
26145 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26146 f_int2 = CAST(f_char1 AS SIGNED INT),
26147 f_charbig = 'just inserted'
26148    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26149 DELETE FROM t0_aux
26150 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26151 DELETE FROM t1
26152 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26153 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26154 BEGIN
26155 SET new.f_int1 = old.f_int1 + @max_row,
26156 new.f_int2 = old.f_int2 - @max_row,
26157 new.f_charbig = '####updated per update trigger####';
26158 END|
26159 UPDATE t1
26160 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26161 f_charbig = '####updated per update statement itself####';
26162         
26163 # check trigger-9 success:      1
26164 DROP TRIGGER trg_2;
26165 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26166 f_int2 = CAST(f_char1 AS SIGNED INT),
26167 f_charbig = CONCAT('===',f_char1,'===');
26168 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26169 BEGIN
26170 SET new.f_int1 = new.f_int1 + @max_row,
26171 new.f_int2 = new.f_int2 - @max_row,
26172 new.f_charbig = '####updated per update trigger####';
26173 END|
26174 UPDATE t1
26175 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26176 f_charbig = '####updated per update statement itself####';
26177         
26178 # check trigger-10 success:     1
26179 DROP TRIGGER trg_2;
26180 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26181 f_int2 = CAST(f_char1 AS SIGNED INT),
26182 f_charbig = CONCAT('===',f_char1,'===');
26183 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26184 BEGIN
26185 SET new.f_int1 = @my_max1 + @counter,
26186 new.f_int2 = @my_min2 - @counter,
26187 new.f_charbig = '####updated per insert trigger####';
26188 SET @counter = @counter + 1;
26189 END|
26190 SET @counter = 1;
26191 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26192 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26193 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26194 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26195 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26196 ORDER BY f_int1;
26197 DROP TRIGGER trg_3;
26198         
26199 # check trigger-11 success:     1
26200 DELETE FROM t1
26201 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26202 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26203 AND f_charbig = '####updated per insert trigger####';
26204 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26205 BEGIN
26206 SET new.f_int1 = @my_max1 + @counter,
26207 new.f_int2 = @my_min2 - @counter,
26208 new.f_charbig = '####updated per insert trigger####';
26209 SET @counter = @counter + 1;
26210 END|
26211 SET @counter = 1;
26212 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26213 INSERT INTO t1 (f_char1, f_char2, f_charbig)
26214 SELECT CAST(f_int1 AS CHAR),
26215 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26216 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26217 ORDER BY f_int1;
26218 DROP TRIGGER trg_3;
26219         
26220 # check trigger-12 success:     1
26221 DELETE FROM t1
26222 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26223 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26224 AND f_charbig = '####updated per insert trigger####';
26225 ANALYZE  TABLE t1;
26226 Table   Op      Msg_type        Msg_text
26227 test.t1 analyze status  OK
26228 CHECK    TABLE t1 EXTENDED;
26229 Table   Op      Msg_type        Msg_text
26230 test.t1 check   status  OK
26231 CHECKSUM TABLE t1 EXTENDED;
26232 Table   Checksum
26233 test.t1 <some_value>
26234 OPTIMIZE TABLE t1;
26235 Table   Op      Msg_type        Msg_text
26236 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
26237 test.t1 optimize        status  OK
26238 # check layout success:    1
26239 REPAIR   TABLE t1 EXTENDED;
26240 Table   Op      Msg_type        Msg_text
26241 test.t1 repair  note    The storage engine for the table doesn't support repair
26242 # check layout success:    1
26243 TRUNCATE t1;
26244         
26245 # check TRUNCATE success:       1
26246 # check layout success:    1
26247 # End usability test (inc/partition_check.inc)
26248 DROP TABLE t1;
26249 CREATE TABLE t1 (
26250 f_int1 INTEGER,
26251 f_int2 INTEGER,
26252 f_char1 CHAR(20),
26253 f_char2 CHAR(20),
26254 f_charbig VARCHAR(1000)
26257 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
26258 (PARTITION part1 VALUES LESS THAN (0)
26259 (SUBPARTITION subpart11, SUBPARTITION subpart12),
26260 PARTITION part2 VALUES LESS THAN (5)
26261 (SUBPARTITION subpart21, SUBPARTITION subpart22),
26262 PARTITION part3 VALUES LESS THAN (10)
26263 (SUBPARTITION subpart31, SUBPARTITION subpart32),
26264 PARTITION part4 VALUES LESS THAN (2147483646)
26265 (SUBPARTITION subpart41, SUBPARTITION subpart42));
26266 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26267 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
26268 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
26269 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
26270 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26271 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
26272 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
26273 # Start usability test (inc/partition_check.inc)
26274 create_command
26275 SHOW CREATE TABLE t1;
26276 Table   Create Table
26277 t1      CREATE TABLE `t1` (
26278   `f_int1` mediumint(9) DEFAULT NULL,
26279   `f_int2` mediumint(9) DEFAULT NULL,
26280   `f_char1` char(20) DEFAULT NULL,
26281   `f_char2` char(20) DEFAULT NULL,
26282   `f_charbig` varchar(1000) DEFAULT NULL
26283 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
26284 /*!50100 PARTITION BY RANGE (f_int1)
26285 SUBPARTITION BY KEY (f_int2)
26286 (PARTITION part1 VALUES LESS THAN (0)
26287  (SUBPARTITION subpart11 ENGINE = InnoDB,
26288   SUBPARTITION subpart12 ENGINE = InnoDB),
26289  PARTITION part2 VALUES LESS THAN (5)
26290  (SUBPARTITION subpart21 ENGINE = InnoDB,
26291   SUBPARTITION subpart22 ENGINE = InnoDB),
26292  PARTITION part3 VALUES LESS THAN (10)
26293  (SUBPARTITION subpart31 ENGINE = InnoDB,
26294   SUBPARTITION subpart32 ENGINE = InnoDB),
26295  PARTITION part4 VALUES LESS THAN (2147483646)
26296  (SUBPARTITION subpart41 ENGINE = InnoDB,
26297   SUBPARTITION subpart42 ENGINE = InnoDB)) */
26299 # check prerequisites-1 success:    1
26300 # check COUNT(*) success:    1
26301 # check MIN/MAX(f_int1) success:    1
26302 # check MIN/MAX(f_int2) success:    1
26303 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26304 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26305 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26306 WHERE f_int1 IN (2,3);
26307 # check prerequisites-3 success:    1
26308 DELETE FROM t1 WHERE f_charbig = 'delete me';
26309 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
26310 # check read via f_int1 success: 1
26311 # check read via f_int2 success: 1
26312         
26313 # check multiple-1 success:     1
26314 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26315         
26316 # check multiple-2 success:     1
26317 INSERT INTO t1 SELECT * FROM t0_template
26318 WHERE MOD(f_int1,3) = 0;
26319         
26320 # check multiple-3 success:     1
26321 UPDATE t1 SET f_int1 = f_int1 + @max_row
26322 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26323 AND @max_row_div2 + @max_row_div4;
26324         
26325 # check multiple-4 success:     1
26326 DELETE FROM t1
26327 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26328 AND @max_row_div2 + @max_row_div4 + @max_row;
26329         
26330 # check multiple-5 success:     1
26331 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26332 INSERT INTO t1
26333 SET f_int1 = @cur_value , f_int2 = @cur_value,
26334 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26335 f_charbig = '#SINGLE#';
26336         
26337 # check single-1 success:       1
26338 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26339 INSERT INTO t1
26340 SET f_int1 = @cur_value , f_int2 = @cur_value,
26341 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26342 f_charbig = '#SINGLE#';
26343         
26344 # check single-2 success:       1
26345 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26346 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26347 UPDATE t1 SET f_int1 = @cur_value2
26348 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26349         
26350 # check single-3 success:       1
26351 SET @cur_value1= -1;
26352 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26353 UPDATE t1 SET f_int1 = @cur_value1
26354 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26355         
26356 # check single-4 success:       1
26357 SELECT MAX(f_int1) INTO @cur_value FROM t1;
26358 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26359         
26360 # check single-5 success:       1
26361 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26362         
26363 # check single-6 success:       1
26364 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26365 Warnings:
26366 Warning 1264    Out of range value for column 'f_int1' at row 1
26367 Warning 1264    Out of range value for column 'f_int2' at row 1
26368         
26369 # check single-7 success:       1
26370 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
26371 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26372 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26373 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26374 f_charbig = '#NULL#';
26375 INSERT INTO t1
26376 SET f_int1 = NULL , f_int2 = -@max_row,
26377 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26378 f_charbig = '#NULL#';
26379 # check null success:    1
26380         
26381 # check null-1 success:         1
26382 UPDATE t1 SET f_int1 = -@max_row
26383 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26384 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26385         
26386 # check null-2 success:         1
26387 UPDATE t1 SET f_int1 = NULL
26388 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26389 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26390         
26391 # check null-3 success:         1
26392 DELETE FROM t1
26393 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26394 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26395         
26396 # check null-4 success:         1
26397 DELETE FROM t1
26398 WHERE f_int1 = 0 AND f_int2 = 0
26399 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26400 AND f_charbig = '#NULL#';
26401 SET AUTOCOMMIT= 0;
26402 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26403 SELECT f_int1, f_int1, '', '', 'was inserted'
26404 FROM t0_template source_tab
26405 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26406         
26407 # check transactions-1 success:         1
26408 COMMIT WORK;
26409         
26410 # check transactions-2 success:         1
26411 ROLLBACK WORK;
26412         
26413 # check transactions-3 success:         1
26414 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26415 COMMIT WORK;
26416 ROLLBACK WORK;
26417         
26418 # check transactions-4 success:         1
26419 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26420 SELECT f_int1, f_int1, '', '', 'was inserted'
26421 FROM t0_template source_tab
26422 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26423         
26424 # check transactions-5 success:         1
26425 ROLLBACK WORK;
26426         
26427 # check transactions-6 success:         1
26428 # INFO: Storage engine used for t1 seems to be transactional.
26429 COMMIT;
26430         
26431 # check transactions-7 success:         1
26432 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26433 COMMIT WORK;
26434 SET @@session.sql_mode = 'traditional';
26435 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26436 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26437 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26438 '', '', 'was inserted' FROM t0_template
26439 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26440 ERROR 22012: Division by 0
26441 COMMIT;
26442         
26443 # check transactions-8 success:         1
26444 # INFO: Storage engine used for t1 seems to be able to revert
26445 #       changes made by the failing statement.
26446 SET @@session.sql_mode = '';
26447 SET AUTOCOMMIT= 1;
26448 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26449 COMMIT WORK;
26450 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26451         
26452 # check special-1 success:      1
26453 UPDATE t1 SET f_charbig = '';
26454         
26455 # check special-2 success:      1
26456 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26457 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26458 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26459 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26460 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26461 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26462 'just inserted' FROM t0_template
26463 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26464 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26465 BEGIN
26466 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26467 f_charbig = 'updated by trigger'
26468       WHERE f_int1 = new.f_int1;
26469 END|
26470 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26471 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26472 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26473         
26474 # check trigger-1 success:      1
26475 DROP TRIGGER trg_1;
26476 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26477 f_int2 = CAST(f_char1 AS SIGNED INT),
26478 f_charbig = 'just inserted'
26479    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26480 DELETE FROM t0_aux
26481 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26482 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26483 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26484 'just inserted' FROM t0_template
26485 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26486 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26487 BEGIN
26488 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26489 f_charbig = 'updated by trigger'
26490       WHERE f_int1 = new.f_int1;
26491 END|
26492 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26493 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26494 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26495         
26496 # check trigger-2 success:      1
26497 DROP TRIGGER trg_1;
26498 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26499 f_int2 = CAST(f_char1 AS SIGNED INT),
26500 f_charbig = 'just inserted'
26501    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26502 DELETE FROM t0_aux
26503 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26504 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26505 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26506 'just inserted' FROM t0_template
26507 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26508 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26509 BEGIN
26510 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26511 f_charbig = 'updated by trigger'
26512       WHERE f_int1 = new.f_int1;
26513 END|
26514 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26515 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26516         
26517 # check trigger-3 success:      1
26518 DROP TRIGGER trg_1;
26519 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26520 f_int2 = CAST(f_char1 AS SIGNED INT),
26521 f_charbig = 'just inserted'
26522    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26523 DELETE FROM t0_aux
26524 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26525 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26526 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26527 'just inserted' FROM t0_template
26528 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26529 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26530 BEGIN
26531 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26532 f_charbig = 'updated by trigger'
26533       WHERE f_int1 = - old.f_int1;
26534 END|
26535 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26536 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26537         
26538 # check trigger-4 success:      1
26539 DROP TRIGGER trg_1;
26540 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26541 f_int2 = CAST(f_char1 AS SIGNED INT),
26542 f_charbig = 'just inserted'
26543    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26544 DELETE FROM t0_aux
26545 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26546 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26547 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26548 'just inserted' FROM t0_template
26549 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26550 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26551 BEGIN
26552 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26553 f_charbig = 'updated by trigger'
26554       WHERE f_int1 = new.f_int1;
26555 END|
26556 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26557 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26558         
26559 # check trigger-5 success:      1
26560 DROP TRIGGER trg_1;
26561 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26562 f_int2 = CAST(f_char1 AS SIGNED INT),
26563 f_charbig = 'just inserted'
26564    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26565 DELETE FROM t0_aux
26566 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26567 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26568 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26569 'just inserted' FROM t0_template
26570 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26571 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26572 BEGIN
26573 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26574 f_charbig = 'updated by trigger'
26575       WHERE f_int1 = - old.f_int1;
26576 END|
26577 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26578 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26579         
26580 # check trigger-6 success:      1
26581 DROP TRIGGER trg_1;
26582 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26583 f_int2 = CAST(f_char1 AS SIGNED INT),
26584 f_charbig = 'just inserted'
26585    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26586 DELETE FROM t0_aux
26587 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26588 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26589 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26590 'just inserted' FROM t0_template
26591 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26592 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26593 BEGIN
26594 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26595 f_charbig = 'updated by trigger'
26596       WHERE f_int1 = - old.f_int1;
26597 END|
26598 DELETE FROM t0_aux
26599 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26600         
26601 # check trigger-7 success:      1
26602 DROP TRIGGER trg_1;
26603 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26604 f_int2 = CAST(f_char1 AS SIGNED INT),
26605 f_charbig = 'just inserted'
26606    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26607 DELETE FROM t0_aux
26608 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26610 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26611 'just inserted' FROM t0_template
26612 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26613 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26614 BEGIN
26615 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26616 f_charbig = 'updated by trigger'
26617       WHERE f_int1 = - old.f_int1;
26618 END|
26619 DELETE FROM t0_aux
26620 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26621         
26622 # check trigger-8 success:      1
26623 DROP TRIGGER trg_1;
26624 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26625 f_int2 = CAST(f_char1 AS SIGNED INT),
26626 f_charbig = 'just inserted'
26627    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26628 DELETE FROM t0_aux
26629 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26630 DELETE FROM t1
26631 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26632 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26633 BEGIN
26634 SET new.f_int1 = old.f_int1 + @max_row,
26635 new.f_int2 = old.f_int2 - @max_row,
26636 new.f_charbig = '####updated per update trigger####';
26637 END|
26638 UPDATE t1
26639 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26640 f_charbig = '####updated per update statement itself####';
26641         
26642 # check trigger-9 success:      1
26643 DROP TRIGGER trg_2;
26644 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26645 f_int2 = CAST(f_char1 AS SIGNED INT),
26646 f_charbig = CONCAT('===',f_char1,'===');
26647 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26648 BEGIN
26649 SET new.f_int1 = new.f_int1 + @max_row,
26650 new.f_int2 = new.f_int2 - @max_row,
26651 new.f_charbig = '####updated per update trigger####';
26652 END|
26653 UPDATE t1
26654 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26655 f_charbig = '####updated per update statement itself####';
26656         
26657 # check trigger-10 success:     1
26658 DROP TRIGGER trg_2;
26659 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26660 f_int2 = CAST(f_char1 AS SIGNED INT),
26661 f_charbig = CONCAT('===',f_char1,'===');
26662 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26663 BEGIN
26664 SET new.f_int1 = @my_max1 + @counter,
26665 new.f_int2 = @my_min2 - @counter,
26666 new.f_charbig = '####updated per insert trigger####';
26667 SET @counter = @counter + 1;
26668 END|
26669 SET @counter = 1;
26670 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26671 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26672 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26673 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26674 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26675 ORDER BY f_int1;
26676 DROP TRIGGER trg_3;
26677         
26678 # check trigger-11 success:     1
26679 DELETE FROM t1
26680 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26681 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26682 AND f_charbig = '####updated per insert trigger####';
26683 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26684 BEGIN
26685 SET new.f_int1 = @my_max1 + @counter,
26686 new.f_int2 = @my_min2 - @counter,
26687 new.f_charbig = '####updated per insert trigger####';
26688 SET @counter = @counter + 1;
26689 END|
26690 SET @counter = 1;
26691 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26692 INSERT INTO t1 (f_char1, f_char2, f_charbig)
26693 SELECT CAST(f_int1 AS CHAR),
26694 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26695 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26696 ORDER BY f_int1;
26697 DROP TRIGGER trg_3;
26698         
26699 # check trigger-12 success:     1
26700 DELETE FROM t1
26701 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26702 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26703 AND f_charbig = '####updated per insert trigger####';
26704 ANALYZE  TABLE t1;
26705 Table   Op      Msg_type        Msg_text
26706 test.t1 analyze status  OK
26707 CHECK    TABLE t1 EXTENDED;
26708 Table   Op      Msg_type        Msg_text
26709 test.t1 check   status  OK
26710 CHECKSUM TABLE t1 EXTENDED;
26711 Table   Checksum
26712 test.t1 <some_value>
26713 OPTIMIZE TABLE t1;
26714 Table   Op      Msg_type        Msg_text
26715 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
26716 test.t1 optimize        status  OK
26717 # check layout success:    1
26718 REPAIR   TABLE t1 EXTENDED;
26719 Table   Op      Msg_type        Msg_text
26720 test.t1 repair  note    The storage engine for the table doesn't support repair
26721 # check layout success:    1
26722 TRUNCATE t1;
26723         
26724 # check TRUNCATE success:       1
26725 # check layout success:    1
26726 # End usability test (inc/partition_check.inc)
26727 DROP TABLE t1;
26728 CREATE TABLE t1 (
26729 f_int1 INTEGER,
26730 f_int2 INTEGER,
26731 f_char1 CHAR(20),
26732 f_char2 CHAR(20),
26733 f_charbig VARCHAR(1000)
26736 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
26737 (PARTITION part1 VALUES IN (0)
26738 (SUBPARTITION sp11, SUBPARTITION sp12),
26739 PARTITION part2 VALUES IN (1)
26740 (SUBPARTITION sp21, SUBPARTITION sp22),
26741 PARTITION part3 VALUES IN (2)
26742 (SUBPARTITION sp31, SUBPARTITION sp32),
26743 PARTITION part4 VALUES IN (NULL)
26744 (SUBPARTITION sp41, SUBPARTITION sp42));
26745 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26746 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
26747 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
26748 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
26749 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26750 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
26751 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
26752 # Start usability test (inc/partition_check.inc)
26753 create_command
26754 SHOW CREATE TABLE t1;
26755 Table   Create Table
26756 t1      CREATE TABLE `t1` (
26757   `f_int1` mediumint(9) DEFAULT NULL,
26758   `f_int2` mediumint(9) DEFAULT NULL,
26759   `f_char1` char(20) DEFAULT NULL,
26760   `f_char2` char(20) DEFAULT NULL,
26761   `f_charbig` varchar(1000) DEFAULT NULL
26762 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
26763 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
26764 SUBPARTITION BY HASH (f_int2 + 1)
26765 (PARTITION part1 VALUES IN (0)
26766  (SUBPARTITION sp11 ENGINE = InnoDB,
26767   SUBPARTITION sp12 ENGINE = InnoDB),
26768  PARTITION part2 VALUES IN (1)
26769  (SUBPARTITION sp21 ENGINE = InnoDB,
26770   SUBPARTITION sp22 ENGINE = InnoDB),
26771  PARTITION part3 VALUES IN (2)
26772  (SUBPARTITION sp31 ENGINE = InnoDB,
26773   SUBPARTITION sp32 ENGINE = InnoDB),
26774  PARTITION part4 VALUES IN (NULL)
26775  (SUBPARTITION sp41 ENGINE = InnoDB,
26776   SUBPARTITION sp42 ENGINE = InnoDB)) */
26778 # check prerequisites-1 success:    1
26779 # check COUNT(*) success:    1
26780 # check MIN/MAX(f_int1) success:    1
26781 # check MIN/MAX(f_int2) success:    1
26782 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26783 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26784 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26785 WHERE f_int1 IN (2,3);
26786 # check prerequisites-3 success:    1
26787 DELETE FROM t1 WHERE f_charbig = 'delete me';
26788 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
26789 # check read via f_int1 success: 1
26790 # check read via f_int2 success: 1
26791         
26792 # check multiple-1 success:     1
26793 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26794         
26795 # check multiple-2 success:     1
26796 INSERT INTO t1 SELECT * FROM t0_template
26797 WHERE MOD(f_int1,3) = 0;
26798         
26799 # check multiple-3 success:     1
26800 UPDATE t1 SET f_int1 = f_int1 + @max_row
26801 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26802 AND @max_row_div2 + @max_row_div4;
26803         
26804 # check multiple-4 success:     1
26805 DELETE FROM t1
26806 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26807 AND @max_row_div2 + @max_row_div4 + @max_row;
26808         
26809 # check multiple-5 success:     1
26810 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26811 INSERT INTO t1
26812 SET f_int1 = @cur_value , f_int2 = @cur_value,
26813 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26814 f_charbig = '#SINGLE#';
26815         
26816 # check single-1 success:       1
26817 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26818 INSERT INTO t1
26819 SET f_int1 = @cur_value , f_int2 = @cur_value,
26820 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26821 f_charbig = '#SINGLE#';
26822         
26823 # check single-2 success:       1
26824 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26825 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26826 UPDATE t1 SET f_int1 = @cur_value2
26827 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26828         
26829 # check single-3 success:       1
26830 SET @cur_value1= -1;
26831 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26832 UPDATE t1 SET f_int1 = @cur_value1
26833 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26834         
26835 # check single-4 success:       1
26836 SELECT MAX(f_int1) INTO @cur_value FROM t1;
26837 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26838         
26839 # check single-5 success:       1
26840 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26841         
26842 # check single-6 success:       1
26843 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26844 Warnings:
26845 Warning 1264    Out of range value for column 'f_int1' at row 1
26846 Warning 1264    Out of range value for column 'f_int2' at row 1
26847         
26848 # check single-7 success:       1
26849 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
26850 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26851 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26852 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26853 f_charbig = '#NULL#';
26854 INSERT INTO t1
26855 SET f_int1 = NULL , f_int2 = -@max_row,
26856 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26857 f_charbig = '#NULL#';
26858 # check null success:    1
26859         
26860 # check null-1 success:         1
26861 UPDATE t1 SET f_int1 = -@max_row
26862 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26863 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26864         
26865 # check null-2 success:         1
26866 UPDATE t1 SET f_int1 = NULL
26867 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26868 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26869         
26870 # check null-3 success:         1
26871 DELETE FROM t1
26872 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
26873 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
26874         
26875 # check null-4 success:         1
26876 DELETE FROM t1
26877 WHERE f_int1 = 0 AND f_int2 = 0
26878 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26879 AND f_charbig = '#NULL#';
26880 SET AUTOCOMMIT= 0;
26881 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26882 SELECT f_int1, f_int1, '', '', 'was inserted'
26883 FROM t0_template source_tab
26884 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26885         
26886 # check transactions-1 success:         1
26887 COMMIT WORK;
26888         
26889 # check transactions-2 success:         1
26890 ROLLBACK WORK;
26891         
26892 # check transactions-3 success:         1
26893 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26894 COMMIT WORK;
26895 ROLLBACK WORK;
26896         
26897 # check transactions-4 success:         1
26898 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26899 SELECT f_int1, f_int1, '', '', 'was inserted'
26900 FROM t0_template source_tab
26901 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26902         
26903 # check transactions-5 success:         1
26904 ROLLBACK WORK;
26905         
26906 # check transactions-6 success:         1
26907 # INFO: Storage engine used for t1 seems to be transactional.
26908 COMMIT;
26909         
26910 # check transactions-7 success:         1
26911 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26912 COMMIT WORK;
26913 SET @@session.sql_mode = 'traditional';
26914 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26915 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26916 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26917 '', '', 'was inserted' FROM t0_template
26918 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26919 ERROR 22012: Division by 0
26920 COMMIT;
26921         
26922 # check transactions-8 success:         1
26923 # INFO: Storage engine used for t1 seems to be able to revert
26924 #       changes made by the failing statement.
26925 SET @@session.sql_mode = '';
26926 SET AUTOCOMMIT= 1;
26927 DELETE FROM t1 WHERE f_charbig = 'was inserted';
26928 COMMIT WORK;
26929 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26930         
26931 # check special-1 success:      1
26932 UPDATE t1 SET f_charbig = '';
26933         
26934 # check special-2 success:      1
26935 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26936 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26937 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26938 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26939 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26940 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26941 'just inserted' FROM t0_template
26942 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26943 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26944 BEGIN
26945 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26946 f_charbig = 'updated by trigger'
26947       WHERE f_int1 = new.f_int1;
26948 END|
26949 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26950 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26951 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26952         
26953 # check trigger-1 success:      1
26954 DROP TRIGGER trg_1;
26955 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26956 f_int2 = CAST(f_char1 AS SIGNED INT),
26957 f_charbig = 'just inserted'
26958    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26959 DELETE FROM t0_aux
26960 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26961 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26962 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26963 'just inserted' FROM t0_template
26964 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26965 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26966 BEGIN
26967 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26968 f_charbig = 'updated by trigger'
26969       WHERE f_int1 = new.f_int1;
26970 END|
26971 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26972 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26973 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26974         
26975 # check trigger-2 success:      1
26976 DROP TRIGGER trg_1;
26977 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26978 f_int2 = CAST(f_char1 AS SIGNED INT),
26979 f_charbig = 'just inserted'
26980    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26981 DELETE FROM t0_aux
26982 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26983 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26984 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26985 'just inserted' FROM t0_template
26986 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26987 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26988 BEGIN
26989 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26990 f_charbig = 'updated by trigger'
26991       WHERE f_int1 = new.f_int1;
26992 END|
26993 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26994 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26995         
26996 # check trigger-3 success:      1
26997 DROP TRIGGER trg_1;
26998 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26999 f_int2 = CAST(f_char1 AS SIGNED INT),
27000 f_charbig = 'just inserted'
27001    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27002 DELETE FROM t0_aux
27003 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27004 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27005 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27006 'just inserted' FROM t0_template
27007 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27008 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27009 BEGIN
27010 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27011 f_charbig = 'updated by trigger'
27012       WHERE f_int1 = - old.f_int1;
27013 END|
27014 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27015 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27016         
27017 # check trigger-4 success:      1
27018 DROP TRIGGER trg_1;
27019 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27020 f_int2 = CAST(f_char1 AS SIGNED INT),
27021 f_charbig = 'just inserted'
27022    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27023 DELETE FROM t0_aux
27024 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27025 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27026 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27027 'just inserted' FROM t0_template
27028 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27029 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27030 BEGIN
27031 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27032 f_charbig = 'updated by trigger'
27033       WHERE f_int1 = new.f_int1;
27034 END|
27035 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27036 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27037         
27038 # check trigger-5 success:      1
27039 DROP TRIGGER trg_1;
27040 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27041 f_int2 = CAST(f_char1 AS SIGNED INT),
27042 f_charbig = 'just inserted'
27043    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27044 DELETE FROM t0_aux
27045 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27046 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27047 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27048 'just inserted' FROM t0_template
27049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27050 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27051 BEGIN
27052 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27053 f_charbig = 'updated by trigger'
27054       WHERE f_int1 = - old.f_int1;
27055 END|
27056 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27057 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27058         
27059 # check trigger-6 success:      1
27060 DROP TRIGGER trg_1;
27061 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27062 f_int2 = CAST(f_char1 AS SIGNED INT),
27063 f_charbig = 'just inserted'
27064    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27065 DELETE FROM t0_aux
27066 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27067 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27068 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27069 'just inserted' FROM t0_template
27070 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27071 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27072 BEGIN
27073 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27074 f_charbig = 'updated by trigger'
27075       WHERE f_int1 = - old.f_int1;
27076 END|
27077 DELETE FROM t0_aux
27078 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27079         
27080 # check trigger-7 success:      1
27081 DROP TRIGGER trg_1;
27082 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27083 f_int2 = CAST(f_char1 AS SIGNED INT),
27084 f_charbig = 'just inserted'
27085    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27086 DELETE FROM t0_aux
27087 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27088 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27089 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27090 'just inserted' FROM t0_template
27091 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27092 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27093 BEGIN
27094 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27095 f_charbig = 'updated by trigger'
27096       WHERE f_int1 = - old.f_int1;
27097 END|
27098 DELETE FROM t0_aux
27099 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27100         
27101 # check trigger-8 success:      1
27102 DROP TRIGGER trg_1;
27103 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27104 f_int2 = CAST(f_char1 AS SIGNED INT),
27105 f_charbig = 'just inserted'
27106    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27107 DELETE FROM t0_aux
27108 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27109 DELETE FROM t1
27110 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27111 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27112 BEGIN
27113 SET new.f_int1 = old.f_int1 + @max_row,
27114 new.f_int2 = old.f_int2 - @max_row,
27115 new.f_charbig = '####updated per update trigger####';
27116 END|
27117 UPDATE t1
27118 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27119 f_charbig = '####updated per update statement itself####';
27120         
27121 # check trigger-9 success:      1
27122 DROP TRIGGER trg_2;
27123 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27124 f_int2 = CAST(f_char1 AS SIGNED INT),
27125 f_charbig = CONCAT('===',f_char1,'===');
27126 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27127 BEGIN
27128 SET new.f_int1 = new.f_int1 + @max_row,
27129 new.f_int2 = new.f_int2 - @max_row,
27130 new.f_charbig = '####updated per update trigger####';
27131 END|
27132 UPDATE t1
27133 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27134 f_charbig = '####updated per update statement itself####';
27135         
27136 # check trigger-10 success:     1
27137 DROP TRIGGER trg_2;
27138 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27139 f_int2 = CAST(f_char1 AS SIGNED INT),
27140 f_charbig = CONCAT('===',f_char1,'===');
27141 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27142 BEGIN
27143 SET new.f_int1 = @my_max1 + @counter,
27144 new.f_int2 = @my_min2 - @counter,
27145 new.f_charbig = '####updated per insert trigger####';
27146 SET @counter = @counter + 1;
27147 END|
27148 SET @counter = 1;
27149 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27150 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27151 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27152 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27153 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27154 ORDER BY f_int1;
27155 DROP TRIGGER trg_3;
27156         
27157 # check trigger-11 success:     1
27158 DELETE FROM t1
27159 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27160 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27161 AND f_charbig = '####updated per insert trigger####';
27162 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27163 BEGIN
27164 SET new.f_int1 = @my_max1 + @counter,
27165 new.f_int2 = @my_min2 - @counter,
27166 new.f_charbig = '####updated per insert trigger####';
27167 SET @counter = @counter + 1;
27168 END|
27169 SET @counter = 1;
27170 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27171 INSERT INTO t1 (f_char1, f_char2, f_charbig)
27172 SELECT CAST(f_int1 AS CHAR),
27173 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27175 ORDER BY f_int1;
27176 DROP TRIGGER trg_3;
27177         
27178 # check trigger-12 success:     1
27179 DELETE FROM t1
27180 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27181 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27182 AND f_charbig = '####updated per insert trigger####';
27183 ANALYZE  TABLE t1;
27184 Table   Op      Msg_type        Msg_text
27185 test.t1 analyze status  OK
27186 CHECK    TABLE t1 EXTENDED;
27187 Table   Op      Msg_type        Msg_text
27188 test.t1 check   status  OK
27189 CHECKSUM TABLE t1 EXTENDED;
27190 Table   Checksum
27191 test.t1 <some_value>
27192 OPTIMIZE TABLE t1;
27193 Table   Op      Msg_type        Msg_text
27194 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
27195 test.t1 optimize        status  OK
27196 # check layout success:    1
27197 REPAIR   TABLE t1 EXTENDED;
27198 Table   Op      Msg_type        Msg_text
27199 test.t1 repair  note    The storage engine for the table doesn't support repair
27200 # check layout success:    1
27201 TRUNCATE t1;
27202         
27203 # check TRUNCATE success:       1
27204 # check layout success:    1
27205 # End usability test (inc/partition_check.inc)
27206 DROP TABLE t1;
27207 CREATE TABLE t1 (
27208 f_int1 INTEGER,
27209 f_int2 INTEGER,
27210 f_char1 CHAR(20),
27211 f_char2 CHAR(20),
27212 f_charbig VARCHAR(1000)
27215 PARTITION BY LIST(ABS(MOD(f_int1,2)))
27216 SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
27217 (PARTITION part1 VALUES IN (0),
27218  PARTITION part2 VALUES IN (1),
27219  PARTITION part3 VALUES IN (NULL));
27220 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27221 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
27222 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
27223 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
27224 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27225 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
27226 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
27227 # Start usability test (inc/partition_check.inc)
27228 create_command
27229 SHOW CREATE TABLE t1;
27230 Table   Create Table
27231 t1      CREATE TABLE `t1` (
27232   `f_int1` mediumint(9) DEFAULT NULL,
27233   `f_int2` mediumint(9) DEFAULT NULL,
27234   `f_char1` char(20) DEFAULT NULL,
27235   `f_char2` char(20) DEFAULT NULL,
27236   `f_charbig` varchar(1000) DEFAULT NULL
27237 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
27238 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
27239 SUBPARTITION BY KEY (f_int2)
27240 SUBPARTITIONS 3
27241 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
27242  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
27243  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
27245 # check prerequisites-1 success:    1
27246 # check COUNT(*) success:    1
27247 # check MIN/MAX(f_int1) success:    1
27248 # check MIN/MAX(f_int2) success:    1
27249 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27250 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27251 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27252 WHERE f_int1 IN (2,3);
27253 # check prerequisites-3 success:    1
27254 DELETE FROM t1 WHERE f_charbig = 'delete me';
27255 # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
27256 # check read via f_int1 success: 1
27257 # check read via f_int2 success: 1
27258         
27259 # check multiple-1 success:     1
27260 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27261         
27262 # check multiple-2 success:     1
27263 INSERT INTO t1 SELECT * FROM t0_template
27264 WHERE MOD(f_int1,3) = 0;
27265         
27266 # check multiple-3 success:     1
27267 UPDATE t1 SET f_int1 = f_int1 + @max_row
27268 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27269 AND @max_row_div2 + @max_row_div4;
27270         
27271 # check multiple-4 success:     1
27272 DELETE FROM t1
27273 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27274 AND @max_row_div2 + @max_row_div4 + @max_row;
27275         
27276 # check multiple-5 success:     1
27277 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27278 INSERT INTO t1
27279 SET f_int1 = @cur_value , f_int2 = @cur_value,
27280 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27281 f_charbig = '#SINGLE#';
27282         
27283 # check single-1 success:       1
27284 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27285 INSERT INTO t1
27286 SET f_int1 = @cur_value , f_int2 = @cur_value,
27287 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27288 f_charbig = '#SINGLE#';
27289         
27290 # check single-2 success:       1
27291 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27292 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27293 UPDATE t1 SET f_int1 = @cur_value2
27294 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27295         
27296 # check single-3 success:       1
27297 SET @cur_value1= -1;
27298 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27299 UPDATE t1 SET f_int1 = @cur_value1
27300 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27301         
27302 # check single-4 success:       1
27303 SELECT MAX(f_int1) INTO @cur_value FROM t1;
27304 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27305         
27306 # check single-5 success:       1
27307 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27308         
27309 # check single-6 success:       1
27310 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27311 Warnings:
27312 Warning 1264    Out of range value for column 'f_int1' at row 1
27313 Warning 1264    Out of range value for column 'f_int2' at row 1
27314         
27315 # check single-7 success:       1
27316 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27317 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27318 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27319 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27320 f_charbig = '#NULL#';
27321 INSERT INTO t1
27322 SET f_int1 = NULL , f_int2 = -@max_row,
27323 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27324 f_charbig = '#NULL#';
27325 # check null success:    1
27326         
27327 # check null-1 success:         1
27328 UPDATE t1 SET f_int1 = -@max_row
27329 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27330 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27331         
27332 # check null-2 success:         1
27333 UPDATE t1 SET f_int1 = NULL
27334 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27335 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27336         
27337 # check null-3 success:         1
27338 DELETE FROM t1
27339 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
27340 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
27341         
27342 # check null-4 success:         1
27343 DELETE FROM t1
27344 WHERE f_int1 = 0 AND f_int2 = 0
27345 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27346 AND f_charbig = '#NULL#';
27347 SET AUTOCOMMIT= 0;
27348 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27349 SELECT f_int1, f_int1, '', '', 'was inserted'
27350 FROM t0_template source_tab
27351 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27352         
27353 # check transactions-1 success:         1
27354 COMMIT WORK;
27355         
27356 # check transactions-2 success:         1
27357 ROLLBACK WORK;
27358         
27359 # check transactions-3 success:         1
27360 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27361 COMMIT WORK;
27362 ROLLBACK WORK;
27363         
27364 # check transactions-4 success:         1
27365 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27366 SELECT f_int1, f_int1, '', '', 'was inserted'
27367 FROM t0_template source_tab
27368 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27369         
27370 # check transactions-5 success:         1
27371 ROLLBACK WORK;
27372         
27373 # check transactions-6 success:         1
27374 # INFO: Storage engine used for t1 seems to be transactional.
27375 COMMIT;
27376         
27377 # check transactions-7 success:         1
27378 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27379 COMMIT WORK;
27380 SET @@session.sql_mode = 'traditional';
27381 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27382 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27383 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27384 '', '', 'was inserted' FROM t0_template
27385 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27386 ERROR 22012: Division by 0
27387 COMMIT;
27388         
27389 # check transactions-8 success:         1
27390 # INFO: Storage engine used for t1 seems to be able to revert
27391 #       changes made by the failing statement.
27392 SET @@session.sql_mode = '';
27393 SET AUTOCOMMIT= 1;
27394 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27395 COMMIT WORK;
27396 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27397         
27398 # check special-1 success:      1
27399 UPDATE t1 SET f_charbig = '';
27400         
27401 # check special-2 success:      1
27402 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27403 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27404 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
27405 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27406 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27407 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27408 'just inserted' FROM t0_template
27409 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27410 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
27411 BEGIN
27412 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27413 f_charbig = 'updated by trigger'
27414       WHERE f_int1 = new.f_int1;
27415 END|
27416 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27417 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27418 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27419         
27420 # check trigger-1 success:      1
27421 DROP TRIGGER trg_1;
27422 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27423 f_int2 = CAST(f_char1 AS SIGNED INT),
27424 f_charbig = 'just inserted'
27425    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27426 DELETE FROM t0_aux
27427 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27428 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27429 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27430 'just inserted' FROM t0_template
27431 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27432 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
27433 BEGIN
27434 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27435 f_charbig = 'updated by trigger'
27436       WHERE f_int1 = new.f_int1;
27437 END|
27438 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27439 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27440 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27441         
27442 # check trigger-2 success:      1
27443 DROP TRIGGER trg_1;
27444 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27445 f_int2 = CAST(f_char1 AS SIGNED INT),
27446 f_charbig = 'just inserted'
27447    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27448 DELETE FROM t0_aux
27449 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27450 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27451 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27452 'just inserted' FROM t0_template
27453 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27454 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27455 BEGIN
27456 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27457 f_charbig = 'updated by trigger'
27458       WHERE f_int1 = new.f_int1;
27459 END|
27460 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27461 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27462         
27463 # check trigger-3 success:      1
27464 DROP TRIGGER trg_1;
27465 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27466 f_int2 = CAST(f_char1 AS SIGNED INT),
27467 f_charbig = 'just inserted'
27468    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27469 DELETE FROM t0_aux
27470 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27471 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27472 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27473 'just inserted' FROM t0_template
27474 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27475 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27476 BEGIN
27477 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27478 f_charbig = 'updated by trigger'
27479       WHERE f_int1 = - old.f_int1;
27480 END|
27481 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27482 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27483         
27484 # check trigger-4 success:      1
27485 DROP TRIGGER trg_1;
27486 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27487 f_int2 = CAST(f_char1 AS SIGNED INT),
27488 f_charbig = 'just inserted'
27489    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27490 DELETE FROM t0_aux
27491 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27492 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27493 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27494 'just inserted' FROM t0_template
27495 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27496 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27497 BEGIN
27498 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27499 f_charbig = 'updated by trigger'
27500       WHERE f_int1 = new.f_int1;
27501 END|
27502 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27503 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27504         
27505 # check trigger-5 success:      1
27506 DROP TRIGGER trg_1;
27507 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27508 f_int2 = CAST(f_char1 AS SIGNED INT),
27509 f_charbig = 'just inserted'
27510    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27511 DELETE FROM t0_aux
27512 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27513 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27514 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27515 'just inserted' FROM t0_template
27516 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27517 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27518 BEGIN
27519 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27520 f_charbig = 'updated by trigger'
27521       WHERE f_int1 = - old.f_int1;
27522 END|
27523 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27524 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27525         
27526 # check trigger-6 success:      1
27527 DROP TRIGGER trg_1;
27528 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27529 f_int2 = CAST(f_char1 AS SIGNED INT),
27530 f_charbig = 'just inserted'
27531    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27532 DELETE FROM t0_aux
27533 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27534 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27535 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27536 'just inserted' FROM t0_template
27537 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27538 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27539 BEGIN
27540 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27541 f_charbig = 'updated by trigger'
27542       WHERE f_int1 = - old.f_int1;
27543 END|
27544 DELETE FROM t0_aux
27545 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27546         
27547 # check trigger-7 success:      1
27548 DROP TRIGGER trg_1;
27549 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27550 f_int2 = CAST(f_char1 AS SIGNED INT),
27551 f_charbig = 'just inserted'
27552    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27553 DELETE FROM t0_aux
27554 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27555 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27556 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27557 'just inserted' FROM t0_template
27558 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27559 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27560 BEGIN
27561 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27562 f_charbig = 'updated by trigger'
27563       WHERE f_int1 = - old.f_int1;
27564 END|
27565 DELETE FROM t0_aux
27566 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27567         
27568 # check trigger-8 success:      1
27569 DROP TRIGGER trg_1;
27570 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27571 f_int2 = CAST(f_char1 AS SIGNED INT),
27572 f_charbig = 'just inserted'
27573    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27574 DELETE FROM t0_aux
27575 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27576 DELETE FROM t1
27577 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27578 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27579 BEGIN
27580 SET new.f_int1 = old.f_int1 + @max_row,
27581 new.f_int2 = old.f_int2 - @max_row,
27582 new.f_charbig = '####updated per update trigger####';
27583 END|
27584 UPDATE t1
27585 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27586 f_charbig = '####updated per update statement itself####';
27587         
27588 # check trigger-9 success:      1
27589 DROP TRIGGER trg_2;
27590 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27591 f_int2 = CAST(f_char1 AS SIGNED INT),
27592 f_charbig = CONCAT('===',f_char1,'===');
27593 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27594 BEGIN
27595 SET new.f_int1 = new.f_int1 + @max_row,
27596 new.f_int2 = new.f_int2 - @max_row,
27597 new.f_charbig = '####updated per update trigger####';
27598 END|
27599 UPDATE t1
27600 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27601 f_charbig = '####updated per update statement itself####';
27602         
27603 # check trigger-10 success:     1
27604 DROP TRIGGER trg_2;
27605 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27606 f_int2 = CAST(f_char1 AS SIGNED INT),
27607 f_charbig = CONCAT('===',f_char1,'===');
27608 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27609 BEGIN
27610 SET new.f_int1 = @my_max1 + @counter,
27611 new.f_int2 = @my_min2 - @counter,
27612 new.f_charbig = '####updated per insert trigger####';
27613 SET @counter = @counter + 1;
27614 END|
27615 SET @counter = 1;
27616 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27617 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27618 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27619 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27620 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27621 ORDER BY f_int1;
27622 DROP TRIGGER trg_3;
27623         
27624 # check trigger-11 success:     1
27625 DELETE FROM t1
27626 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27627 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27628 AND f_charbig = '####updated per insert trigger####';
27629 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27630 BEGIN
27631 SET new.f_int1 = @my_max1 + @counter,
27632 new.f_int2 = @my_min2 - @counter,
27633 new.f_charbig = '####updated per insert trigger####';
27634 SET @counter = @counter + 1;
27635 END|
27636 SET @counter = 1;
27637 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27638 INSERT INTO t1 (f_char1, f_char2, f_charbig)
27639 SELECT CAST(f_int1 AS CHAR),
27640 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27641 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27642 ORDER BY f_int1;
27643 DROP TRIGGER trg_3;
27644         
27645 # check trigger-12 success:     1
27646 DELETE FROM t1
27647 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27648 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27649 AND f_charbig = '####updated per insert trigger####';
27650 ANALYZE  TABLE t1;
27651 Table   Op      Msg_type        Msg_text
27652 test.t1 analyze status  OK
27653 CHECK    TABLE t1 EXTENDED;
27654 Table   Op      Msg_type        Msg_text
27655 test.t1 check   status  OK
27656 CHECKSUM TABLE t1 EXTENDED;
27657 Table   Checksum
27658 test.t1 <some_value>
27659 OPTIMIZE TABLE t1;
27660 Table   Op      Msg_type        Msg_text
27661 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
27662 test.t1 optimize        status  OK
27663 # check layout success:    1
27664 REPAIR   TABLE t1 EXTENDED;
27665 Table   Op      Msg_type        Msg_text
27666 test.t1 repair  note    The storage engine for the table doesn't support repair
27667 # check layout success:    1
27668 TRUNCATE t1;
27669         
27670 # check TRUNCATE success:       1
27671 # check layout success:    1
27672 # End usability test (inc/partition_check.inc)
27673 DROP TABLE t1;
27674 #  2.3.2 PRIMARY KEY exists
27675 DROP TABLE IF EXISTS t1;
27676 CREATE TABLE t1 (
27677 f_int1 INTEGER,
27678 f_int2 INTEGER,
27679 f_char1 CHAR(20),
27680 f_char2 CHAR(20),
27681 f_charbig VARCHAR(1000)
27682 , PRIMARY KEY (f_int1,f_int2)
27684 PARTITION BY HASH(f_int1) PARTITIONS 2;
27685 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27686 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
27687 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
27688 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
27689 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27690 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
27691 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
27692 # Start usability test (inc/partition_check.inc)
27693 create_command
27694 SHOW CREATE TABLE t1;
27695 Table   Create Table
27696 t1      CREATE TABLE `t1` (
27697   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
27698   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
27699   `f_char1` char(20) DEFAULT NULL,
27700   `f_char2` char(20) DEFAULT NULL,
27701   `f_charbig` varchar(1000) DEFAULT NULL,
27702   PRIMARY KEY (`f_int1`,`f_int2`)
27703 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
27704 /*!50100 PARTITION BY HASH (f_int1)
27705 PARTITIONS 2 */
27707 # check prerequisites-1 success:    1
27708 # check COUNT(*) success:    1
27709 # check MIN/MAX(f_int1) success:    1
27710 # check MIN/MAX(f_int2) success:    1
27711 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27712 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27713 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27714 WHERE f_int1 IN (2,3);
27715 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
27716 # check prerequisites-3 success:    1
27717 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
27718 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27719 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27720 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27721 WHERE f_int1 IN (2,3);
27722 DELETE FROM t1 WHERE f_charbig = 'delete me';
27723 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27724 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27725 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27726 WHERE f_int1 IN (2,3);
27727 DELETE FROM t1 WHERE f_charbig = 'delete me';
27728 # check read via f_int1 success: 1
27729 # check read via f_int2 success: 1
27730         
27731 # check multiple-1 success:     1
27732 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27733         
27734 # check multiple-2 success:     1
27735 INSERT INTO t1 SELECT * FROM t0_template
27736 WHERE MOD(f_int1,3) = 0;
27737         
27738 # check multiple-3 success:     1
27739 UPDATE t1 SET f_int1 = f_int1 + @max_row
27740 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27741 AND @max_row_div2 + @max_row_div4;
27742         
27743 # check multiple-4 success:     1
27744 DELETE FROM t1
27745 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27746 AND @max_row_div2 + @max_row_div4 + @max_row;
27747         
27748 # check multiple-5 success:     1
27749 SELECT COUNT(*) INTO @try_count FROM t0_template
27750 WHERE MOD(f_int1,3) = 0
27751 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27752 SELECT COUNT(*) INTO @clash_count
27753 FROM t1 INNER JOIN t0_template USING(f_int1)
27754 WHERE MOD(f_int1,3) = 0
27755 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27756 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27757 INSERT INTO t1
27758 SET f_int1 = @cur_value , f_int2 = @cur_value,
27759 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27760 f_charbig = '#SINGLE#';
27761         
27762 # check single-1 success:       1
27763 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27764 INSERT INTO t1
27765 SET f_int1 = @cur_value , f_int2 = @cur_value,
27766 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27767 f_charbig = '#SINGLE#';
27768         
27769 # check single-2 success:       1
27770 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27771 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27772 UPDATE t1 SET f_int1 = @cur_value2
27773 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27774         
27775 # check single-3 success:       1
27776 SET @cur_value1= -1;
27777 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27778 UPDATE t1 SET f_int1 = @cur_value1
27779 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27780         
27781 # check single-4 success:       1
27782 SELECT MAX(f_int1) INTO @cur_value FROM t1;
27783 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27784         
27785 # check single-5 success:       1
27786 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27787         
27788 # check single-6 success:       1
27789 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27790 Warnings:
27791 Warning 1264    Out of range value for column 'f_int1' at row 1
27792 Warning 1264    Out of range value for column 'f_int2' at row 1
27793         
27794 # check single-7 success:       1
27795 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27796 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27797 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27798 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27799 f_charbig = '#NULL#';
27800 INSERT INTO t1
27801 SET f_int1 = NULL , f_int2 = -@max_row,
27802 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27803 f_charbig = '#NULL#';
27804 ERROR 23000: Column 'f_int1' cannot be null
27805 # check null success:    1
27806 DELETE FROM t1
27807 WHERE f_int1 = 0 AND f_int2 = 0
27808 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27809 AND f_charbig = '#NULL#';
27810 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27811 SELECT f_int1, f_int1, '', '', 'was inserted'
27812    FROM t0_template source_tab
27813 WHERE MOD(f_int1,3) = 0
27814 AND f_int1 BETWEEN @max_row_div2 AND @max_row
27815 ON DUPLICATE KEY
27816 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
27817 f_int2 = 2 * @max_row + source_tab.f_int1,
27818 f_charbig = 'was updated';
27819         
27820 # check unique-1-a success:     1
27821         
27822 # check unique-1-b success:     1
27823 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27824 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27825 f_int2 = CAST(f_char1 AS SIGNED INT),
27826 f_charbig = CONCAT('===',f_char1,'===')
27827 WHERE f_charbig = 'was updated';
27828 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27829 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
27830    FROM t0_template source_tab
27831 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27832         
27833 # check replace success:        1
27834 DELETE FROM t1
27835 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
27836 DELETE FROM t1
27837 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
27838 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
27839 UPDATE t1 SET f_int2 = f_int1,
27840 f_char1 = CAST(f_int1 AS CHAR),
27841 f_char2 = CAST(f_int1 AS CHAR),
27842 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
27843 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
27844 SET AUTOCOMMIT= 0;
27845 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27846 SELECT f_int1, f_int1, '', '', 'was inserted'
27847 FROM t0_template source_tab
27848 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27849         
27850 # check transactions-1 success:         1
27851 COMMIT WORK;
27852         
27853 # check transactions-2 success:         1
27854 ROLLBACK WORK;
27855         
27856 # check transactions-3 success:         1
27857 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27858 COMMIT WORK;
27859 ROLLBACK WORK;
27860         
27861 # check transactions-4 success:         1
27862 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27863 SELECT f_int1, f_int1, '', '', 'was inserted'
27864 FROM t0_template source_tab
27865 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27866         
27867 # check transactions-5 success:         1
27868 ROLLBACK WORK;
27869         
27870 # check transactions-6 success:         1
27871 # INFO: Storage engine used for t1 seems to be transactional.
27872 COMMIT;
27873         
27874 # check transactions-7 success:         1
27875 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27876 COMMIT WORK;
27877 SET @@session.sql_mode = 'traditional';
27878 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27879 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27880 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27881 '', '', 'was inserted' FROM t0_template
27882 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27883 ERROR 22012: Division by 0
27884 COMMIT;
27885         
27886 # check transactions-8 success:         1
27887 # INFO: Storage engine used for t1 seems to be able to revert
27888 #       changes made by the failing statement.
27889 SET @@session.sql_mode = '';
27890 SET AUTOCOMMIT= 1;
27891 DELETE FROM t1 WHERE f_charbig = 'was inserted';
27892 COMMIT WORK;
27893 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27894         
27895 # check special-1 success:      1
27896 UPDATE t1 SET f_charbig = '';
27897         
27898 # check special-2 success:      1
27899 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27900 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27901 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
27902 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27903 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27904 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27905 'just inserted' FROM t0_template
27906 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27907 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
27908 BEGIN
27909 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27910 f_charbig = 'updated by trigger'
27911       WHERE f_int1 = new.f_int1;
27912 END|
27913 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27914 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27915 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27916         
27917 # check trigger-1 success:      1
27918 DROP TRIGGER trg_1;
27919 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27920 f_int2 = CAST(f_char1 AS SIGNED INT),
27921 f_charbig = 'just inserted'
27922    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27923 DELETE FROM t0_aux
27924 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27925 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27926 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27927 'just inserted' FROM t0_template
27928 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27929 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
27930 BEGIN
27931 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27932 f_charbig = 'updated by trigger'
27933       WHERE f_int1 = new.f_int1;
27934 END|
27935 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27936 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27937 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27938         
27939 # check trigger-2 success:      1
27940 DROP TRIGGER trg_1;
27941 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27942 f_int2 = CAST(f_char1 AS SIGNED INT),
27943 f_charbig = 'just inserted'
27944    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27945 DELETE FROM t0_aux
27946 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27947 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27948 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27949 'just inserted' FROM t0_template
27950 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27951 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27952 BEGIN
27953 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27954 f_charbig = 'updated by trigger'
27955       WHERE f_int1 = new.f_int1;
27956 END|
27957 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27958 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27959         
27960 # check trigger-3 success:      1
27961 DROP TRIGGER trg_1;
27962 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27963 f_int2 = CAST(f_char1 AS SIGNED INT),
27964 f_charbig = 'just inserted'
27965    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27966 DELETE FROM t0_aux
27967 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27968 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27969 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27970 'just inserted' FROM t0_template
27971 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27972 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27973 BEGIN
27974 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27975 f_charbig = 'updated by trigger'
27976       WHERE f_int1 = - old.f_int1;
27977 END|
27978 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27979 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27980         
27981 # check trigger-4 success:      1
27982 DROP TRIGGER trg_1;
27983 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27984 f_int2 = CAST(f_char1 AS SIGNED INT),
27985 f_charbig = 'just inserted'
27986    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27987 DELETE FROM t0_aux
27988 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27989 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27990 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27991 'just inserted' FROM t0_template
27992 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27993 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27994 BEGIN
27995 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27996 f_charbig = 'updated by trigger'
27997       WHERE f_int1 = new.f_int1;
27998 END|
27999 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28000 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28001         
28002 # check trigger-5 success:      1
28003 DROP TRIGGER trg_1;
28004 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28005 f_int2 = CAST(f_char1 AS SIGNED INT),
28006 f_charbig = 'just inserted'
28007    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28008 DELETE FROM t0_aux
28009 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28010 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28011 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28012 'just inserted' FROM t0_template
28013 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28014 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28015 BEGIN
28016 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28017 f_charbig = 'updated by trigger'
28018       WHERE f_int1 = - old.f_int1;
28019 END|
28020 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28021 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28022         
28023 # check trigger-6 success:      1
28024 DROP TRIGGER trg_1;
28025 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28026 f_int2 = CAST(f_char1 AS SIGNED INT),
28027 f_charbig = 'just inserted'
28028    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28029 DELETE FROM t0_aux
28030 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28031 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28032 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28033 'just inserted' FROM t0_template
28034 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28035 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28036 BEGIN
28037 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28038 f_charbig = 'updated by trigger'
28039       WHERE f_int1 = - old.f_int1;
28040 END|
28041 DELETE FROM t0_aux
28042 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28043         
28044 # check trigger-7 success:      1
28045 DROP TRIGGER trg_1;
28046 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28047 f_int2 = CAST(f_char1 AS SIGNED INT),
28048 f_charbig = 'just inserted'
28049    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28050 DELETE FROM t0_aux
28051 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28052 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28053 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28054 'just inserted' FROM t0_template
28055 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28056 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28057 BEGIN
28058 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28059 f_charbig = 'updated by trigger'
28060       WHERE f_int1 = - old.f_int1;
28061 END|
28062 DELETE FROM t0_aux
28063 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28064         
28065 # check trigger-8 success:      1
28066 DROP TRIGGER trg_1;
28067 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28068 f_int2 = CAST(f_char1 AS SIGNED INT),
28069 f_charbig = 'just inserted'
28070    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28071 DELETE FROM t0_aux
28072 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28073 DELETE FROM t1
28074 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28075 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28076 BEGIN
28077 SET new.f_int1 = old.f_int1 + @max_row,
28078 new.f_int2 = old.f_int2 - @max_row,
28079 new.f_charbig = '####updated per update trigger####';
28080 END|
28081 UPDATE t1
28082 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28083 f_charbig = '####updated per update statement itself####';
28084         
28085 # check trigger-9 success:      1
28086 DROP TRIGGER trg_2;
28087 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28088 f_int2 = CAST(f_char1 AS SIGNED INT),
28089 f_charbig = CONCAT('===',f_char1,'===');
28090 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28091 BEGIN
28092 SET new.f_int1 = new.f_int1 + @max_row,
28093 new.f_int2 = new.f_int2 - @max_row,
28094 new.f_charbig = '####updated per update trigger####';
28095 END|
28096 UPDATE t1
28097 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28098 f_charbig = '####updated per update statement itself####';
28099         
28100 # check trigger-10 success:     1
28101 DROP TRIGGER trg_2;
28102 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28103 f_int2 = CAST(f_char1 AS SIGNED INT),
28104 f_charbig = CONCAT('===',f_char1,'===');
28105 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28106 BEGIN
28107 SET new.f_int1 = @my_max1 + @counter,
28108 new.f_int2 = @my_min2 - @counter,
28109 new.f_charbig = '####updated per insert trigger####';
28110 SET @counter = @counter + 1;
28111 END|
28112 SET @counter = 1;
28113 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28114 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28115 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28116 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28117 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28118 ORDER BY f_int1;
28119 DROP TRIGGER trg_3;
28120         
28121 # check trigger-11 success:     1
28122 DELETE FROM t1
28123 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28124 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28125 AND f_charbig = '####updated per insert trigger####';
28126 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28127 BEGIN
28128 SET new.f_int1 = @my_max1 + @counter,
28129 new.f_int2 = @my_min2 - @counter,
28130 new.f_charbig = '####updated per insert trigger####';
28131 SET @counter = @counter + 1;
28132 END|
28133 SET @counter = 1;
28134 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28135 INSERT INTO t1 (f_char1, f_char2, f_charbig)
28136 SELECT CAST(f_int1 AS CHAR),
28137 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28138 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28139 ORDER BY f_int1;
28140 DROP TRIGGER trg_3;
28141         
28142 # check trigger-12 success:     1
28143 DELETE FROM t1
28144 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28145 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28146 AND f_charbig = '####updated per insert trigger####';
28147 ANALYZE  TABLE t1;
28148 Table   Op      Msg_type        Msg_text
28149 test.t1 analyze status  OK
28150 CHECK    TABLE t1 EXTENDED;
28151 Table   Op      Msg_type        Msg_text
28152 test.t1 check   status  OK
28153 CHECKSUM TABLE t1 EXTENDED;
28154 Table   Checksum
28155 test.t1 <some_value>
28156 OPTIMIZE TABLE t1;
28157 Table   Op      Msg_type        Msg_text
28158 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
28159 test.t1 optimize        status  OK
28160 # check layout success:    1
28161 REPAIR   TABLE t1 EXTENDED;
28162 Table   Op      Msg_type        Msg_text
28163 test.t1 repair  note    The storage engine for the table doesn't support repair
28164 # check layout success:    1
28165 TRUNCATE t1;
28166         
28167 # check TRUNCATE success:       1
28168 # check layout success:    1
28169 # End usability test (inc/partition_check.inc)
28170 DROP TABLE t1;
28171 CREATE TABLE t1 (
28172 f_int1 INTEGER,
28173 f_int2 INTEGER,
28174 f_char1 CHAR(20),
28175 f_char2 CHAR(20),
28176 f_charbig VARCHAR(1000)
28177 , PRIMARY KEY (f_int1,f_int2)
28179 PARTITION BY KEY(f_int1) PARTITIONS 5;
28180 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28181 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
28182 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
28183 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
28184 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28185 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
28186 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
28187 # Start usability test (inc/partition_check.inc)
28188 create_command
28189 SHOW CREATE TABLE t1;
28190 Table   Create Table
28191 t1      CREATE TABLE `t1` (
28192   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
28193   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
28194   `f_char1` char(20) DEFAULT NULL,
28195   `f_char2` char(20) DEFAULT NULL,
28196   `f_charbig` varchar(1000) DEFAULT NULL,
28197   PRIMARY KEY (`f_int1`,`f_int2`)
28198 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
28199 /*!50100 PARTITION BY KEY (f_int1)
28200 PARTITIONS 5 */
28202 # check prerequisites-1 success:    1
28203 # check COUNT(*) success:    1
28204 # check MIN/MAX(f_int1) success:    1
28205 # check MIN/MAX(f_int2) success:    1
28206 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28207 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28208 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28209 WHERE f_int1 IN (2,3);
28210 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
28211 # check prerequisites-3 success:    1
28212 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28213 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28214 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28215 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28216 WHERE f_int1 IN (2,3);
28217 DELETE FROM t1 WHERE f_charbig = 'delete me';
28218 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28219 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28220 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28221 WHERE f_int1 IN (2,3);
28222 DELETE FROM t1 WHERE f_charbig = 'delete me';
28223 # check read via f_int1 success: 1
28224 # check read via f_int2 success: 1
28225         
28226 # check multiple-1 success:     1
28227 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28228         
28229 # check multiple-2 success:     1
28230 INSERT INTO t1 SELECT * FROM t0_template
28231 WHERE MOD(f_int1,3) = 0;
28232         
28233 # check multiple-3 success:     1
28234 UPDATE t1 SET f_int1 = f_int1 + @max_row
28235 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28236 AND @max_row_div2 + @max_row_div4;
28237         
28238 # check multiple-4 success:     1
28239 DELETE FROM t1
28240 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28241 AND @max_row_div2 + @max_row_div4 + @max_row;
28242         
28243 # check multiple-5 success:     1
28244 SELECT COUNT(*) INTO @try_count FROM t0_template
28245 WHERE MOD(f_int1,3) = 0
28246 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28247 SELECT COUNT(*) INTO @clash_count
28248 FROM t1 INNER JOIN t0_template USING(f_int1)
28249 WHERE MOD(f_int1,3) = 0
28250 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28251 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28252 INSERT INTO t1
28253 SET f_int1 = @cur_value , f_int2 = @cur_value,
28254 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28255 f_charbig = '#SINGLE#';
28256         
28257 # check single-1 success:       1
28258 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28259 INSERT INTO t1
28260 SET f_int1 = @cur_value , f_int2 = @cur_value,
28261 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28262 f_charbig = '#SINGLE#';
28263         
28264 # check single-2 success:       1
28265 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28266 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28267 UPDATE t1 SET f_int1 = @cur_value2
28268 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28269         
28270 # check single-3 success:       1
28271 SET @cur_value1= -1;
28272 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28273 UPDATE t1 SET f_int1 = @cur_value1
28274 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28275         
28276 # check single-4 success:       1
28277 SELECT MAX(f_int1) INTO @cur_value FROM t1;
28278 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28279         
28280 # check single-5 success:       1
28281 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28282         
28283 # check single-6 success:       1
28284 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28285 Warnings:
28286 Warning 1264    Out of range value for column 'f_int1' at row 1
28287 Warning 1264    Out of range value for column 'f_int2' at row 1
28288         
28289 # check single-7 success:       1
28290 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
28291 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28292 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28293 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28294 f_charbig = '#NULL#';
28295 INSERT INTO t1
28296 SET f_int1 = NULL , f_int2 = -@max_row,
28297 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28298 f_charbig = '#NULL#';
28299 ERROR 23000: Column 'f_int1' cannot be null
28300 # check null success:    1
28301 DELETE FROM t1
28302 WHERE f_int1 = 0 AND f_int2 = 0
28303 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28304 AND f_charbig = '#NULL#';
28305 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28306 SELECT f_int1, f_int1, '', '', 'was inserted'
28307    FROM t0_template source_tab
28308 WHERE MOD(f_int1,3) = 0
28309 AND f_int1 BETWEEN @max_row_div2 AND @max_row
28310 ON DUPLICATE KEY
28311 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28312 f_int2 = 2 * @max_row + source_tab.f_int1,
28313 f_charbig = 'was updated';
28314         
28315 # check unique-1-a success:     1
28316         
28317 # check unique-1-b success:     1
28318 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28319 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28320 f_int2 = CAST(f_char1 AS SIGNED INT),
28321 f_charbig = CONCAT('===',f_char1,'===')
28322 WHERE f_charbig = 'was updated';
28323 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28324 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28325    FROM t0_template source_tab
28326 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28327         
28328 # check replace success:        1
28329 DELETE FROM t1
28330 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28331 DELETE FROM t1
28332 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28333 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
28334 UPDATE t1 SET f_int2 = f_int1,
28335 f_char1 = CAST(f_int1 AS CHAR),
28336 f_char2 = CAST(f_int1 AS CHAR),
28337 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
28338 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
28339 SET AUTOCOMMIT= 0;
28340 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28341 SELECT f_int1, f_int1, '', '', 'was inserted'
28342 FROM t0_template source_tab
28343 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28344         
28345 # check transactions-1 success:         1
28346 COMMIT WORK;
28347         
28348 # check transactions-2 success:         1
28349 ROLLBACK WORK;
28350         
28351 # check transactions-3 success:         1
28352 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28353 COMMIT WORK;
28354 ROLLBACK WORK;
28355         
28356 # check transactions-4 success:         1
28357 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28358 SELECT f_int1, f_int1, '', '', 'was inserted'
28359 FROM t0_template source_tab
28360 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28361         
28362 # check transactions-5 success:         1
28363 ROLLBACK WORK;
28364         
28365 # check transactions-6 success:         1
28366 # INFO: Storage engine used for t1 seems to be transactional.
28367 COMMIT;
28368         
28369 # check transactions-7 success:         1
28370 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28371 COMMIT WORK;
28372 SET @@session.sql_mode = 'traditional';
28373 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
28374 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28375 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
28376 '', '', 'was inserted' FROM t0_template
28377 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28378 ERROR 22012: Division by 0
28379 COMMIT;
28380         
28381 # check transactions-8 success:         1
28382 # INFO: Storage engine used for t1 seems to be able to revert
28383 #       changes made by the failing statement.
28384 SET @@session.sql_mode = '';
28385 SET AUTOCOMMIT= 1;
28386 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28387 COMMIT WORK;
28388 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
28389         
28390 # check special-1 success:      1
28391 UPDATE t1 SET f_charbig = '';
28392         
28393 # check special-2 success:      1
28394 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
28395 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28396 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28397 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28398 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28399 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28400 'just inserted' FROM t0_template
28401 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28402 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28403 BEGIN
28404 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28405 f_charbig = 'updated by trigger'
28406       WHERE f_int1 = new.f_int1;
28407 END|
28408 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28409 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28410 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28411         
28412 # check trigger-1 success:      1
28413 DROP TRIGGER trg_1;
28414 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28415 f_int2 = CAST(f_char1 AS SIGNED INT),
28416 f_charbig = 'just inserted'
28417    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28418 DELETE FROM t0_aux
28419 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28420 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28421 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28422 'just inserted' FROM t0_template
28423 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28424 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28425 BEGIN
28426 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28427 f_charbig = 'updated by trigger'
28428       WHERE f_int1 = new.f_int1;
28429 END|
28430 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28431 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28432 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28433         
28434 # check trigger-2 success:      1
28435 DROP TRIGGER trg_1;
28436 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28437 f_int2 = CAST(f_char1 AS SIGNED INT),
28438 f_charbig = 'just inserted'
28439    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28440 DELETE FROM t0_aux
28441 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28442 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28443 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28444 'just inserted' FROM t0_template
28445 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28446 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28447 BEGIN
28448 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28449 f_charbig = 'updated by trigger'
28450       WHERE f_int1 = new.f_int1;
28451 END|
28452 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28453 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28454         
28455 # check trigger-3 success:      1
28456 DROP TRIGGER trg_1;
28457 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28458 f_int2 = CAST(f_char1 AS SIGNED INT),
28459 f_charbig = 'just inserted'
28460    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28461 DELETE FROM t0_aux
28462 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28463 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28464 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28465 'just inserted' FROM t0_template
28466 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28467 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28468 BEGIN
28469 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28470 f_charbig = 'updated by trigger'
28471       WHERE f_int1 = - old.f_int1;
28472 END|
28473 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28474 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28475         
28476 # check trigger-4 success:      1
28477 DROP TRIGGER trg_1;
28478 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28479 f_int2 = CAST(f_char1 AS SIGNED INT),
28480 f_charbig = 'just inserted'
28481    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28482 DELETE FROM t0_aux
28483 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28484 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28485 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28486 'just inserted' FROM t0_template
28487 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28488 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28489 BEGIN
28490 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28491 f_charbig = 'updated by trigger'
28492       WHERE f_int1 = new.f_int1;
28493 END|
28494 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28495 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28496         
28497 # check trigger-5 success:      1
28498 DROP TRIGGER trg_1;
28499 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28500 f_int2 = CAST(f_char1 AS SIGNED INT),
28501 f_charbig = 'just inserted'
28502    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28503 DELETE FROM t0_aux
28504 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28505 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28506 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28507 'just inserted' FROM t0_template
28508 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28509 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28510 BEGIN
28511 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28512 f_charbig = 'updated by trigger'
28513       WHERE f_int1 = - old.f_int1;
28514 END|
28515 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28516 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28517         
28518 # check trigger-6 success:      1
28519 DROP TRIGGER trg_1;
28520 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28521 f_int2 = CAST(f_char1 AS SIGNED INT),
28522 f_charbig = 'just inserted'
28523    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28524 DELETE FROM t0_aux
28525 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28526 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28527 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28528 'just inserted' FROM t0_template
28529 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28530 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28531 BEGIN
28532 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28533 f_charbig = 'updated by trigger'
28534       WHERE f_int1 = - old.f_int1;
28535 END|
28536 DELETE FROM t0_aux
28537 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28538         
28539 # check trigger-7 success:      1
28540 DROP TRIGGER trg_1;
28541 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28542 f_int2 = CAST(f_char1 AS SIGNED INT),
28543 f_charbig = 'just inserted'
28544    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28545 DELETE FROM t0_aux
28546 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28547 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28548 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28549 'just inserted' FROM t0_template
28550 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28551 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28552 BEGIN
28553 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28554 f_charbig = 'updated by trigger'
28555       WHERE f_int1 = - old.f_int1;
28556 END|
28557 DELETE FROM t0_aux
28558 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28559         
28560 # check trigger-8 success:      1
28561 DROP TRIGGER trg_1;
28562 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28563 f_int2 = CAST(f_char1 AS SIGNED INT),
28564 f_charbig = 'just inserted'
28565    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28566 DELETE FROM t0_aux
28567 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28568 DELETE FROM t1
28569 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28570 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28571 BEGIN
28572 SET new.f_int1 = old.f_int1 + @max_row,
28573 new.f_int2 = old.f_int2 - @max_row,
28574 new.f_charbig = '####updated per update trigger####';
28575 END|
28576 UPDATE t1
28577 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28578 f_charbig = '####updated per update statement itself####';
28579         
28580 # check trigger-9 success:      1
28581 DROP TRIGGER trg_2;
28582 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28583 f_int2 = CAST(f_char1 AS SIGNED INT),
28584 f_charbig = CONCAT('===',f_char1,'===');
28585 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28586 BEGIN
28587 SET new.f_int1 = new.f_int1 + @max_row,
28588 new.f_int2 = new.f_int2 - @max_row,
28589 new.f_charbig = '####updated per update trigger####';
28590 END|
28591 UPDATE t1
28592 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28593 f_charbig = '####updated per update statement itself####';
28594         
28595 # check trigger-10 success:     1
28596 DROP TRIGGER trg_2;
28597 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28598 f_int2 = CAST(f_char1 AS SIGNED INT),
28599 f_charbig = CONCAT('===',f_char1,'===');
28600 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28601 BEGIN
28602 SET new.f_int1 = @my_max1 + @counter,
28603 new.f_int2 = @my_min2 - @counter,
28604 new.f_charbig = '####updated per insert trigger####';
28605 SET @counter = @counter + 1;
28606 END|
28607 SET @counter = 1;
28608 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28609 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28610 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28611 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28612 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28613 ORDER BY f_int1;
28614 DROP TRIGGER trg_3;
28615         
28616 # check trigger-11 success:     1
28617 DELETE FROM t1
28618 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28619 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28620 AND f_charbig = '####updated per insert trigger####';
28621 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28622 BEGIN
28623 SET new.f_int1 = @my_max1 + @counter,
28624 new.f_int2 = @my_min2 - @counter,
28625 new.f_charbig = '####updated per insert trigger####';
28626 SET @counter = @counter + 1;
28627 END|
28628 SET @counter = 1;
28629 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28630 INSERT INTO t1 (f_char1, f_char2, f_charbig)
28631 SELECT CAST(f_int1 AS CHAR),
28632 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28633 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28634 ORDER BY f_int1;
28635 DROP TRIGGER trg_3;
28636         
28637 # check trigger-12 success:     1
28638 DELETE FROM t1
28639 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28640 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28641 AND f_charbig = '####updated per insert trigger####';
28642 ANALYZE  TABLE t1;
28643 Table   Op      Msg_type        Msg_text
28644 test.t1 analyze status  OK
28645 CHECK    TABLE t1 EXTENDED;
28646 Table   Op      Msg_type        Msg_text
28647 test.t1 check   status  OK
28648 CHECKSUM TABLE t1 EXTENDED;
28649 Table   Checksum
28650 test.t1 <some_value>
28651 OPTIMIZE TABLE t1;
28652 Table   Op      Msg_type        Msg_text
28653 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
28654 test.t1 optimize        status  OK
28655 # check layout success:    1
28656 REPAIR   TABLE t1 EXTENDED;
28657 Table   Op      Msg_type        Msg_text
28658 test.t1 repair  note    The storage engine for the table doesn't support repair
28659 # check layout success:    1
28660 TRUNCATE t1;
28661         
28662 # check TRUNCATE success:       1
28663 # check layout success:    1
28664 # End usability test (inc/partition_check.inc)
28665 DROP TABLE t1;
28666 CREATE TABLE t1 (
28667 f_int1 INTEGER,
28668 f_int2 INTEGER,
28669 f_char1 CHAR(20),
28670 f_char2 CHAR(20),
28671 f_charbig VARCHAR(1000)
28672 , PRIMARY KEY (f_int1,f_int2)
28674 PARTITION BY LIST(MOD(f_int1,4))
28675 (PARTITION part_3 VALUES IN (-3),
28676 PARTITION part_2 VALUES IN (-2),
28677 PARTITION part_1 VALUES IN (-1),
28678 PARTITION part_N VALUES IN (NULL),
28679 PARTITION part0 VALUES IN (0),
28680 PARTITION part1 VALUES IN (1),
28681 PARTITION part2 VALUES IN (2),
28682 PARTITION part3 VALUES IN (3));
28683 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28684 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
28685 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
28686 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
28687 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28688 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
28689 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
28690 # Start usability test (inc/partition_check.inc)
28691 create_command
28692 SHOW CREATE TABLE t1;
28693 Table   Create Table
28694 t1      CREATE TABLE `t1` (
28695   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
28696   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
28697   `f_char1` char(20) DEFAULT NULL,
28698   `f_char2` char(20) DEFAULT NULL,
28699   `f_charbig` varchar(1000) DEFAULT NULL,
28700   PRIMARY KEY (`f_int1`,`f_int2`)
28701 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
28702 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
28703 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
28704  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
28705  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
28706  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
28707  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
28708  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
28709  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
28710  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
28712 # check prerequisites-1 success:    1
28713 # check COUNT(*) success:    1
28714 # check MIN/MAX(f_int1) success:    1
28715 # check MIN/MAX(f_int2) success:    1
28716 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28717 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28718 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28719 WHERE f_int1 IN (2,3);
28720 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
28721 # check prerequisites-3 success:    1
28722 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28723 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28724 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28725 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28726 WHERE f_int1 IN (2,3);
28727 DELETE FROM t1 WHERE f_charbig = 'delete me';
28728 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28729 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28730 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28731 WHERE f_int1 IN (2,3);
28732 DELETE FROM t1 WHERE f_charbig = 'delete me';
28733 # check read via f_int1 success: 1
28734 # check read via f_int2 success: 1
28735         
28736 # check multiple-1 success:     1
28737 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28738         
28739 # check multiple-2 success:     1
28740 INSERT INTO t1 SELECT * FROM t0_template
28741 WHERE MOD(f_int1,3) = 0;
28742         
28743 # check multiple-3 success:     1
28744 UPDATE t1 SET f_int1 = f_int1 + @max_row
28745 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28746 AND @max_row_div2 + @max_row_div4;
28747         
28748 # check multiple-4 success:     1
28749 DELETE FROM t1
28750 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28751 AND @max_row_div2 + @max_row_div4 + @max_row;
28752         
28753 # check multiple-5 success:     1
28754 SELECT COUNT(*) INTO @try_count FROM t0_template
28755 WHERE MOD(f_int1,3) = 0
28756 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28757 SELECT COUNT(*) INTO @clash_count
28758 FROM t1 INNER JOIN t0_template USING(f_int1)
28759 WHERE MOD(f_int1,3) = 0
28760 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28761 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28762 INSERT INTO t1
28763 SET f_int1 = @cur_value , f_int2 = @cur_value,
28764 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28765 f_charbig = '#SINGLE#';
28766         
28767 # check single-1 success:       1
28768 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28769 INSERT INTO t1
28770 SET f_int1 = @cur_value , f_int2 = @cur_value,
28771 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28772 f_charbig = '#SINGLE#';
28773         
28774 # check single-2 success:       1
28775 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28776 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28777 UPDATE t1 SET f_int1 = @cur_value2
28778 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28779         
28780 # check single-3 success:       1
28781 SET @cur_value1= -1;
28782 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28783 UPDATE t1 SET f_int1 = @cur_value1
28784 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28785         
28786 # check single-4 success:       1
28787 SELECT MAX(f_int1) INTO @cur_value FROM t1;
28788 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28789         
28790 # check single-5 success:       1
28791 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28792         
28793 # check single-6 success:       1
28794 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28795 Warnings:
28796 Warning 1264    Out of range value for column 'f_int1' at row 1
28797 Warning 1264    Out of range value for column 'f_int2' at row 1
28798         
28799 # check single-7 success:       1
28800 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
28801 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28802 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28803 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28804 f_charbig = '#NULL#';
28805 INSERT INTO t1
28806 SET f_int1 = NULL , f_int2 = -@max_row,
28807 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28808 f_charbig = '#NULL#';
28809 ERROR 23000: Column 'f_int1' cannot be null
28810 # check null success:    1
28811 DELETE FROM t1
28812 WHERE f_int1 = 0 AND f_int2 = 0
28813 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28814 AND f_charbig = '#NULL#';
28815 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28816 SELECT f_int1, f_int1, '', '', 'was inserted'
28817    FROM t0_template source_tab
28818 WHERE MOD(f_int1,3) = 0
28819 AND f_int1 BETWEEN @max_row_div2 AND @max_row
28820 ON DUPLICATE KEY
28821 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28822 f_int2 = 2 * @max_row + source_tab.f_int1,
28823 f_charbig = 'was updated';
28824         
28825 # check unique-1-a success:     1
28826         
28827 # check unique-1-b success:     1
28828 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28829 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28830 f_int2 = CAST(f_char1 AS SIGNED INT),
28831 f_charbig = CONCAT('===',f_char1,'===')
28832 WHERE f_charbig = 'was updated';
28833 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28834 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28835    FROM t0_template source_tab
28836 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28837         
28838 # check replace success:        1
28839 DELETE FROM t1
28840 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28841 DELETE FROM t1
28842 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28843 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
28844 UPDATE t1 SET f_int2 = f_int1,
28845 f_char1 = CAST(f_int1 AS CHAR),
28846 f_char2 = CAST(f_int1 AS CHAR),
28847 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
28848 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
28849 SET AUTOCOMMIT= 0;
28850 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28851 SELECT f_int1, f_int1, '', '', 'was inserted'
28852 FROM t0_template source_tab
28853 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28854         
28855 # check transactions-1 success:         1
28856 COMMIT WORK;
28857         
28858 # check transactions-2 success:         1
28859 ROLLBACK WORK;
28860         
28861 # check transactions-3 success:         1
28862 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28863 COMMIT WORK;
28864 ROLLBACK WORK;
28865         
28866 # check transactions-4 success:         1
28867 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28868 SELECT f_int1, f_int1, '', '', 'was inserted'
28869 FROM t0_template source_tab
28870 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28871         
28872 # check transactions-5 success:         1
28873 ROLLBACK WORK;
28874         
28875 # check transactions-6 success:         1
28876 # INFO: Storage engine used for t1 seems to be transactional.
28877 COMMIT;
28878         
28879 # check transactions-7 success:         1
28880 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28881 COMMIT WORK;
28882 SET @@session.sql_mode = 'traditional';
28883 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
28884 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28885 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
28886 '', '', 'was inserted' FROM t0_template
28887 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28888 ERROR 22012: Division by 0
28889 COMMIT;
28890         
28891 # check transactions-8 success:         1
28892 # INFO: Storage engine used for t1 seems to be able to revert
28893 #       changes made by the failing statement.
28894 SET @@session.sql_mode = '';
28895 SET AUTOCOMMIT= 1;
28896 DELETE FROM t1 WHERE f_charbig = 'was inserted';
28897 COMMIT WORK;
28898 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
28899         
28900 # check special-1 success:      1
28901 UPDATE t1 SET f_charbig = '';
28902         
28903 # check special-2 success:      1
28904 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
28905 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28906 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28907 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28908 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28909 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28910 'just inserted' FROM t0_template
28911 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28912 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28913 BEGIN
28914 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28915 f_charbig = 'updated by trigger'
28916       WHERE f_int1 = new.f_int1;
28917 END|
28918 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28919 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28920 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28921         
28922 # check trigger-1 success:      1
28923 DROP TRIGGER trg_1;
28924 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28925 f_int2 = CAST(f_char1 AS SIGNED INT),
28926 f_charbig = 'just inserted'
28927    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28928 DELETE FROM t0_aux
28929 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28930 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28931 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28932 'just inserted' FROM t0_template
28933 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28934 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28935 BEGIN
28936 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28937 f_charbig = 'updated by trigger'
28938       WHERE f_int1 = new.f_int1;
28939 END|
28940 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28941 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28942 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28943         
28944 # check trigger-2 success:      1
28945 DROP TRIGGER trg_1;
28946 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28947 f_int2 = CAST(f_char1 AS SIGNED INT),
28948 f_charbig = 'just inserted'
28949    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28950 DELETE FROM t0_aux
28951 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28952 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28953 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28954 'just inserted' FROM t0_template
28955 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28956 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28957 BEGIN
28958 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28959 f_charbig = 'updated by trigger'
28960       WHERE f_int1 = new.f_int1;
28961 END|
28962 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28963 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28964         
28965 # check trigger-3 success:      1
28966 DROP TRIGGER trg_1;
28967 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28968 f_int2 = CAST(f_char1 AS SIGNED INT),
28969 f_charbig = 'just inserted'
28970    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28971 DELETE FROM t0_aux
28972 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28973 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28974 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28975 'just inserted' FROM t0_template
28976 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28977 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28978 BEGIN
28979 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28980 f_charbig = 'updated by trigger'
28981       WHERE f_int1 = - old.f_int1;
28982 END|
28983 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28984 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28985         
28986 # check trigger-4 success:      1
28987 DROP TRIGGER trg_1;
28988 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28989 f_int2 = CAST(f_char1 AS SIGNED INT),
28990 f_charbig = 'just inserted'
28991    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28992 DELETE FROM t0_aux
28993 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28994 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28995 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28996 'just inserted' FROM t0_template
28997 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28998 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28999 BEGIN
29000 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29001 f_charbig = 'updated by trigger'
29002       WHERE f_int1 = new.f_int1;
29003 END|
29004 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29005 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29006         
29007 # check trigger-5 success:      1
29008 DROP TRIGGER trg_1;
29009 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29010 f_int2 = CAST(f_char1 AS SIGNED INT),
29011 f_charbig = 'just inserted'
29012    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29013 DELETE FROM t0_aux
29014 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29015 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29016 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29017 'just inserted' FROM t0_template
29018 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29019 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29020 BEGIN
29021 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29022 f_charbig = 'updated by trigger'
29023       WHERE f_int1 = - old.f_int1;
29024 END|
29025 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29026 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29027         
29028 # check trigger-6 success:      1
29029 DROP TRIGGER trg_1;
29030 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29031 f_int2 = CAST(f_char1 AS SIGNED INT),
29032 f_charbig = 'just inserted'
29033    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29034 DELETE FROM t0_aux
29035 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29036 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29037 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29038 'just inserted' FROM t0_template
29039 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29040 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29041 BEGIN
29042 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29043 f_charbig = 'updated by trigger'
29044       WHERE f_int1 = - old.f_int1;
29045 END|
29046 DELETE FROM t0_aux
29047 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29048         
29049 # check trigger-7 success:      1
29050 DROP TRIGGER trg_1;
29051 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29052 f_int2 = CAST(f_char1 AS SIGNED INT),
29053 f_charbig = 'just inserted'
29054    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29055 DELETE FROM t0_aux
29056 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29057 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29058 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29059 'just inserted' FROM t0_template
29060 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29061 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29062 BEGIN
29063 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29064 f_charbig = 'updated by trigger'
29065       WHERE f_int1 = - old.f_int1;
29066 END|
29067 DELETE FROM t0_aux
29068 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29069         
29070 # check trigger-8 success:      1
29071 DROP TRIGGER trg_1;
29072 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29073 f_int2 = CAST(f_char1 AS SIGNED INT),
29074 f_charbig = 'just inserted'
29075    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29076 DELETE FROM t0_aux
29077 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29078 DELETE FROM t1
29079 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29080 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29081 BEGIN
29082 SET new.f_int1 = old.f_int1 + @max_row,
29083 new.f_int2 = old.f_int2 - @max_row,
29084 new.f_charbig = '####updated per update trigger####';
29085 END|
29086 UPDATE t1
29087 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29088 f_charbig = '####updated per update statement itself####';
29089         
29090 # check trigger-9 success:      1
29091 DROP TRIGGER trg_2;
29092 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29093 f_int2 = CAST(f_char1 AS SIGNED INT),
29094 f_charbig = CONCAT('===',f_char1,'===');
29095 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29096 BEGIN
29097 SET new.f_int1 = new.f_int1 + @max_row,
29098 new.f_int2 = new.f_int2 - @max_row,
29099 new.f_charbig = '####updated per update trigger####';
29100 END|
29101 UPDATE t1
29102 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29103 f_charbig = '####updated per update statement itself####';
29104         
29105 # check trigger-10 success:     1
29106 DROP TRIGGER trg_2;
29107 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29108 f_int2 = CAST(f_char1 AS SIGNED INT),
29109 f_charbig = CONCAT('===',f_char1,'===');
29110 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29111 BEGIN
29112 SET new.f_int1 = @my_max1 + @counter,
29113 new.f_int2 = @my_min2 - @counter,
29114 new.f_charbig = '####updated per insert trigger####';
29115 SET @counter = @counter + 1;
29116 END|
29117 SET @counter = 1;
29118 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29119 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29120 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29121 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29123 ORDER BY f_int1;
29124 DROP TRIGGER trg_3;
29125         
29126 # check trigger-11 success:     1
29127 DELETE FROM t1
29128 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29129 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29130 AND f_charbig = '####updated per insert trigger####';
29131 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29132 BEGIN
29133 SET new.f_int1 = @my_max1 + @counter,
29134 new.f_int2 = @my_min2 - @counter,
29135 new.f_charbig = '####updated per insert trigger####';
29136 SET @counter = @counter + 1;
29137 END|
29138 SET @counter = 1;
29139 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29140 INSERT INTO t1 (f_char1, f_char2, f_charbig)
29141 SELECT CAST(f_int1 AS CHAR),
29142 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29143 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29144 ORDER BY f_int1;
29145 DROP TRIGGER trg_3;
29146         
29147 # check trigger-12 success:     1
29148 DELETE FROM t1
29149 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29150 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29151 AND f_charbig = '####updated per insert trigger####';
29152 ANALYZE  TABLE t1;
29153 Table   Op      Msg_type        Msg_text
29154 test.t1 analyze status  OK
29155 CHECK    TABLE t1 EXTENDED;
29156 Table   Op      Msg_type        Msg_text
29157 test.t1 check   status  OK
29158 CHECKSUM TABLE t1 EXTENDED;
29159 Table   Checksum
29160 test.t1 <some_value>
29161 OPTIMIZE TABLE t1;
29162 Table   Op      Msg_type        Msg_text
29163 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
29164 test.t1 optimize        status  OK
29165 # check layout success:    1
29166 REPAIR   TABLE t1 EXTENDED;
29167 Table   Op      Msg_type        Msg_text
29168 test.t1 repair  note    The storage engine for the table doesn't support repair
29169 # check layout success:    1
29170 TRUNCATE t1;
29171         
29172 # check TRUNCATE success:       1
29173 # check layout success:    1
29174 # End usability test (inc/partition_check.inc)
29175 DROP TABLE t1;
29176 CREATE TABLE t1 (
29177 f_int1 INTEGER,
29178 f_int2 INTEGER,
29179 f_char1 CHAR(20),
29180 f_char2 CHAR(20),
29181 f_charbig VARCHAR(1000)
29182 , PRIMARY KEY (f_int1,f_int2)
29184 PARTITION BY RANGE(f_int1)
29185 (PARTITION parta VALUES LESS THAN (0),
29186 PARTITION partb VALUES LESS THAN (5),
29187 PARTITION partc VALUES LESS THAN (10),
29188 PARTITION partd VALUES LESS THAN (10 + 5),
29189 PARTITION parte VALUES LESS THAN (20),
29190 PARTITION partf VALUES LESS THAN (2147483646));
29191 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29192 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
29193 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
29194 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
29195 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29196 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
29197 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
29198 # Start usability test (inc/partition_check.inc)
29199 create_command
29200 SHOW CREATE TABLE t1;
29201 Table   Create Table
29202 t1      CREATE TABLE `t1` (
29203   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
29204   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
29205   `f_char1` char(20) DEFAULT NULL,
29206   `f_char2` char(20) DEFAULT NULL,
29207   `f_charbig` varchar(1000) DEFAULT NULL,
29208   PRIMARY KEY (`f_int1`,`f_int2`)
29209 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
29210 /*!50100 PARTITION BY RANGE (f_int1)
29211 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
29212  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
29213  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
29214  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
29215  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
29216  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
29218 # check prerequisites-1 success:    1
29219 # check COUNT(*) success:    1
29220 # check MIN/MAX(f_int1) success:    1
29221 # check MIN/MAX(f_int2) success:    1
29222 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29223 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29224 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29225 WHERE f_int1 IN (2,3);
29226 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
29227 # check prerequisites-3 success:    1
29228 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29229 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29230 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29231 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29232 WHERE f_int1 IN (2,3);
29233 DELETE FROM t1 WHERE f_charbig = 'delete me';
29234 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29235 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29236 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29237 WHERE f_int1 IN (2,3);
29238 DELETE FROM t1 WHERE f_charbig = 'delete me';
29239 # check read via f_int1 success: 1
29240 # check read via f_int2 success: 1
29241         
29242 # check multiple-1 success:     1
29243 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29244         
29245 # check multiple-2 success:     1
29246 INSERT INTO t1 SELECT * FROM t0_template
29247 WHERE MOD(f_int1,3) = 0;
29248         
29249 # check multiple-3 success:     1
29250 UPDATE t1 SET f_int1 = f_int1 + @max_row
29251 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29252 AND @max_row_div2 + @max_row_div4;
29253         
29254 # check multiple-4 success:     1
29255 DELETE FROM t1
29256 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29257 AND @max_row_div2 + @max_row_div4 + @max_row;
29258         
29259 # check multiple-5 success:     1
29260 SELECT COUNT(*) INTO @try_count FROM t0_template
29261 WHERE MOD(f_int1,3) = 0
29262 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29263 SELECT COUNT(*) INTO @clash_count
29264 FROM t1 INNER JOIN t0_template USING(f_int1)
29265 WHERE MOD(f_int1,3) = 0
29266 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29267 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29268 INSERT INTO t1
29269 SET f_int1 = @cur_value , f_int2 = @cur_value,
29270 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29271 f_charbig = '#SINGLE#';
29272         
29273 # check single-1 success:       1
29274 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29275 INSERT INTO t1
29276 SET f_int1 = @cur_value , f_int2 = @cur_value,
29277 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29278 f_charbig = '#SINGLE#';
29279         
29280 # check single-2 success:       1
29281 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29282 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29283 UPDATE t1 SET f_int1 = @cur_value2
29284 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29285         
29286 # check single-3 success:       1
29287 SET @cur_value1= -1;
29288 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29289 UPDATE t1 SET f_int1 = @cur_value1
29290 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29291         
29292 # check single-4 success:       1
29293 SELECT MAX(f_int1) INTO @cur_value FROM t1;
29294 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29295         
29296 # check single-5 success:       1
29297 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29298         
29299 # check single-6 success:       1
29300 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29301 Warnings:
29302 Warning 1264    Out of range value for column 'f_int1' at row 1
29303 Warning 1264    Out of range value for column 'f_int2' at row 1
29304         
29305 # check single-7 success:       1
29306 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
29307 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29308 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29309 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29310 f_charbig = '#NULL#';
29311 INSERT INTO t1
29312 SET f_int1 = NULL , f_int2 = -@max_row,
29313 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29314 f_charbig = '#NULL#';
29315 ERROR 23000: Column 'f_int1' cannot be null
29316 # check null success:    1
29317 DELETE FROM t1
29318 WHERE f_int1 = 0 AND f_int2 = 0
29319 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29320 AND f_charbig = '#NULL#';
29321 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29322 SELECT f_int1, f_int1, '', '', 'was inserted'
29323    FROM t0_template source_tab
29324 WHERE MOD(f_int1,3) = 0
29325 AND f_int1 BETWEEN @max_row_div2 AND @max_row
29326 ON DUPLICATE KEY
29327 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
29328 f_int2 = 2 * @max_row + source_tab.f_int1,
29329 f_charbig = 'was updated';
29330         
29331 # check unique-1-a success:     1
29332         
29333 # check unique-1-b success:     1
29334 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29335 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29336 f_int2 = CAST(f_char1 AS SIGNED INT),
29337 f_charbig = CONCAT('===',f_char1,'===')
29338 WHERE f_charbig = 'was updated';
29339 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29340 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
29341    FROM t0_template source_tab
29342 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29343         
29344 # check replace success:        1
29345 DELETE FROM t1
29346 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
29347 DELETE FROM t1
29348 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
29349 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
29350 UPDATE t1 SET f_int2 = f_int1,
29351 f_char1 = CAST(f_int1 AS CHAR),
29352 f_char2 = CAST(f_int1 AS CHAR),
29353 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
29354 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
29355 SET AUTOCOMMIT= 0;
29356 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29357 SELECT f_int1, f_int1, '', '', 'was inserted'
29358 FROM t0_template source_tab
29359 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29360         
29361 # check transactions-1 success:         1
29362 COMMIT WORK;
29363         
29364 # check transactions-2 success:         1
29365 ROLLBACK WORK;
29366         
29367 # check transactions-3 success:         1
29368 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29369 COMMIT WORK;
29370 ROLLBACK WORK;
29371         
29372 # check transactions-4 success:         1
29373 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29374 SELECT f_int1, f_int1, '', '', 'was inserted'
29375 FROM t0_template source_tab
29376 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29377         
29378 # check transactions-5 success:         1
29379 ROLLBACK WORK;
29380         
29381 # check transactions-6 success:         1
29382 # INFO: Storage engine used for t1 seems to be transactional.
29383 COMMIT;
29384         
29385 # check transactions-7 success:         1
29386 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29387 COMMIT WORK;
29388 SET @@session.sql_mode = 'traditional';
29389 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29390 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29391 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29392 '', '', 'was inserted' FROM t0_template
29393 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29394 ERROR 22012: Division by 0
29395 COMMIT;
29396         
29397 # check transactions-8 success:         1
29398 # INFO: Storage engine used for t1 seems to be able to revert
29399 #       changes made by the failing statement.
29400 SET @@session.sql_mode = '';
29401 SET AUTOCOMMIT= 1;
29402 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29403 COMMIT WORK;
29404 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29405         
29406 # check special-1 success:      1
29407 UPDATE t1 SET f_charbig = '';
29408         
29409 # check special-2 success:      1
29410 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29411 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29412 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29413 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29414 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29415 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29416 'just inserted' FROM t0_template
29417 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29418 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29419 BEGIN
29420 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29421 f_charbig = 'updated by trigger'
29422       WHERE f_int1 = new.f_int1;
29423 END|
29424 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29425 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29426 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29427         
29428 # check trigger-1 success:      1
29429 DROP TRIGGER trg_1;
29430 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29431 f_int2 = CAST(f_char1 AS SIGNED INT),
29432 f_charbig = 'just inserted'
29433    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29434 DELETE FROM t0_aux
29435 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29436 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29437 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29438 'just inserted' FROM t0_template
29439 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29440 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29441 BEGIN
29442 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29443 f_charbig = 'updated by trigger'
29444       WHERE f_int1 = new.f_int1;
29445 END|
29446 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29447 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29448 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29449         
29450 # check trigger-2 success:      1
29451 DROP TRIGGER trg_1;
29452 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29453 f_int2 = CAST(f_char1 AS SIGNED INT),
29454 f_charbig = 'just inserted'
29455    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29456 DELETE FROM t0_aux
29457 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29458 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29459 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29460 'just inserted' FROM t0_template
29461 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29462 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29463 BEGIN
29464 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29465 f_charbig = 'updated by trigger'
29466       WHERE f_int1 = new.f_int1;
29467 END|
29468 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29469 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29470         
29471 # check trigger-3 success:      1
29472 DROP TRIGGER trg_1;
29473 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29474 f_int2 = CAST(f_char1 AS SIGNED INT),
29475 f_charbig = 'just inserted'
29476    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29477 DELETE FROM t0_aux
29478 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29479 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29480 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29481 'just inserted' FROM t0_template
29482 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29483 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29484 BEGIN
29485 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29486 f_charbig = 'updated by trigger'
29487       WHERE f_int1 = - old.f_int1;
29488 END|
29489 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29490 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29491         
29492 # check trigger-4 success:      1
29493 DROP TRIGGER trg_1;
29494 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29495 f_int2 = CAST(f_char1 AS SIGNED INT),
29496 f_charbig = 'just inserted'
29497    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29498 DELETE FROM t0_aux
29499 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29500 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29501 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29502 'just inserted' FROM t0_template
29503 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29504 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29505 BEGIN
29506 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29507 f_charbig = 'updated by trigger'
29508       WHERE f_int1 = new.f_int1;
29509 END|
29510 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29511 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29512         
29513 # check trigger-5 success:      1
29514 DROP TRIGGER trg_1;
29515 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29516 f_int2 = CAST(f_char1 AS SIGNED INT),
29517 f_charbig = 'just inserted'
29518    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29519 DELETE FROM t0_aux
29520 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29523 'just inserted' FROM t0_template
29524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29525 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29526 BEGIN
29527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29528 f_charbig = 'updated by trigger'
29529       WHERE f_int1 = - old.f_int1;
29530 END|
29531 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29532 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29533         
29534 # check trigger-6 success:      1
29535 DROP TRIGGER trg_1;
29536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29537 f_int2 = CAST(f_char1 AS SIGNED INT),
29538 f_charbig = 'just inserted'
29539    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29540 DELETE FROM t0_aux
29541 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29542 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29543 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29544 'just inserted' FROM t0_template
29545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29546 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29547 BEGIN
29548 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29549 f_charbig = 'updated by trigger'
29550       WHERE f_int1 = - old.f_int1;
29551 END|
29552 DELETE FROM t0_aux
29553 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29554         
29555 # check trigger-7 success:      1
29556 DROP TRIGGER trg_1;
29557 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29558 f_int2 = CAST(f_char1 AS SIGNED INT),
29559 f_charbig = 'just inserted'
29560    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29561 DELETE FROM t0_aux
29562 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29563 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29564 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29565 'just inserted' FROM t0_template
29566 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29567 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29568 BEGIN
29569 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29570 f_charbig = 'updated by trigger'
29571       WHERE f_int1 = - old.f_int1;
29572 END|
29573 DELETE FROM t0_aux
29574 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29575         
29576 # check trigger-8 success:      1
29577 DROP TRIGGER trg_1;
29578 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29579 f_int2 = CAST(f_char1 AS SIGNED INT),
29580 f_charbig = 'just inserted'
29581    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29582 DELETE FROM t0_aux
29583 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29584 DELETE FROM t1
29585 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29586 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29587 BEGIN
29588 SET new.f_int1 = old.f_int1 + @max_row,
29589 new.f_int2 = old.f_int2 - @max_row,
29590 new.f_charbig = '####updated per update trigger####';
29591 END|
29592 UPDATE t1
29593 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29594 f_charbig = '####updated per update statement itself####';
29595         
29596 # check trigger-9 success:      1
29597 DROP TRIGGER trg_2;
29598 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29599 f_int2 = CAST(f_char1 AS SIGNED INT),
29600 f_charbig = CONCAT('===',f_char1,'===');
29601 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29602 BEGIN
29603 SET new.f_int1 = new.f_int1 + @max_row,
29604 new.f_int2 = new.f_int2 - @max_row,
29605 new.f_charbig = '####updated per update trigger####';
29606 END|
29607 UPDATE t1
29608 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29609 f_charbig = '####updated per update statement itself####';
29610         
29611 # check trigger-10 success:     1
29612 DROP TRIGGER trg_2;
29613 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29614 f_int2 = CAST(f_char1 AS SIGNED INT),
29615 f_charbig = CONCAT('===',f_char1,'===');
29616 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29617 BEGIN
29618 SET new.f_int1 = @my_max1 + @counter,
29619 new.f_int2 = @my_min2 - @counter,
29620 new.f_charbig = '####updated per insert trigger####';
29621 SET @counter = @counter + 1;
29622 END|
29623 SET @counter = 1;
29624 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29625 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29626 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29627 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29628 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29629 ORDER BY f_int1;
29630 DROP TRIGGER trg_3;
29631         
29632 # check trigger-11 success:     1
29633 DELETE FROM t1
29634 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29635 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29636 AND f_charbig = '####updated per insert trigger####';
29637 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29638 BEGIN
29639 SET new.f_int1 = @my_max1 + @counter,
29640 new.f_int2 = @my_min2 - @counter,
29641 new.f_charbig = '####updated per insert trigger####';
29642 SET @counter = @counter + 1;
29643 END|
29644 SET @counter = 1;
29645 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29646 INSERT INTO t1 (f_char1, f_char2, f_charbig)
29647 SELECT CAST(f_int1 AS CHAR),
29648 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29649 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29650 ORDER BY f_int1;
29651 DROP TRIGGER trg_3;
29652         
29653 # check trigger-12 success:     1
29654 DELETE FROM t1
29655 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29656 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29657 AND f_charbig = '####updated per insert trigger####';
29658 ANALYZE  TABLE t1;
29659 Table   Op      Msg_type        Msg_text
29660 test.t1 analyze status  OK
29661 CHECK    TABLE t1 EXTENDED;
29662 Table   Op      Msg_type        Msg_text
29663 test.t1 check   status  OK
29664 CHECKSUM TABLE t1 EXTENDED;
29665 Table   Checksum
29666 test.t1 <some_value>
29667 OPTIMIZE TABLE t1;
29668 Table   Op      Msg_type        Msg_text
29669 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
29670 test.t1 optimize        status  OK
29671 # check layout success:    1
29672 REPAIR   TABLE t1 EXTENDED;
29673 Table   Op      Msg_type        Msg_text
29674 test.t1 repair  note    The storage engine for the table doesn't support repair
29675 # check layout success:    1
29676 TRUNCATE t1;
29677         
29678 # check TRUNCATE success:       1
29679 # check layout success:    1
29680 # End usability test (inc/partition_check.inc)
29681 DROP TABLE t1;
29682 CREATE TABLE t1 (
29683 f_int1 INTEGER,
29684 f_int2 INTEGER,
29685 f_char1 CHAR(20),
29686 f_char2 CHAR(20),
29687 f_charbig VARCHAR(1000)
29688 , PRIMARY KEY (f_int1,f_int2)
29690 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
29691 (PARTITION parta VALUES LESS THAN (0),
29692 PARTITION partb VALUES LESS THAN (5),
29693 PARTITION partc VALUES LESS THAN (10),
29694 PARTITION partd VALUES LESS THAN (2147483646));
29695 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29696 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
29697 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
29698 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
29699 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29700 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
29701 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
29702 # Start usability test (inc/partition_check.inc)
29703 create_command
29704 SHOW CREATE TABLE t1;
29705 Table   Create Table
29706 t1      CREATE TABLE `t1` (
29707   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
29708   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
29709   `f_char1` char(20) DEFAULT NULL,
29710   `f_char2` char(20) DEFAULT NULL,
29711   `f_charbig` varchar(1000) DEFAULT NULL,
29712   PRIMARY KEY (`f_int1`,`f_int2`)
29713 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
29714 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
29715 SUBPARTITION BY HASH (f_int1)
29716 SUBPARTITIONS 2
29717 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
29718  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
29719  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
29720  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
29722 # check prerequisites-1 success:    1
29723 # check COUNT(*) success:    1
29724 # check MIN/MAX(f_int1) success:    1
29725 # check MIN/MAX(f_int2) success:    1
29726 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29727 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29728 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29729 WHERE f_int1 IN (2,3);
29730 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
29731 # check prerequisites-3 success:    1
29732 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29733 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29734 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29735 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29736 WHERE f_int1 IN (2,3);
29737 DELETE FROM t1 WHERE f_charbig = 'delete me';
29738 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29739 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29740 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29741 WHERE f_int1 IN (2,3);
29742 DELETE FROM t1 WHERE f_charbig = 'delete me';
29743 # check read via f_int1 success: 1
29744 # check read via f_int2 success: 1
29745         
29746 # check multiple-1 success:     1
29747 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29748         
29749 # check multiple-2 success:     1
29750 INSERT INTO t1 SELECT * FROM t0_template
29751 WHERE MOD(f_int1,3) = 0;
29752         
29753 # check multiple-3 success:     1
29754 UPDATE t1 SET f_int1 = f_int1 + @max_row
29755 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29756 AND @max_row_div2 + @max_row_div4;
29757         
29758 # check multiple-4 success:     1
29759 DELETE FROM t1
29760 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29761 AND @max_row_div2 + @max_row_div4 + @max_row;
29762         
29763 # check multiple-5 success:     1
29764 SELECT COUNT(*) INTO @try_count FROM t0_template
29765 WHERE MOD(f_int1,3) = 0
29766 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29767 SELECT COUNT(*) INTO @clash_count
29768 FROM t1 INNER JOIN t0_template USING(f_int1)
29769 WHERE MOD(f_int1,3) = 0
29770 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29771 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29772 INSERT INTO t1
29773 SET f_int1 = @cur_value , f_int2 = @cur_value,
29774 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29775 f_charbig = '#SINGLE#';
29776         
29777 # check single-1 success:       1
29778 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29779 INSERT INTO t1
29780 SET f_int1 = @cur_value , f_int2 = @cur_value,
29781 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29782 f_charbig = '#SINGLE#';
29783         
29784 # check single-2 success:       1
29785 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29786 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29787 UPDATE t1 SET f_int1 = @cur_value2
29788 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29789         
29790 # check single-3 success:       1
29791 SET @cur_value1= -1;
29792 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29793 UPDATE t1 SET f_int1 = @cur_value1
29794 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29795         
29796 # check single-4 success:       1
29797 SELECT MAX(f_int1) INTO @cur_value FROM t1;
29798 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29799         
29800 # check single-5 success:       1
29801 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29802         
29803 # check single-6 success:       1
29804 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29805 Warnings:
29806 Warning 1264    Out of range value for column 'f_int1' at row 1
29807 Warning 1264    Out of range value for column 'f_int2' at row 1
29808         
29809 # check single-7 success:       1
29810 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
29811 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29812 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29813 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29814 f_charbig = '#NULL#';
29815 INSERT INTO t1
29816 SET f_int1 = NULL , f_int2 = -@max_row,
29817 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29818 f_charbig = '#NULL#';
29819 ERROR 23000: Column 'f_int1' cannot be null
29820 # check null success:    1
29821 DELETE FROM t1
29822 WHERE f_int1 = 0 AND f_int2 = 0
29823 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29824 AND f_charbig = '#NULL#';
29825 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29826 SELECT f_int1, f_int1, '', '', 'was inserted'
29827    FROM t0_template source_tab
29828 WHERE MOD(f_int1,3) = 0
29829 AND f_int1 BETWEEN @max_row_div2 AND @max_row
29830 ON DUPLICATE KEY
29831 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
29832 f_int2 = 2 * @max_row + source_tab.f_int1,
29833 f_charbig = 'was updated';
29834         
29835 # check unique-1-a success:     1
29836         
29837 # check unique-1-b success:     1
29838 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29839 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29840 f_int2 = CAST(f_char1 AS SIGNED INT),
29841 f_charbig = CONCAT('===',f_char1,'===')
29842 WHERE f_charbig = 'was updated';
29843 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29844 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
29845    FROM t0_template source_tab
29846 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29847         
29848 # check replace success:        1
29849 DELETE FROM t1
29850 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
29851 DELETE FROM t1
29852 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
29853 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
29854 UPDATE t1 SET f_int2 = f_int1,
29855 f_char1 = CAST(f_int1 AS CHAR),
29856 f_char2 = CAST(f_int1 AS CHAR),
29857 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
29858 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
29859 SET AUTOCOMMIT= 0;
29860 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29861 SELECT f_int1, f_int1, '', '', 'was inserted'
29862 FROM t0_template source_tab
29863 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29864         
29865 # check transactions-1 success:         1
29866 COMMIT WORK;
29867         
29868 # check transactions-2 success:         1
29869 ROLLBACK WORK;
29870         
29871 # check transactions-3 success:         1
29872 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29873 COMMIT WORK;
29874 ROLLBACK WORK;
29875         
29876 # check transactions-4 success:         1
29877 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29878 SELECT f_int1, f_int1, '', '', 'was inserted'
29879 FROM t0_template source_tab
29880 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29881         
29882 # check transactions-5 success:         1
29883 ROLLBACK WORK;
29884         
29885 # check transactions-6 success:         1
29886 # INFO: Storage engine used for t1 seems to be transactional.
29887 COMMIT;
29888         
29889 # check transactions-7 success:         1
29890 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29891 COMMIT WORK;
29892 SET @@session.sql_mode = 'traditional';
29893 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29894 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29895 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29896 '', '', 'was inserted' FROM t0_template
29897 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29898 ERROR 22012: Division by 0
29899 COMMIT;
29900         
29901 # check transactions-8 success:         1
29902 # INFO: Storage engine used for t1 seems to be able to revert
29903 #       changes made by the failing statement.
29904 SET @@session.sql_mode = '';
29905 SET AUTOCOMMIT= 1;
29906 DELETE FROM t1 WHERE f_charbig = 'was inserted';
29907 COMMIT WORK;
29908 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29909         
29910 # check special-1 success:      1
29911 UPDATE t1 SET f_charbig = '';
29912         
29913 # check special-2 success:      1
29914 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29915 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29916 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29917 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29918 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29919 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29920 'just inserted' FROM t0_template
29921 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29922 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29923 BEGIN
29924 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29925 f_charbig = 'updated by trigger'
29926       WHERE f_int1 = new.f_int1;
29927 END|
29928 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29929 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29930 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29931         
29932 # check trigger-1 success:      1
29933 DROP TRIGGER trg_1;
29934 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29935 f_int2 = CAST(f_char1 AS SIGNED INT),
29936 f_charbig = 'just inserted'
29937    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29938 DELETE FROM t0_aux
29939 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29940 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29941 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29942 'just inserted' FROM t0_template
29943 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29944 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29945 BEGIN
29946 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29947 f_charbig = 'updated by trigger'
29948       WHERE f_int1 = new.f_int1;
29949 END|
29950 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29951 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29952 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29953         
29954 # check trigger-2 success:      1
29955 DROP TRIGGER trg_1;
29956 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29957 f_int2 = CAST(f_char1 AS SIGNED INT),
29958 f_charbig = 'just inserted'
29959    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29960 DELETE FROM t0_aux
29961 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29962 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29963 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29964 'just inserted' FROM t0_template
29965 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29966 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29967 BEGIN
29968 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29969 f_charbig = 'updated by trigger'
29970       WHERE f_int1 = new.f_int1;
29971 END|
29972 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29973 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29974         
29975 # check trigger-3 success:      1
29976 DROP TRIGGER trg_1;
29977 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29978 f_int2 = CAST(f_char1 AS SIGNED INT),
29979 f_charbig = 'just inserted'
29980    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29981 DELETE FROM t0_aux
29982 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29983 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29984 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29985 'just inserted' FROM t0_template
29986 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29987 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29988 BEGIN
29989 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29990 f_charbig = 'updated by trigger'
29991       WHERE f_int1 = - old.f_int1;
29992 END|
29993 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29994 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29995         
29996 # check trigger-4 success:      1
29997 DROP TRIGGER trg_1;
29998 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29999 f_int2 = CAST(f_char1 AS SIGNED INT),
30000 f_charbig = 'just inserted'
30001    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30002 DELETE FROM t0_aux
30003 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30004 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30005 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30006 'just inserted' FROM t0_template
30007 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30008 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30009 BEGIN
30010 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30011 f_charbig = 'updated by trigger'
30012       WHERE f_int1 = new.f_int1;
30013 END|
30014 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30015 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30016         
30017 # check trigger-5 success:      1
30018 DROP TRIGGER trg_1;
30019 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30020 f_int2 = CAST(f_char1 AS SIGNED INT),
30021 f_charbig = 'just inserted'
30022    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30023 DELETE FROM t0_aux
30024 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30025 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30026 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30027 'just inserted' FROM t0_template
30028 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30029 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30030 BEGIN
30031 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30032 f_charbig = 'updated by trigger'
30033       WHERE f_int1 = - old.f_int1;
30034 END|
30035 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30036 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30037         
30038 # check trigger-6 success:      1
30039 DROP TRIGGER trg_1;
30040 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30041 f_int2 = CAST(f_char1 AS SIGNED INT),
30042 f_charbig = 'just inserted'
30043    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30044 DELETE FROM t0_aux
30045 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30046 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30047 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30048 'just inserted' FROM t0_template
30049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30050 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30051 BEGIN
30052 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30053 f_charbig = 'updated by trigger'
30054       WHERE f_int1 = - old.f_int1;
30055 END|
30056 DELETE FROM t0_aux
30057 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30058         
30059 # check trigger-7 success:      1
30060 DROP TRIGGER trg_1;
30061 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30062 f_int2 = CAST(f_char1 AS SIGNED INT),
30063 f_charbig = 'just inserted'
30064    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30065 DELETE FROM t0_aux
30066 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30067 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30068 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30069 'just inserted' FROM t0_template
30070 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30071 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30072 BEGIN
30073 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30074 f_charbig = 'updated by trigger'
30075       WHERE f_int1 = - old.f_int1;
30076 END|
30077 DELETE FROM t0_aux
30078 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30079         
30080 # check trigger-8 success:      1
30081 DROP TRIGGER trg_1;
30082 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30083 f_int2 = CAST(f_char1 AS SIGNED INT),
30084 f_charbig = 'just inserted'
30085    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30086 DELETE FROM t0_aux
30087 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30088 DELETE FROM t1
30089 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30090 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30091 BEGIN
30092 SET new.f_int1 = old.f_int1 + @max_row,
30093 new.f_int2 = old.f_int2 - @max_row,
30094 new.f_charbig = '####updated per update trigger####';
30095 END|
30096 UPDATE t1
30097 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30098 f_charbig = '####updated per update statement itself####';
30099         
30100 # check trigger-9 success:      1
30101 DROP TRIGGER trg_2;
30102 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30103 f_int2 = CAST(f_char1 AS SIGNED INT),
30104 f_charbig = CONCAT('===',f_char1,'===');
30105 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30106 BEGIN
30107 SET new.f_int1 = new.f_int1 + @max_row,
30108 new.f_int2 = new.f_int2 - @max_row,
30109 new.f_charbig = '####updated per update trigger####';
30110 END|
30111 UPDATE t1
30112 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30113 f_charbig = '####updated per update statement itself####';
30114         
30115 # check trigger-10 success:     1
30116 DROP TRIGGER trg_2;
30117 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30118 f_int2 = CAST(f_char1 AS SIGNED INT),
30119 f_charbig = CONCAT('===',f_char1,'===');
30120 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30121 BEGIN
30122 SET new.f_int1 = @my_max1 + @counter,
30123 new.f_int2 = @my_min2 - @counter,
30124 new.f_charbig = '####updated per insert trigger####';
30125 SET @counter = @counter + 1;
30126 END|
30127 SET @counter = 1;
30128 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30129 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30130 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30131 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30132 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30133 ORDER BY f_int1;
30134 DROP TRIGGER trg_3;
30135         
30136 # check trigger-11 success:     1
30137 DELETE FROM t1
30138 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30139 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30140 AND f_charbig = '####updated per insert trigger####';
30141 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30142 BEGIN
30143 SET new.f_int1 = @my_max1 + @counter,
30144 new.f_int2 = @my_min2 - @counter,
30145 new.f_charbig = '####updated per insert trigger####';
30146 SET @counter = @counter + 1;
30147 END|
30148 SET @counter = 1;
30149 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30150 INSERT INTO t1 (f_char1, f_char2, f_charbig)
30151 SELECT CAST(f_int1 AS CHAR),
30152 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30153 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30154 ORDER BY f_int1;
30155 DROP TRIGGER trg_3;
30156         
30157 # check trigger-12 success:     1
30158 DELETE FROM t1
30159 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30160 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30161 AND f_charbig = '####updated per insert trigger####';
30162 ANALYZE  TABLE t1;
30163 Table   Op      Msg_type        Msg_text
30164 test.t1 analyze status  OK
30165 CHECK    TABLE t1 EXTENDED;
30166 Table   Op      Msg_type        Msg_text
30167 test.t1 check   status  OK
30168 CHECKSUM TABLE t1 EXTENDED;
30169 Table   Checksum
30170 test.t1 <some_value>
30171 OPTIMIZE TABLE t1;
30172 Table   Op      Msg_type        Msg_text
30173 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
30174 test.t1 optimize        status  OK
30175 # check layout success:    1
30176 REPAIR   TABLE t1 EXTENDED;
30177 Table   Op      Msg_type        Msg_text
30178 test.t1 repair  note    The storage engine for the table doesn't support repair
30179 # check layout success:    1
30180 TRUNCATE t1;
30181         
30182 # check TRUNCATE success:       1
30183 # check layout success:    1
30184 # End usability test (inc/partition_check.inc)
30185 DROP TABLE t1;
30186 CREATE TABLE t1 (
30187 f_int1 INTEGER,
30188 f_int2 INTEGER,
30189 f_char1 CHAR(20),
30190 f_char2 CHAR(20),
30191 f_charbig VARCHAR(1000)
30192 , PRIMARY KEY (f_int1,f_int2)
30194 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
30195 (PARTITION part1 VALUES LESS THAN (0)
30196 (SUBPARTITION subpart11, SUBPARTITION subpart12),
30197 PARTITION part2 VALUES LESS THAN (5)
30198 (SUBPARTITION subpart21, SUBPARTITION subpart22),
30199 PARTITION part3 VALUES LESS THAN (10)
30200 (SUBPARTITION subpart31, SUBPARTITION subpart32),
30201 PARTITION part4 VALUES LESS THAN (2147483646)
30202 (SUBPARTITION subpart41, SUBPARTITION subpart42));
30203 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30204 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
30205 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
30206 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
30207 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30208 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
30209 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
30210 # Start usability test (inc/partition_check.inc)
30211 create_command
30212 SHOW CREATE TABLE t1;
30213 Table   Create Table
30214 t1      CREATE TABLE `t1` (
30215   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
30216   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
30217   `f_char1` char(20) DEFAULT NULL,
30218   `f_char2` char(20) DEFAULT NULL,
30219   `f_charbig` varchar(1000) DEFAULT NULL,
30220   PRIMARY KEY (`f_int1`,`f_int2`)
30221 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
30222 /*!50100 PARTITION BY RANGE (f_int1)
30223 SUBPARTITION BY KEY (f_int1)
30224 (PARTITION part1 VALUES LESS THAN (0)
30225  (SUBPARTITION subpart11 ENGINE = InnoDB,
30226   SUBPARTITION subpart12 ENGINE = InnoDB),
30227  PARTITION part2 VALUES LESS THAN (5)
30228  (SUBPARTITION subpart21 ENGINE = InnoDB,
30229   SUBPARTITION subpart22 ENGINE = InnoDB),
30230  PARTITION part3 VALUES LESS THAN (10)
30231  (SUBPARTITION subpart31 ENGINE = InnoDB,
30232   SUBPARTITION subpart32 ENGINE = InnoDB),
30233  PARTITION part4 VALUES LESS THAN (2147483646)
30234  (SUBPARTITION subpart41 ENGINE = InnoDB,
30235   SUBPARTITION subpart42 ENGINE = InnoDB)) */
30237 # check prerequisites-1 success:    1
30238 # check COUNT(*) success:    1
30239 # check MIN/MAX(f_int1) success:    1
30240 # check MIN/MAX(f_int2) success:    1
30241 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30242 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30243 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
30244 WHERE f_int1 IN (2,3);
30245 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
30246 # check prerequisites-3 success:    1
30247 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
30248 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30249 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30250 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30251 WHERE f_int1 IN (2,3);
30252 DELETE FROM t1 WHERE f_charbig = 'delete me';
30253 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30254 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30255 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30256 WHERE f_int1 IN (2,3);
30257 DELETE FROM t1 WHERE f_charbig = 'delete me';
30258 # check read via f_int1 success: 1
30259 # check read via f_int2 success: 1
30260         
30261 # check multiple-1 success:     1
30262 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
30263         
30264 # check multiple-2 success:     1
30265 INSERT INTO t1 SELECT * FROM t0_template
30266 WHERE MOD(f_int1,3) = 0;
30267         
30268 # check multiple-3 success:     1
30269 UPDATE t1 SET f_int1 = f_int1 + @max_row
30270 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
30271 AND @max_row_div2 + @max_row_div4;
30272         
30273 # check multiple-4 success:     1
30274 DELETE FROM t1
30275 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
30276 AND @max_row_div2 + @max_row_div4 + @max_row;
30277         
30278 # check multiple-5 success:     1
30279 SELECT COUNT(*) INTO @try_count FROM t0_template
30280 WHERE MOD(f_int1,3) = 0
30281 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30282 SELECT COUNT(*) INTO @clash_count
30283 FROM t1 INNER JOIN t0_template USING(f_int1)
30284 WHERE MOD(f_int1,3) = 0
30285 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30286 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
30287 INSERT INTO t1
30288 SET f_int1 = @cur_value , f_int2 = @cur_value,
30289 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30290 f_charbig = '#SINGLE#';
30291         
30292 # check single-1 success:       1
30293 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
30294 INSERT INTO t1
30295 SET f_int1 = @cur_value , f_int2 = @cur_value,
30296 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30297 f_charbig = '#SINGLE#';
30298         
30299 # check single-2 success:       1
30300 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
30301 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
30302 UPDATE t1 SET f_int1 = @cur_value2
30303 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
30304         
30305 # check single-3 success:       1
30306 SET @cur_value1= -1;
30307 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
30308 UPDATE t1 SET f_int1 = @cur_value1
30309 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
30310         
30311 # check single-4 success:       1
30312 SELECT MAX(f_int1) INTO @cur_value FROM t1;
30313 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
30314         
30315 # check single-5 success:       1
30316 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
30317         
30318 # check single-6 success:       1
30319 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
30320 Warnings:
30321 Warning 1264    Out of range value for column 'f_int1' at row 1
30322 Warning 1264    Out of range value for column 'f_int2' at row 1
30323         
30324 # check single-7 success:       1
30325 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
30326 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
30327 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
30328 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
30329 f_charbig = '#NULL#';
30330 INSERT INTO t1
30331 SET f_int1 = NULL , f_int2 = -@max_row,
30332 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
30333 f_charbig = '#NULL#';
30334 ERROR 23000: Column 'f_int1' cannot be null
30335 # check null success:    1
30336 DELETE FROM t1
30337 WHERE f_int1 = 0 AND f_int2 = 0
30338 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
30339 AND f_charbig = '#NULL#';
30340 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30341 SELECT f_int1, f_int1, '', '', 'was inserted'
30342    FROM t0_template source_tab
30343 WHERE MOD(f_int1,3) = 0
30344 AND f_int1 BETWEEN @max_row_div2 AND @max_row
30345 ON DUPLICATE KEY
30346 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
30347 f_int2 = 2 * @max_row + source_tab.f_int1,
30348 f_charbig = 'was updated';
30349         
30350 # check unique-1-a success:     1
30351         
30352 # check unique-1-b success:     1
30353 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30354 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30355 f_int2 = CAST(f_char1 AS SIGNED INT),
30356 f_charbig = CONCAT('===',f_char1,'===')
30357 WHERE f_charbig = 'was updated';
30358 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30359 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30360    FROM t0_template source_tab
30361 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30362         
30363 # check replace success:        1
30364 DELETE FROM t1
30365 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30366 DELETE FROM t1
30367 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30368 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30369 UPDATE t1 SET f_int2 = f_int1,
30370 f_char1 = CAST(f_int1 AS CHAR),
30371 f_char2 = CAST(f_int1 AS CHAR),
30372 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30373 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30374 SET AUTOCOMMIT= 0;
30375 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30376 SELECT f_int1, f_int1, '', '', 'was inserted'
30377 FROM t0_template source_tab
30378 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30379         
30380 # check transactions-1 success:         1
30381 COMMIT WORK;
30382         
30383 # check transactions-2 success:         1
30384 ROLLBACK WORK;
30385         
30386 # check transactions-3 success:         1
30387 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30388 COMMIT WORK;
30389 ROLLBACK WORK;
30390         
30391 # check transactions-4 success:         1
30392 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30393 SELECT f_int1, f_int1, '', '', 'was inserted'
30394 FROM t0_template source_tab
30395 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30396         
30397 # check transactions-5 success:         1
30398 ROLLBACK WORK;
30399         
30400 # check transactions-6 success:         1
30401 # INFO: Storage engine used for t1 seems to be transactional.
30402 COMMIT;
30403         
30404 # check transactions-7 success:         1
30405 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30406 COMMIT WORK;
30407 SET @@session.sql_mode = 'traditional';
30408 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30409 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30410 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30411 '', '', 'was inserted' FROM t0_template
30412 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30413 ERROR 22012: Division by 0
30414 COMMIT;
30415         
30416 # check transactions-8 success:         1
30417 # INFO: Storage engine used for t1 seems to be able to revert
30418 #       changes made by the failing statement.
30419 SET @@session.sql_mode = '';
30420 SET AUTOCOMMIT= 1;
30421 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30422 COMMIT WORK;
30423 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30424         
30425 # check special-1 success:      1
30426 UPDATE t1 SET f_charbig = '';
30427         
30428 # check special-2 success:      1
30429 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30430 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30431 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30432 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30433 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30434 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30435 'just inserted' FROM t0_template
30436 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30437 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30438 BEGIN
30439 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30440 f_charbig = 'updated by trigger'
30441       WHERE f_int1 = new.f_int1;
30442 END|
30443 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30444 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30445 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30446         
30447 # check trigger-1 success:      1
30448 DROP TRIGGER trg_1;
30449 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30450 f_int2 = CAST(f_char1 AS SIGNED INT),
30451 f_charbig = 'just inserted'
30452    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30453 DELETE FROM t0_aux
30454 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30455 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30456 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30457 'just inserted' FROM t0_template
30458 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30459 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30460 BEGIN
30461 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30462 f_charbig = 'updated by trigger'
30463       WHERE f_int1 = new.f_int1;
30464 END|
30465 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30466 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30467 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30468         
30469 # check trigger-2 success:      1
30470 DROP TRIGGER trg_1;
30471 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30472 f_int2 = CAST(f_char1 AS SIGNED INT),
30473 f_charbig = 'just inserted'
30474    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30475 DELETE FROM t0_aux
30476 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30477 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30478 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30479 'just inserted' FROM t0_template
30480 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30481 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30482 BEGIN
30483 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30484 f_charbig = 'updated by trigger'
30485       WHERE f_int1 = new.f_int1;
30486 END|
30487 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30488 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30489         
30490 # check trigger-3 success:      1
30491 DROP TRIGGER trg_1;
30492 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30493 f_int2 = CAST(f_char1 AS SIGNED INT),
30494 f_charbig = 'just inserted'
30495    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30496 DELETE FROM t0_aux
30497 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30498 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30499 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30500 'just inserted' FROM t0_template
30501 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30502 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30503 BEGIN
30504 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30505 f_charbig = 'updated by trigger'
30506       WHERE f_int1 = - old.f_int1;
30507 END|
30508 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30509 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30510         
30511 # check trigger-4 success:      1
30512 DROP TRIGGER trg_1;
30513 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30514 f_int2 = CAST(f_char1 AS SIGNED INT),
30515 f_charbig = 'just inserted'
30516    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30517 DELETE FROM t0_aux
30518 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30519 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30520 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30521 'just inserted' FROM t0_template
30522 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30523 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30524 BEGIN
30525 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30526 f_charbig = 'updated by trigger'
30527       WHERE f_int1 = new.f_int1;
30528 END|
30529 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30530 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30531         
30532 # check trigger-5 success:      1
30533 DROP TRIGGER trg_1;
30534 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30535 f_int2 = CAST(f_char1 AS SIGNED INT),
30536 f_charbig = 'just inserted'
30537    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30538 DELETE FROM t0_aux
30539 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30540 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30541 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30542 'just inserted' FROM t0_template
30543 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30544 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30545 BEGIN
30546 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30547 f_charbig = 'updated by trigger'
30548       WHERE f_int1 = - old.f_int1;
30549 END|
30550 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30551 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30552         
30553 # check trigger-6 success:      1
30554 DROP TRIGGER trg_1;
30555 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30556 f_int2 = CAST(f_char1 AS SIGNED INT),
30557 f_charbig = 'just inserted'
30558    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30559 DELETE FROM t0_aux
30560 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30561 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30562 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30563 'just inserted' FROM t0_template
30564 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30565 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30566 BEGIN
30567 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30568 f_charbig = 'updated by trigger'
30569       WHERE f_int1 = - old.f_int1;
30570 END|
30571 DELETE FROM t0_aux
30572 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30573         
30574 # check trigger-7 success:      1
30575 DROP TRIGGER trg_1;
30576 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30577 f_int2 = CAST(f_char1 AS SIGNED INT),
30578 f_charbig = 'just inserted'
30579    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30580 DELETE FROM t0_aux
30581 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30582 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30583 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30584 'just inserted' FROM t0_template
30585 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30586 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30587 BEGIN
30588 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30589 f_charbig = 'updated by trigger'
30590       WHERE f_int1 = - old.f_int1;
30591 END|
30592 DELETE FROM t0_aux
30593 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30594         
30595 # check trigger-8 success:      1
30596 DROP TRIGGER trg_1;
30597 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30598 f_int2 = CAST(f_char1 AS SIGNED INT),
30599 f_charbig = 'just inserted'
30600    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30601 DELETE FROM t0_aux
30602 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30603 DELETE FROM t1
30604 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30605 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30606 BEGIN
30607 SET new.f_int1 = old.f_int1 + @max_row,
30608 new.f_int2 = old.f_int2 - @max_row,
30609 new.f_charbig = '####updated per update trigger####';
30610 END|
30611 UPDATE t1
30612 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30613 f_charbig = '####updated per update statement itself####';
30614         
30615 # check trigger-9 success:      1
30616 DROP TRIGGER trg_2;
30617 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30618 f_int2 = CAST(f_char1 AS SIGNED INT),
30619 f_charbig = CONCAT('===',f_char1,'===');
30620 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30621 BEGIN
30622 SET new.f_int1 = new.f_int1 + @max_row,
30623 new.f_int2 = new.f_int2 - @max_row,
30624 new.f_charbig = '####updated per update trigger####';
30625 END|
30626 UPDATE t1
30627 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30628 f_charbig = '####updated per update statement itself####';
30629         
30630 # check trigger-10 success:     1
30631 DROP TRIGGER trg_2;
30632 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30633 f_int2 = CAST(f_char1 AS SIGNED INT),
30634 f_charbig = CONCAT('===',f_char1,'===');
30635 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30636 BEGIN
30637 SET new.f_int1 = @my_max1 + @counter,
30638 new.f_int2 = @my_min2 - @counter,
30639 new.f_charbig = '####updated per insert trigger####';
30640 SET @counter = @counter + 1;
30641 END|
30642 SET @counter = 1;
30643 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30644 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30645 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30646 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30647 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30648 ORDER BY f_int1;
30649 DROP TRIGGER trg_3;
30650         
30651 # check trigger-11 success:     1
30652 DELETE FROM t1
30653 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30654 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30655 AND f_charbig = '####updated per insert trigger####';
30656 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30657 BEGIN
30658 SET new.f_int1 = @my_max1 + @counter,
30659 new.f_int2 = @my_min2 - @counter,
30660 new.f_charbig = '####updated per insert trigger####';
30661 SET @counter = @counter + 1;
30662 END|
30663 SET @counter = 1;
30664 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30665 INSERT INTO t1 (f_char1, f_char2, f_charbig)
30666 SELECT CAST(f_int1 AS CHAR),
30667 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30668 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30669 ORDER BY f_int1;
30670 DROP TRIGGER trg_3;
30671         
30672 # check trigger-12 success:     1
30673 DELETE FROM t1
30674 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30675 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30676 AND f_charbig = '####updated per insert trigger####';
30677 ANALYZE  TABLE t1;
30678 Table   Op      Msg_type        Msg_text
30679 test.t1 analyze status  OK
30680 CHECK    TABLE t1 EXTENDED;
30681 Table   Op      Msg_type        Msg_text
30682 test.t1 check   status  OK
30683 CHECKSUM TABLE t1 EXTENDED;
30684 Table   Checksum
30685 test.t1 <some_value>
30686 OPTIMIZE TABLE t1;
30687 Table   Op      Msg_type        Msg_text
30688 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
30689 test.t1 optimize        status  OK
30690 # check layout success:    1
30691 REPAIR   TABLE t1 EXTENDED;
30692 Table   Op      Msg_type        Msg_text
30693 test.t1 repair  note    The storage engine for the table doesn't support repair
30694 # check layout success:    1
30695 TRUNCATE t1;
30696         
30697 # check TRUNCATE success:       1
30698 # check layout success:    1
30699 # End usability test (inc/partition_check.inc)
30700 DROP TABLE t1;
30701 CREATE TABLE t1 (
30702 f_int1 INTEGER,
30703 f_int2 INTEGER,
30704 f_char1 CHAR(20),
30705 f_char2 CHAR(20),
30706 f_charbig VARCHAR(1000)
30707 , PRIMARY KEY (f_int1,f_int2)
30709 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
30710 (PARTITION part1 VALUES IN (0)
30711 (SUBPARTITION sp11, SUBPARTITION sp12),
30712 PARTITION part2 VALUES IN (1)
30713 (SUBPARTITION sp21, SUBPARTITION sp22),
30714 PARTITION part3 VALUES IN (2)
30715 (SUBPARTITION sp31, SUBPARTITION sp32),
30716 PARTITION part4 VALUES IN (NULL)
30717 (SUBPARTITION sp41, SUBPARTITION sp42));
30718 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30719 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
30720 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
30721 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
30722 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30723 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
30724 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
30725 # Start usability test (inc/partition_check.inc)
30726 create_command
30727 SHOW CREATE TABLE t1;
30728 Table   Create Table
30729 t1      CREATE TABLE `t1` (
30730   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
30731   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
30732   `f_char1` char(20) DEFAULT NULL,
30733   `f_char2` char(20) DEFAULT NULL,
30734   `f_charbig` varchar(1000) DEFAULT NULL,
30735   PRIMARY KEY (`f_int1`,`f_int2`)
30736 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
30737 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
30738 SUBPARTITION BY HASH (f_int1 + 1)
30739 (PARTITION part1 VALUES IN (0)
30740  (SUBPARTITION sp11 ENGINE = InnoDB,
30741   SUBPARTITION sp12 ENGINE = InnoDB),
30742  PARTITION part2 VALUES IN (1)
30743  (SUBPARTITION sp21 ENGINE = InnoDB,
30744   SUBPARTITION sp22 ENGINE = InnoDB),
30745  PARTITION part3 VALUES IN (2)
30746  (SUBPARTITION sp31 ENGINE = InnoDB,
30747   SUBPARTITION sp32 ENGINE = InnoDB),
30748  PARTITION part4 VALUES IN (NULL)
30749  (SUBPARTITION sp41 ENGINE = InnoDB,
30750   SUBPARTITION sp42 ENGINE = InnoDB)) */
30752 # check prerequisites-1 success:    1
30753 # check COUNT(*) success:    1
30754 # check MIN/MAX(f_int1) success:    1
30755 # check MIN/MAX(f_int2) success:    1
30756 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30757 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30758 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
30759 WHERE f_int1 IN (2,3);
30760 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
30761 # check prerequisites-3 success:    1
30762 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
30763 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30764 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30765 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30766 WHERE f_int1 IN (2,3);
30767 DELETE FROM t1 WHERE f_charbig = 'delete me';
30768 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30769 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30770 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30771 WHERE f_int1 IN (2,3);
30772 DELETE FROM t1 WHERE f_charbig = 'delete me';
30773 # check read via f_int1 success: 1
30774 # check read via f_int2 success: 1
30775         
30776 # check multiple-1 success:     1
30777 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
30778         
30779 # check multiple-2 success:     1
30780 INSERT INTO t1 SELECT * FROM t0_template
30781 WHERE MOD(f_int1,3) = 0;
30782         
30783 # check multiple-3 success:     1
30784 UPDATE t1 SET f_int1 = f_int1 + @max_row
30785 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
30786 AND @max_row_div2 + @max_row_div4;
30787         
30788 # check multiple-4 success:     1
30789 DELETE FROM t1
30790 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
30791 AND @max_row_div2 + @max_row_div4 + @max_row;
30792         
30793 # check multiple-5 success:     1
30794 SELECT COUNT(*) INTO @try_count FROM t0_template
30795 WHERE MOD(f_int1,3) = 0
30796 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30797 SELECT COUNT(*) INTO @clash_count
30798 FROM t1 INNER JOIN t0_template USING(f_int1)
30799 WHERE MOD(f_int1,3) = 0
30800 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30801 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
30802 INSERT INTO t1
30803 SET f_int1 = @cur_value , f_int2 = @cur_value,
30804 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30805 f_charbig = '#SINGLE#';
30806         
30807 # check single-1 success:       1
30808 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
30809 INSERT INTO t1
30810 SET f_int1 = @cur_value , f_int2 = @cur_value,
30811 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30812 f_charbig = '#SINGLE#';
30813         
30814 # check single-2 success:       1
30815 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
30816 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
30817 UPDATE t1 SET f_int1 = @cur_value2
30818 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
30819         
30820 # check single-3 success:       1
30821 SET @cur_value1= -1;
30822 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
30823 UPDATE t1 SET f_int1 = @cur_value1
30824 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
30825         
30826 # check single-4 success:       1
30827 SELECT MAX(f_int1) INTO @cur_value FROM t1;
30828 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
30829         
30830 # check single-5 success:       1
30831 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
30832         
30833 # check single-6 success:       1
30834 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
30835 Warnings:
30836 Warning 1264    Out of range value for column 'f_int1' at row 1
30837 Warning 1264    Out of range value for column 'f_int2' at row 1
30838         
30839 # check single-7 success:       1
30840 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
30841 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
30842 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
30843 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
30844 f_charbig = '#NULL#';
30845 INSERT INTO t1
30846 SET f_int1 = NULL , f_int2 = -@max_row,
30847 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
30848 f_charbig = '#NULL#';
30849 ERROR 23000: Column 'f_int1' cannot be null
30850 # check null success:    1
30851 DELETE FROM t1
30852 WHERE f_int1 = 0 AND f_int2 = 0
30853 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
30854 AND f_charbig = '#NULL#';
30855 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30856 SELECT f_int1, f_int1, '', '', 'was inserted'
30857    FROM t0_template source_tab
30858 WHERE MOD(f_int1,3) = 0
30859 AND f_int1 BETWEEN @max_row_div2 AND @max_row
30860 ON DUPLICATE KEY
30861 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
30862 f_int2 = 2 * @max_row + source_tab.f_int1,
30863 f_charbig = 'was updated';
30864         
30865 # check unique-1-a success:     1
30866         
30867 # check unique-1-b success:     1
30868 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30869 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30870 f_int2 = CAST(f_char1 AS SIGNED INT),
30871 f_charbig = CONCAT('===',f_char1,'===')
30872 WHERE f_charbig = 'was updated';
30873 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30874 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30875    FROM t0_template source_tab
30876 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30877         
30878 # check replace success:        1
30879 DELETE FROM t1
30880 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30881 DELETE FROM t1
30882 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30883 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30884 UPDATE t1 SET f_int2 = f_int1,
30885 f_char1 = CAST(f_int1 AS CHAR),
30886 f_char2 = CAST(f_int1 AS CHAR),
30887 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30888 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30889 SET AUTOCOMMIT= 0;
30890 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30891 SELECT f_int1, f_int1, '', '', 'was inserted'
30892 FROM t0_template source_tab
30893 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30894         
30895 # check transactions-1 success:         1
30896 COMMIT WORK;
30897         
30898 # check transactions-2 success:         1
30899 ROLLBACK WORK;
30900         
30901 # check transactions-3 success:         1
30902 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30903 COMMIT WORK;
30904 ROLLBACK WORK;
30905         
30906 # check transactions-4 success:         1
30907 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30908 SELECT f_int1, f_int1, '', '', 'was inserted'
30909 FROM t0_template source_tab
30910 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30911         
30912 # check transactions-5 success:         1
30913 ROLLBACK WORK;
30914         
30915 # check transactions-6 success:         1
30916 # INFO: Storage engine used for t1 seems to be transactional.
30917 COMMIT;
30918         
30919 # check transactions-7 success:         1
30920 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30921 COMMIT WORK;
30922 SET @@session.sql_mode = 'traditional';
30923 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30924 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30925 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30926 '', '', 'was inserted' FROM t0_template
30927 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30928 ERROR 22012: Division by 0
30929 COMMIT;
30930         
30931 # check transactions-8 success:         1
30932 # INFO: Storage engine used for t1 seems to be able to revert
30933 #       changes made by the failing statement.
30934 SET @@session.sql_mode = '';
30935 SET AUTOCOMMIT= 1;
30936 DELETE FROM t1 WHERE f_charbig = 'was inserted';
30937 COMMIT WORK;
30938 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30939         
30940 # check special-1 success:      1
30941 UPDATE t1 SET f_charbig = '';
30942         
30943 # check special-2 success:      1
30944 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30945 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30946 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30947 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30948 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30949 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30950 'just inserted' FROM t0_template
30951 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30952 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30953 BEGIN
30954 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30955 f_charbig = 'updated by trigger'
30956       WHERE f_int1 = new.f_int1;
30957 END|
30958 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30959 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30960 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30961         
30962 # check trigger-1 success:      1
30963 DROP TRIGGER trg_1;
30964 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30965 f_int2 = CAST(f_char1 AS SIGNED INT),
30966 f_charbig = 'just inserted'
30967    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30968 DELETE FROM t0_aux
30969 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30970 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30971 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30972 'just inserted' FROM t0_template
30973 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30974 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30975 BEGIN
30976 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30977 f_charbig = 'updated by trigger'
30978       WHERE f_int1 = new.f_int1;
30979 END|
30980 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30981 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30982 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30983         
30984 # check trigger-2 success:      1
30985 DROP TRIGGER trg_1;
30986 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30987 f_int2 = CAST(f_char1 AS SIGNED INT),
30988 f_charbig = 'just inserted'
30989    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30990 DELETE FROM t0_aux
30991 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30992 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30993 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30994 'just inserted' FROM t0_template
30995 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30996 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30997 BEGIN
30998 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30999 f_charbig = 'updated by trigger'
31000       WHERE f_int1 = new.f_int1;
31001 END|
31002 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31003 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31004         
31005 # check trigger-3 success:      1
31006 DROP TRIGGER trg_1;
31007 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31008 f_int2 = CAST(f_char1 AS SIGNED INT),
31009 f_charbig = 'just inserted'
31010    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31011 DELETE FROM t0_aux
31012 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31013 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31014 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31015 'just inserted' FROM t0_template
31016 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31017 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31018 BEGIN
31019 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31020 f_charbig = 'updated by trigger'
31021       WHERE f_int1 = - old.f_int1;
31022 END|
31023 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31024 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31025         
31026 # check trigger-4 success:      1
31027 DROP TRIGGER trg_1;
31028 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31029 f_int2 = CAST(f_char1 AS SIGNED INT),
31030 f_charbig = 'just inserted'
31031    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31032 DELETE FROM t0_aux
31033 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31034 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31035 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31036 'just inserted' FROM t0_template
31037 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31038 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31039 BEGIN
31040 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31041 f_charbig = 'updated by trigger'
31042       WHERE f_int1 = new.f_int1;
31043 END|
31044 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31045 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31046         
31047 # check trigger-5 success:      1
31048 DROP TRIGGER trg_1;
31049 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31050 f_int2 = CAST(f_char1 AS SIGNED INT),
31051 f_charbig = 'just inserted'
31052    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31053 DELETE FROM t0_aux
31054 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31055 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31056 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31057 'just inserted' FROM t0_template
31058 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31059 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31060 BEGIN
31061 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31062 f_charbig = 'updated by trigger'
31063       WHERE f_int1 = - old.f_int1;
31064 END|
31065 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31066 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31067         
31068 # check trigger-6 success:      1
31069 DROP TRIGGER trg_1;
31070 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31071 f_int2 = CAST(f_char1 AS SIGNED INT),
31072 f_charbig = 'just inserted'
31073    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31074 DELETE FROM t0_aux
31075 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31076 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31077 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31078 'just inserted' FROM t0_template
31079 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31080 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
31081 BEGIN
31082 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31083 f_charbig = 'updated by trigger'
31084       WHERE f_int1 = - old.f_int1;
31085 END|
31086 DELETE FROM t0_aux
31087 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31088         
31089 # check trigger-7 success:      1
31090 DROP TRIGGER trg_1;
31091 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31092 f_int2 = CAST(f_char1 AS SIGNED INT),
31093 f_charbig = 'just inserted'
31094    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31095 DELETE FROM t0_aux
31096 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31097 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31098 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31099 'just inserted' FROM t0_template
31100 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31101 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
31102 BEGIN
31103 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31104 f_charbig = 'updated by trigger'
31105       WHERE f_int1 = - old.f_int1;
31106 END|
31107 DELETE FROM t0_aux
31108 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31109         
31110 # check trigger-8 success:      1
31111 DROP TRIGGER trg_1;
31112 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31113 f_int2 = CAST(f_char1 AS SIGNED INT),
31114 f_charbig = 'just inserted'
31115    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31116 DELETE FROM t0_aux
31117 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31118 DELETE FROM t1
31119 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31120 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31121 BEGIN
31122 SET new.f_int1 = old.f_int1 + @max_row,
31123 new.f_int2 = old.f_int2 - @max_row,
31124 new.f_charbig = '####updated per update trigger####';
31125 END|
31126 UPDATE t1
31127 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31128 f_charbig = '####updated per update statement itself####';
31129         
31130 # check trigger-9 success:      1
31131 DROP TRIGGER trg_2;
31132 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31133 f_int2 = CAST(f_char1 AS SIGNED INT),
31134 f_charbig = CONCAT('===',f_char1,'===');
31135 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31136 BEGIN
31137 SET new.f_int1 = new.f_int1 + @max_row,
31138 new.f_int2 = new.f_int2 - @max_row,
31139 new.f_charbig = '####updated per update trigger####';
31140 END|
31141 UPDATE t1
31142 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31143 f_charbig = '####updated per update statement itself####';
31144         
31145 # check trigger-10 success:     1
31146 DROP TRIGGER trg_2;
31147 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31148 f_int2 = CAST(f_char1 AS SIGNED INT),
31149 f_charbig = CONCAT('===',f_char1,'===');
31150 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31151 BEGIN
31152 SET new.f_int1 = @my_max1 + @counter,
31153 new.f_int2 = @my_min2 - @counter,
31154 new.f_charbig = '####updated per insert trigger####';
31155 SET @counter = @counter + 1;
31156 END|
31157 SET @counter = 1;
31158 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31159 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31160 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31161 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31162 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31163 ORDER BY f_int1;
31164 DROP TRIGGER trg_3;
31165         
31166 # check trigger-11 success:     1
31167 DELETE FROM t1
31168 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31169 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31170 AND f_charbig = '####updated per insert trigger####';
31171 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31172 BEGIN
31173 SET new.f_int1 = @my_max1 + @counter,
31174 new.f_int2 = @my_min2 - @counter,
31175 new.f_charbig = '####updated per insert trigger####';
31176 SET @counter = @counter + 1;
31177 END|
31178 SET @counter = 1;
31179 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31180 INSERT INTO t1 (f_char1, f_char2, f_charbig)
31181 SELECT CAST(f_int1 AS CHAR),
31182 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31183 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31184 ORDER BY f_int1;
31185 DROP TRIGGER trg_3;
31186         
31187 # check trigger-12 success:     1
31188 DELETE FROM t1
31189 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31190 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31191 AND f_charbig = '####updated per insert trigger####';
31192 ANALYZE  TABLE t1;
31193 Table   Op      Msg_type        Msg_text
31194 test.t1 analyze status  OK
31195 CHECK    TABLE t1 EXTENDED;
31196 Table   Op      Msg_type        Msg_text
31197 test.t1 check   status  OK
31198 CHECKSUM TABLE t1 EXTENDED;
31199 Table   Checksum
31200 test.t1 <some_value>
31201 OPTIMIZE TABLE t1;
31202 Table   Op      Msg_type        Msg_text
31203 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
31204 test.t1 optimize        status  OK
31205 # check layout success:    1
31206 REPAIR   TABLE t1 EXTENDED;
31207 Table   Op      Msg_type        Msg_text
31208 test.t1 repair  note    The storage engine for the table doesn't support repair
31209 # check layout success:    1
31210 TRUNCATE t1;
31211         
31212 # check TRUNCATE success:       1
31213 # check layout success:    1
31214 # End usability test (inc/partition_check.inc)
31215 DROP TABLE t1;
31216 CREATE TABLE t1 (
31217 f_int1 INTEGER,
31218 f_int2 INTEGER,
31219 f_char1 CHAR(20),
31220 f_char2 CHAR(20),
31221 f_charbig VARCHAR(1000)
31222 , PRIMARY KEY (f_int1,f_int2)
31224 PARTITION BY LIST(ABS(MOD(f_int1,2)))
31225 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
31226 (PARTITION part1 VALUES IN (0),
31227 PARTITION part2 VALUES IN (1),
31228 PARTITION part3 VALUES IN (NULL));
31229 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31230 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
31231 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
31232 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
31233 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31234 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
31235 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
31236 # Start usability test (inc/partition_check.inc)
31237 create_command
31238 SHOW CREATE TABLE t1;
31239 Table   Create Table
31240 t1      CREATE TABLE `t1` (
31241   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
31242   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
31243   `f_char1` char(20) DEFAULT NULL,
31244   `f_char2` char(20) DEFAULT NULL,
31245   `f_charbig` varchar(1000) DEFAULT NULL,
31246   PRIMARY KEY (`f_int1`,`f_int2`)
31247 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
31248 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
31249 SUBPARTITION BY KEY (f_int1)
31250 SUBPARTITIONS 3
31251 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
31252  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
31253  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
31255 # check prerequisites-1 success:    1
31256 # check COUNT(*) success:    1
31257 # check MIN/MAX(f_int1) success:    1
31258 # check MIN/MAX(f_int2) success:    1
31259 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31260 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31261 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
31262 WHERE f_int1 IN (2,3);
31263 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
31264 # check prerequisites-3 success:    1
31265 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
31266 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31267 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31268 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31269 WHERE f_int1 IN (2,3);
31270 DELETE FROM t1 WHERE f_charbig = 'delete me';
31271 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31272 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31273 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31274 WHERE f_int1 IN (2,3);
31275 DELETE FROM t1 WHERE f_charbig = 'delete me';
31276 # check read via f_int1 success: 1
31277 # check read via f_int2 success: 1
31278         
31279 # check multiple-1 success:     1
31280 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
31281         
31282 # check multiple-2 success:     1
31283 INSERT INTO t1 SELECT * FROM t0_template
31284 WHERE MOD(f_int1,3) = 0;
31285         
31286 # check multiple-3 success:     1
31287 UPDATE t1 SET f_int1 = f_int1 + @max_row
31288 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
31289 AND @max_row_div2 + @max_row_div4;
31290         
31291 # check multiple-4 success:     1
31292 DELETE FROM t1
31293 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
31294 AND @max_row_div2 + @max_row_div4 + @max_row;
31295         
31296 # check multiple-5 success:     1
31297 SELECT COUNT(*) INTO @try_count FROM t0_template
31298 WHERE MOD(f_int1,3) = 0
31299 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31300 SELECT COUNT(*) INTO @clash_count
31301 FROM t1 INNER JOIN t0_template USING(f_int1)
31302 WHERE MOD(f_int1,3) = 0
31303 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31304 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
31305 INSERT INTO t1
31306 SET f_int1 = @cur_value , f_int2 = @cur_value,
31307 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31308 f_charbig = '#SINGLE#';
31309         
31310 # check single-1 success:       1
31311 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
31312 INSERT INTO t1
31313 SET f_int1 = @cur_value , f_int2 = @cur_value,
31314 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31315 f_charbig = '#SINGLE#';
31316         
31317 # check single-2 success:       1
31318 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
31319 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
31320 UPDATE t1 SET f_int1 = @cur_value2
31321 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
31322         
31323 # check single-3 success:       1
31324 SET @cur_value1= -1;
31325 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
31326 UPDATE t1 SET f_int1 = @cur_value1
31327 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
31328         
31329 # check single-4 success:       1
31330 SELECT MAX(f_int1) INTO @cur_value FROM t1;
31331 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
31332         
31333 # check single-5 success:       1
31334 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
31335         
31336 # check single-6 success:       1
31337 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
31338 Warnings:
31339 Warning 1264    Out of range value for column 'f_int1' at row 1
31340 Warning 1264    Out of range value for column 'f_int2' at row 1
31341         
31342 # check single-7 success:       1
31343 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
31344 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
31345 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
31346 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
31347 f_charbig = '#NULL#';
31348 INSERT INTO t1
31349 SET f_int1 = NULL , f_int2 = -@max_row,
31350 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
31351 f_charbig = '#NULL#';
31352 ERROR 23000: Column 'f_int1' cannot be null
31353 # check null success:    1
31354 DELETE FROM t1
31355 WHERE f_int1 = 0 AND f_int2 = 0
31356 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
31357 AND f_charbig = '#NULL#';
31358 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31359 SELECT f_int1, f_int1, '', '', 'was inserted'
31360    FROM t0_template source_tab
31361 WHERE MOD(f_int1,3) = 0
31362 AND f_int1 BETWEEN @max_row_div2 AND @max_row
31363 ON DUPLICATE KEY
31364 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
31365 f_int2 = 2 * @max_row + source_tab.f_int1,
31366 f_charbig = 'was updated';
31367         
31368 # check unique-1-a success:     1
31369         
31370 # check unique-1-b success:     1
31371 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31372 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31373 f_int2 = CAST(f_char1 AS SIGNED INT),
31374 f_charbig = CONCAT('===',f_char1,'===')
31375 WHERE f_charbig = 'was updated';
31376 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31377 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
31378    FROM t0_template source_tab
31379 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31380         
31381 # check replace success:        1
31382 DELETE FROM t1
31383 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
31384 DELETE FROM t1
31385 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
31386 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
31387 UPDATE t1 SET f_int2 = f_int1,
31388 f_char1 = CAST(f_int1 AS CHAR),
31389 f_char2 = CAST(f_int1 AS CHAR),
31390 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
31391 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
31392 SET AUTOCOMMIT= 0;
31393 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31394 SELECT f_int1, f_int1, '', '', 'was inserted'
31395 FROM t0_template source_tab
31396 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31397         
31398 # check transactions-1 success:         1
31399 COMMIT WORK;
31400         
31401 # check transactions-2 success:         1
31402 ROLLBACK WORK;
31403         
31404 # check transactions-3 success:         1
31405 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31406 COMMIT WORK;
31407 ROLLBACK WORK;
31408         
31409 # check transactions-4 success:         1
31410 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31411 SELECT f_int1, f_int1, '', '', 'was inserted'
31412 FROM t0_template source_tab
31413 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31414         
31415 # check transactions-5 success:         1
31416 ROLLBACK WORK;
31417         
31418 # check transactions-6 success:         1
31419 # INFO: Storage engine used for t1 seems to be transactional.
31420 COMMIT;
31421         
31422 # check transactions-7 success:         1
31423 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31424 COMMIT WORK;
31425 SET @@session.sql_mode = 'traditional';
31426 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
31427 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31428 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
31429 '', '', 'was inserted' FROM t0_template
31430 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31431 ERROR 22012: Division by 0
31432 COMMIT;
31433         
31434 # check transactions-8 success:         1
31435 # INFO: Storage engine used for t1 seems to be able to revert
31436 #       changes made by the failing statement.
31437 SET @@session.sql_mode = '';
31438 SET AUTOCOMMIT= 1;
31439 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31440 COMMIT WORK;
31441 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
31442         
31443 # check special-1 success:      1
31444 UPDATE t1 SET f_charbig = '';
31445         
31446 # check special-2 success:      1
31447 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
31448 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31449 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
31450 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31451 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31452 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31453 'just inserted' FROM t0_template
31454 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31455 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
31456 BEGIN
31457 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31458 f_charbig = 'updated by trigger'
31459       WHERE f_int1 = new.f_int1;
31460 END|
31461 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31462 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31463 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31464         
31465 # check trigger-1 success:      1
31466 DROP TRIGGER trg_1;
31467 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31468 f_int2 = CAST(f_char1 AS SIGNED INT),
31469 f_charbig = 'just inserted'
31470    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31471 DELETE FROM t0_aux
31472 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31473 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31474 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31475 'just inserted' FROM t0_template
31476 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31477 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
31478 BEGIN
31479 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31480 f_charbig = 'updated by trigger'
31481       WHERE f_int1 = new.f_int1;
31482 END|
31483 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31484 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31485 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31486         
31487 # check trigger-2 success:      1
31488 DROP TRIGGER trg_1;
31489 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31490 f_int2 = CAST(f_char1 AS SIGNED INT),
31491 f_charbig = 'just inserted'
31492    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31493 DELETE FROM t0_aux
31494 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31495 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31496 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31497 'just inserted' FROM t0_template
31498 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31499 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31500 BEGIN
31501 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31502 f_charbig = 'updated by trigger'
31503       WHERE f_int1 = new.f_int1;
31504 END|
31505 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31506 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31507         
31508 # check trigger-3 success:      1
31509 DROP TRIGGER trg_1;
31510 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31511 f_int2 = CAST(f_char1 AS SIGNED INT),
31512 f_charbig = 'just inserted'
31513    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31514 DELETE FROM t0_aux
31515 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31516 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31517 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31518 'just inserted' FROM t0_template
31519 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31520 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31521 BEGIN
31522 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31523 f_charbig = 'updated by trigger'
31524       WHERE f_int1 = - old.f_int1;
31525 END|
31526 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31527 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31528         
31529 # check trigger-4 success:      1
31530 DROP TRIGGER trg_1;
31531 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31532 f_int2 = CAST(f_char1 AS SIGNED INT),
31533 f_charbig = 'just inserted'
31534    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31535 DELETE FROM t0_aux
31536 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31537 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31538 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31539 'just inserted' FROM t0_template
31540 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31541 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31542 BEGIN
31543 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31544 f_charbig = 'updated by trigger'
31545       WHERE f_int1 = new.f_int1;
31546 END|
31547 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31548 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31549         
31550 # check trigger-5 success:      1
31551 DROP TRIGGER trg_1;
31552 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31553 f_int2 = CAST(f_char1 AS SIGNED INT),
31554 f_charbig = 'just inserted'
31555    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31556 DELETE FROM t0_aux
31557 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31558 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31559 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31560 'just inserted' FROM t0_template
31561 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31562 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31563 BEGIN
31564 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31565 f_charbig = 'updated by trigger'
31566       WHERE f_int1 = - old.f_int1;
31567 END|
31568 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31569 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31570         
31571 # check trigger-6 success:      1
31572 DROP TRIGGER trg_1;
31573 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31574 f_int2 = CAST(f_char1 AS SIGNED INT),
31575 f_charbig = 'just inserted'
31576    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31577 DELETE FROM t0_aux
31578 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31579 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31580 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31581 'just inserted' FROM t0_template
31582 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31583 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
31584 BEGIN
31585 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31586 f_charbig = 'updated by trigger'
31587       WHERE f_int1 = - old.f_int1;
31588 END|
31589 DELETE FROM t0_aux
31590 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31591         
31592 # check trigger-7 success:      1
31593 DROP TRIGGER trg_1;
31594 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31595 f_int2 = CAST(f_char1 AS SIGNED INT),
31596 f_charbig = 'just inserted'
31597    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31598 DELETE FROM t0_aux
31599 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31600 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31601 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31602 'just inserted' FROM t0_template
31603 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31604 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
31605 BEGIN
31606 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31607 f_charbig = 'updated by trigger'
31608       WHERE f_int1 = - old.f_int1;
31609 END|
31610 DELETE FROM t0_aux
31611 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31612         
31613 # check trigger-8 success:      1
31614 DROP TRIGGER trg_1;
31615 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31616 f_int2 = CAST(f_char1 AS SIGNED INT),
31617 f_charbig = 'just inserted'
31618    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31619 DELETE FROM t0_aux
31620 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31621 DELETE FROM t1
31622 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31623 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31624 BEGIN
31625 SET new.f_int1 = old.f_int1 + @max_row,
31626 new.f_int2 = old.f_int2 - @max_row,
31627 new.f_charbig = '####updated per update trigger####';
31628 END|
31629 UPDATE t1
31630 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31631 f_charbig = '####updated per update statement itself####';
31632         
31633 # check trigger-9 success:      1
31634 DROP TRIGGER trg_2;
31635 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31636 f_int2 = CAST(f_char1 AS SIGNED INT),
31637 f_charbig = CONCAT('===',f_char1,'===');
31638 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31639 BEGIN
31640 SET new.f_int1 = new.f_int1 + @max_row,
31641 new.f_int2 = new.f_int2 - @max_row,
31642 new.f_charbig = '####updated per update trigger####';
31643 END|
31644 UPDATE t1
31645 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31646 f_charbig = '####updated per update statement itself####';
31647         
31648 # check trigger-10 success:     1
31649 DROP TRIGGER trg_2;
31650 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31651 f_int2 = CAST(f_char1 AS SIGNED INT),
31652 f_charbig = CONCAT('===',f_char1,'===');
31653 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31654 BEGIN
31655 SET new.f_int1 = @my_max1 + @counter,
31656 new.f_int2 = @my_min2 - @counter,
31657 new.f_charbig = '####updated per insert trigger####';
31658 SET @counter = @counter + 1;
31659 END|
31660 SET @counter = 1;
31661 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31662 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31663 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31664 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31665 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31666 ORDER BY f_int1;
31667 DROP TRIGGER trg_3;
31668         
31669 # check trigger-11 success:     1
31670 DELETE FROM t1
31671 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31672 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31673 AND f_charbig = '####updated per insert trigger####';
31674 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31675 BEGIN
31676 SET new.f_int1 = @my_max1 + @counter,
31677 new.f_int2 = @my_min2 - @counter,
31678 new.f_charbig = '####updated per insert trigger####';
31679 SET @counter = @counter + 1;
31680 END|
31681 SET @counter = 1;
31682 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31683 INSERT INTO t1 (f_char1, f_char2, f_charbig)
31684 SELECT CAST(f_int1 AS CHAR),
31685 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31686 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31687 ORDER BY f_int1;
31688 DROP TRIGGER trg_3;
31689         
31690 # check trigger-12 success:     1
31691 DELETE FROM t1
31692 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31693 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31694 AND f_charbig = '####updated per insert trigger####';
31695 ANALYZE  TABLE t1;
31696 Table   Op      Msg_type        Msg_text
31697 test.t1 analyze status  OK
31698 CHECK    TABLE t1 EXTENDED;
31699 Table   Op      Msg_type        Msg_text
31700 test.t1 check   status  OK
31701 CHECKSUM TABLE t1 EXTENDED;
31702 Table   Checksum
31703 test.t1 <some_value>
31704 OPTIMIZE TABLE t1;
31705 Table   Op      Msg_type        Msg_text
31706 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
31707 test.t1 optimize        status  OK
31708 # check layout success:    1
31709 REPAIR   TABLE t1 EXTENDED;
31710 Table   Op      Msg_type        Msg_text
31711 test.t1 repair  note    The storage engine for the table doesn't support repair
31712 # check layout success:    1
31713 TRUNCATE t1;
31714         
31715 # check TRUNCATE success:       1
31716 # check layout success:    1
31717 # End usability test (inc/partition_check.inc)
31718 DROP TABLE t1;
31719 DROP TABLE IF EXISTS t1;
31720 CREATE TABLE t1 (
31721 f_int1 INTEGER,
31722 f_int2 INTEGER,
31723 f_char1 CHAR(20),
31724 f_char2 CHAR(20),
31725 f_charbig VARCHAR(1000)
31726 , PRIMARY KEY (f_int1,f_int2)
31728 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
31729 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31730 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
31731 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
31732 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
31733 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31734 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
31735 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
31736 # Start usability test (inc/partition_check.inc)
31737 create_command
31738 SHOW CREATE TABLE t1;
31739 Table   Create Table
31740 t1      CREATE TABLE `t1` (
31741   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
31742   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
31743   `f_char1` char(20) DEFAULT NULL,
31744   `f_char2` char(20) DEFAULT NULL,
31745   `f_charbig` varchar(1000) DEFAULT NULL,
31746   PRIMARY KEY (`f_int1`,`f_int2`)
31747 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
31748 /*!50100 PARTITION BY HASH (f_int1 + f_int2)
31749 PARTITIONS 2 */
31751 # check prerequisites-1 success:    1
31752 # check COUNT(*) success:    1
31753 # check MIN/MAX(f_int1) success:    1
31754 # check MIN/MAX(f_int2) success:    1
31755 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31756 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31757 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
31758 WHERE f_int1 IN (2,3);
31759 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
31760 # check prerequisites-3 success:    1
31761 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
31762 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31763 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31764 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31765 WHERE f_int1 IN (2,3);
31766 DELETE FROM t1 WHERE f_charbig = 'delete me';
31767 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31768 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31769 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31770 WHERE f_int1 IN (2,3);
31771 DELETE FROM t1 WHERE f_charbig = 'delete me';
31772 # check read via f_int1 success: 1
31773 # check read via f_int2 success: 1
31774         
31775 # check multiple-1 success:     1
31776 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
31777         
31778 # check multiple-2 success:     1
31779 INSERT INTO t1 SELECT * FROM t0_template
31780 WHERE MOD(f_int1,3) = 0;
31781         
31782 # check multiple-3 success:     1
31783 UPDATE t1 SET f_int1 = f_int1 + @max_row
31784 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
31785 AND @max_row_div2 + @max_row_div4;
31786         
31787 # check multiple-4 success:     1
31788 DELETE FROM t1
31789 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
31790 AND @max_row_div2 + @max_row_div4 + @max_row;
31791         
31792 # check multiple-5 success:     1
31793 SELECT COUNT(*) INTO @try_count FROM t0_template
31794 WHERE MOD(f_int1,3) = 0
31795 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31796 SELECT COUNT(*) INTO @clash_count
31797 FROM t1 INNER JOIN t0_template USING(f_int1)
31798 WHERE MOD(f_int1,3) = 0
31799 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31800 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
31801 INSERT INTO t1
31802 SET f_int1 = @cur_value , f_int2 = @cur_value,
31803 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31804 f_charbig = '#SINGLE#';
31805         
31806 # check single-1 success:       1
31807 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
31808 INSERT INTO t1
31809 SET f_int1 = @cur_value , f_int2 = @cur_value,
31810 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31811 f_charbig = '#SINGLE#';
31812         
31813 # check single-2 success:       1
31814 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
31815 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
31816 UPDATE t1 SET f_int1 = @cur_value2
31817 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
31818         
31819 # check single-3 success:       1
31820 SET @cur_value1= -1;
31821 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
31822 UPDATE t1 SET f_int1 = @cur_value1
31823 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
31824         
31825 # check single-4 success:       1
31826 SELECT MAX(f_int1) INTO @cur_value FROM t1;
31827 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
31828         
31829 # check single-5 success:       1
31830 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
31831         
31832 # check single-6 success:       1
31833 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
31834 Warnings:
31835 Warning 1264    Out of range value for column 'f_int1' at row 1
31836 Warning 1264    Out of range value for column 'f_int2' at row 1
31837         
31838 # check single-7 success:       1
31839 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
31840 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
31841 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
31842 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
31843 f_charbig = '#NULL#';
31844 INSERT INTO t1
31845 SET f_int1 = NULL , f_int2 = -@max_row,
31846 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
31847 f_charbig = '#NULL#';
31848 ERROR 23000: Column 'f_int1' cannot be null
31849 # check null success:    1
31850 DELETE FROM t1
31851 WHERE f_int1 = 0 AND f_int2 = 0
31852 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
31853 AND f_charbig = '#NULL#';
31854 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31855 SELECT f_int1, f_int1, '', '', 'was inserted'
31856    FROM t0_template source_tab
31857 WHERE MOD(f_int1,3) = 0
31858 AND f_int1 BETWEEN @max_row_div2 AND @max_row
31859 ON DUPLICATE KEY
31860 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
31861 f_int2 = 2 * @max_row + source_tab.f_int1,
31862 f_charbig = 'was updated';
31863         
31864 # check unique-1-a success:     1
31865         
31866 # check unique-1-b success:     1
31867 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31868 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31869 f_int2 = CAST(f_char1 AS SIGNED INT),
31870 f_charbig = CONCAT('===',f_char1,'===')
31871 WHERE f_charbig = 'was updated';
31872 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31873 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
31874    FROM t0_template source_tab
31875 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31876         
31877 # check replace success:        1
31878 DELETE FROM t1
31879 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
31880 DELETE FROM t1
31881 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
31882 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
31883 UPDATE t1 SET f_int2 = f_int1,
31884 f_char1 = CAST(f_int1 AS CHAR),
31885 f_char2 = CAST(f_int1 AS CHAR),
31886 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
31887 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
31888 SET AUTOCOMMIT= 0;
31889 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31890 SELECT f_int1, f_int1, '', '', 'was inserted'
31891 FROM t0_template source_tab
31892 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31893         
31894 # check transactions-1 success:         1
31895 COMMIT WORK;
31896         
31897 # check transactions-2 success:         1
31898 ROLLBACK WORK;
31899         
31900 # check transactions-3 success:         1
31901 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31902 COMMIT WORK;
31903 ROLLBACK WORK;
31904         
31905 # check transactions-4 success:         1
31906 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31907 SELECT f_int1, f_int1, '', '', 'was inserted'
31908 FROM t0_template source_tab
31909 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31910         
31911 # check transactions-5 success:         1
31912 ROLLBACK WORK;
31913         
31914 # check transactions-6 success:         1
31915 # INFO: Storage engine used for t1 seems to be transactional.
31916 COMMIT;
31917         
31918 # check transactions-7 success:         1
31919 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31920 COMMIT WORK;
31921 SET @@session.sql_mode = 'traditional';
31922 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
31923 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31924 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
31925 '', '', 'was inserted' FROM t0_template
31926 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31927 ERROR 22012: Division by 0
31928 COMMIT;
31929         
31930 # check transactions-8 success:         1
31931 # INFO: Storage engine used for t1 seems to be able to revert
31932 #       changes made by the failing statement.
31933 SET @@session.sql_mode = '';
31934 SET AUTOCOMMIT= 1;
31935 DELETE FROM t1 WHERE f_charbig = 'was inserted';
31936 COMMIT WORK;
31937 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
31938         
31939 # check special-1 success:      1
31940 UPDATE t1 SET f_charbig = '';
31941         
31942 # check special-2 success:      1
31943 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
31944 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31945 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
31946 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31947 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31948 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31949 'just inserted' FROM t0_template
31950 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31951 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
31952 BEGIN
31953 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31954 f_charbig = 'updated by trigger'
31955       WHERE f_int1 = new.f_int1;
31956 END|
31957 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31958 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31959 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31960         
31961 # check trigger-1 success:      1
31962 DROP TRIGGER trg_1;
31963 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31964 f_int2 = CAST(f_char1 AS SIGNED INT),
31965 f_charbig = 'just inserted'
31966    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31967 DELETE FROM t0_aux
31968 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31969 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31970 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31971 'just inserted' FROM t0_template
31972 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31973 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
31974 BEGIN
31975 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31976 f_charbig = 'updated by trigger'
31977       WHERE f_int1 = new.f_int1;
31978 END|
31979 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31980 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31981 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31982         
31983 # check trigger-2 success:      1
31984 DROP TRIGGER trg_1;
31985 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31986 f_int2 = CAST(f_char1 AS SIGNED INT),
31987 f_charbig = 'just inserted'
31988    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31989 DELETE FROM t0_aux
31990 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31991 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31992 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31993 'just inserted' FROM t0_template
31994 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31995 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31996 BEGIN
31997 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31998 f_charbig = 'updated by trigger'
31999       WHERE f_int1 = new.f_int1;
32000 END|
32001 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32002 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32003         
32004 # check trigger-3 success:      1
32005 DROP TRIGGER trg_1;
32006 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32007 f_int2 = CAST(f_char1 AS SIGNED INT),
32008 f_charbig = 'just inserted'
32009    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32010 DELETE FROM t0_aux
32011 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32012 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32013 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32014 'just inserted' FROM t0_template
32015 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32016 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
32017 BEGIN
32018 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32019 f_charbig = 'updated by trigger'
32020       WHERE f_int1 = - old.f_int1;
32021 END|
32022 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32023 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32024         
32025 # check trigger-4 success:      1
32026 DROP TRIGGER trg_1;
32027 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32028 f_int2 = CAST(f_char1 AS SIGNED INT),
32029 f_charbig = 'just inserted'
32030    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32031 DELETE FROM t0_aux
32032 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32033 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32034 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32035 'just inserted' FROM t0_template
32036 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32037 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32038 BEGIN
32039 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32040 f_charbig = 'updated by trigger'
32041       WHERE f_int1 = new.f_int1;
32042 END|
32043 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32044 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32045         
32046 # check trigger-5 success:      1
32047 DROP TRIGGER trg_1;
32048 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32049 f_int2 = CAST(f_char1 AS SIGNED INT),
32050 f_charbig = 'just inserted'
32051    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32052 DELETE FROM t0_aux
32053 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32054 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32055 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32056 'just inserted' FROM t0_template
32057 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32058 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32059 BEGIN
32060 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32061 f_charbig = 'updated by trigger'
32062       WHERE f_int1 = - old.f_int1;
32063 END|
32064 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32065 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32066         
32067 # check trigger-6 success:      1
32068 DROP TRIGGER trg_1;
32069 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32070 f_int2 = CAST(f_char1 AS SIGNED INT),
32071 f_charbig = 'just inserted'
32072    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32073 DELETE FROM t0_aux
32074 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32075 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32076 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32077 'just inserted' FROM t0_template
32078 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32079 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
32080 BEGIN
32081 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32082 f_charbig = 'updated by trigger'
32083       WHERE f_int1 = - old.f_int1;
32084 END|
32085 DELETE FROM t0_aux
32086 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32087         
32088 # check trigger-7 success:      1
32089 DROP TRIGGER trg_1;
32090 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32091 f_int2 = CAST(f_char1 AS SIGNED INT),
32092 f_charbig = 'just inserted'
32093    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32094 DELETE FROM t0_aux
32095 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32096 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32097 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32098 'just inserted' FROM t0_template
32099 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32100 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
32101 BEGIN
32102 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32103 f_charbig = 'updated by trigger'
32104       WHERE f_int1 = - old.f_int1;
32105 END|
32106 DELETE FROM t0_aux
32107 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32108         
32109 # check trigger-8 success:      1
32110 DROP TRIGGER trg_1;
32111 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32112 f_int2 = CAST(f_char1 AS SIGNED INT),
32113 f_charbig = 'just inserted'
32114    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32115 DELETE FROM t0_aux
32116 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32117 DELETE FROM t1
32118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32119 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32120 BEGIN
32121 SET new.f_int1 = old.f_int1 + @max_row,
32122 new.f_int2 = old.f_int2 - @max_row,
32123 new.f_charbig = '####updated per update trigger####';
32124 END|
32125 UPDATE t1
32126 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32127 f_charbig = '####updated per update statement itself####';
32128         
32129 # check trigger-9 success:      1
32130 DROP TRIGGER trg_2;
32131 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32132 f_int2 = CAST(f_char1 AS SIGNED INT),
32133 f_charbig = CONCAT('===',f_char1,'===');
32134 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32135 BEGIN
32136 SET new.f_int1 = new.f_int1 + @max_row,
32137 new.f_int2 = new.f_int2 - @max_row,
32138 new.f_charbig = '####updated per update trigger####';
32139 END|
32140 UPDATE t1
32141 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32142 f_charbig = '####updated per update statement itself####';
32143         
32144 # check trigger-10 success:     1
32145 DROP TRIGGER trg_2;
32146 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32147 f_int2 = CAST(f_char1 AS SIGNED INT),
32148 f_charbig = CONCAT('===',f_char1,'===');
32149 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32150 BEGIN
32151 SET new.f_int1 = @my_max1 + @counter,
32152 new.f_int2 = @my_min2 - @counter,
32153 new.f_charbig = '####updated per insert trigger####';
32154 SET @counter = @counter + 1;
32155 END|
32156 SET @counter = 1;
32157 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32158 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32159 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32160 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32161 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32162 ORDER BY f_int1;
32163 DROP TRIGGER trg_3;
32164         
32165 # check trigger-11 success:     1
32166 DELETE FROM t1
32167 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32168 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32169 AND f_charbig = '####updated per insert trigger####';
32170 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32171 BEGIN
32172 SET new.f_int1 = @my_max1 + @counter,
32173 new.f_int2 = @my_min2 - @counter,
32174 new.f_charbig = '####updated per insert trigger####';
32175 SET @counter = @counter + 1;
32176 END|
32177 SET @counter = 1;
32178 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32179 INSERT INTO t1 (f_char1, f_char2, f_charbig)
32180 SELECT CAST(f_int1 AS CHAR),
32181 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32182 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32183 ORDER BY f_int1;
32184 DROP TRIGGER trg_3;
32185         
32186 # check trigger-12 success:     1
32187 DELETE FROM t1
32188 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32189 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32190 AND f_charbig = '####updated per insert trigger####';
32191 ANALYZE  TABLE t1;
32192 Table   Op      Msg_type        Msg_text
32193 test.t1 analyze status  OK
32194 CHECK    TABLE t1 EXTENDED;
32195 Table   Op      Msg_type        Msg_text
32196 test.t1 check   status  OK
32197 CHECKSUM TABLE t1 EXTENDED;
32198 Table   Checksum
32199 test.t1 <some_value>
32200 OPTIMIZE TABLE t1;
32201 Table   Op      Msg_type        Msg_text
32202 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
32203 test.t1 optimize        status  OK
32204 # check layout success:    1
32205 REPAIR   TABLE t1 EXTENDED;
32206 Table   Op      Msg_type        Msg_text
32207 test.t1 repair  note    The storage engine for the table doesn't support repair
32208 # check layout success:    1
32209 TRUNCATE t1;
32210         
32211 # check TRUNCATE success:       1
32212 # check layout success:    1
32213 # End usability test (inc/partition_check.inc)
32214 DROP TABLE t1;
32215 CREATE TABLE t1 (
32216 f_int1 INTEGER,
32217 f_int2 INTEGER,
32218 f_char1 CHAR(20),
32219 f_char2 CHAR(20),
32220 f_charbig VARCHAR(1000)
32221 , PRIMARY KEY (f_int1,f_int2)
32223 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
32224 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32225 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
32226 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
32227 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
32228 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32229 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
32230 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
32231 # Start usability test (inc/partition_check.inc)
32232 create_command
32233 SHOW CREATE TABLE t1;
32234 Table   Create Table
32235 t1      CREATE TABLE `t1` (
32236   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
32237   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
32238   `f_char1` char(20) DEFAULT NULL,
32239   `f_char2` char(20) DEFAULT NULL,
32240   `f_charbig` varchar(1000) DEFAULT NULL,
32241   PRIMARY KEY (`f_int1`,`f_int2`)
32242 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
32243 /*!50100 PARTITION BY KEY (f_int1,f_int2)
32244 PARTITIONS 5 */
32246 # check prerequisites-1 success:    1
32247 # check COUNT(*) success:    1
32248 # check MIN/MAX(f_int1) success:    1
32249 # check MIN/MAX(f_int2) success:    1
32250 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32251 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32252 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
32253 WHERE f_int1 IN (2,3);
32254 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
32255 # check prerequisites-3 success:    1
32256 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
32257 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32258 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32259 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32260 WHERE f_int1 IN (2,3);
32261 DELETE FROM t1 WHERE f_charbig = 'delete me';
32262 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32263 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32264 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32265 WHERE f_int1 IN (2,3);
32266 DELETE FROM t1 WHERE f_charbig = 'delete me';
32267 # check read via f_int1 success: 1
32268 # check read via f_int2 success: 1
32269         
32270 # check multiple-1 success:     1
32271 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
32272         
32273 # check multiple-2 success:     1
32274 INSERT INTO t1 SELECT * FROM t0_template
32275 WHERE MOD(f_int1,3) = 0;
32276         
32277 # check multiple-3 success:     1
32278 UPDATE t1 SET f_int1 = f_int1 + @max_row
32279 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
32280 AND @max_row_div2 + @max_row_div4;
32281         
32282 # check multiple-4 success:     1
32283 DELETE FROM t1
32284 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
32285 AND @max_row_div2 + @max_row_div4 + @max_row;
32286         
32287 # check multiple-5 success:     1
32288 SELECT COUNT(*) INTO @try_count FROM t0_template
32289 WHERE MOD(f_int1,3) = 0
32290 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32291 SELECT COUNT(*) INTO @clash_count
32292 FROM t1 INNER JOIN t0_template USING(f_int1)
32293 WHERE MOD(f_int1,3) = 0
32294 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32295 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
32296 INSERT INTO t1
32297 SET f_int1 = @cur_value , f_int2 = @cur_value,
32298 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32299 f_charbig = '#SINGLE#';
32300         
32301 # check single-1 success:       1
32302 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
32303 INSERT INTO t1
32304 SET f_int1 = @cur_value , f_int2 = @cur_value,
32305 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32306 f_charbig = '#SINGLE#';
32307         
32308 # check single-2 success:       1
32309 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
32310 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
32311 UPDATE t1 SET f_int1 = @cur_value2
32312 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
32313         
32314 # check single-3 success:       1
32315 SET @cur_value1= -1;
32316 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
32317 UPDATE t1 SET f_int1 = @cur_value1
32318 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
32319         
32320 # check single-4 success:       1
32321 SELECT MAX(f_int1) INTO @cur_value FROM t1;
32322 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
32323         
32324 # check single-5 success:       1
32325 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
32326         
32327 # check single-6 success:       1
32328 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
32329 Warnings:
32330 Warning 1264    Out of range value for column 'f_int1' at row 1
32331 Warning 1264    Out of range value for column 'f_int2' at row 1
32332         
32333 # check single-7 success:       1
32334 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
32335 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
32336 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
32337 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
32338 f_charbig = '#NULL#';
32339 INSERT INTO t1
32340 SET f_int1 = NULL , f_int2 = -@max_row,
32341 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
32342 f_charbig = '#NULL#';
32343 ERROR 23000: Column 'f_int1' cannot be null
32344 # check null success:    1
32345 DELETE FROM t1
32346 WHERE f_int1 = 0 AND f_int2 = 0
32347 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
32348 AND f_charbig = '#NULL#';
32349 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32350 SELECT f_int1, f_int1, '', '', 'was inserted'
32351    FROM t0_template source_tab
32352 WHERE MOD(f_int1,3) = 0
32353 AND f_int1 BETWEEN @max_row_div2 AND @max_row
32354 ON DUPLICATE KEY
32355 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
32356 f_int2 = 2 * @max_row + source_tab.f_int1,
32357 f_charbig = 'was updated';
32358         
32359 # check unique-1-a success:     1
32360         
32361 # check unique-1-b success:     1
32362 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32363 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32364 f_int2 = CAST(f_char1 AS SIGNED INT),
32365 f_charbig = CONCAT('===',f_char1,'===')
32366 WHERE f_charbig = 'was updated';
32367 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32368 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
32369    FROM t0_template source_tab
32370 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32371         
32372 # check replace success:        1
32373 DELETE FROM t1
32374 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
32375 DELETE FROM t1
32376 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
32377 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
32378 UPDATE t1 SET f_int2 = f_int1,
32379 f_char1 = CAST(f_int1 AS CHAR),
32380 f_char2 = CAST(f_int1 AS CHAR),
32381 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
32382 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
32383 SET AUTOCOMMIT= 0;
32384 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32385 SELECT f_int1, f_int1, '', '', 'was inserted'
32386 FROM t0_template source_tab
32387 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32388         
32389 # check transactions-1 success:         1
32390 COMMIT WORK;
32391         
32392 # check transactions-2 success:         1
32393 ROLLBACK WORK;
32394         
32395 # check transactions-3 success:         1
32396 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32397 COMMIT WORK;
32398 ROLLBACK WORK;
32399         
32400 # check transactions-4 success:         1
32401 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32402 SELECT f_int1, f_int1, '', '', 'was inserted'
32403 FROM t0_template source_tab
32404 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32405         
32406 # check transactions-5 success:         1
32407 ROLLBACK WORK;
32408         
32409 # check transactions-6 success:         1
32410 # INFO: Storage engine used for t1 seems to be transactional.
32411 COMMIT;
32412         
32413 # check transactions-7 success:         1
32414 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32415 COMMIT WORK;
32416 SET @@session.sql_mode = 'traditional';
32417 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
32418 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32419 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
32420 '', '', 'was inserted' FROM t0_template
32421 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32422 ERROR 22012: Division by 0
32423 COMMIT;
32424         
32425 # check transactions-8 success:         1
32426 # INFO: Storage engine used for t1 seems to be able to revert
32427 #       changes made by the failing statement.
32428 SET @@session.sql_mode = '';
32429 SET AUTOCOMMIT= 1;
32430 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32431 COMMIT WORK;
32432 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
32433         
32434 # check special-1 success:      1
32435 UPDATE t1 SET f_charbig = '';
32436         
32437 # check special-2 success:      1
32438 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
32439 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32440 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
32441 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32442 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32443 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32444 'just inserted' FROM t0_template
32445 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32446 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
32447 BEGIN
32448 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32449 f_charbig = 'updated by trigger'
32450       WHERE f_int1 = new.f_int1;
32451 END|
32452 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32453 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32454 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32455         
32456 # check trigger-1 success:      1
32457 DROP TRIGGER trg_1;
32458 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32459 f_int2 = CAST(f_char1 AS SIGNED INT),
32460 f_charbig = 'just inserted'
32461    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32462 DELETE FROM t0_aux
32463 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32464 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32465 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32466 'just inserted' FROM t0_template
32467 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32468 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
32469 BEGIN
32470 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32471 f_charbig = 'updated by trigger'
32472       WHERE f_int1 = new.f_int1;
32473 END|
32474 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32475 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32476 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32477         
32478 # check trigger-2 success:      1
32479 DROP TRIGGER trg_1;
32480 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32481 f_int2 = CAST(f_char1 AS SIGNED INT),
32482 f_charbig = 'just inserted'
32483    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32484 DELETE FROM t0_aux
32485 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32486 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32487 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32488 'just inserted' FROM t0_template
32489 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32490 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
32491 BEGIN
32492 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32493 f_charbig = 'updated by trigger'
32494       WHERE f_int1 = new.f_int1;
32495 END|
32496 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32497 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32498         
32499 # check trigger-3 success:      1
32500 DROP TRIGGER trg_1;
32501 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32502 f_int2 = CAST(f_char1 AS SIGNED INT),
32503 f_charbig = 'just inserted'
32504    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32505 DELETE FROM t0_aux
32506 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32507 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32508 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32509 'just inserted' FROM t0_template
32510 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32511 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
32512 BEGIN
32513 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32514 f_charbig = 'updated by trigger'
32515       WHERE f_int1 = - old.f_int1;
32516 END|
32517 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32518 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32519         
32520 # check trigger-4 success:      1
32521 DROP TRIGGER trg_1;
32522 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32523 f_int2 = CAST(f_char1 AS SIGNED INT),
32524 f_charbig = 'just inserted'
32525    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32526 DELETE FROM t0_aux
32527 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32528 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32529 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32530 'just inserted' FROM t0_template
32531 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32532 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32533 BEGIN
32534 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32535 f_charbig = 'updated by trigger'
32536       WHERE f_int1 = new.f_int1;
32537 END|
32538 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32539 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32540         
32541 # check trigger-5 success:      1
32542 DROP TRIGGER trg_1;
32543 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32544 f_int2 = CAST(f_char1 AS SIGNED INT),
32545 f_charbig = 'just inserted'
32546    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32547 DELETE FROM t0_aux
32548 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32549 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32550 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32551 'just inserted' FROM t0_template
32552 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32553 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32554 BEGIN
32555 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32556 f_charbig = 'updated by trigger'
32557       WHERE f_int1 = - old.f_int1;
32558 END|
32559 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32560 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32561         
32562 # check trigger-6 success:      1
32563 DROP TRIGGER trg_1;
32564 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32565 f_int2 = CAST(f_char1 AS SIGNED INT),
32566 f_charbig = 'just inserted'
32567    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32568 DELETE FROM t0_aux
32569 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32570 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32571 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32572 'just inserted' FROM t0_template
32573 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32574 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
32575 BEGIN
32576 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32577 f_charbig = 'updated by trigger'
32578       WHERE f_int1 = - old.f_int1;
32579 END|
32580 DELETE FROM t0_aux
32581 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32582         
32583 # check trigger-7 success:      1
32584 DROP TRIGGER trg_1;
32585 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32586 f_int2 = CAST(f_char1 AS SIGNED INT),
32587 f_charbig = 'just inserted'
32588    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32589 DELETE FROM t0_aux
32590 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32591 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32592 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32593 'just inserted' FROM t0_template
32594 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32595 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
32596 BEGIN
32597 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32598 f_charbig = 'updated by trigger'
32599       WHERE f_int1 = - old.f_int1;
32600 END|
32601 DELETE FROM t0_aux
32602 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32603         
32604 # check trigger-8 success:      1
32605 DROP TRIGGER trg_1;
32606 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32607 f_int2 = CAST(f_char1 AS SIGNED INT),
32608 f_charbig = 'just inserted'
32609    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32610 DELETE FROM t0_aux
32611 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32612 DELETE FROM t1
32613 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32614 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32615 BEGIN
32616 SET new.f_int1 = old.f_int1 + @max_row,
32617 new.f_int2 = old.f_int2 - @max_row,
32618 new.f_charbig = '####updated per update trigger####';
32619 END|
32620 UPDATE t1
32621 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32622 f_charbig = '####updated per update statement itself####';
32623         
32624 # check trigger-9 success:      1
32625 DROP TRIGGER trg_2;
32626 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32627 f_int2 = CAST(f_char1 AS SIGNED INT),
32628 f_charbig = CONCAT('===',f_char1,'===');
32629 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32630 BEGIN
32631 SET new.f_int1 = new.f_int1 + @max_row,
32632 new.f_int2 = new.f_int2 - @max_row,
32633 new.f_charbig = '####updated per update trigger####';
32634 END|
32635 UPDATE t1
32636 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32637 f_charbig = '####updated per update statement itself####';
32638         
32639 # check trigger-10 success:     1
32640 DROP TRIGGER trg_2;
32641 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32642 f_int2 = CAST(f_char1 AS SIGNED INT),
32643 f_charbig = CONCAT('===',f_char1,'===');
32644 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32645 BEGIN
32646 SET new.f_int1 = @my_max1 + @counter,
32647 new.f_int2 = @my_min2 - @counter,
32648 new.f_charbig = '####updated per insert trigger####';
32649 SET @counter = @counter + 1;
32650 END|
32651 SET @counter = 1;
32652 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32653 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32654 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32655 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32656 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32657 ORDER BY f_int1;
32658 DROP TRIGGER trg_3;
32659         
32660 # check trigger-11 success:     1
32661 DELETE FROM t1
32662 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32663 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32664 AND f_charbig = '####updated per insert trigger####';
32665 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32666 BEGIN
32667 SET new.f_int1 = @my_max1 + @counter,
32668 new.f_int2 = @my_min2 - @counter,
32669 new.f_charbig = '####updated per insert trigger####';
32670 SET @counter = @counter + 1;
32671 END|
32672 SET @counter = 1;
32673 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32674 INSERT INTO t1 (f_char1, f_char2, f_charbig)
32675 SELECT CAST(f_int1 AS CHAR),
32676 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32677 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32678 ORDER BY f_int1;
32679 DROP TRIGGER trg_3;
32680         
32681 # check trigger-12 success:     1
32682 DELETE FROM t1
32683 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32684 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32685 AND f_charbig = '####updated per insert trigger####';
32686 ANALYZE  TABLE t1;
32687 Table   Op      Msg_type        Msg_text
32688 test.t1 analyze status  OK
32689 CHECK    TABLE t1 EXTENDED;
32690 Table   Op      Msg_type        Msg_text
32691 test.t1 check   status  OK
32692 CHECKSUM TABLE t1 EXTENDED;
32693 Table   Checksum
32694 test.t1 <some_value>
32695 OPTIMIZE TABLE t1;
32696 Table   Op      Msg_type        Msg_text
32697 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
32698 test.t1 optimize        status  OK
32699 # check layout success:    1
32700 REPAIR   TABLE t1 EXTENDED;
32701 Table   Op      Msg_type        Msg_text
32702 test.t1 repair  note    The storage engine for the table doesn't support repair
32703 # check layout success:    1
32704 TRUNCATE t1;
32705         
32706 # check TRUNCATE success:       1
32707 # check layout success:    1
32708 # End usability test (inc/partition_check.inc)
32709 DROP TABLE t1;
32710 CREATE TABLE t1 (
32711 f_int1 INTEGER,
32712 f_int2 INTEGER,
32713 f_char1 CHAR(20),
32714 f_char2 CHAR(20),
32715 f_charbig VARCHAR(1000)
32716 , PRIMARY KEY (f_int1,f_int2)
32718 PARTITION BY LIST(MOD(f_int1 + f_int2,4))
32719 (PARTITION part_3 VALUES IN (-3),
32720 PARTITION part_2 VALUES IN (-2),
32721 PARTITION part_1 VALUES IN (-1),
32722 PARTITION part_N VALUES IN (NULL),
32723 PARTITION part0 VALUES IN (0),
32724 PARTITION part1 VALUES IN (1),
32725 PARTITION part2 VALUES IN (2),
32726 PARTITION part3 VALUES IN (3));
32727 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32728 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
32729 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
32730 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
32731 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32732 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
32733 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
32734 # Start usability test (inc/partition_check.inc)
32735 create_command
32736 SHOW CREATE TABLE t1;
32737 Table   Create Table
32738 t1      CREATE TABLE `t1` (
32739   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
32740   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
32741   `f_char1` char(20) DEFAULT NULL,
32742   `f_char2` char(20) DEFAULT NULL,
32743   `f_charbig` varchar(1000) DEFAULT NULL,
32744   PRIMARY KEY (`f_int1`,`f_int2`)
32745 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
32746 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
32747 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
32748  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
32749  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
32750  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
32751  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
32752  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
32753  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
32754  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
32756 # check prerequisites-1 success:    1
32757 # check COUNT(*) success:    1
32758 # check MIN/MAX(f_int1) success:    1
32759 # check MIN/MAX(f_int2) success:    1
32760 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32761 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32762 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
32763 WHERE f_int1 IN (2,3);
32764 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
32765 # check prerequisites-3 success:    1
32766 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
32767 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32768 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32769 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32770 WHERE f_int1 IN (2,3);
32771 DELETE FROM t1 WHERE f_charbig = 'delete me';
32772 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32773 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32774 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32775 WHERE f_int1 IN (2,3);
32776 DELETE FROM t1 WHERE f_charbig = 'delete me';
32777 # check read via f_int1 success: 1
32778 # check read via f_int2 success: 1
32779         
32780 # check multiple-1 success:     1
32781 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
32782         
32783 # check multiple-2 success:     1
32784 INSERT INTO t1 SELECT * FROM t0_template
32785 WHERE MOD(f_int1,3) = 0;
32786         
32787 # check multiple-3 success:     1
32788 UPDATE t1 SET f_int1 = f_int1 + @max_row
32789 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
32790 AND @max_row_div2 + @max_row_div4;
32791         
32792 # check multiple-4 success:     1
32793 DELETE FROM t1
32794 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
32795 AND @max_row_div2 + @max_row_div4 + @max_row;
32796         
32797 # check multiple-5 success:     1
32798 SELECT COUNT(*) INTO @try_count FROM t0_template
32799 WHERE MOD(f_int1,3) = 0
32800 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32801 SELECT COUNT(*) INTO @clash_count
32802 FROM t1 INNER JOIN t0_template USING(f_int1)
32803 WHERE MOD(f_int1,3) = 0
32804 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32805 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
32806 INSERT INTO t1
32807 SET f_int1 = @cur_value , f_int2 = @cur_value,
32808 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32809 f_charbig = '#SINGLE#';
32810         
32811 # check single-1 success:       1
32812 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
32813 INSERT INTO t1
32814 SET f_int1 = @cur_value , f_int2 = @cur_value,
32815 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32816 f_charbig = '#SINGLE#';
32817         
32818 # check single-2 success:       1
32819 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
32820 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
32821 UPDATE t1 SET f_int1 = @cur_value2
32822 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
32823         
32824 # check single-3 success:       1
32825 SET @cur_value1= -1;
32826 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
32827 UPDATE t1 SET f_int1 = @cur_value1
32828 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
32829         
32830 # check single-4 success:       1
32831 SELECT MAX(f_int1) INTO @cur_value FROM t1;
32832 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
32833         
32834 # check single-5 success:       1
32835 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
32836         
32837 # check single-6 success:       1
32838 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
32839 Warnings:
32840 Warning 1264    Out of range value for column 'f_int1' at row 1
32841 Warning 1264    Out of range value for column 'f_int2' at row 1
32842         
32843 # check single-7 success:       1
32844 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
32845 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
32846 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
32847 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
32848 f_charbig = '#NULL#';
32849 INSERT INTO t1
32850 SET f_int1 = NULL , f_int2 = -@max_row,
32851 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
32852 f_charbig = '#NULL#';
32853 ERROR 23000: Column 'f_int1' cannot be null
32854 # check null success:    1
32855 DELETE FROM t1
32856 WHERE f_int1 = 0 AND f_int2 = 0
32857 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
32858 AND f_charbig = '#NULL#';
32859 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32860 SELECT f_int1, f_int1, '', '', 'was inserted'
32861    FROM t0_template source_tab
32862 WHERE MOD(f_int1,3) = 0
32863 AND f_int1 BETWEEN @max_row_div2 AND @max_row
32864 ON DUPLICATE KEY
32865 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
32866 f_int2 = 2 * @max_row + source_tab.f_int1,
32867 f_charbig = 'was updated';
32868         
32869 # check unique-1-a success:     1
32870         
32871 # check unique-1-b success:     1
32872 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32873 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32874 f_int2 = CAST(f_char1 AS SIGNED INT),
32875 f_charbig = CONCAT('===',f_char1,'===')
32876 WHERE f_charbig = 'was updated';
32877 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32878 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
32879    FROM t0_template source_tab
32880 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32881         
32882 # check replace success:        1
32883 DELETE FROM t1
32884 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
32885 DELETE FROM t1
32886 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
32887 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
32888 UPDATE t1 SET f_int2 = f_int1,
32889 f_char1 = CAST(f_int1 AS CHAR),
32890 f_char2 = CAST(f_int1 AS CHAR),
32891 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
32892 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
32893 SET AUTOCOMMIT= 0;
32894 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32895 SELECT f_int1, f_int1, '', '', 'was inserted'
32896 FROM t0_template source_tab
32897 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32898         
32899 # check transactions-1 success:         1
32900 COMMIT WORK;
32901         
32902 # check transactions-2 success:         1
32903 ROLLBACK WORK;
32904         
32905 # check transactions-3 success:         1
32906 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32907 COMMIT WORK;
32908 ROLLBACK WORK;
32909         
32910 # check transactions-4 success:         1
32911 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32912 SELECT f_int1, f_int1, '', '', 'was inserted'
32913 FROM t0_template source_tab
32914 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32915         
32916 # check transactions-5 success:         1
32917 ROLLBACK WORK;
32918         
32919 # check transactions-6 success:         1
32920 # INFO: Storage engine used for t1 seems to be transactional.
32921 COMMIT;
32922         
32923 # check transactions-7 success:         1
32924 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32925 COMMIT WORK;
32926 SET @@session.sql_mode = 'traditional';
32927 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
32928 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32929 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
32930 '', '', 'was inserted' FROM t0_template
32931 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32932 ERROR 22012: Division by 0
32933 COMMIT;
32934         
32935 # check transactions-8 success:         1
32936 # INFO: Storage engine used for t1 seems to be able to revert
32937 #       changes made by the failing statement.
32938 SET @@session.sql_mode = '';
32939 SET AUTOCOMMIT= 1;
32940 DELETE FROM t1 WHERE f_charbig = 'was inserted';
32941 COMMIT WORK;
32942 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
32943         
32944 # check special-1 success:      1
32945 UPDATE t1 SET f_charbig = '';
32946         
32947 # check special-2 success:      1
32948 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
32949 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32950 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
32951 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32952 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32953 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32954 'just inserted' FROM t0_template
32955 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32956 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
32957 BEGIN
32958 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32959 f_charbig = 'updated by trigger'
32960       WHERE f_int1 = new.f_int1;
32961 END|
32962 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32963 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32964 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32965         
32966 # check trigger-1 success:      1
32967 DROP TRIGGER trg_1;
32968 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32969 f_int2 = CAST(f_char1 AS SIGNED INT),
32970 f_charbig = 'just inserted'
32971    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32972 DELETE FROM t0_aux
32973 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32974 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32975 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32976 'just inserted' FROM t0_template
32977 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32978 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
32979 BEGIN
32980 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32981 f_charbig = 'updated by trigger'
32982       WHERE f_int1 = new.f_int1;
32983 END|
32984 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32985 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32986 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32987         
32988 # check trigger-2 success:      1
32989 DROP TRIGGER trg_1;
32990 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32991 f_int2 = CAST(f_char1 AS SIGNED INT),
32992 f_charbig = 'just inserted'
32993    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32994 DELETE FROM t0_aux
32995 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32996 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32997 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32998 'just inserted' FROM t0_template
32999 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33000 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
33001 BEGIN
33002 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33003 f_charbig = 'updated by trigger'
33004       WHERE f_int1 = new.f_int1;
33005 END|
33006 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33007 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33008         
33009 # check trigger-3 success:      1
33010 DROP TRIGGER trg_1;
33011 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33012 f_int2 = CAST(f_char1 AS SIGNED INT),
33013 f_charbig = 'just inserted'
33014    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33015 DELETE FROM t0_aux
33016 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33017 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33018 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33019 'just inserted' FROM t0_template
33020 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33021 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
33022 BEGIN
33023 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33024 f_charbig = 'updated by trigger'
33025       WHERE f_int1 = - old.f_int1;
33026 END|
33027 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33028 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33029         
33030 # check trigger-4 success:      1
33031 DROP TRIGGER trg_1;
33032 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33033 f_int2 = CAST(f_char1 AS SIGNED INT),
33034 f_charbig = 'just inserted'
33035    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33036 DELETE FROM t0_aux
33037 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33038 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33039 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33040 'just inserted' FROM t0_template
33041 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33042 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
33043 BEGIN
33044 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33045 f_charbig = 'updated by trigger'
33046       WHERE f_int1 = new.f_int1;
33047 END|
33048 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33049 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33050         
33051 # check trigger-5 success:      1
33052 DROP TRIGGER trg_1;
33053 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33054 f_int2 = CAST(f_char1 AS SIGNED INT),
33055 f_charbig = 'just inserted'
33056    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33057 DELETE FROM t0_aux
33058 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33059 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33060 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33061 'just inserted' FROM t0_template
33062 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33063 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
33064 BEGIN
33065 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33066 f_charbig = 'updated by trigger'
33067       WHERE f_int1 = - old.f_int1;
33068 END|
33069 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33070 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33071         
33072 # check trigger-6 success:      1
33073 DROP TRIGGER trg_1;
33074 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33075 f_int2 = CAST(f_char1 AS SIGNED INT),
33076 f_charbig = 'just inserted'
33077    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33078 DELETE FROM t0_aux
33079 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33080 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33081 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33082 'just inserted' FROM t0_template
33083 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33084 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
33085 BEGIN
33086 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33087 f_charbig = 'updated by trigger'
33088       WHERE f_int1 = - old.f_int1;
33089 END|
33090 DELETE FROM t0_aux
33091 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33092         
33093 # check trigger-7 success:      1
33094 DROP TRIGGER trg_1;
33095 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33096 f_int2 = CAST(f_char1 AS SIGNED INT),
33097 f_charbig = 'just inserted'
33098    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33099 DELETE FROM t0_aux
33100 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33101 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33102 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33103 'just inserted' FROM t0_template
33104 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33105 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
33106 BEGIN
33107 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33108 f_charbig = 'updated by trigger'
33109       WHERE f_int1 = - old.f_int1;
33110 END|
33111 DELETE FROM t0_aux
33112 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33113         
33114 # check trigger-8 success:      1
33115 DROP TRIGGER trg_1;
33116 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33117 f_int2 = CAST(f_char1 AS SIGNED INT),
33118 f_charbig = 'just inserted'
33119    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33120 DELETE FROM t0_aux
33121 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33122 DELETE FROM t1
33123 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33124 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
33125 BEGIN
33126 SET new.f_int1 = old.f_int1 + @max_row,
33127 new.f_int2 = old.f_int2 - @max_row,
33128 new.f_charbig = '####updated per update trigger####';
33129 END|
33130 UPDATE t1
33131 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
33132 f_charbig = '####updated per update statement itself####';
33133         
33134 # check trigger-9 success:      1
33135 DROP TRIGGER trg_2;
33136 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33137 f_int2 = CAST(f_char1 AS SIGNED INT),
33138 f_charbig = CONCAT('===',f_char1,'===');
33139 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
33140 BEGIN
33141 SET new.f_int1 = new.f_int1 + @max_row,
33142 new.f_int2 = new.f_int2 - @max_row,
33143 new.f_charbig = '####updated per update trigger####';
33144 END|
33145 UPDATE t1
33146 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
33147 f_charbig = '####updated per update statement itself####';
33148         
33149 # check trigger-10 success:     1
33150 DROP TRIGGER trg_2;
33151 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33152 f_int2 = CAST(f_char1 AS SIGNED INT),
33153 f_charbig = CONCAT('===',f_char1,'===');
33154 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
33155 BEGIN
33156 SET new.f_int1 = @my_max1 + @counter,
33157 new.f_int2 = @my_min2 - @counter,
33158 new.f_charbig = '####updated per insert trigger####';
33159 SET @counter = @counter + 1;
33160 END|
33161 SET @counter = 1;
33162 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
33163 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33164 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
33165 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
33166 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
33167 ORDER BY f_int1;
33168 DROP TRIGGER trg_3;
33169         
33170 # check trigger-11 success:     1
33171 DELETE FROM t1
33172 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
33173 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
33174 AND f_charbig = '####updated per insert trigger####';
33175 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
33176 BEGIN
33177 SET new.f_int1 = @my_max1 + @counter,
33178 new.f_int2 = @my_min2 - @counter,
33179 new.f_charbig = '####updated per insert trigger####';
33180 SET @counter = @counter + 1;
33181 END|
33182 SET @counter = 1;
33183 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
33184 INSERT INTO t1 (f_char1, f_char2, f_charbig)
33185 SELECT CAST(f_int1 AS CHAR),
33186 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
33187 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
33188 ORDER BY f_int1;
33189 DROP TRIGGER trg_3;
33190         
33191 # check trigger-12 success:     1
33192 DELETE FROM t1
33193 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
33194 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
33195 AND f_charbig = '####updated per insert trigger####';
33196 ANALYZE  TABLE t1;
33197 Table   Op      Msg_type        Msg_text
33198 test.t1 analyze status  OK
33199 CHECK    TABLE t1 EXTENDED;
33200 Table   Op      Msg_type        Msg_text
33201 test.t1 check   status  OK
33202 CHECKSUM TABLE t1 EXTENDED;
33203 Table   Checksum
33204 test.t1 <some_value>
33205 OPTIMIZE TABLE t1;
33206 Table   Op      Msg_type        Msg_text
33207 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
33208 test.t1 optimize        status  OK
33209 # check layout success:    1
33210 REPAIR   TABLE t1 EXTENDED;
33211 Table   Op      Msg_type        Msg_text
33212 test.t1 repair  note    The storage engine for the table doesn't support repair
33213 # check layout success:    1
33214 TRUNCATE t1;
33215         
33216 # check TRUNCATE success:       1
33217 # check layout success:    1
33218 # End usability test (inc/partition_check.inc)
33219 DROP TABLE t1;
33220 CREATE TABLE t1 (
33221 f_int1 INTEGER,
33222 f_int2 INTEGER,
33223 f_char1 CHAR(20),
33224 f_char2 CHAR(20),
33225 f_charbig VARCHAR(1000)
33226 , PRIMARY KEY (f_int1,f_int2)
33228 PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
33229 (PARTITION parta VALUES LESS THAN (0),
33230 PARTITION partb VALUES LESS THAN (5),
33231 PARTITION partc VALUES LESS THAN (10),
33232 PARTITION partd VALUES LESS THAN (10 + 5),
33233 PARTITION parte VALUES LESS THAN (20),
33234 PARTITION partf VALUES LESS THAN (2147483646));
33235 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33236 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
33237 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
33238 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
33239 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33240 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
33241 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
33242 # Start usability test (inc/partition_check.inc)
33243 create_command
33244 SHOW CREATE TABLE t1;
33245 Table   Create Table
33246 t1      CREATE TABLE `t1` (
33247   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
33248   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
33249   `f_char1` char(20) DEFAULT NULL,
33250   `f_char2` char(20) DEFAULT NULL,
33251   `f_charbig` varchar(1000) DEFAULT NULL,
33252   PRIMARY KEY (`f_int1`,`f_int2`)
33253 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
33254 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
33255 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
33256  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
33257  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
33258  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
33259  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
33260  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
33262 # check prerequisites-1 success:    1
33263 # check COUNT(*) success:    1
33264 # check MIN/MAX(f_int1) success:    1
33265 # check MIN/MAX(f_int2) success:    1
33266 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33267 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
33268 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
33269 WHERE f_int1 IN (2,3);
33270 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
33271 # check prerequisites-3 success:    1
33272 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
33273 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33274 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
33275 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
33276 WHERE f_int1 IN (2,3);
33277 DELETE FROM t1 WHERE f_charbig = 'delete me';
33278 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33279 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
33280 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
33281 WHERE f_int1 IN (2,3);
33282 DELETE FROM t1 WHERE f_charbig = 'delete me';
33283 # check read via f_int1 success: 1
33284 # check read via f_int2 success: 1
33285         
33286 # check multiple-1 success:     1
33287 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
33288         
33289 # check multiple-2 success:     1
33290 INSERT INTO t1 SELECT * FROM t0_template
33291 WHERE MOD(f_int1,3) = 0;
33292         
33293 # check multiple-3 success:     1
33294 UPDATE t1 SET f_int1 = f_int1 + @max_row
33295 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
33296 AND @max_row_div2 + @max_row_div4;
33297         
33298 # check multiple-4 success:     1
33299 DELETE FROM t1
33300 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
33301 AND @max_row_div2 + @max_row_div4 + @max_row;
33302         
33303 # check multiple-5 success:     1
33304 SELECT COUNT(*) INTO @try_count FROM t0_template
33305 WHERE MOD(f_int1,3) = 0
33306 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33307 SELECT COUNT(*) INTO @clash_count
33308 FROM t1 INNER JOIN t0_template USING(f_int1)
33309 WHERE MOD(f_int1,3) = 0
33310 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33311 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
33312 INSERT INTO t1
33313 SET f_int1 = @cur_value , f_int2 = @cur_value,
33314 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
33315 f_charbig = '#SINGLE#';
33316         
33317 # check single-1 success:       1
33318 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
33319 INSERT INTO t1
33320 SET f_int1 = @cur_value , f_int2 = @cur_value,
33321 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
33322 f_charbig = '#SINGLE#';
33323         
33324 # check single-2 success:       1
33325 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
33326 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
33327 UPDATE t1 SET f_int1 = @cur_value2
33328 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
33329         
33330 # check single-3 success:       1
33331 SET @cur_value1= -1;
33332 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
33333 UPDATE t1 SET f_int1 = @cur_value1
33334 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
33335         
33336 # check single-4 success:       1
33337 SELECT MAX(f_int1) INTO @cur_value FROM t1;
33338 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
33339         
33340 # check single-5 success:       1
33341 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
33342         
33343 # check single-6 success:       1
33344 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
33345 Warnings:
33346 Warning 1264    Out of range value for column 'f_int1' at row 1
33347 Warning 1264    Out of range value for column 'f_int2' at row 1
33348         
33349 # check single-7 success:       1
33350 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
33351 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
33352 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
33353 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
33354 f_charbig = '#NULL#';
33355 INSERT INTO t1
33356 SET f_int1 = NULL , f_int2 = -@max_row,
33357 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
33358 f_charbig = '#NULL#';
33359 ERROR 23000: Column 'f_int1' cannot be null
33360 # check null success:    1
33361 DELETE FROM t1
33362 WHERE f_int1 = 0 AND f_int2 = 0
33363 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
33364 AND f_charbig = '#NULL#';
33365 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33366 SELECT f_int1, f_int1, '', '', 'was inserted'
33367    FROM t0_template source_tab
33368 WHERE MOD(f_int1,3) = 0
33369 AND f_int1 BETWEEN @max_row_div2 AND @max_row
33370 ON DUPLICATE KEY
33371 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
33372 f_int2 = 2 * @max_row + source_tab.f_int1,
33373 f_charbig = 'was updated';
33374         
33375 # check unique-1-a success:     1
33376         
33377 # check unique-1-b success:     1
33378 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33379 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33380 f_int2 = CAST(f_char1 AS SIGNED INT),
33381 f_charbig = CONCAT('===',f_char1,'===')
33382 WHERE f_charbig = 'was updated';
33383 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33384 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
33385    FROM t0_template source_tab
33386 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33387         
33388 # check replace success:        1
33389 DELETE FROM t1
33390 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
33391 DELETE FROM t1
33392 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
33393 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
33394 UPDATE t1 SET f_int2 = f_int1,
33395 f_char1 = CAST(f_int1 AS CHAR),
33396 f_char2 = CAST(f_int1 AS CHAR),
33397 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
33398 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
33399 SET AUTOCOMMIT= 0;
33400 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33401 SELECT f_int1, f_int1, '', '', 'was inserted'
33402 FROM t0_template source_tab
33403 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33404         
33405 # check transactions-1 success:         1
33406 COMMIT WORK;
33407         
33408 # check transactions-2 success:         1
33409 ROLLBACK WORK;
33410         
33411 # check transactions-3 success:         1
33412 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33413 COMMIT WORK;
33414 ROLLBACK WORK;
33415         
33416 # check transactions-4 success:         1
33417 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33418 SELECT f_int1, f_int1, '', '', 'was inserted'
33419 FROM t0_template source_tab
33420 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33421         
33422 # check transactions-5 success:         1
33423 ROLLBACK WORK;
33424         
33425 # check transactions-6 success:         1
33426 # INFO: Storage engine used for t1 seems to be transactional.
33427 COMMIT;
33428         
33429 # check transactions-7 success:         1
33430 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33431 COMMIT WORK;
33432 SET @@session.sql_mode = 'traditional';
33433 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
33434 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33435 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
33436 '', '', 'was inserted' FROM t0_template
33437 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33438 ERROR 22012: Division by 0
33439 COMMIT;
33440         
33441 # check transactions-8 success:         1
33442 # INFO: Storage engine used for t1 seems to be able to revert
33443 #       changes made by the failing statement.
33444 SET @@session.sql_mode = '';
33445 SET AUTOCOMMIT= 1;
33446 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33447 COMMIT WORK;
33448 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
33449         
33450 # check special-1 success:      1
33451 UPDATE t1 SET f_charbig = '';
33452         
33453 # check special-2 success:      1
33454 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
33455 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33456 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
33457 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33458 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33459 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33460 'just inserted' FROM t0_template
33461 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33462 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
33463 BEGIN
33464 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33465 f_charbig = 'updated by trigger'
33466       WHERE f_int1 = new.f_int1;
33467 END|
33468 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33469 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
33470 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33471         
33472 # check trigger-1 success:      1
33473 DROP TRIGGER trg_1;
33474 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33475 f_int2 = CAST(f_char1 AS SIGNED INT),
33476 f_charbig = 'just inserted'
33477    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33478 DELETE FROM t0_aux
33479 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33480 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33481 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33482 'just inserted' FROM t0_template
33483 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33484 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
33485 BEGIN
33486 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33487 f_charbig = 'updated by trigger'
33488       WHERE f_int1 = new.f_int1;
33489 END|
33490 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33491 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
33492 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33493         
33494 # check trigger-2 success:      1
33495 DROP TRIGGER trg_1;
33496 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33497 f_int2 = CAST(f_char1 AS SIGNED INT),
33498 f_charbig = 'just inserted'
33499    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33500 DELETE FROM t0_aux
33501 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33502 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33503 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33504 'just inserted' FROM t0_template
33505 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33506 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
33507 BEGIN
33508 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33509 f_charbig = 'updated by trigger'
33510       WHERE f_int1 = new.f_int1;
33511 END|
33512 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33513 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33514         
33515 # check trigger-3 success:      1
33516 DROP TRIGGER trg_1;
33517 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33518 f_int2 = CAST(f_char1 AS SIGNED INT),
33519 f_charbig = 'just inserted'
33520    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33521 DELETE FROM t0_aux
33522 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33523 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33524 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33525 'just inserted' FROM t0_template
33526 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33527 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
33528 BEGIN
33529 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33530 f_charbig = 'updated by trigger'
33531       WHERE f_int1 = - old.f_int1;
33532 END|
33533 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33534 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33535         
33536 # check trigger-4 success:      1
33537 DROP TRIGGER trg_1;
33538 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33539 f_int2 = CAST(f_char1 AS SIGNED INT),
33540 f_charbig = 'just inserted'
33541    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33542 DELETE FROM t0_aux
33543 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33544 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33545 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33546 'just inserted' FROM t0_template
33547 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33548 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
33549 BEGIN
33550 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33551 f_charbig = 'updated by trigger'
33552       WHERE f_int1 = new.f_int1;
33553 END|
33554 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33555 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33556         
33557 # check trigger-5 success:      1
33558 DROP TRIGGER trg_1;
33559 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33560 f_int2 = CAST(f_char1 AS SIGNED INT),
33561 f_charbig = 'just inserted'
33562    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33563 DELETE FROM t0_aux
33564 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33565 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33566 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33567 'just inserted' FROM t0_template
33568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33569 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
33570 BEGIN
33571 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33572 f_charbig = 'updated by trigger'
33573       WHERE f_int1 = - old.f_int1;
33574 END|
33575 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
33576 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33577         
33578 # check trigger-6 success:      1
33579 DROP TRIGGER trg_1;
33580 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33581 f_int2 = CAST(f_char1 AS SIGNED INT),
33582 f_charbig = 'just inserted'
33583    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33584 DELETE FROM t0_aux
33585 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33586 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33587 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33588 'just inserted' FROM t0_template
33589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33590 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
33591 BEGIN
33592 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33593 f_charbig = 'updated by trigger'
33594       WHERE f_int1 = - old.f_int1;
33595 END|
33596 DELETE FROM t0_aux
33597 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33598         
33599 # check trigger-7 success:      1
33600 DROP TRIGGER trg_1;
33601 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33602 f_int2 = CAST(f_char1 AS SIGNED INT),
33603 f_charbig = 'just inserted'
33604    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33605 DELETE FROM t0_aux
33606 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33607 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33608 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33609 'just inserted' FROM t0_template
33610 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33611 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
33612 BEGIN
33613 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33614 f_charbig = 'updated by trigger'
33615       WHERE f_int1 = - old.f_int1;
33616 END|
33617 DELETE FROM t0_aux
33618 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
33619         
33620 # check trigger-8 success:      1
33621 DROP TRIGGER trg_1;
33622 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33623 f_int2 = CAST(f_char1 AS SIGNED INT),
33624 f_charbig = 'just inserted'
33625    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33626 DELETE FROM t0_aux
33627 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33628 DELETE FROM t1
33629 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33630 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
33631 BEGIN
33632 SET new.f_int1 = old.f_int1 + @max_row,
33633 new.f_int2 = old.f_int2 - @max_row,
33634 new.f_charbig = '####updated per update trigger####';
33635 END|
33636 UPDATE t1
33637 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
33638 f_charbig = '####updated per update statement itself####';
33639         
33640 # check trigger-9 success:      1
33641 DROP TRIGGER trg_2;
33642 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33643 f_int2 = CAST(f_char1 AS SIGNED INT),
33644 f_charbig = CONCAT('===',f_char1,'===');
33645 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
33646 BEGIN
33647 SET new.f_int1 = new.f_int1 + @max_row,
33648 new.f_int2 = new.f_int2 - @max_row,
33649 new.f_charbig = '####updated per update trigger####';
33650 END|
33651 UPDATE t1
33652 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
33653 f_charbig = '####updated per update statement itself####';
33654         
33655 # check trigger-10 success:     1
33656 DROP TRIGGER trg_2;
33657 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33658 f_int2 = CAST(f_char1 AS SIGNED INT),
33659 f_charbig = CONCAT('===',f_char1,'===');
33660 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
33661 BEGIN
33662 SET new.f_int1 = @my_max1 + @counter,
33663 new.f_int2 = @my_min2 - @counter,
33664 new.f_charbig = '####updated per insert trigger####';
33665 SET @counter = @counter + 1;
33666 END|
33667 SET @counter = 1;
33668 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
33669 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33670 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
33671 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
33672 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
33673 ORDER BY f_int1;
33674 DROP TRIGGER trg_3;
33675         
33676 # check trigger-11 success:     1
33677 DELETE FROM t1
33678 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
33679 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
33680 AND f_charbig = '####updated per insert trigger####';
33681 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
33682 BEGIN
33683 SET new.f_int1 = @my_max1 + @counter,
33684 new.f_int2 = @my_min2 - @counter,
33685 new.f_charbig = '####updated per insert trigger####';
33686 SET @counter = @counter + 1;
33687 END|
33688 SET @counter = 1;
33689 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
33690 INSERT INTO t1 (f_char1, f_char2, f_charbig)
33691 SELECT CAST(f_int1 AS CHAR),
33692 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
33693 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
33694 ORDER BY f_int1;
33695 DROP TRIGGER trg_3;
33696         
33697 # check trigger-12 success:     1
33698 DELETE FROM t1
33699 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
33700 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
33701 AND f_charbig = '####updated per insert trigger####';
33702 ANALYZE  TABLE t1;
33703 Table   Op      Msg_type        Msg_text
33704 test.t1 analyze status  OK
33705 CHECK    TABLE t1 EXTENDED;
33706 Table   Op      Msg_type        Msg_text
33707 test.t1 check   status  OK
33708 CHECKSUM TABLE t1 EXTENDED;
33709 Table   Checksum
33710 test.t1 <some_value>
33711 OPTIMIZE TABLE t1;
33712 Table   Op      Msg_type        Msg_text
33713 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
33714 test.t1 optimize        status  OK
33715 # check layout success:    1
33716 REPAIR   TABLE t1 EXTENDED;
33717 Table   Op      Msg_type        Msg_text
33718 test.t1 repair  note    The storage engine for the table doesn't support repair
33719 # check layout success:    1
33720 TRUNCATE t1;
33721         
33722 # check TRUNCATE success:       1
33723 # check layout success:    1
33724 # End usability test (inc/partition_check.inc)
33725 DROP TABLE t1;
33726 CREATE TABLE t1 (
33727 f_int1 INTEGER,
33728 f_int2 INTEGER,
33729 f_char1 CHAR(20),
33730 f_char2 CHAR(20),
33731 f_charbig VARCHAR(1000)
33732 , PRIMARY KEY (f_int1,f_int2)
33734 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
33735 (PARTITION parta VALUES LESS THAN (0),
33736 PARTITION partb VALUES LESS THAN (5),
33737 PARTITION partc VALUES LESS THAN (10),
33738 PARTITION partd VALUES LESS THAN (2147483646));
33739 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33740 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
33741 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
33742 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
33743 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33744 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
33745 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
33746 # Start usability test (inc/partition_check.inc)
33747 create_command
33748 SHOW CREATE TABLE t1;
33749 Table   Create Table
33750 t1      CREATE TABLE `t1` (
33751   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
33752   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
33753   `f_char1` char(20) DEFAULT NULL,
33754   `f_char2` char(20) DEFAULT NULL,
33755   `f_charbig` varchar(1000) DEFAULT NULL,
33756   PRIMARY KEY (`f_int1`,`f_int2`)
33757 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
33758 /*!50100 PARTITION BY RANGE (f_int1)
33759 SUBPARTITION BY HASH (f_int2)
33760 SUBPARTITIONS 2
33761 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
33762  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
33763  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
33764  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
33766 # check prerequisites-1 success:    1
33767 # check COUNT(*) success:    1
33768 # check MIN/MAX(f_int1) success:    1
33769 # check MIN/MAX(f_int2) success:    1
33770 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33771 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
33772 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
33773 WHERE f_int1 IN (2,3);
33774 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
33775 # check prerequisites-3 success:    1
33776 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
33777 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33778 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
33779 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
33780 WHERE f_int1 IN (2,3);
33781 DELETE FROM t1 WHERE f_charbig = 'delete me';
33782 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33783 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
33784 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
33785 WHERE f_int1 IN (2,3);
33786 DELETE FROM t1 WHERE f_charbig = 'delete me';
33787 # check read via f_int1 success: 1
33788 # check read via f_int2 success: 1
33789         
33790 # check multiple-1 success:     1
33791 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
33792         
33793 # check multiple-2 success:     1
33794 INSERT INTO t1 SELECT * FROM t0_template
33795 WHERE MOD(f_int1,3) = 0;
33796         
33797 # check multiple-3 success:     1
33798 UPDATE t1 SET f_int1 = f_int1 + @max_row
33799 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
33800 AND @max_row_div2 + @max_row_div4;
33801         
33802 # check multiple-4 success:     1
33803 DELETE FROM t1
33804 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
33805 AND @max_row_div2 + @max_row_div4 + @max_row;
33806         
33807 # check multiple-5 success:     1
33808 SELECT COUNT(*) INTO @try_count FROM t0_template
33809 WHERE MOD(f_int1,3) = 0
33810 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33811 SELECT COUNT(*) INTO @clash_count
33812 FROM t1 INNER JOIN t0_template USING(f_int1)
33813 WHERE MOD(f_int1,3) = 0
33814 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33815 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
33816 INSERT INTO t1
33817 SET f_int1 = @cur_value , f_int2 = @cur_value,
33818 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
33819 f_charbig = '#SINGLE#';
33820         
33821 # check single-1 success:       1
33822 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
33823 INSERT INTO t1
33824 SET f_int1 = @cur_value , f_int2 = @cur_value,
33825 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
33826 f_charbig = '#SINGLE#';
33827         
33828 # check single-2 success:       1
33829 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
33830 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
33831 UPDATE t1 SET f_int1 = @cur_value2
33832 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
33833         
33834 # check single-3 success:       1
33835 SET @cur_value1= -1;
33836 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
33837 UPDATE t1 SET f_int1 = @cur_value1
33838 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
33839         
33840 # check single-4 success:       1
33841 SELECT MAX(f_int1) INTO @cur_value FROM t1;
33842 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
33843         
33844 # check single-5 success:       1
33845 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
33846         
33847 # check single-6 success:       1
33848 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
33849 Warnings:
33850 Warning 1264    Out of range value for column 'f_int1' at row 1
33851 Warning 1264    Out of range value for column 'f_int2' at row 1
33852         
33853 # check single-7 success:       1
33854 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
33855 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
33856 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
33857 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
33858 f_charbig = '#NULL#';
33859 INSERT INTO t1
33860 SET f_int1 = NULL , f_int2 = -@max_row,
33861 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
33862 f_charbig = '#NULL#';
33863 ERROR 23000: Column 'f_int1' cannot be null
33864 # check null success:    1
33865 DELETE FROM t1
33866 WHERE f_int1 = 0 AND f_int2 = 0
33867 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
33868 AND f_charbig = '#NULL#';
33869 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33870 SELECT f_int1, f_int1, '', '', 'was inserted'
33871    FROM t0_template source_tab
33872 WHERE MOD(f_int1,3) = 0
33873 AND f_int1 BETWEEN @max_row_div2 AND @max_row
33874 ON DUPLICATE KEY
33875 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
33876 f_int2 = 2 * @max_row + source_tab.f_int1,
33877 f_charbig = 'was updated';
33878         
33879 # check unique-1-a success:     1
33880         
33881 # check unique-1-b success:     1
33882 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33883 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33884 f_int2 = CAST(f_char1 AS SIGNED INT),
33885 f_charbig = CONCAT('===',f_char1,'===')
33886 WHERE f_charbig = 'was updated';
33887 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33888 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
33889    FROM t0_template source_tab
33890 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
33891         
33892 # check replace success:        1
33893 DELETE FROM t1
33894 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
33895 DELETE FROM t1
33896 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
33897 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
33898 UPDATE t1 SET f_int2 = f_int1,
33899 f_char1 = CAST(f_int1 AS CHAR),
33900 f_char2 = CAST(f_int1 AS CHAR),
33901 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
33902 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
33903 SET AUTOCOMMIT= 0;
33904 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33905 SELECT f_int1, f_int1, '', '', 'was inserted'
33906 FROM t0_template source_tab
33907 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33908         
33909 # check transactions-1 success:         1
33910 COMMIT WORK;
33911         
33912 # check transactions-2 success:         1
33913 ROLLBACK WORK;
33914         
33915 # check transactions-3 success:         1
33916 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33917 COMMIT WORK;
33918 ROLLBACK WORK;
33919         
33920 # check transactions-4 success:         1
33921 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33922 SELECT f_int1, f_int1, '', '', 'was inserted'
33923 FROM t0_template source_tab
33924 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33925         
33926 # check transactions-5 success:         1
33927 ROLLBACK WORK;
33928         
33929 # check transactions-6 success:         1
33930 # INFO: Storage engine used for t1 seems to be transactional.
33931 COMMIT;
33932         
33933 # check transactions-7 success:         1
33934 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33935 COMMIT WORK;
33936 SET @@session.sql_mode = 'traditional';
33937 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
33938 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
33939 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
33940 '', '', 'was inserted' FROM t0_template
33941 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
33942 ERROR 22012: Division by 0
33943 COMMIT;
33944         
33945 # check transactions-8 success:         1
33946 # INFO: Storage engine used for t1 seems to be able to revert
33947 #       changes made by the failing statement.
33948 SET @@session.sql_mode = '';
33949 SET AUTOCOMMIT= 1;
33950 DELETE FROM t1 WHERE f_charbig = 'was inserted';
33951 COMMIT WORK;
33952 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
33953         
33954 # check special-1 success:      1
33955 UPDATE t1 SET f_charbig = '';
33956         
33957 # check special-2 success:      1
33958 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
33959 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
33960 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
33961 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33962 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33963 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33964 'just inserted' FROM t0_template
33965 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33966 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
33967 BEGIN
33968 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33969 f_charbig = 'updated by trigger'
33970       WHERE f_int1 = new.f_int1;
33971 END|
33972 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33973 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
33974 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33975         
33976 # check trigger-1 success:      1
33977 DROP TRIGGER trg_1;
33978 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
33979 f_int2 = CAST(f_char1 AS SIGNED INT),
33980 f_charbig = 'just inserted'
33981    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
33982 DELETE FROM t0_aux
33983 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33984 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33985 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
33986 'just inserted' FROM t0_template
33987 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33988 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
33989 BEGIN
33990 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
33991 f_charbig = 'updated by trigger'
33992       WHERE f_int1 = new.f_int1;
33993 END|
33994 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
33995 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
33996 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
33997         
33998 # check trigger-2 success:      1
33999 DROP TRIGGER trg_1;
34000 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34001 f_int2 = CAST(f_char1 AS SIGNED INT),
34002 f_charbig = 'just inserted'
34003    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34004 DELETE FROM t0_aux
34005 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34006 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34007 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34008 'just inserted' FROM t0_template
34009 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34010 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
34011 BEGIN
34012 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34013 f_charbig = 'updated by trigger'
34014       WHERE f_int1 = new.f_int1;
34015 END|
34016 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34017 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34018         
34019 # check trigger-3 success:      1
34020 DROP TRIGGER trg_1;
34021 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34022 f_int2 = CAST(f_char1 AS SIGNED INT),
34023 f_charbig = 'just inserted'
34024    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34025 DELETE FROM t0_aux
34026 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34027 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34028 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34029 'just inserted' FROM t0_template
34030 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34031 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
34032 BEGIN
34033 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34034 f_charbig = 'updated by trigger'
34035       WHERE f_int1 = - old.f_int1;
34036 END|
34037 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34038 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34039         
34040 # check trigger-4 success:      1
34041 DROP TRIGGER trg_1;
34042 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34043 f_int2 = CAST(f_char1 AS SIGNED INT),
34044 f_charbig = 'just inserted'
34045    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34046 DELETE FROM t0_aux
34047 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34048 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34049 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34050 'just inserted' FROM t0_template
34051 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34052 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
34053 BEGIN
34054 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34055 f_charbig = 'updated by trigger'
34056       WHERE f_int1 = new.f_int1;
34057 END|
34058 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34059 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34060         
34061 # check trigger-5 success:      1
34062 DROP TRIGGER trg_1;
34063 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34064 f_int2 = CAST(f_char1 AS SIGNED INT),
34065 f_charbig = 'just inserted'
34066    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34067 DELETE FROM t0_aux
34068 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34069 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34070 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34071 'just inserted' FROM t0_template
34072 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34073 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
34074 BEGIN
34075 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34076 f_charbig = 'updated by trigger'
34077       WHERE f_int1 = - old.f_int1;
34078 END|
34079 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34080 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34081         
34082 # check trigger-6 success:      1
34083 DROP TRIGGER trg_1;
34084 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34085 f_int2 = CAST(f_char1 AS SIGNED INT),
34086 f_charbig = 'just inserted'
34087    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34088 DELETE FROM t0_aux
34089 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34090 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34091 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34092 'just inserted' FROM t0_template
34093 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34094 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
34095 BEGIN
34096 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34097 f_charbig = 'updated by trigger'
34098       WHERE f_int1 = - old.f_int1;
34099 END|
34100 DELETE FROM t0_aux
34101 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34102         
34103 # check trigger-7 success:      1
34104 DROP TRIGGER trg_1;
34105 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34106 f_int2 = CAST(f_char1 AS SIGNED INT),
34107 f_charbig = 'just inserted'
34108    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34109 DELETE FROM t0_aux
34110 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34111 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34112 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34113 'just inserted' FROM t0_template
34114 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34115 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
34116 BEGIN
34117 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34118 f_charbig = 'updated by trigger'
34119       WHERE f_int1 = - old.f_int1;
34120 END|
34121 DELETE FROM t0_aux
34122 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34123         
34124 # check trigger-8 success:      1
34125 DROP TRIGGER trg_1;
34126 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34127 f_int2 = CAST(f_char1 AS SIGNED INT),
34128 f_charbig = 'just inserted'
34129    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34130 DELETE FROM t0_aux
34131 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34132 DELETE FROM t1
34133 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34134 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
34135 BEGIN
34136 SET new.f_int1 = old.f_int1 + @max_row,
34137 new.f_int2 = old.f_int2 - @max_row,
34138 new.f_charbig = '####updated per update trigger####';
34139 END|
34140 UPDATE t1
34141 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
34142 f_charbig = '####updated per update statement itself####';
34143         
34144 # check trigger-9 success:      1
34145 DROP TRIGGER trg_2;
34146 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34147 f_int2 = CAST(f_char1 AS SIGNED INT),
34148 f_charbig = CONCAT('===',f_char1,'===');
34149 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
34150 BEGIN
34151 SET new.f_int1 = new.f_int1 + @max_row,
34152 new.f_int2 = new.f_int2 - @max_row,
34153 new.f_charbig = '####updated per update trigger####';
34154 END|
34155 UPDATE t1
34156 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
34157 f_charbig = '####updated per update statement itself####';
34158         
34159 # check trigger-10 success:     1
34160 DROP TRIGGER trg_2;
34161 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34162 f_int2 = CAST(f_char1 AS SIGNED INT),
34163 f_charbig = CONCAT('===',f_char1,'===');
34164 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
34165 BEGIN
34166 SET new.f_int1 = @my_max1 + @counter,
34167 new.f_int2 = @my_min2 - @counter,
34168 new.f_charbig = '####updated per insert trigger####';
34169 SET @counter = @counter + 1;
34170 END|
34171 SET @counter = 1;
34172 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
34173 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34174 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
34175 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
34176 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
34177 ORDER BY f_int1;
34178 DROP TRIGGER trg_3;
34179         
34180 # check trigger-11 success:     1
34181 DELETE FROM t1
34182 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
34183 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
34184 AND f_charbig = '####updated per insert trigger####';
34185 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
34186 BEGIN
34187 SET new.f_int1 = @my_max1 + @counter,
34188 new.f_int2 = @my_min2 - @counter,
34189 new.f_charbig = '####updated per insert trigger####';
34190 SET @counter = @counter + 1;
34191 END|
34192 SET @counter = 1;
34193 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
34194 INSERT INTO t1 (f_char1, f_char2, f_charbig)
34195 SELECT CAST(f_int1 AS CHAR),
34196 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
34197 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
34198 ORDER BY f_int1;
34199 DROP TRIGGER trg_3;
34200         
34201 # check trigger-12 success:     1
34202 DELETE FROM t1
34203 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
34204 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
34205 AND f_charbig = '####updated per insert trigger####';
34206 ANALYZE  TABLE t1;
34207 Table   Op      Msg_type        Msg_text
34208 test.t1 analyze status  OK
34209 CHECK    TABLE t1 EXTENDED;
34210 Table   Op      Msg_type        Msg_text
34211 test.t1 check   status  OK
34212 CHECKSUM TABLE t1 EXTENDED;
34213 Table   Checksum
34214 test.t1 <some_value>
34215 OPTIMIZE TABLE t1;
34216 Table   Op      Msg_type        Msg_text
34217 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
34218 test.t1 optimize        status  OK
34219 # check layout success:    1
34220 REPAIR   TABLE t1 EXTENDED;
34221 Table   Op      Msg_type        Msg_text
34222 test.t1 repair  note    The storage engine for the table doesn't support repair
34223 # check layout success:    1
34224 TRUNCATE t1;
34225         
34226 # check TRUNCATE success:       1
34227 # check layout success:    1
34228 # End usability test (inc/partition_check.inc)
34229 DROP TABLE t1;
34230 CREATE TABLE t1 (
34231 f_int1 INTEGER,
34232 f_int2 INTEGER,
34233 f_char1 CHAR(20),
34234 f_char2 CHAR(20),
34235 f_charbig VARCHAR(1000)
34236 , PRIMARY KEY (f_int1,f_int2)
34238 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
34239 (PARTITION part1 VALUES LESS THAN (0)
34240 (SUBPARTITION subpart11, SUBPARTITION subpart12),
34241 PARTITION part2 VALUES LESS THAN (5)
34242 (SUBPARTITION subpart21, SUBPARTITION subpart22),
34243 PARTITION part3 VALUES LESS THAN (10)
34244 (SUBPARTITION subpart31, SUBPARTITION subpart32),
34245 PARTITION part4 VALUES LESS THAN (2147483646)
34246 (SUBPARTITION subpart41, SUBPARTITION subpart42));
34247 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34248 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
34249 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
34250 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
34251 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34252 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
34253 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
34254 # Start usability test (inc/partition_check.inc)
34255 create_command
34256 SHOW CREATE TABLE t1;
34257 Table   Create Table
34258 t1      CREATE TABLE `t1` (
34259   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
34260   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
34261   `f_char1` char(20) DEFAULT NULL,
34262   `f_char2` char(20) DEFAULT NULL,
34263   `f_charbig` varchar(1000) DEFAULT NULL,
34264   PRIMARY KEY (`f_int1`,`f_int2`)
34265 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
34266 /*!50100 PARTITION BY RANGE (f_int1)
34267 SUBPARTITION BY KEY (f_int2)
34268 (PARTITION part1 VALUES LESS THAN (0)
34269  (SUBPARTITION subpart11 ENGINE = InnoDB,
34270   SUBPARTITION subpart12 ENGINE = InnoDB),
34271  PARTITION part2 VALUES LESS THAN (5)
34272  (SUBPARTITION subpart21 ENGINE = InnoDB,
34273   SUBPARTITION subpart22 ENGINE = InnoDB),
34274  PARTITION part3 VALUES LESS THAN (10)
34275  (SUBPARTITION subpart31 ENGINE = InnoDB,
34276   SUBPARTITION subpart32 ENGINE = InnoDB),
34277  PARTITION part4 VALUES LESS THAN (2147483646)
34278  (SUBPARTITION subpart41 ENGINE = InnoDB,
34279   SUBPARTITION subpart42 ENGINE = InnoDB)) */
34281 # check prerequisites-1 success:    1
34282 # check COUNT(*) success:    1
34283 # check MIN/MAX(f_int1) success:    1
34284 # check MIN/MAX(f_int2) success:    1
34285 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34286 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
34287 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
34288 WHERE f_int1 IN (2,3);
34289 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
34290 # check prerequisites-3 success:    1
34291 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
34292 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34293 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
34294 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
34295 WHERE f_int1 IN (2,3);
34296 DELETE FROM t1 WHERE f_charbig = 'delete me';
34297 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34298 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
34299 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
34300 WHERE f_int1 IN (2,3);
34301 DELETE FROM t1 WHERE f_charbig = 'delete me';
34302 # check read via f_int1 success: 1
34303 # check read via f_int2 success: 1
34304         
34305 # check multiple-1 success:     1
34306 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
34307         
34308 # check multiple-2 success:     1
34309 INSERT INTO t1 SELECT * FROM t0_template
34310 WHERE MOD(f_int1,3) = 0;
34311         
34312 # check multiple-3 success:     1
34313 UPDATE t1 SET f_int1 = f_int1 + @max_row
34314 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
34315 AND @max_row_div2 + @max_row_div4;
34316         
34317 # check multiple-4 success:     1
34318 DELETE FROM t1
34319 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
34320 AND @max_row_div2 + @max_row_div4 + @max_row;
34321         
34322 # check multiple-5 success:     1
34323 SELECT COUNT(*) INTO @try_count FROM t0_template
34324 WHERE MOD(f_int1,3) = 0
34325 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34326 SELECT COUNT(*) INTO @clash_count
34327 FROM t1 INNER JOIN t0_template USING(f_int1)
34328 WHERE MOD(f_int1,3) = 0
34329 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34330 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
34331 INSERT INTO t1
34332 SET f_int1 = @cur_value , f_int2 = @cur_value,
34333 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
34334 f_charbig = '#SINGLE#';
34335         
34336 # check single-1 success:       1
34337 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
34338 INSERT INTO t1
34339 SET f_int1 = @cur_value , f_int2 = @cur_value,
34340 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
34341 f_charbig = '#SINGLE#';
34342         
34343 # check single-2 success:       1
34344 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
34345 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
34346 UPDATE t1 SET f_int1 = @cur_value2
34347 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
34348         
34349 # check single-3 success:       1
34350 SET @cur_value1= -1;
34351 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
34352 UPDATE t1 SET f_int1 = @cur_value1
34353 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
34354         
34355 # check single-4 success:       1
34356 SELECT MAX(f_int1) INTO @cur_value FROM t1;
34357 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
34358         
34359 # check single-5 success:       1
34360 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
34361         
34362 # check single-6 success:       1
34363 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
34364 Warnings:
34365 Warning 1264    Out of range value for column 'f_int1' at row 1
34366 Warning 1264    Out of range value for column 'f_int2' at row 1
34367         
34368 # check single-7 success:       1
34369 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
34370 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
34371 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
34372 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
34373 f_charbig = '#NULL#';
34374 INSERT INTO t1
34375 SET f_int1 = NULL , f_int2 = -@max_row,
34376 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
34377 f_charbig = '#NULL#';
34378 ERROR 23000: Column 'f_int1' cannot be null
34379 # check null success:    1
34380 DELETE FROM t1
34381 WHERE f_int1 = 0 AND f_int2 = 0
34382 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
34383 AND f_charbig = '#NULL#';
34384 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34385 SELECT f_int1, f_int1, '', '', 'was inserted'
34386    FROM t0_template source_tab
34387 WHERE MOD(f_int1,3) = 0
34388 AND f_int1 BETWEEN @max_row_div2 AND @max_row
34389 ON DUPLICATE KEY
34390 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
34391 f_int2 = 2 * @max_row + source_tab.f_int1,
34392 f_charbig = 'was updated';
34393         
34394 # check unique-1-a success:     1
34395         
34396 # check unique-1-b success:     1
34397 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34398 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34399 f_int2 = CAST(f_char1 AS SIGNED INT),
34400 f_charbig = CONCAT('===',f_char1,'===')
34401 WHERE f_charbig = 'was updated';
34402 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34403 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
34404    FROM t0_template source_tab
34405 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34406         
34407 # check replace success:        1
34408 DELETE FROM t1
34409 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
34410 DELETE FROM t1
34411 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
34412 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
34413 UPDATE t1 SET f_int2 = f_int1,
34414 f_char1 = CAST(f_int1 AS CHAR),
34415 f_char2 = CAST(f_int1 AS CHAR),
34416 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
34417 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
34418 SET AUTOCOMMIT= 0;
34419 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34420 SELECT f_int1, f_int1, '', '', 'was inserted'
34421 FROM t0_template source_tab
34422 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34423         
34424 # check transactions-1 success:         1
34425 COMMIT WORK;
34426         
34427 # check transactions-2 success:         1
34428 ROLLBACK WORK;
34429         
34430 # check transactions-3 success:         1
34431 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34432 COMMIT WORK;
34433 ROLLBACK WORK;
34434         
34435 # check transactions-4 success:         1
34436 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34437 SELECT f_int1, f_int1, '', '', 'was inserted'
34438 FROM t0_template source_tab
34439 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34440         
34441 # check transactions-5 success:         1
34442 ROLLBACK WORK;
34443         
34444 # check transactions-6 success:         1
34445 # INFO: Storage engine used for t1 seems to be transactional.
34446 COMMIT;
34447         
34448 # check transactions-7 success:         1
34449 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34450 COMMIT WORK;
34451 SET @@session.sql_mode = 'traditional';
34452 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
34453 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34454 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
34455 '', '', 'was inserted' FROM t0_template
34456 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34457 ERROR 22012: Division by 0
34458 COMMIT;
34459         
34460 # check transactions-8 success:         1
34461 # INFO: Storage engine used for t1 seems to be able to revert
34462 #       changes made by the failing statement.
34463 SET @@session.sql_mode = '';
34464 SET AUTOCOMMIT= 1;
34465 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34466 COMMIT WORK;
34467 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
34468         
34469 # check special-1 success:      1
34470 UPDATE t1 SET f_charbig = '';
34471         
34472 # check special-2 success:      1
34473 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
34474 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34475 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
34476 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34477 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34478 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34479 'just inserted' FROM t0_template
34480 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34481 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
34482 BEGIN
34483 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34484 f_charbig = 'updated by trigger'
34485       WHERE f_int1 = new.f_int1;
34486 END|
34487 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34488 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
34489 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34490         
34491 # check trigger-1 success:      1
34492 DROP TRIGGER trg_1;
34493 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34494 f_int2 = CAST(f_char1 AS SIGNED INT),
34495 f_charbig = 'just inserted'
34496    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34497 DELETE FROM t0_aux
34498 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34499 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34500 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34501 'just inserted' FROM t0_template
34502 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34503 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
34504 BEGIN
34505 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34506 f_charbig = 'updated by trigger'
34507       WHERE f_int1 = new.f_int1;
34508 END|
34509 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34510 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
34511 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34512         
34513 # check trigger-2 success:      1
34514 DROP TRIGGER trg_1;
34515 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34516 f_int2 = CAST(f_char1 AS SIGNED INT),
34517 f_charbig = 'just inserted'
34518    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34519 DELETE FROM t0_aux
34520 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34523 'just inserted' FROM t0_template
34524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34525 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
34526 BEGIN
34527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34528 f_charbig = 'updated by trigger'
34529       WHERE f_int1 = new.f_int1;
34530 END|
34531 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34532 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34533         
34534 # check trigger-3 success:      1
34535 DROP TRIGGER trg_1;
34536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34537 f_int2 = CAST(f_char1 AS SIGNED INT),
34538 f_charbig = 'just inserted'
34539    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34540 DELETE FROM t0_aux
34541 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34542 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34543 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34544 'just inserted' FROM t0_template
34545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34546 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
34547 BEGIN
34548 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34549 f_charbig = 'updated by trigger'
34550       WHERE f_int1 = - old.f_int1;
34551 END|
34552 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34553 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34554         
34555 # check trigger-4 success:      1
34556 DROP TRIGGER trg_1;
34557 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34558 f_int2 = CAST(f_char1 AS SIGNED INT),
34559 f_charbig = 'just inserted'
34560    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34561 DELETE FROM t0_aux
34562 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34563 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34564 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34565 'just inserted' FROM t0_template
34566 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34567 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
34568 BEGIN
34569 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34570 f_charbig = 'updated by trigger'
34571       WHERE f_int1 = new.f_int1;
34572 END|
34573 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34574 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34575         
34576 # check trigger-5 success:      1
34577 DROP TRIGGER trg_1;
34578 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34579 f_int2 = CAST(f_char1 AS SIGNED INT),
34580 f_charbig = 'just inserted'
34581    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34582 DELETE FROM t0_aux
34583 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34584 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34585 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34586 'just inserted' FROM t0_template
34587 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34588 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
34589 BEGIN
34590 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34591 f_charbig = 'updated by trigger'
34592       WHERE f_int1 = - old.f_int1;
34593 END|
34594 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
34595 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34596         
34597 # check trigger-6 success:      1
34598 DROP TRIGGER trg_1;
34599 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34600 f_int2 = CAST(f_char1 AS SIGNED INT),
34601 f_charbig = 'just inserted'
34602    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34603 DELETE FROM t0_aux
34604 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34605 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34606 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34607 'just inserted' FROM t0_template
34608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34609 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
34610 BEGIN
34611 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34612 f_charbig = 'updated by trigger'
34613       WHERE f_int1 = - old.f_int1;
34614 END|
34615 DELETE FROM t0_aux
34616 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34617         
34618 # check trigger-7 success:      1
34619 DROP TRIGGER trg_1;
34620 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34621 f_int2 = CAST(f_char1 AS SIGNED INT),
34622 f_charbig = 'just inserted'
34623    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34624 DELETE FROM t0_aux
34625 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34626 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34627 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34628 'just inserted' FROM t0_template
34629 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34630 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
34631 BEGIN
34632 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34633 f_charbig = 'updated by trigger'
34634       WHERE f_int1 = - old.f_int1;
34635 END|
34636 DELETE FROM t0_aux
34637 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
34638         
34639 # check trigger-8 success:      1
34640 DROP TRIGGER trg_1;
34641 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34642 f_int2 = CAST(f_char1 AS SIGNED INT),
34643 f_charbig = 'just inserted'
34644    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
34645 DELETE FROM t0_aux
34646 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34647 DELETE FROM t1
34648 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34649 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
34650 BEGIN
34651 SET new.f_int1 = old.f_int1 + @max_row,
34652 new.f_int2 = old.f_int2 - @max_row,
34653 new.f_charbig = '####updated per update trigger####';
34654 END|
34655 UPDATE t1
34656 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
34657 f_charbig = '####updated per update statement itself####';
34658         
34659 # check trigger-9 success:      1
34660 DROP TRIGGER trg_2;
34661 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34662 f_int2 = CAST(f_char1 AS SIGNED INT),
34663 f_charbig = CONCAT('===',f_char1,'===');
34664 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
34665 BEGIN
34666 SET new.f_int1 = new.f_int1 + @max_row,
34667 new.f_int2 = new.f_int2 - @max_row,
34668 new.f_charbig = '####updated per update trigger####';
34669 END|
34670 UPDATE t1
34671 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
34672 f_charbig = '####updated per update statement itself####';
34673         
34674 # check trigger-10 success:     1
34675 DROP TRIGGER trg_2;
34676 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34677 f_int2 = CAST(f_char1 AS SIGNED INT),
34678 f_charbig = CONCAT('===',f_char1,'===');
34679 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
34680 BEGIN
34681 SET new.f_int1 = @my_max1 + @counter,
34682 new.f_int2 = @my_min2 - @counter,
34683 new.f_charbig = '####updated per insert trigger####';
34684 SET @counter = @counter + 1;
34685 END|
34686 SET @counter = 1;
34687 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
34688 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34689 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
34690 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
34691 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
34692 ORDER BY f_int1;
34693 DROP TRIGGER trg_3;
34694         
34695 # check trigger-11 success:     1
34696 DELETE FROM t1
34697 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
34698 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
34699 AND f_charbig = '####updated per insert trigger####';
34700 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
34701 BEGIN
34702 SET new.f_int1 = @my_max1 + @counter,
34703 new.f_int2 = @my_min2 - @counter,
34704 new.f_charbig = '####updated per insert trigger####';
34705 SET @counter = @counter + 1;
34706 END|
34707 SET @counter = 1;
34708 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
34709 INSERT INTO t1 (f_char1, f_char2, f_charbig)
34710 SELECT CAST(f_int1 AS CHAR),
34711 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
34712 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
34713 ORDER BY f_int1;
34714 DROP TRIGGER trg_3;
34715         
34716 # check trigger-12 success:     1
34717 DELETE FROM t1
34718 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
34719 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
34720 AND f_charbig = '####updated per insert trigger####';
34721 ANALYZE  TABLE t1;
34722 Table   Op      Msg_type        Msg_text
34723 test.t1 analyze status  OK
34724 CHECK    TABLE t1 EXTENDED;
34725 Table   Op      Msg_type        Msg_text
34726 test.t1 check   status  OK
34727 CHECKSUM TABLE t1 EXTENDED;
34728 Table   Checksum
34729 test.t1 <some_value>
34730 OPTIMIZE TABLE t1;
34731 Table   Op      Msg_type        Msg_text
34732 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
34733 test.t1 optimize        status  OK
34734 # check layout success:    1
34735 REPAIR   TABLE t1 EXTENDED;
34736 Table   Op      Msg_type        Msg_text
34737 test.t1 repair  note    The storage engine for the table doesn't support repair
34738 # check layout success:    1
34739 TRUNCATE t1;
34740         
34741 # check TRUNCATE success:       1
34742 # check layout success:    1
34743 # End usability test (inc/partition_check.inc)
34744 DROP TABLE t1;
34745 CREATE TABLE t1 (
34746 f_int1 INTEGER,
34747 f_int2 INTEGER,
34748 f_char1 CHAR(20),
34749 f_char2 CHAR(20),
34750 f_charbig VARCHAR(1000)
34751 , PRIMARY KEY (f_int1,f_int2)
34753 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
34754 (PARTITION part1 VALUES IN (0)
34755 (SUBPARTITION sp11, SUBPARTITION sp12),
34756 PARTITION part2 VALUES IN (1)
34757 (SUBPARTITION sp21, SUBPARTITION sp22),
34758 PARTITION part3 VALUES IN (2)
34759 (SUBPARTITION sp31, SUBPARTITION sp32),
34760 PARTITION part4 VALUES IN (NULL)
34761 (SUBPARTITION sp41, SUBPARTITION sp42));
34762 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34763 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
34764 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
34765 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
34766 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34767 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
34768 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
34769 # Start usability test (inc/partition_check.inc)
34770 create_command
34771 SHOW CREATE TABLE t1;
34772 Table   Create Table
34773 t1      CREATE TABLE `t1` (
34774   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
34775   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
34776   `f_char1` char(20) DEFAULT NULL,
34777   `f_char2` char(20) DEFAULT NULL,
34778   `f_charbig` varchar(1000) DEFAULT NULL,
34779   PRIMARY KEY (`f_int1`,`f_int2`)
34780 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
34781 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
34782 SUBPARTITION BY HASH (f_int2 + 1)
34783 (PARTITION part1 VALUES IN (0)
34784  (SUBPARTITION sp11 ENGINE = InnoDB,
34785   SUBPARTITION sp12 ENGINE = InnoDB),
34786  PARTITION part2 VALUES IN (1)
34787  (SUBPARTITION sp21 ENGINE = InnoDB,
34788   SUBPARTITION sp22 ENGINE = InnoDB),
34789  PARTITION part3 VALUES IN (2)
34790  (SUBPARTITION sp31 ENGINE = InnoDB,
34791   SUBPARTITION sp32 ENGINE = InnoDB),
34792  PARTITION part4 VALUES IN (NULL)
34793  (SUBPARTITION sp41 ENGINE = InnoDB,
34794   SUBPARTITION sp42 ENGINE = InnoDB)) */
34796 # check prerequisites-1 success:    1
34797 # check COUNT(*) success:    1
34798 # check MIN/MAX(f_int1) success:    1
34799 # check MIN/MAX(f_int2) success:    1
34800 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34801 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
34802 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
34803 WHERE f_int1 IN (2,3);
34804 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
34805 # check prerequisites-3 success:    1
34806 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
34807 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34808 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
34809 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
34810 WHERE f_int1 IN (2,3);
34811 DELETE FROM t1 WHERE f_charbig = 'delete me';
34812 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34813 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
34814 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
34815 WHERE f_int1 IN (2,3);
34816 DELETE FROM t1 WHERE f_charbig = 'delete me';
34817 # check read via f_int1 success: 1
34818 # check read via f_int2 success: 1
34819         
34820 # check multiple-1 success:     1
34821 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
34822         
34823 # check multiple-2 success:     1
34824 INSERT INTO t1 SELECT * FROM t0_template
34825 WHERE MOD(f_int1,3) = 0;
34826         
34827 # check multiple-3 success:     1
34828 UPDATE t1 SET f_int1 = f_int1 + @max_row
34829 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
34830 AND @max_row_div2 + @max_row_div4;
34831         
34832 # check multiple-4 success:     1
34833 DELETE FROM t1
34834 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
34835 AND @max_row_div2 + @max_row_div4 + @max_row;
34836         
34837 # check multiple-5 success:     1
34838 SELECT COUNT(*) INTO @try_count FROM t0_template
34839 WHERE MOD(f_int1,3) = 0
34840 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34841 SELECT COUNT(*) INTO @clash_count
34842 FROM t1 INNER JOIN t0_template USING(f_int1)
34843 WHERE MOD(f_int1,3) = 0
34844 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34845 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
34846 INSERT INTO t1
34847 SET f_int1 = @cur_value , f_int2 = @cur_value,
34848 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
34849 f_charbig = '#SINGLE#';
34850         
34851 # check single-1 success:       1
34852 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
34853 INSERT INTO t1
34854 SET f_int1 = @cur_value , f_int2 = @cur_value,
34855 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
34856 f_charbig = '#SINGLE#';
34857         
34858 # check single-2 success:       1
34859 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
34860 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
34861 UPDATE t1 SET f_int1 = @cur_value2
34862 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
34863         
34864 # check single-3 success:       1
34865 SET @cur_value1= -1;
34866 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
34867 UPDATE t1 SET f_int1 = @cur_value1
34868 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
34869         
34870 # check single-4 success:       1
34871 SELECT MAX(f_int1) INTO @cur_value FROM t1;
34872 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
34873         
34874 # check single-5 success:       1
34875 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
34876         
34877 # check single-6 success:       1
34878 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
34879 Warnings:
34880 Warning 1264    Out of range value for column 'f_int1' at row 1
34881 Warning 1264    Out of range value for column 'f_int2' at row 1
34882         
34883 # check single-7 success:       1
34884 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
34885 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
34886 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
34887 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
34888 f_charbig = '#NULL#';
34889 INSERT INTO t1
34890 SET f_int1 = NULL , f_int2 = -@max_row,
34891 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
34892 f_charbig = '#NULL#';
34893 ERROR 23000: Column 'f_int1' cannot be null
34894 # check null success:    1
34895 DELETE FROM t1
34896 WHERE f_int1 = 0 AND f_int2 = 0
34897 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
34898 AND f_charbig = '#NULL#';
34899 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34900 SELECT f_int1, f_int1, '', '', 'was inserted'
34901    FROM t0_template source_tab
34902 WHERE MOD(f_int1,3) = 0
34903 AND f_int1 BETWEEN @max_row_div2 AND @max_row
34904 ON DUPLICATE KEY
34905 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
34906 f_int2 = 2 * @max_row + source_tab.f_int1,
34907 f_charbig = 'was updated';
34908         
34909 # check unique-1-a success:     1
34910         
34911 # check unique-1-b success:     1
34912 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34913 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
34914 f_int2 = CAST(f_char1 AS SIGNED INT),
34915 f_charbig = CONCAT('===',f_char1,'===')
34916 WHERE f_charbig = 'was updated';
34917 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34918 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
34919    FROM t0_template source_tab
34920 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
34921         
34922 # check replace success:        1
34923 DELETE FROM t1
34924 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
34925 DELETE FROM t1
34926 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
34927 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
34928 UPDATE t1 SET f_int2 = f_int1,
34929 f_char1 = CAST(f_int1 AS CHAR),
34930 f_char2 = CAST(f_int1 AS CHAR),
34931 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
34932 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
34933 SET AUTOCOMMIT= 0;
34934 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34935 SELECT f_int1, f_int1, '', '', 'was inserted'
34936 FROM t0_template source_tab
34937 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34938         
34939 # check transactions-1 success:         1
34940 COMMIT WORK;
34941         
34942 # check transactions-2 success:         1
34943 ROLLBACK WORK;
34944         
34945 # check transactions-3 success:         1
34946 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34947 COMMIT WORK;
34948 ROLLBACK WORK;
34949         
34950 # check transactions-4 success:         1
34951 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34952 SELECT f_int1, f_int1, '', '', 'was inserted'
34953 FROM t0_template source_tab
34954 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34955         
34956 # check transactions-5 success:         1
34957 ROLLBACK WORK;
34958         
34959 # check transactions-6 success:         1
34960 # INFO: Storage engine used for t1 seems to be transactional.
34961 COMMIT;
34962         
34963 # check transactions-7 success:         1
34964 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34965 COMMIT WORK;
34966 SET @@session.sql_mode = 'traditional';
34967 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
34968 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
34969 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
34970 '', '', 'was inserted' FROM t0_template
34971 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
34972 ERROR 22012: Division by 0
34973 COMMIT;
34974         
34975 # check transactions-8 success:         1
34976 # INFO: Storage engine used for t1 seems to be able to revert
34977 #       changes made by the failing statement.
34978 SET @@session.sql_mode = '';
34979 SET AUTOCOMMIT= 1;
34980 DELETE FROM t1 WHERE f_charbig = 'was inserted';
34981 COMMIT WORK;
34982 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
34983         
34984 # check special-1 success:      1
34985 UPDATE t1 SET f_charbig = '';
34986         
34987 # check special-2 success:      1
34988 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
34989 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
34990 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
34991 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34992 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
34993 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
34994 'just inserted' FROM t0_template
34995 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
34996 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
34997 BEGIN
34998 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
34999 f_charbig = 'updated by trigger'
35000       WHERE f_int1 = new.f_int1;
35001 END|
35002 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35003 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
35004 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35005         
35006 # check trigger-1 success:      1
35007 DROP TRIGGER trg_1;
35008 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35009 f_int2 = CAST(f_char1 AS SIGNED INT),
35010 f_charbig = 'just inserted'
35011    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35012 DELETE FROM t0_aux
35013 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35014 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35015 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35016 'just inserted' FROM t0_template
35017 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35018 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
35019 BEGIN
35020 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35021 f_charbig = 'updated by trigger'
35022       WHERE f_int1 = new.f_int1;
35023 END|
35024 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35025 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
35026 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35027         
35028 # check trigger-2 success:      1
35029 DROP TRIGGER trg_1;
35030 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35031 f_int2 = CAST(f_char1 AS SIGNED INT),
35032 f_charbig = 'just inserted'
35033    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35034 DELETE FROM t0_aux
35035 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35036 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35037 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35038 'just inserted' FROM t0_template
35039 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35040 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
35041 BEGIN
35042 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35043 f_charbig = 'updated by trigger'
35044       WHERE f_int1 = new.f_int1;
35045 END|
35046 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35047 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35048         
35049 # check trigger-3 success:      1
35050 DROP TRIGGER trg_1;
35051 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35052 f_int2 = CAST(f_char1 AS SIGNED INT),
35053 f_charbig = 'just inserted'
35054    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35055 DELETE FROM t0_aux
35056 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35057 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35058 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35059 'just inserted' FROM t0_template
35060 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35061 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
35062 BEGIN
35063 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35064 f_charbig = 'updated by trigger'
35065       WHERE f_int1 = - old.f_int1;
35066 END|
35067 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35068 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35069         
35070 # check trigger-4 success:      1
35071 DROP TRIGGER trg_1;
35072 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35073 f_int2 = CAST(f_char1 AS SIGNED INT),
35074 f_charbig = 'just inserted'
35075    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35076 DELETE FROM t0_aux
35077 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35078 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35079 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35080 'just inserted' FROM t0_template
35081 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35082 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
35083 BEGIN
35084 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35085 f_charbig = 'updated by trigger'
35086       WHERE f_int1 = new.f_int1;
35087 END|
35088 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35089 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35090         
35091 # check trigger-5 success:      1
35092 DROP TRIGGER trg_1;
35093 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35094 f_int2 = CAST(f_char1 AS SIGNED INT),
35095 f_charbig = 'just inserted'
35096    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35097 DELETE FROM t0_aux
35098 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35099 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35100 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35101 'just inserted' FROM t0_template
35102 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35103 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
35104 BEGIN
35105 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35106 f_charbig = 'updated by trigger'
35107       WHERE f_int1 = - old.f_int1;
35108 END|
35109 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35110 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35111         
35112 # check trigger-6 success:      1
35113 DROP TRIGGER trg_1;
35114 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35115 f_int2 = CAST(f_char1 AS SIGNED INT),
35116 f_charbig = 'just inserted'
35117    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35118 DELETE FROM t0_aux
35119 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35120 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35121 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35122 'just inserted' FROM t0_template
35123 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35124 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
35125 BEGIN
35126 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35127 f_charbig = 'updated by trigger'
35128       WHERE f_int1 = - old.f_int1;
35129 END|
35130 DELETE FROM t0_aux
35131 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35132         
35133 # check trigger-7 success:      1
35134 DROP TRIGGER trg_1;
35135 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35136 f_int2 = CAST(f_char1 AS SIGNED INT),
35137 f_charbig = 'just inserted'
35138    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35139 DELETE FROM t0_aux
35140 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35141 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35142 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35143 'just inserted' FROM t0_template
35144 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35145 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
35146 BEGIN
35147 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35148 f_charbig = 'updated by trigger'
35149       WHERE f_int1 = - old.f_int1;
35150 END|
35151 DELETE FROM t0_aux
35152 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35153         
35154 # check trigger-8 success:      1
35155 DROP TRIGGER trg_1;
35156 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35157 f_int2 = CAST(f_char1 AS SIGNED INT),
35158 f_charbig = 'just inserted'
35159    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35160 DELETE FROM t0_aux
35161 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35162 DELETE FROM t1
35163 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35164 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
35165 BEGIN
35166 SET new.f_int1 = old.f_int1 + @max_row,
35167 new.f_int2 = old.f_int2 - @max_row,
35168 new.f_charbig = '####updated per update trigger####';
35169 END|
35170 UPDATE t1
35171 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
35172 f_charbig = '####updated per update statement itself####';
35173         
35174 # check trigger-9 success:      1
35175 DROP TRIGGER trg_2;
35176 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35177 f_int2 = CAST(f_char1 AS SIGNED INT),
35178 f_charbig = CONCAT('===',f_char1,'===');
35179 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
35180 BEGIN
35181 SET new.f_int1 = new.f_int1 + @max_row,
35182 new.f_int2 = new.f_int2 - @max_row,
35183 new.f_charbig = '####updated per update trigger####';
35184 END|
35185 UPDATE t1
35186 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
35187 f_charbig = '####updated per update statement itself####';
35188         
35189 # check trigger-10 success:     1
35190 DROP TRIGGER trg_2;
35191 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35192 f_int2 = CAST(f_char1 AS SIGNED INT),
35193 f_charbig = CONCAT('===',f_char1,'===');
35194 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
35195 BEGIN
35196 SET new.f_int1 = @my_max1 + @counter,
35197 new.f_int2 = @my_min2 - @counter,
35198 new.f_charbig = '####updated per insert trigger####';
35199 SET @counter = @counter + 1;
35200 END|
35201 SET @counter = 1;
35202 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
35203 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35204 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
35205 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
35206 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
35207 ORDER BY f_int1;
35208 DROP TRIGGER trg_3;
35209         
35210 # check trigger-11 success:     1
35211 DELETE FROM t1
35212 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
35213 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
35214 AND f_charbig = '####updated per insert trigger####';
35215 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
35216 BEGIN
35217 SET new.f_int1 = @my_max1 + @counter,
35218 new.f_int2 = @my_min2 - @counter,
35219 new.f_charbig = '####updated per insert trigger####';
35220 SET @counter = @counter + 1;
35221 END|
35222 SET @counter = 1;
35223 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
35224 INSERT INTO t1 (f_char1, f_char2, f_charbig)
35225 SELECT CAST(f_int1 AS CHAR),
35226 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
35227 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
35228 ORDER BY f_int1;
35229 DROP TRIGGER trg_3;
35230         
35231 # check trigger-12 success:     1
35232 DELETE FROM t1
35233 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
35234 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
35235 AND f_charbig = '####updated per insert trigger####';
35236 ANALYZE  TABLE t1;
35237 Table   Op      Msg_type        Msg_text
35238 test.t1 analyze status  OK
35239 CHECK    TABLE t1 EXTENDED;
35240 Table   Op      Msg_type        Msg_text
35241 test.t1 check   status  OK
35242 CHECKSUM TABLE t1 EXTENDED;
35243 Table   Checksum
35244 test.t1 <some_value>
35245 OPTIMIZE TABLE t1;
35246 Table   Op      Msg_type        Msg_text
35247 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
35248 test.t1 optimize        status  OK
35249 # check layout success:    1
35250 REPAIR   TABLE t1 EXTENDED;
35251 Table   Op      Msg_type        Msg_text
35252 test.t1 repair  note    The storage engine for the table doesn't support repair
35253 # check layout success:    1
35254 TRUNCATE t1;
35255         
35256 # check TRUNCATE success:       1
35257 # check layout success:    1
35258 # End usability test (inc/partition_check.inc)
35259 DROP TABLE t1;
35260 CREATE TABLE t1 (
35261 f_int1 INTEGER,
35262 f_int2 INTEGER,
35263 f_char1 CHAR(20),
35264 f_char2 CHAR(20),
35265 f_charbig VARCHAR(1000)
35266 , PRIMARY KEY (f_int1,f_int2)
35268 PARTITION BY LIST(ABS(MOD(f_int1,2)))
35269 SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
35270 (PARTITION part1 VALUES IN (0),
35271  PARTITION part2 VALUES IN (1),
35272  PARTITION part3 VALUES IN (NULL));
35273 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35274 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
35275 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
35276 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
35277 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35278 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
35279 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
35280 # Start usability test (inc/partition_check.inc)
35281 create_command
35282 SHOW CREATE TABLE t1;
35283 Table   Create Table
35284 t1      CREATE TABLE `t1` (
35285   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
35286   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
35287   `f_char1` char(20) DEFAULT NULL,
35288   `f_char2` char(20) DEFAULT NULL,
35289   `f_charbig` varchar(1000) DEFAULT NULL,
35290   PRIMARY KEY (`f_int1`,`f_int2`)
35291 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
35292 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
35293 SUBPARTITION BY KEY (f_int2)
35294 SUBPARTITIONS 3
35295 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
35296  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
35297  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
35299 # check prerequisites-1 success:    1
35300 # check COUNT(*) success:    1
35301 # check MIN/MAX(f_int1) success:    1
35302 # check MIN/MAX(f_int2) success:    1
35303 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35304 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
35305 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
35306 WHERE f_int1 IN (2,3);
35307 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
35308 # check prerequisites-3 success:    1
35309 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
35310 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35311 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
35312 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
35313 WHERE f_int1 IN (2,3);
35314 DELETE FROM t1 WHERE f_charbig = 'delete me';
35315 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35316 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
35317 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
35318 WHERE f_int1 IN (2,3);
35319 DELETE FROM t1 WHERE f_charbig = 'delete me';
35320 # check read via f_int1 success: 1
35321 # check read via f_int2 success: 1
35322         
35323 # check multiple-1 success:     1
35324 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
35325         
35326 # check multiple-2 success:     1
35327 INSERT INTO t1 SELECT * FROM t0_template
35328 WHERE MOD(f_int1,3) = 0;
35329         
35330 # check multiple-3 success:     1
35331 UPDATE t1 SET f_int1 = f_int1 + @max_row
35332 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
35333 AND @max_row_div2 + @max_row_div4;
35334         
35335 # check multiple-4 success:     1
35336 DELETE FROM t1
35337 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
35338 AND @max_row_div2 + @max_row_div4 + @max_row;
35339         
35340 # check multiple-5 success:     1
35341 SELECT COUNT(*) INTO @try_count FROM t0_template
35342 WHERE MOD(f_int1,3) = 0
35343 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35344 SELECT COUNT(*) INTO @clash_count
35345 FROM t1 INNER JOIN t0_template USING(f_int1)
35346 WHERE MOD(f_int1,3) = 0
35347 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35348 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
35349 INSERT INTO t1
35350 SET f_int1 = @cur_value , f_int2 = @cur_value,
35351 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
35352 f_charbig = '#SINGLE#';
35353         
35354 # check single-1 success:       1
35355 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
35356 INSERT INTO t1
35357 SET f_int1 = @cur_value , f_int2 = @cur_value,
35358 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
35359 f_charbig = '#SINGLE#';
35360         
35361 # check single-2 success:       1
35362 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
35363 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
35364 UPDATE t1 SET f_int1 = @cur_value2
35365 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
35366         
35367 # check single-3 success:       1
35368 SET @cur_value1= -1;
35369 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
35370 UPDATE t1 SET f_int1 = @cur_value1
35371 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
35372         
35373 # check single-4 success:       1
35374 SELECT MAX(f_int1) INTO @cur_value FROM t1;
35375 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
35376         
35377 # check single-5 success:       1
35378 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
35379         
35380 # check single-6 success:       1
35381 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
35382 Warnings:
35383 Warning 1264    Out of range value for column 'f_int1' at row 1
35384 Warning 1264    Out of range value for column 'f_int2' at row 1
35385         
35386 # check single-7 success:       1
35387 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
35388 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
35389 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
35390 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
35391 f_charbig = '#NULL#';
35392 INSERT INTO t1
35393 SET f_int1 = NULL , f_int2 = -@max_row,
35394 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
35395 f_charbig = '#NULL#';
35396 ERROR 23000: Column 'f_int1' cannot be null
35397 # check null success:    1
35398 DELETE FROM t1
35399 WHERE f_int1 = 0 AND f_int2 = 0
35400 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
35401 AND f_charbig = '#NULL#';
35402 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35403 SELECT f_int1, f_int1, '', '', 'was inserted'
35404    FROM t0_template source_tab
35405 WHERE MOD(f_int1,3) = 0
35406 AND f_int1 BETWEEN @max_row_div2 AND @max_row
35407 ON DUPLICATE KEY
35408 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
35409 f_int2 = 2 * @max_row + source_tab.f_int1,
35410 f_charbig = 'was updated';
35411         
35412 # check unique-1-a success:     1
35413         
35414 # check unique-1-b success:     1
35415 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35416 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35417 f_int2 = CAST(f_char1 AS SIGNED INT),
35418 f_charbig = CONCAT('===',f_char1,'===')
35419 WHERE f_charbig = 'was updated';
35420 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35421 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
35422    FROM t0_template source_tab
35423 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35424         
35425 # check replace success:        1
35426 DELETE FROM t1
35427 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
35428 DELETE FROM t1
35429 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
35430 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
35431 UPDATE t1 SET f_int2 = f_int1,
35432 f_char1 = CAST(f_int1 AS CHAR),
35433 f_char2 = CAST(f_int1 AS CHAR),
35434 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
35435 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
35436 SET AUTOCOMMIT= 0;
35437 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35438 SELECT f_int1, f_int1, '', '', 'was inserted'
35439 FROM t0_template source_tab
35440 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35441         
35442 # check transactions-1 success:         1
35443 COMMIT WORK;
35444         
35445 # check transactions-2 success:         1
35446 ROLLBACK WORK;
35447         
35448 # check transactions-3 success:         1
35449 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35450 COMMIT WORK;
35451 ROLLBACK WORK;
35452         
35453 # check transactions-4 success:         1
35454 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35455 SELECT f_int1, f_int1, '', '', 'was inserted'
35456 FROM t0_template source_tab
35457 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35458         
35459 # check transactions-5 success:         1
35460 ROLLBACK WORK;
35461         
35462 # check transactions-6 success:         1
35463 # INFO: Storage engine used for t1 seems to be transactional.
35464 COMMIT;
35465         
35466 # check transactions-7 success:         1
35467 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35468 COMMIT WORK;
35469 SET @@session.sql_mode = 'traditional';
35470 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
35471 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35472 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
35473 '', '', 'was inserted' FROM t0_template
35474 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35475 ERROR 22012: Division by 0
35476 COMMIT;
35477         
35478 # check transactions-8 success:         1
35479 # INFO: Storage engine used for t1 seems to be able to revert
35480 #       changes made by the failing statement.
35481 SET @@session.sql_mode = '';
35482 SET AUTOCOMMIT= 1;
35483 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35484 COMMIT WORK;
35485 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
35486         
35487 # check special-1 success:      1
35488 UPDATE t1 SET f_charbig = '';
35489         
35490 # check special-2 success:      1
35491 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
35492 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35493 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
35494 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35495 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35496 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35497 'just inserted' FROM t0_template
35498 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35499 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
35500 BEGIN
35501 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35502 f_charbig = 'updated by trigger'
35503       WHERE f_int1 = new.f_int1;
35504 END|
35505 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35506 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
35507 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35508         
35509 # check trigger-1 success:      1
35510 DROP TRIGGER trg_1;
35511 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35512 f_int2 = CAST(f_char1 AS SIGNED INT),
35513 f_charbig = 'just inserted'
35514    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35515 DELETE FROM t0_aux
35516 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35517 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35518 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35519 'just inserted' FROM t0_template
35520 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35521 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
35522 BEGIN
35523 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35524 f_charbig = 'updated by trigger'
35525       WHERE f_int1 = new.f_int1;
35526 END|
35527 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35528 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
35529 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35530         
35531 # check trigger-2 success:      1
35532 DROP TRIGGER trg_1;
35533 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35534 f_int2 = CAST(f_char1 AS SIGNED INT),
35535 f_charbig = 'just inserted'
35536    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35537 DELETE FROM t0_aux
35538 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35539 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35540 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35541 'just inserted' FROM t0_template
35542 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35543 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
35544 BEGIN
35545 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35546 f_charbig = 'updated by trigger'
35547       WHERE f_int1 = new.f_int1;
35548 END|
35549 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35550 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35551         
35552 # check trigger-3 success:      1
35553 DROP TRIGGER trg_1;
35554 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35555 f_int2 = CAST(f_char1 AS SIGNED INT),
35556 f_charbig = 'just inserted'
35557    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35558 DELETE FROM t0_aux
35559 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35560 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35561 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35562 'just inserted' FROM t0_template
35563 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35564 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
35565 BEGIN
35566 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35567 f_charbig = 'updated by trigger'
35568       WHERE f_int1 = - old.f_int1;
35569 END|
35570 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35571 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35572         
35573 # check trigger-4 success:      1
35574 DROP TRIGGER trg_1;
35575 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35576 f_int2 = CAST(f_char1 AS SIGNED INT),
35577 f_charbig = 'just inserted'
35578    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35579 DELETE FROM t0_aux
35580 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35581 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35582 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35583 'just inserted' FROM t0_template
35584 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35585 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
35586 BEGIN
35587 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35588 f_charbig = 'updated by trigger'
35589       WHERE f_int1 = new.f_int1;
35590 END|
35591 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35592 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35593         
35594 # check trigger-5 success:      1
35595 DROP TRIGGER trg_1;
35596 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35597 f_int2 = CAST(f_char1 AS SIGNED INT),
35598 f_charbig = 'just inserted'
35599    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35600 DELETE FROM t0_aux
35601 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35602 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35603 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35604 'just inserted' FROM t0_template
35605 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35606 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
35607 BEGIN
35608 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35609 f_charbig = 'updated by trigger'
35610       WHERE f_int1 = - old.f_int1;
35611 END|
35612 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
35613 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35614         
35615 # check trigger-6 success:      1
35616 DROP TRIGGER trg_1;
35617 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35618 f_int2 = CAST(f_char1 AS SIGNED INT),
35619 f_charbig = 'just inserted'
35620    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35621 DELETE FROM t0_aux
35622 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35623 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35624 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35625 'just inserted' FROM t0_template
35626 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35627 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
35628 BEGIN
35629 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35630 f_charbig = 'updated by trigger'
35631       WHERE f_int1 = - old.f_int1;
35632 END|
35633 DELETE FROM t0_aux
35634 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35635         
35636 # check trigger-7 success:      1
35637 DROP TRIGGER trg_1;
35638 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35639 f_int2 = CAST(f_char1 AS SIGNED INT),
35640 f_charbig = 'just inserted'
35641    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35642 DELETE FROM t0_aux
35643 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35644 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35645 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35646 'just inserted' FROM t0_template
35647 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35648 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
35649 BEGIN
35650 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35651 f_charbig = 'updated by trigger'
35652       WHERE f_int1 = - old.f_int1;
35653 END|
35654 DELETE FROM t0_aux
35655 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
35656         
35657 # check trigger-8 success:      1
35658 DROP TRIGGER trg_1;
35659 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35660 f_int2 = CAST(f_char1 AS SIGNED INT),
35661 f_charbig = 'just inserted'
35662    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
35663 DELETE FROM t0_aux
35664 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35665 DELETE FROM t1
35666 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35667 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
35668 BEGIN
35669 SET new.f_int1 = old.f_int1 + @max_row,
35670 new.f_int2 = old.f_int2 - @max_row,
35671 new.f_charbig = '####updated per update trigger####';
35672 END|
35673 UPDATE t1
35674 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
35675 f_charbig = '####updated per update statement itself####';
35676         
35677 # check trigger-9 success:      1
35678 DROP TRIGGER trg_2;
35679 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35680 f_int2 = CAST(f_char1 AS SIGNED INT),
35681 f_charbig = CONCAT('===',f_char1,'===');
35682 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
35683 BEGIN
35684 SET new.f_int1 = new.f_int1 + @max_row,
35685 new.f_int2 = new.f_int2 - @max_row,
35686 new.f_charbig = '####updated per update trigger####';
35687 END|
35688 UPDATE t1
35689 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
35690 f_charbig = '####updated per update statement itself####';
35691         
35692 # check trigger-10 success:     1
35693 DROP TRIGGER trg_2;
35694 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35695 f_int2 = CAST(f_char1 AS SIGNED INT),
35696 f_charbig = CONCAT('===',f_char1,'===');
35697 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
35698 BEGIN
35699 SET new.f_int1 = @my_max1 + @counter,
35700 new.f_int2 = @my_min2 - @counter,
35701 new.f_charbig = '####updated per insert trigger####';
35702 SET @counter = @counter + 1;
35703 END|
35704 SET @counter = 1;
35705 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
35706 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35707 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
35708 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
35709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
35710 ORDER BY f_int1;
35711 DROP TRIGGER trg_3;
35712         
35713 # check trigger-11 success:     1
35714 DELETE FROM t1
35715 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
35716 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
35717 AND f_charbig = '####updated per insert trigger####';
35718 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
35719 BEGIN
35720 SET new.f_int1 = @my_max1 + @counter,
35721 new.f_int2 = @my_min2 - @counter,
35722 new.f_charbig = '####updated per insert trigger####';
35723 SET @counter = @counter + 1;
35724 END|
35725 SET @counter = 1;
35726 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
35727 INSERT INTO t1 (f_char1, f_char2, f_charbig)
35728 SELECT CAST(f_int1 AS CHAR),
35729 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
35730 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
35731 ORDER BY f_int1;
35732 DROP TRIGGER trg_3;
35733         
35734 # check trigger-12 success:     1
35735 DELETE FROM t1
35736 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
35737 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
35738 AND f_charbig = '####updated per insert trigger####';
35739 ANALYZE  TABLE t1;
35740 Table   Op      Msg_type        Msg_text
35741 test.t1 analyze status  OK
35742 CHECK    TABLE t1 EXTENDED;
35743 Table   Op      Msg_type        Msg_text
35744 test.t1 check   status  OK
35745 CHECKSUM TABLE t1 EXTENDED;
35746 Table   Checksum
35747 test.t1 <some_value>
35748 OPTIMIZE TABLE t1;
35749 Table   Op      Msg_type        Msg_text
35750 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
35751 test.t1 optimize        status  OK
35752 # check layout success:    1
35753 REPAIR   TABLE t1 EXTENDED;
35754 Table   Op      Msg_type        Msg_text
35755 test.t1 repair  note    The storage engine for the table doesn't support repair
35756 # check layout success:    1
35757 TRUNCATE t1;
35758         
35759 # check TRUNCATE success:       1
35760 # check layout success:    1
35761 # End usability test (inc/partition_check.inc)
35762 DROP TABLE t1;
35763 DROP TABLE IF EXISTS t1;
35764 CREATE TABLE t1 (
35765 f_int1 INTEGER,
35766 f_int2 INTEGER,
35767 f_char1 CHAR(20),
35768 f_char2 CHAR(20),
35769 f_charbig VARCHAR(1000)
35770 , PRIMARY KEY (f_int2,f_int1)
35772 PARTITION BY HASH(f_int1) PARTITIONS 2;
35773 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35774 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
35775 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
35776 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
35777 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35778 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
35779 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
35780 # Start usability test (inc/partition_check.inc)
35781 create_command
35782 SHOW CREATE TABLE t1;
35783 Table   Create Table
35784 t1      CREATE TABLE `t1` (
35785   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
35786   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
35787   `f_char1` char(20) DEFAULT NULL,
35788   `f_char2` char(20) DEFAULT NULL,
35789   `f_charbig` varchar(1000) DEFAULT NULL,
35790   PRIMARY KEY (`f_int2`,`f_int1`)
35791 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
35792 /*!50100 PARTITION BY HASH (f_int1)
35793 PARTITIONS 2 */
35795 # check prerequisites-1 success:    1
35796 # check COUNT(*) success:    1
35797 # check MIN/MAX(f_int1) success:    1
35798 # check MIN/MAX(f_int2) success:    1
35799 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35800 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
35801 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
35802 WHERE f_int1 IN (2,3);
35803 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
35804 # check prerequisites-3 success:    1
35805 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
35806 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35807 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
35808 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
35809 WHERE f_int1 IN (2,3);
35810 DELETE FROM t1 WHERE f_charbig = 'delete me';
35811 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35812 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
35813 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
35814 WHERE f_int1 IN (2,3);
35815 DELETE FROM t1 WHERE f_charbig = 'delete me';
35816 # check read via f_int1 success: 1
35817 # check read via f_int2 success: 1
35818         
35819 # check multiple-1 success:     1
35820 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
35821         
35822 # check multiple-2 success:     1
35823 INSERT INTO t1 SELECT * FROM t0_template
35824 WHERE MOD(f_int1,3) = 0;
35825         
35826 # check multiple-3 success:     1
35827 UPDATE t1 SET f_int1 = f_int1 + @max_row
35828 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
35829 AND @max_row_div2 + @max_row_div4;
35830         
35831 # check multiple-4 success:     1
35832 DELETE FROM t1
35833 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
35834 AND @max_row_div2 + @max_row_div4 + @max_row;
35835         
35836 # check multiple-5 success:     1
35837 SELECT COUNT(*) INTO @try_count FROM t0_template
35838 WHERE MOD(f_int1,3) = 0
35839 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35840 SELECT COUNT(*) INTO @clash_count
35841 FROM t1 INNER JOIN t0_template USING(f_int1)
35842 WHERE MOD(f_int1,3) = 0
35843 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35844 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
35845 INSERT INTO t1
35846 SET f_int1 = @cur_value , f_int2 = @cur_value,
35847 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
35848 f_charbig = '#SINGLE#';
35849         
35850 # check single-1 success:       1
35851 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
35852 INSERT INTO t1
35853 SET f_int1 = @cur_value , f_int2 = @cur_value,
35854 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
35855 f_charbig = '#SINGLE#';
35856         
35857 # check single-2 success:       1
35858 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
35859 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
35860 UPDATE t1 SET f_int1 = @cur_value2
35861 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
35862         
35863 # check single-3 success:       1
35864 SET @cur_value1= -1;
35865 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
35866 UPDATE t1 SET f_int1 = @cur_value1
35867 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
35868         
35869 # check single-4 success:       1
35870 SELECT MAX(f_int1) INTO @cur_value FROM t1;
35871 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
35872         
35873 # check single-5 success:       1
35874 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
35875         
35876 # check single-6 success:       1
35877 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
35878 Warnings:
35879 Warning 1264    Out of range value for column 'f_int1' at row 1
35880 Warning 1264    Out of range value for column 'f_int2' at row 1
35881         
35882 # check single-7 success:       1
35883 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
35884 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
35885 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
35886 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
35887 f_charbig = '#NULL#';
35888 INSERT INTO t1
35889 SET f_int1 = NULL , f_int2 = -@max_row,
35890 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
35891 f_charbig = '#NULL#';
35892 ERROR 23000: Column 'f_int1' cannot be null
35893 # check null success:    1
35894 DELETE FROM t1
35895 WHERE f_int1 = 0 AND f_int2 = 0
35896 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
35897 AND f_charbig = '#NULL#';
35898 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35899 SELECT f_int1, f_int1, '', '', 'was inserted'
35900    FROM t0_template source_tab
35901 WHERE MOD(f_int1,3) = 0
35902 AND f_int1 BETWEEN @max_row_div2 AND @max_row
35903 ON DUPLICATE KEY
35904 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
35905 f_int2 = 2 * @max_row + source_tab.f_int1,
35906 f_charbig = 'was updated';
35907         
35908 # check unique-1-a success:     1
35909         
35910 # check unique-1-b success:     1
35911 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35912 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
35913 f_int2 = CAST(f_char1 AS SIGNED INT),
35914 f_charbig = CONCAT('===',f_char1,'===')
35915 WHERE f_charbig = 'was updated';
35916 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35917 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
35918    FROM t0_template source_tab
35919 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
35920         
35921 # check replace success:        1
35922 DELETE FROM t1
35923 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
35924 DELETE FROM t1
35925 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
35926 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
35927 UPDATE t1 SET f_int2 = f_int1,
35928 f_char1 = CAST(f_int1 AS CHAR),
35929 f_char2 = CAST(f_int1 AS CHAR),
35930 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
35931 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
35932 SET AUTOCOMMIT= 0;
35933 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35934 SELECT f_int1, f_int1, '', '', 'was inserted'
35935 FROM t0_template source_tab
35936 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35937         
35938 # check transactions-1 success:         1
35939 COMMIT WORK;
35940         
35941 # check transactions-2 success:         1
35942 ROLLBACK WORK;
35943         
35944 # check transactions-3 success:         1
35945 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35946 COMMIT WORK;
35947 ROLLBACK WORK;
35948         
35949 # check transactions-4 success:         1
35950 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35951 SELECT f_int1, f_int1, '', '', 'was inserted'
35952 FROM t0_template source_tab
35953 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35954         
35955 # check transactions-5 success:         1
35956 ROLLBACK WORK;
35957         
35958 # check transactions-6 success:         1
35959 # INFO: Storage engine used for t1 seems to be transactional.
35960 COMMIT;
35961         
35962 # check transactions-7 success:         1
35963 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35964 COMMIT WORK;
35965 SET @@session.sql_mode = 'traditional';
35966 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
35967 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
35968 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
35969 '', '', 'was inserted' FROM t0_template
35970 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
35971 ERROR 22012: Division by 0
35972 COMMIT;
35973         
35974 # check transactions-8 success:         1
35975 # INFO: Storage engine used for t1 seems to be able to revert
35976 #       changes made by the failing statement.
35977 SET @@session.sql_mode = '';
35978 SET AUTOCOMMIT= 1;
35979 DELETE FROM t1 WHERE f_charbig = 'was inserted';
35980 COMMIT WORK;
35981 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
35982         
35983 # check special-1 success:      1
35984 UPDATE t1 SET f_charbig = '';
35985         
35986 # check special-2 success:      1
35987 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
35988 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
35989 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
35990 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35991 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
35992 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
35993 'just inserted' FROM t0_template
35994 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
35995 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
35996 BEGIN
35997 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
35998 f_charbig = 'updated by trigger'
35999       WHERE f_int1 = new.f_int1;
36000 END|
36001 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36002 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
36003 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36004         
36005 # check trigger-1 success:      1
36006 DROP TRIGGER trg_1;
36007 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36008 f_int2 = CAST(f_char1 AS SIGNED INT),
36009 f_charbig = 'just inserted'
36010    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36011 DELETE FROM t0_aux
36012 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36013 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36014 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36015 'just inserted' FROM t0_template
36016 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36017 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
36018 BEGIN
36019 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36020 f_charbig = 'updated by trigger'
36021       WHERE f_int1 = new.f_int1;
36022 END|
36023 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36024 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
36025 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36026         
36027 # check trigger-2 success:      1
36028 DROP TRIGGER trg_1;
36029 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36030 f_int2 = CAST(f_char1 AS SIGNED INT),
36031 f_charbig = 'just inserted'
36032    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36033 DELETE FROM t0_aux
36034 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36035 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36036 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36037 'just inserted' FROM t0_template
36038 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36039 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
36040 BEGIN
36041 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36042 f_charbig = 'updated by trigger'
36043       WHERE f_int1 = new.f_int1;
36044 END|
36045 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36046 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36047         
36048 # check trigger-3 success:      1
36049 DROP TRIGGER trg_1;
36050 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36051 f_int2 = CAST(f_char1 AS SIGNED INT),
36052 f_charbig = 'just inserted'
36053    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36054 DELETE FROM t0_aux
36055 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36056 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36057 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36058 'just inserted' FROM t0_template
36059 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36060 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
36061 BEGIN
36062 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36063 f_charbig = 'updated by trigger'
36064       WHERE f_int1 = - old.f_int1;
36065 END|
36066 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36067 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36068         
36069 # check trigger-4 success:      1
36070 DROP TRIGGER trg_1;
36071 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36072 f_int2 = CAST(f_char1 AS SIGNED INT),
36073 f_charbig = 'just inserted'
36074    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36075 DELETE FROM t0_aux
36076 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36077 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36078 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36079 'just inserted' FROM t0_template
36080 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36081 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
36082 BEGIN
36083 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36084 f_charbig = 'updated by trigger'
36085       WHERE f_int1 = new.f_int1;
36086 END|
36087 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36088 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36089         
36090 # check trigger-5 success:      1
36091 DROP TRIGGER trg_1;
36092 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36093 f_int2 = CAST(f_char1 AS SIGNED INT),
36094 f_charbig = 'just inserted'
36095    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36096 DELETE FROM t0_aux
36097 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36098 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36099 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36100 'just inserted' FROM t0_template
36101 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36102 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
36103 BEGIN
36104 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36105 f_charbig = 'updated by trigger'
36106       WHERE f_int1 = - old.f_int1;
36107 END|
36108 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36109 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36110         
36111 # check trigger-6 success:      1
36112 DROP TRIGGER trg_1;
36113 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36114 f_int2 = CAST(f_char1 AS SIGNED INT),
36115 f_charbig = 'just inserted'
36116    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36117 DELETE FROM t0_aux
36118 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36119 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36120 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36121 'just inserted' FROM t0_template
36122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36123 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
36124 BEGIN
36125 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36126 f_charbig = 'updated by trigger'
36127       WHERE f_int1 = - old.f_int1;
36128 END|
36129 DELETE FROM t0_aux
36130 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36131         
36132 # check trigger-7 success:      1
36133 DROP TRIGGER trg_1;
36134 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36135 f_int2 = CAST(f_char1 AS SIGNED INT),
36136 f_charbig = 'just inserted'
36137    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36138 DELETE FROM t0_aux
36139 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36140 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36141 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36142 'just inserted' FROM t0_template
36143 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36144 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
36145 BEGIN
36146 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36147 f_charbig = 'updated by trigger'
36148       WHERE f_int1 = - old.f_int1;
36149 END|
36150 DELETE FROM t0_aux
36151 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36152         
36153 # check trigger-8 success:      1
36154 DROP TRIGGER trg_1;
36155 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36156 f_int2 = CAST(f_char1 AS SIGNED INT),
36157 f_charbig = 'just inserted'
36158    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36159 DELETE FROM t0_aux
36160 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36161 DELETE FROM t1
36162 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36163 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
36164 BEGIN
36165 SET new.f_int1 = old.f_int1 + @max_row,
36166 new.f_int2 = old.f_int2 - @max_row,
36167 new.f_charbig = '####updated per update trigger####';
36168 END|
36169 UPDATE t1
36170 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
36171 f_charbig = '####updated per update statement itself####';
36172         
36173 # check trigger-9 success:      1
36174 DROP TRIGGER trg_2;
36175 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36176 f_int2 = CAST(f_char1 AS SIGNED INT),
36177 f_charbig = CONCAT('===',f_char1,'===');
36178 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
36179 BEGIN
36180 SET new.f_int1 = new.f_int1 + @max_row,
36181 new.f_int2 = new.f_int2 - @max_row,
36182 new.f_charbig = '####updated per update trigger####';
36183 END|
36184 UPDATE t1
36185 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
36186 f_charbig = '####updated per update statement itself####';
36187         
36188 # check trigger-10 success:     1
36189 DROP TRIGGER trg_2;
36190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36191 f_int2 = CAST(f_char1 AS SIGNED INT),
36192 f_charbig = CONCAT('===',f_char1,'===');
36193 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
36194 BEGIN
36195 SET new.f_int1 = @my_max1 + @counter,
36196 new.f_int2 = @my_min2 - @counter,
36197 new.f_charbig = '####updated per insert trigger####';
36198 SET @counter = @counter + 1;
36199 END|
36200 SET @counter = 1;
36201 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
36202 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36203 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
36204 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
36205 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
36206 ORDER BY f_int1;
36207 DROP TRIGGER trg_3;
36208         
36209 # check trigger-11 success:     1
36210 DELETE FROM t1
36211 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
36212 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
36213 AND f_charbig = '####updated per insert trigger####';
36214 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
36215 BEGIN
36216 SET new.f_int1 = @my_max1 + @counter,
36217 new.f_int2 = @my_min2 - @counter,
36218 new.f_charbig = '####updated per insert trigger####';
36219 SET @counter = @counter + 1;
36220 END|
36221 SET @counter = 1;
36222 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
36223 INSERT INTO t1 (f_char1, f_char2, f_charbig)
36224 SELECT CAST(f_int1 AS CHAR),
36225 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
36226 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
36227 ORDER BY f_int1;
36228 DROP TRIGGER trg_3;
36229         
36230 # check trigger-12 success:     1
36231 DELETE FROM t1
36232 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
36233 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
36234 AND f_charbig = '####updated per insert trigger####';
36235 ANALYZE  TABLE t1;
36236 Table   Op      Msg_type        Msg_text
36237 test.t1 analyze status  OK
36238 CHECK    TABLE t1 EXTENDED;
36239 Table   Op      Msg_type        Msg_text
36240 test.t1 check   status  OK
36241 CHECKSUM TABLE t1 EXTENDED;
36242 Table   Checksum
36243 test.t1 <some_value>
36244 OPTIMIZE TABLE t1;
36245 Table   Op      Msg_type        Msg_text
36246 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
36247 test.t1 optimize        status  OK
36248 # check layout success:    1
36249 REPAIR   TABLE t1 EXTENDED;
36250 Table   Op      Msg_type        Msg_text
36251 test.t1 repair  note    The storage engine for the table doesn't support repair
36252 # check layout success:    1
36253 TRUNCATE t1;
36254         
36255 # check TRUNCATE success:       1
36256 # check layout success:    1
36257 # End usability test (inc/partition_check.inc)
36258 DROP TABLE t1;
36259 CREATE TABLE t1 (
36260 f_int1 INTEGER,
36261 f_int2 INTEGER,
36262 f_char1 CHAR(20),
36263 f_char2 CHAR(20),
36264 f_charbig VARCHAR(1000)
36265 , PRIMARY KEY (f_int2,f_int1)
36267 PARTITION BY KEY(f_int1) PARTITIONS 5;
36268 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36269 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
36270 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
36271 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
36272 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36273 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
36274 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
36275 # Start usability test (inc/partition_check.inc)
36276 create_command
36277 SHOW CREATE TABLE t1;
36278 Table   Create Table
36279 t1      CREATE TABLE `t1` (
36280   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
36281   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
36282   `f_char1` char(20) DEFAULT NULL,
36283   `f_char2` char(20) DEFAULT NULL,
36284   `f_charbig` varchar(1000) DEFAULT NULL,
36285   PRIMARY KEY (`f_int2`,`f_int1`)
36286 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
36287 /*!50100 PARTITION BY KEY (f_int1)
36288 PARTITIONS 5 */
36290 # check prerequisites-1 success:    1
36291 # check COUNT(*) success:    1
36292 # check MIN/MAX(f_int1) success:    1
36293 # check MIN/MAX(f_int2) success:    1
36294 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36295 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
36296 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
36297 WHERE f_int1 IN (2,3);
36298 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
36299 # check prerequisites-3 success:    1
36300 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
36301 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36302 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
36303 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
36304 WHERE f_int1 IN (2,3);
36305 DELETE FROM t1 WHERE f_charbig = 'delete me';
36306 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36307 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
36308 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
36309 WHERE f_int1 IN (2,3);
36310 DELETE FROM t1 WHERE f_charbig = 'delete me';
36311 # check read via f_int1 success: 1
36312 # check read via f_int2 success: 1
36313         
36314 # check multiple-1 success:     1
36315 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
36316         
36317 # check multiple-2 success:     1
36318 INSERT INTO t1 SELECT * FROM t0_template
36319 WHERE MOD(f_int1,3) = 0;
36320         
36321 # check multiple-3 success:     1
36322 UPDATE t1 SET f_int1 = f_int1 + @max_row
36323 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
36324 AND @max_row_div2 + @max_row_div4;
36325         
36326 # check multiple-4 success:     1
36327 DELETE FROM t1
36328 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
36329 AND @max_row_div2 + @max_row_div4 + @max_row;
36330         
36331 # check multiple-5 success:     1
36332 SELECT COUNT(*) INTO @try_count FROM t0_template
36333 WHERE MOD(f_int1,3) = 0
36334 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36335 SELECT COUNT(*) INTO @clash_count
36336 FROM t1 INNER JOIN t0_template USING(f_int1)
36337 WHERE MOD(f_int1,3) = 0
36338 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36339 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
36340 INSERT INTO t1
36341 SET f_int1 = @cur_value , f_int2 = @cur_value,
36342 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
36343 f_charbig = '#SINGLE#';
36344         
36345 # check single-1 success:       1
36346 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
36347 INSERT INTO t1
36348 SET f_int1 = @cur_value , f_int2 = @cur_value,
36349 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
36350 f_charbig = '#SINGLE#';
36351         
36352 # check single-2 success:       1
36353 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
36354 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
36355 UPDATE t1 SET f_int1 = @cur_value2
36356 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
36357         
36358 # check single-3 success:       1
36359 SET @cur_value1= -1;
36360 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
36361 UPDATE t1 SET f_int1 = @cur_value1
36362 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
36363         
36364 # check single-4 success:       1
36365 SELECT MAX(f_int1) INTO @cur_value FROM t1;
36366 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
36367         
36368 # check single-5 success:       1
36369 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
36370         
36371 # check single-6 success:       1
36372 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
36373 Warnings:
36374 Warning 1264    Out of range value for column 'f_int1' at row 1
36375 Warning 1264    Out of range value for column 'f_int2' at row 1
36376         
36377 # check single-7 success:       1
36378 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
36379 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
36380 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
36381 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
36382 f_charbig = '#NULL#';
36383 INSERT INTO t1
36384 SET f_int1 = NULL , f_int2 = -@max_row,
36385 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
36386 f_charbig = '#NULL#';
36387 ERROR 23000: Column 'f_int1' cannot be null
36388 # check null success:    1
36389 DELETE FROM t1
36390 WHERE f_int1 = 0 AND f_int2 = 0
36391 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
36392 AND f_charbig = '#NULL#';
36393 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36394 SELECT f_int1, f_int1, '', '', 'was inserted'
36395    FROM t0_template source_tab
36396 WHERE MOD(f_int1,3) = 0
36397 AND f_int1 BETWEEN @max_row_div2 AND @max_row
36398 ON DUPLICATE KEY
36399 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
36400 f_int2 = 2 * @max_row + source_tab.f_int1,
36401 f_charbig = 'was updated';
36402         
36403 # check unique-1-a success:     1
36404         
36405 # check unique-1-b success:     1
36406 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36407 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36408 f_int2 = CAST(f_char1 AS SIGNED INT),
36409 f_charbig = CONCAT('===',f_char1,'===')
36410 WHERE f_charbig = 'was updated';
36411 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36412 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
36413    FROM t0_template source_tab
36414 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36415         
36416 # check replace success:        1
36417 DELETE FROM t1
36418 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
36419 DELETE FROM t1
36420 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
36421 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
36422 UPDATE t1 SET f_int2 = f_int1,
36423 f_char1 = CAST(f_int1 AS CHAR),
36424 f_char2 = CAST(f_int1 AS CHAR),
36425 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
36426 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
36427 SET AUTOCOMMIT= 0;
36428 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36429 SELECT f_int1, f_int1, '', '', 'was inserted'
36430 FROM t0_template source_tab
36431 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36432         
36433 # check transactions-1 success:         1
36434 COMMIT WORK;
36435         
36436 # check transactions-2 success:         1
36437 ROLLBACK WORK;
36438         
36439 # check transactions-3 success:         1
36440 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36441 COMMIT WORK;
36442 ROLLBACK WORK;
36443         
36444 # check transactions-4 success:         1
36445 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36446 SELECT f_int1, f_int1, '', '', 'was inserted'
36447 FROM t0_template source_tab
36448 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36449         
36450 # check transactions-5 success:         1
36451 ROLLBACK WORK;
36452         
36453 # check transactions-6 success:         1
36454 # INFO: Storage engine used for t1 seems to be transactional.
36455 COMMIT;
36456         
36457 # check transactions-7 success:         1
36458 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36459 COMMIT WORK;
36460 SET @@session.sql_mode = 'traditional';
36461 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
36462 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36463 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
36464 '', '', 'was inserted' FROM t0_template
36465 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36466 ERROR 22012: Division by 0
36467 COMMIT;
36468         
36469 # check transactions-8 success:         1
36470 # INFO: Storage engine used for t1 seems to be able to revert
36471 #       changes made by the failing statement.
36472 SET @@session.sql_mode = '';
36473 SET AUTOCOMMIT= 1;
36474 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36475 COMMIT WORK;
36476 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
36477         
36478 # check special-1 success:      1
36479 UPDATE t1 SET f_charbig = '';
36480         
36481 # check special-2 success:      1
36482 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
36483 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36484 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
36485 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36486 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36487 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36488 'just inserted' FROM t0_template
36489 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36490 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
36491 BEGIN
36492 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36493 f_charbig = 'updated by trigger'
36494       WHERE f_int1 = new.f_int1;
36495 END|
36496 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36497 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
36498 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36499         
36500 # check trigger-1 success:      1
36501 DROP TRIGGER trg_1;
36502 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36503 f_int2 = CAST(f_char1 AS SIGNED INT),
36504 f_charbig = 'just inserted'
36505    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36506 DELETE FROM t0_aux
36507 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36508 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36509 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36510 'just inserted' FROM t0_template
36511 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36512 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
36513 BEGIN
36514 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36515 f_charbig = 'updated by trigger'
36516       WHERE f_int1 = new.f_int1;
36517 END|
36518 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36519 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
36520 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36521         
36522 # check trigger-2 success:      1
36523 DROP TRIGGER trg_1;
36524 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36525 f_int2 = CAST(f_char1 AS SIGNED INT),
36526 f_charbig = 'just inserted'
36527    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36528 DELETE FROM t0_aux
36529 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36530 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36531 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36532 'just inserted' FROM t0_template
36533 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36534 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
36535 BEGIN
36536 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36537 f_charbig = 'updated by trigger'
36538       WHERE f_int1 = new.f_int1;
36539 END|
36540 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36541 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36542         
36543 # check trigger-3 success:      1
36544 DROP TRIGGER trg_1;
36545 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36546 f_int2 = CAST(f_char1 AS SIGNED INT),
36547 f_charbig = 'just inserted'
36548    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36549 DELETE FROM t0_aux
36550 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36551 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36552 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36553 'just inserted' FROM t0_template
36554 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36555 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
36556 BEGIN
36557 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36558 f_charbig = 'updated by trigger'
36559       WHERE f_int1 = - old.f_int1;
36560 END|
36561 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36562 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36563         
36564 # check trigger-4 success:      1
36565 DROP TRIGGER trg_1;
36566 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36567 f_int2 = CAST(f_char1 AS SIGNED INT),
36568 f_charbig = 'just inserted'
36569    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36570 DELETE FROM t0_aux
36571 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36572 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36573 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36574 'just inserted' FROM t0_template
36575 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36576 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
36577 BEGIN
36578 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36579 f_charbig = 'updated by trigger'
36580       WHERE f_int1 = new.f_int1;
36581 END|
36582 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36583 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36584         
36585 # check trigger-5 success:      1
36586 DROP TRIGGER trg_1;
36587 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36588 f_int2 = CAST(f_char1 AS SIGNED INT),
36589 f_charbig = 'just inserted'
36590    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36591 DELETE FROM t0_aux
36592 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36593 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36594 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36595 'just inserted' FROM t0_template
36596 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36597 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
36598 BEGIN
36599 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36600 f_charbig = 'updated by trigger'
36601       WHERE f_int1 = - old.f_int1;
36602 END|
36603 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
36604 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36605         
36606 # check trigger-6 success:      1
36607 DROP TRIGGER trg_1;
36608 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36609 f_int2 = CAST(f_char1 AS SIGNED INT),
36610 f_charbig = 'just inserted'
36611    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36612 DELETE FROM t0_aux
36613 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36614 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36615 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36616 'just inserted' FROM t0_template
36617 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36618 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
36619 BEGIN
36620 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36621 f_charbig = 'updated by trigger'
36622       WHERE f_int1 = - old.f_int1;
36623 END|
36624 DELETE FROM t0_aux
36625 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36626         
36627 # check trigger-7 success:      1
36628 DROP TRIGGER trg_1;
36629 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36630 f_int2 = CAST(f_char1 AS SIGNED INT),
36631 f_charbig = 'just inserted'
36632    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36633 DELETE FROM t0_aux
36634 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36635 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36636 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36637 'just inserted' FROM t0_template
36638 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36639 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
36640 BEGIN
36641 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
36642 f_charbig = 'updated by trigger'
36643       WHERE f_int1 = - old.f_int1;
36644 END|
36645 DELETE FROM t0_aux
36646 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
36647         
36648 # check trigger-8 success:      1
36649 DROP TRIGGER trg_1;
36650 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36651 f_int2 = CAST(f_char1 AS SIGNED INT),
36652 f_charbig = 'just inserted'
36653    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
36654 DELETE FROM t0_aux
36655 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36656 DELETE FROM t1
36657 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36658 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
36659 BEGIN
36660 SET new.f_int1 = old.f_int1 + @max_row,
36661 new.f_int2 = old.f_int2 - @max_row,
36662 new.f_charbig = '####updated per update trigger####';
36663 END|
36664 UPDATE t1
36665 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
36666 f_charbig = '####updated per update statement itself####';
36667         
36668 # check trigger-9 success:      1
36669 DROP TRIGGER trg_2;
36670 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36671 f_int2 = CAST(f_char1 AS SIGNED INT),
36672 f_charbig = CONCAT('===',f_char1,'===');
36673 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
36674 BEGIN
36675 SET new.f_int1 = new.f_int1 + @max_row,
36676 new.f_int2 = new.f_int2 - @max_row,
36677 new.f_charbig = '####updated per update trigger####';
36678 END|
36679 UPDATE t1
36680 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
36681 f_charbig = '####updated per update statement itself####';
36682         
36683 # check trigger-10 success:     1
36684 DROP TRIGGER trg_2;
36685 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36686 f_int2 = CAST(f_char1 AS SIGNED INT),
36687 f_charbig = CONCAT('===',f_char1,'===');
36688 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
36689 BEGIN
36690 SET new.f_int1 = @my_max1 + @counter,
36691 new.f_int2 = @my_min2 - @counter,
36692 new.f_charbig = '####updated per insert trigger####';
36693 SET @counter = @counter + 1;
36694 END|
36695 SET @counter = 1;
36696 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
36697 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36698 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
36699 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
36700 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
36701 ORDER BY f_int1;
36702 DROP TRIGGER trg_3;
36703         
36704 # check trigger-11 success:     1
36705 DELETE FROM t1
36706 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
36707 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
36708 AND f_charbig = '####updated per insert trigger####';
36709 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
36710 BEGIN
36711 SET new.f_int1 = @my_max1 + @counter,
36712 new.f_int2 = @my_min2 - @counter,
36713 new.f_charbig = '####updated per insert trigger####';
36714 SET @counter = @counter + 1;
36715 END|
36716 SET @counter = 1;
36717 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
36718 INSERT INTO t1 (f_char1, f_char2, f_charbig)
36719 SELECT CAST(f_int1 AS CHAR),
36720 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
36721 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
36722 ORDER BY f_int1;
36723 DROP TRIGGER trg_3;
36724         
36725 # check trigger-12 success:     1
36726 DELETE FROM t1
36727 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
36728 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
36729 AND f_charbig = '####updated per insert trigger####';
36730 ANALYZE  TABLE t1;
36731 Table   Op      Msg_type        Msg_text
36732 test.t1 analyze status  OK
36733 CHECK    TABLE t1 EXTENDED;
36734 Table   Op      Msg_type        Msg_text
36735 test.t1 check   status  OK
36736 CHECKSUM TABLE t1 EXTENDED;
36737 Table   Checksum
36738 test.t1 <some_value>
36739 OPTIMIZE TABLE t1;
36740 Table   Op      Msg_type        Msg_text
36741 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
36742 test.t1 optimize        status  OK
36743 # check layout success:    1
36744 REPAIR   TABLE t1 EXTENDED;
36745 Table   Op      Msg_type        Msg_text
36746 test.t1 repair  note    The storage engine for the table doesn't support repair
36747 # check layout success:    1
36748 TRUNCATE t1;
36749         
36750 # check TRUNCATE success:       1
36751 # check layout success:    1
36752 # End usability test (inc/partition_check.inc)
36753 DROP TABLE t1;
36754 CREATE TABLE t1 (
36755 f_int1 INTEGER,
36756 f_int2 INTEGER,
36757 f_char1 CHAR(20),
36758 f_char2 CHAR(20),
36759 f_charbig VARCHAR(1000)
36760 , PRIMARY KEY (f_int2,f_int1)
36762 PARTITION BY LIST(MOD(f_int1,4))
36763 (PARTITION part_3 VALUES IN (-3),
36764 PARTITION part_2 VALUES IN (-2),
36765 PARTITION part_1 VALUES IN (-1),
36766 PARTITION part_N VALUES IN (NULL),
36767 PARTITION part0 VALUES IN (0),
36768 PARTITION part1 VALUES IN (1),
36769 PARTITION part2 VALUES IN (2),
36770 PARTITION part3 VALUES IN (3));
36771 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36772 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
36773 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
36774 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
36775 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36776 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
36777 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
36778 # Start usability test (inc/partition_check.inc)
36779 create_command
36780 SHOW CREATE TABLE t1;
36781 Table   Create Table
36782 t1      CREATE TABLE `t1` (
36783   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
36784   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
36785   `f_char1` char(20) DEFAULT NULL,
36786   `f_char2` char(20) DEFAULT NULL,
36787   `f_charbig` varchar(1000) DEFAULT NULL,
36788   PRIMARY KEY (`f_int2`,`f_int1`)
36789 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
36790 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
36791 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
36792  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
36793  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
36794  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
36795  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
36796  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
36797  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
36798  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
36800 # check prerequisites-1 success:    1
36801 # check COUNT(*) success:    1
36802 # check MIN/MAX(f_int1) success:    1
36803 # check MIN/MAX(f_int2) success:    1
36804 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36805 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
36806 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
36807 WHERE f_int1 IN (2,3);
36808 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
36809 # check prerequisites-3 success:    1
36810 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
36811 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36812 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
36813 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
36814 WHERE f_int1 IN (2,3);
36815 DELETE FROM t1 WHERE f_charbig = 'delete me';
36816 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36817 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
36818 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
36819 WHERE f_int1 IN (2,3);
36820 DELETE FROM t1 WHERE f_charbig = 'delete me';
36821 # check read via f_int1 success: 1
36822 # check read via f_int2 success: 1
36823         
36824 # check multiple-1 success:     1
36825 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
36826         
36827 # check multiple-2 success:     1
36828 INSERT INTO t1 SELECT * FROM t0_template
36829 WHERE MOD(f_int1,3) = 0;
36830         
36831 # check multiple-3 success:     1
36832 UPDATE t1 SET f_int1 = f_int1 + @max_row
36833 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
36834 AND @max_row_div2 + @max_row_div4;
36835         
36836 # check multiple-4 success:     1
36837 DELETE FROM t1
36838 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
36839 AND @max_row_div2 + @max_row_div4 + @max_row;
36840         
36841 # check multiple-5 success:     1
36842 SELECT COUNT(*) INTO @try_count FROM t0_template
36843 WHERE MOD(f_int1,3) = 0
36844 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36845 SELECT COUNT(*) INTO @clash_count
36846 FROM t1 INNER JOIN t0_template USING(f_int1)
36847 WHERE MOD(f_int1,3) = 0
36848 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36849 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
36850 INSERT INTO t1
36851 SET f_int1 = @cur_value , f_int2 = @cur_value,
36852 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
36853 f_charbig = '#SINGLE#';
36854         
36855 # check single-1 success:       1
36856 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
36857 INSERT INTO t1
36858 SET f_int1 = @cur_value , f_int2 = @cur_value,
36859 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
36860 f_charbig = '#SINGLE#';
36861         
36862 # check single-2 success:       1
36863 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
36864 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
36865 UPDATE t1 SET f_int1 = @cur_value2
36866 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
36867         
36868 # check single-3 success:       1
36869 SET @cur_value1= -1;
36870 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
36871 UPDATE t1 SET f_int1 = @cur_value1
36872 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
36873         
36874 # check single-4 success:       1
36875 SELECT MAX(f_int1) INTO @cur_value FROM t1;
36876 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
36877         
36878 # check single-5 success:       1
36879 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
36880         
36881 # check single-6 success:       1
36882 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
36883 Warnings:
36884 Warning 1264    Out of range value for column 'f_int1' at row 1
36885 Warning 1264    Out of range value for column 'f_int2' at row 1
36886         
36887 # check single-7 success:       1
36888 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
36889 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
36890 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
36891 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
36892 f_charbig = '#NULL#';
36893 INSERT INTO t1
36894 SET f_int1 = NULL , f_int2 = -@max_row,
36895 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
36896 f_charbig = '#NULL#';
36897 ERROR 23000: Column 'f_int1' cannot be null
36898 # check null success:    1
36899 DELETE FROM t1
36900 WHERE f_int1 = 0 AND f_int2 = 0
36901 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
36902 AND f_charbig = '#NULL#';
36903 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36904 SELECT f_int1, f_int1, '', '', 'was inserted'
36905    FROM t0_template source_tab
36906 WHERE MOD(f_int1,3) = 0
36907 AND f_int1 BETWEEN @max_row_div2 AND @max_row
36908 ON DUPLICATE KEY
36909 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
36910 f_int2 = 2 * @max_row + source_tab.f_int1,
36911 f_charbig = 'was updated';
36912         
36913 # check unique-1-a success:     1
36914         
36915 # check unique-1-b success:     1
36916 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36917 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
36918 f_int2 = CAST(f_char1 AS SIGNED INT),
36919 f_charbig = CONCAT('===',f_char1,'===')
36920 WHERE f_charbig = 'was updated';
36921 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36922 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
36923    FROM t0_template source_tab
36924 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
36925         
36926 # check replace success:        1
36927 DELETE FROM t1
36928 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
36929 DELETE FROM t1
36930 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
36931 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
36932 UPDATE t1 SET f_int2 = f_int1,
36933 f_char1 = CAST(f_int1 AS CHAR),
36934 f_char2 = CAST(f_int1 AS CHAR),
36935 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
36936 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
36937 SET AUTOCOMMIT= 0;
36938 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36939 SELECT f_int1, f_int1, '', '', 'was inserted'
36940 FROM t0_template source_tab
36941 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36942         
36943 # check transactions-1 success:         1
36944 COMMIT WORK;
36945         
36946 # check transactions-2 success:         1
36947 ROLLBACK WORK;
36948         
36949 # check transactions-3 success:         1
36950 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36951 COMMIT WORK;
36952 ROLLBACK WORK;
36953         
36954 # check transactions-4 success:         1
36955 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36956 SELECT f_int1, f_int1, '', '', 'was inserted'
36957 FROM t0_template source_tab
36958 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36959         
36960 # check transactions-5 success:         1
36961 ROLLBACK WORK;
36962         
36963 # check transactions-6 success:         1
36964 # INFO: Storage engine used for t1 seems to be transactional.
36965 COMMIT;
36966         
36967 # check transactions-7 success:         1
36968 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36969 COMMIT WORK;
36970 SET @@session.sql_mode = 'traditional';
36971 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
36972 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
36973 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
36974 '', '', 'was inserted' FROM t0_template
36975 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
36976 ERROR 22012: Division by 0
36977 COMMIT;
36978         
36979 # check transactions-8 success:         1
36980 # INFO: Storage engine used for t1 seems to be able to revert
36981 #       changes made by the failing statement.
36982 SET @@session.sql_mode = '';
36983 SET AUTOCOMMIT= 1;
36984 DELETE FROM t1 WHERE f_charbig = 'was inserted';
36985 COMMIT WORK;
36986 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
36987         
36988 # check special-1 success:      1
36989 UPDATE t1 SET f_charbig = '';
36990         
36991 # check special-2 success:      1
36992 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
36993 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
36994 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
36995 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
36996 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
36997 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
36998 'just inserted' FROM t0_template
36999 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37000 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
37001 BEGIN
37002 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37003 f_charbig = 'updated by trigger'
37004       WHERE f_int1 = new.f_int1;
37005 END|
37006 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37007 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
37008 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37009         
37010 # check trigger-1 success:      1
37011 DROP TRIGGER trg_1;
37012 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37013 f_int2 = CAST(f_char1 AS SIGNED INT),
37014 f_charbig = 'just inserted'
37015    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37016 DELETE FROM t0_aux
37017 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37018 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37019 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37020 'just inserted' FROM t0_template
37021 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37022 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
37023 BEGIN
37024 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37025 f_charbig = 'updated by trigger'
37026       WHERE f_int1 = new.f_int1;
37027 END|
37028 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37029 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
37030 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37031         
37032 # check trigger-2 success:      1
37033 DROP TRIGGER trg_1;
37034 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37035 f_int2 = CAST(f_char1 AS SIGNED INT),
37036 f_charbig = 'just inserted'
37037    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37038 DELETE FROM t0_aux
37039 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37040 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37041 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37042 'just inserted' FROM t0_template
37043 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37044 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
37045 BEGIN
37046 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37047 f_charbig = 'updated by trigger'
37048       WHERE f_int1 = new.f_int1;
37049 END|
37050 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37051 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37052         
37053 # check trigger-3 success:      1
37054 DROP TRIGGER trg_1;
37055 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37056 f_int2 = CAST(f_char1 AS SIGNED INT),
37057 f_charbig = 'just inserted'
37058    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37059 DELETE FROM t0_aux
37060 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37061 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37062 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37063 'just inserted' FROM t0_template
37064 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37065 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
37066 BEGIN
37067 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37068 f_charbig = 'updated by trigger'
37069       WHERE f_int1 = - old.f_int1;
37070 END|
37071 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37072 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37073         
37074 # check trigger-4 success:      1
37075 DROP TRIGGER trg_1;
37076 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37077 f_int2 = CAST(f_char1 AS SIGNED INT),
37078 f_charbig = 'just inserted'
37079    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37080 DELETE FROM t0_aux
37081 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37082 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37083 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37084 'just inserted' FROM t0_template
37085 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37086 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
37087 BEGIN
37088 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37089 f_charbig = 'updated by trigger'
37090       WHERE f_int1 = new.f_int1;
37091 END|
37092 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37093 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37094         
37095 # check trigger-5 success:      1
37096 DROP TRIGGER trg_1;
37097 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37098 f_int2 = CAST(f_char1 AS SIGNED INT),
37099 f_charbig = 'just inserted'
37100    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37101 DELETE FROM t0_aux
37102 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37103 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37104 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37105 'just inserted' FROM t0_template
37106 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37107 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
37108 BEGIN
37109 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37110 f_charbig = 'updated by trigger'
37111       WHERE f_int1 = - old.f_int1;
37112 END|
37113 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37114 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37115         
37116 # check trigger-6 success:      1
37117 DROP TRIGGER trg_1;
37118 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37119 f_int2 = CAST(f_char1 AS SIGNED INT),
37120 f_charbig = 'just inserted'
37121    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37122 DELETE FROM t0_aux
37123 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37124 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37125 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37126 'just inserted' FROM t0_template
37127 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37128 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
37129 BEGIN
37130 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37131 f_charbig = 'updated by trigger'
37132       WHERE f_int1 = - old.f_int1;
37133 END|
37134 DELETE FROM t0_aux
37135 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37136         
37137 # check trigger-7 success:      1
37138 DROP TRIGGER trg_1;
37139 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37140 f_int2 = CAST(f_char1 AS SIGNED INT),
37141 f_charbig = 'just inserted'
37142    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37143 DELETE FROM t0_aux
37144 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37145 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37146 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37147 'just inserted' FROM t0_template
37148 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37149 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
37150 BEGIN
37151 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37152 f_charbig = 'updated by trigger'
37153       WHERE f_int1 = - old.f_int1;
37154 END|
37155 DELETE FROM t0_aux
37156 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37157         
37158 # check trigger-8 success:      1
37159 DROP TRIGGER trg_1;
37160 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37161 f_int2 = CAST(f_char1 AS SIGNED INT),
37162 f_charbig = 'just inserted'
37163    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37164 DELETE FROM t0_aux
37165 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37166 DELETE FROM t1
37167 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37168 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
37169 BEGIN
37170 SET new.f_int1 = old.f_int1 + @max_row,
37171 new.f_int2 = old.f_int2 - @max_row,
37172 new.f_charbig = '####updated per update trigger####';
37173 END|
37174 UPDATE t1
37175 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
37176 f_charbig = '####updated per update statement itself####';
37177         
37178 # check trigger-9 success:      1
37179 DROP TRIGGER trg_2;
37180 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37181 f_int2 = CAST(f_char1 AS SIGNED INT),
37182 f_charbig = CONCAT('===',f_char1,'===');
37183 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
37184 BEGIN
37185 SET new.f_int1 = new.f_int1 + @max_row,
37186 new.f_int2 = new.f_int2 - @max_row,
37187 new.f_charbig = '####updated per update trigger####';
37188 END|
37189 UPDATE t1
37190 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
37191 f_charbig = '####updated per update statement itself####';
37192         
37193 # check trigger-10 success:     1
37194 DROP TRIGGER trg_2;
37195 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37196 f_int2 = CAST(f_char1 AS SIGNED INT),
37197 f_charbig = CONCAT('===',f_char1,'===');
37198 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
37199 BEGIN
37200 SET new.f_int1 = @my_max1 + @counter,
37201 new.f_int2 = @my_min2 - @counter,
37202 new.f_charbig = '####updated per insert trigger####';
37203 SET @counter = @counter + 1;
37204 END|
37205 SET @counter = 1;
37206 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
37207 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37208 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
37209 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
37210 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
37211 ORDER BY f_int1;
37212 DROP TRIGGER trg_3;
37213         
37214 # check trigger-11 success:     1
37215 DELETE FROM t1
37216 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
37217 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
37218 AND f_charbig = '####updated per insert trigger####';
37219 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
37220 BEGIN
37221 SET new.f_int1 = @my_max1 + @counter,
37222 new.f_int2 = @my_min2 - @counter,
37223 new.f_charbig = '####updated per insert trigger####';
37224 SET @counter = @counter + 1;
37225 END|
37226 SET @counter = 1;
37227 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
37228 INSERT INTO t1 (f_char1, f_char2, f_charbig)
37229 SELECT CAST(f_int1 AS CHAR),
37230 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
37231 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
37232 ORDER BY f_int1;
37233 DROP TRIGGER trg_3;
37234         
37235 # check trigger-12 success:     1
37236 DELETE FROM t1
37237 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
37238 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
37239 AND f_charbig = '####updated per insert trigger####';
37240 ANALYZE  TABLE t1;
37241 Table   Op      Msg_type        Msg_text
37242 test.t1 analyze status  OK
37243 CHECK    TABLE t1 EXTENDED;
37244 Table   Op      Msg_type        Msg_text
37245 test.t1 check   status  OK
37246 CHECKSUM TABLE t1 EXTENDED;
37247 Table   Checksum
37248 test.t1 <some_value>
37249 OPTIMIZE TABLE t1;
37250 Table   Op      Msg_type        Msg_text
37251 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
37252 test.t1 optimize        status  OK
37253 # check layout success:    1
37254 REPAIR   TABLE t1 EXTENDED;
37255 Table   Op      Msg_type        Msg_text
37256 test.t1 repair  note    The storage engine for the table doesn't support repair
37257 # check layout success:    1
37258 TRUNCATE t1;
37259         
37260 # check TRUNCATE success:       1
37261 # check layout success:    1
37262 # End usability test (inc/partition_check.inc)
37263 DROP TABLE t1;
37264 CREATE TABLE t1 (
37265 f_int1 INTEGER,
37266 f_int2 INTEGER,
37267 f_char1 CHAR(20),
37268 f_char2 CHAR(20),
37269 f_charbig VARCHAR(1000)
37270 , PRIMARY KEY (f_int2,f_int1)
37272 PARTITION BY RANGE(f_int1)
37273 (PARTITION parta VALUES LESS THAN (0),
37274 PARTITION partb VALUES LESS THAN (5),
37275 PARTITION partc VALUES LESS THAN (10),
37276 PARTITION partd VALUES LESS THAN (10 + 5),
37277 PARTITION parte VALUES LESS THAN (20),
37278 PARTITION partf VALUES LESS THAN (2147483646));
37279 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
37280 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
37281 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
37282 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
37283 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
37284 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
37285 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
37286 # Start usability test (inc/partition_check.inc)
37287 create_command
37288 SHOW CREATE TABLE t1;
37289 Table   Create Table
37290 t1      CREATE TABLE `t1` (
37291   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
37292   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
37293   `f_char1` char(20) DEFAULT NULL,
37294   `f_char2` char(20) DEFAULT NULL,
37295   `f_charbig` varchar(1000) DEFAULT NULL,
37296   PRIMARY KEY (`f_int2`,`f_int1`)
37297 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
37298 /*!50100 PARTITION BY RANGE (f_int1)
37299 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
37300  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
37301  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
37302  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
37303  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
37304  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
37306 # check prerequisites-1 success:    1
37307 # check COUNT(*) success:    1
37308 # check MIN/MAX(f_int1) success:    1
37309 # check MIN/MAX(f_int2) success:    1
37310 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37311 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
37312 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
37313 WHERE f_int1 IN (2,3);
37314 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
37315 # check prerequisites-3 success:    1
37316 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
37317 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37318 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
37319 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
37320 WHERE f_int1 IN (2,3);
37321 DELETE FROM t1 WHERE f_charbig = 'delete me';
37322 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37323 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
37324 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
37325 WHERE f_int1 IN (2,3);
37326 DELETE FROM t1 WHERE f_charbig = 'delete me';
37327 # check read via f_int1 success: 1
37328 # check read via f_int2 success: 1
37329         
37330 # check multiple-1 success:     1
37331 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
37332         
37333 # check multiple-2 success:     1
37334 INSERT INTO t1 SELECT * FROM t0_template
37335 WHERE MOD(f_int1,3) = 0;
37336         
37337 # check multiple-3 success:     1
37338 UPDATE t1 SET f_int1 = f_int1 + @max_row
37339 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
37340 AND @max_row_div2 + @max_row_div4;
37341         
37342 # check multiple-4 success:     1
37343 DELETE FROM t1
37344 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
37345 AND @max_row_div2 + @max_row_div4 + @max_row;
37346         
37347 # check multiple-5 success:     1
37348 SELECT COUNT(*) INTO @try_count FROM t0_template
37349 WHERE MOD(f_int1,3) = 0
37350 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37351 SELECT COUNT(*) INTO @clash_count
37352 FROM t1 INNER JOIN t0_template USING(f_int1)
37353 WHERE MOD(f_int1,3) = 0
37354 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37355 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
37356 INSERT INTO t1
37357 SET f_int1 = @cur_value , f_int2 = @cur_value,
37358 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
37359 f_charbig = '#SINGLE#';
37360         
37361 # check single-1 success:       1
37362 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
37363 INSERT INTO t1
37364 SET f_int1 = @cur_value , f_int2 = @cur_value,
37365 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
37366 f_charbig = '#SINGLE#';
37367         
37368 # check single-2 success:       1
37369 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
37370 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
37371 UPDATE t1 SET f_int1 = @cur_value2
37372 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
37373         
37374 # check single-3 success:       1
37375 SET @cur_value1= -1;
37376 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
37377 UPDATE t1 SET f_int1 = @cur_value1
37378 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
37379         
37380 # check single-4 success:       1
37381 SELECT MAX(f_int1) INTO @cur_value FROM t1;
37382 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
37383         
37384 # check single-5 success:       1
37385 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
37386         
37387 # check single-6 success:       1
37388 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
37389 Warnings:
37390 Warning 1264    Out of range value for column 'f_int1' at row 1
37391 Warning 1264    Out of range value for column 'f_int2' at row 1
37392         
37393 # check single-7 success:       1
37394 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
37395 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
37396 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
37397 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
37398 f_charbig = '#NULL#';
37399 INSERT INTO t1
37400 SET f_int1 = NULL , f_int2 = -@max_row,
37401 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
37402 f_charbig = '#NULL#';
37403 ERROR 23000: Column 'f_int1' cannot be null
37404 # check null success:    1
37405 DELETE FROM t1
37406 WHERE f_int1 = 0 AND f_int2 = 0
37407 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
37408 AND f_charbig = '#NULL#';
37409 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37410 SELECT f_int1, f_int1, '', '', 'was inserted'
37411    FROM t0_template source_tab
37412 WHERE MOD(f_int1,3) = 0
37413 AND f_int1 BETWEEN @max_row_div2 AND @max_row
37414 ON DUPLICATE KEY
37415 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
37416 f_int2 = 2 * @max_row + source_tab.f_int1,
37417 f_charbig = 'was updated';
37418         
37419 # check unique-1-a success:     1
37420         
37421 # check unique-1-b success:     1
37422 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37423 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37424 f_int2 = CAST(f_char1 AS SIGNED INT),
37425 f_charbig = CONCAT('===',f_char1,'===')
37426 WHERE f_charbig = 'was updated';
37427 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37428 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
37429    FROM t0_template source_tab
37430 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37431         
37432 # check replace success:        1
37433 DELETE FROM t1
37434 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
37435 DELETE FROM t1
37436 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
37437 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
37438 UPDATE t1 SET f_int2 = f_int1,
37439 f_char1 = CAST(f_int1 AS CHAR),
37440 f_char2 = CAST(f_int1 AS CHAR),
37441 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
37442 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
37443 SET AUTOCOMMIT= 0;
37444 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37445 SELECT f_int1, f_int1, '', '', 'was inserted'
37446 FROM t0_template source_tab
37447 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37448         
37449 # check transactions-1 success:         1
37450 COMMIT WORK;
37451         
37452 # check transactions-2 success:         1
37453 ROLLBACK WORK;
37454         
37455 # check transactions-3 success:         1
37456 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37457 COMMIT WORK;
37458 ROLLBACK WORK;
37459         
37460 # check transactions-4 success:         1
37461 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37462 SELECT f_int1, f_int1, '', '', 'was inserted'
37463 FROM t0_template source_tab
37464 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37465         
37466 # check transactions-5 success:         1
37467 ROLLBACK WORK;
37468         
37469 # check transactions-6 success:         1
37470 # INFO: Storage engine used for t1 seems to be transactional.
37471 COMMIT;
37472         
37473 # check transactions-7 success:         1
37474 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37475 COMMIT WORK;
37476 SET @@session.sql_mode = 'traditional';
37477 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
37478 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37479 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
37480 '', '', 'was inserted' FROM t0_template
37481 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37482 ERROR 22012: Division by 0
37483 COMMIT;
37484         
37485 # check transactions-8 success:         1
37486 # INFO: Storage engine used for t1 seems to be able to revert
37487 #       changes made by the failing statement.
37488 SET @@session.sql_mode = '';
37489 SET AUTOCOMMIT= 1;
37490 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37491 COMMIT WORK;
37492 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
37493         
37494 # check special-1 success:      1
37495 UPDATE t1 SET f_charbig = '';
37496         
37497 # check special-2 success:      1
37498 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
37499 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
37500 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
37501 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37502 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37503 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37504 'just inserted' FROM t0_template
37505 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37506 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
37507 BEGIN
37508 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37509 f_charbig = 'updated by trigger'
37510       WHERE f_int1 = new.f_int1;
37511 END|
37512 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37513 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
37514 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37515         
37516 # check trigger-1 success:      1
37517 DROP TRIGGER trg_1;
37518 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37519 f_int2 = CAST(f_char1 AS SIGNED INT),
37520 f_charbig = 'just inserted'
37521    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37522 DELETE FROM t0_aux
37523 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37524 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37525 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37526 'just inserted' FROM t0_template
37527 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37528 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
37529 BEGIN
37530 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37531 f_charbig = 'updated by trigger'
37532       WHERE f_int1 = new.f_int1;
37533 END|
37534 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37535 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
37536 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37537         
37538 # check trigger-2 success:      1
37539 DROP TRIGGER trg_1;
37540 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37541 f_int2 = CAST(f_char1 AS SIGNED INT),
37542 f_charbig = 'just inserted'
37543    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37544 DELETE FROM t0_aux
37545 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37546 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37547 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37548 'just inserted' FROM t0_template
37549 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37550 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
37551 BEGIN
37552 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37553 f_charbig = 'updated by trigger'
37554       WHERE f_int1 = new.f_int1;
37555 END|
37556 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37557 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37558         
37559 # check trigger-3 success:      1
37560 DROP TRIGGER trg_1;
37561 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37562 f_int2 = CAST(f_char1 AS SIGNED INT),
37563 f_charbig = 'just inserted'
37564    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37565 DELETE FROM t0_aux
37566 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37567 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37568 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37569 'just inserted' FROM t0_template
37570 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37571 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
37572 BEGIN
37573 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37574 f_charbig = 'updated by trigger'
37575       WHERE f_int1 = - old.f_int1;
37576 END|
37577 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37578 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37579         
37580 # check trigger-4 success:      1
37581 DROP TRIGGER trg_1;
37582 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37583 f_int2 = CAST(f_char1 AS SIGNED INT),
37584 f_charbig = 'just inserted'
37585    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37586 DELETE FROM t0_aux
37587 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37588 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37589 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37590 'just inserted' FROM t0_template
37591 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37592 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
37593 BEGIN
37594 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37595 f_charbig = 'updated by trigger'
37596       WHERE f_int1 = new.f_int1;
37597 END|
37598 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37599 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37600         
37601 # check trigger-5 success:      1
37602 DROP TRIGGER trg_1;
37603 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37604 f_int2 = CAST(f_char1 AS SIGNED INT),
37605 f_charbig = 'just inserted'
37606    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37607 DELETE FROM t0_aux
37608 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37610 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37611 'just inserted' FROM t0_template
37612 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37613 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
37614 BEGIN
37615 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37616 f_charbig = 'updated by trigger'
37617       WHERE f_int1 = - old.f_int1;
37618 END|
37619 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
37620 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37621         
37622 # check trigger-6 success:      1
37623 DROP TRIGGER trg_1;
37624 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37625 f_int2 = CAST(f_char1 AS SIGNED INT),
37626 f_charbig = 'just inserted'
37627    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37628 DELETE FROM t0_aux
37629 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37630 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37631 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37632 'just inserted' FROM t0_template
37633 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37634 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
37635 BEGIN
37636 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37637 f_charbig = 'updated by trigger'
37638       WHERE f_int1 = - old.f_int1;
37639 END|
37640 DELETE FROM t0_aux
37641 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37642         
37643 # check trigger-7 success:      1
37644 DROP TRIGGER trg_1;
37645 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37646 f_int2 = CAST(f_char1 AS SIGNED INT),
37647 f_charbig = 'just inserted'
37648    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37649 DELETE FROM t0_aux
37650 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
37652 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
37653 'just inserted' FROM t0_template
37654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37655 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
37656 BEGIN
37657 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
37658 f_charbig = 'updated by trigger'
37659       WHERE f_int1 = - old.f_int1;
37660 END|
37661 DELETE FROM t0_aux
37662 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
37663         
37664 # check trigger-8 success:      1
37665 DROP TRIGGER trg_1;
37666 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37667 f_int2 = CAST(f_char1 AS SIGNED INT),
37668 f_charbig = 'just inserted'
37669    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
37670 DELETE FROM t0_aux
37671 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37672 DELETE FROM t1
37673 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
37674 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
37675 BEGIN
37676 SET new.f_int1 = old.f_int1 + @max_row,
37677 new.f_int2 = old.f_int2 - @max_row,
37678 new.f_charbig = '####updated per update trigger####';
37679 END|
37680 UPDATE t1
37681 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
37682 f_charbig = '####updated per update statement itself####';
37683         
37684 # check trigger-9 success:      1
37685 DROP TRIGGER trg_2;
37686 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37687 f_int2 = CAST(f_char1 AS SIGNED INT),
37688 f_charbig = CONCAT('===',f_char1,'===');
37689 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
37690 BEGIN
37691 SET new.f_int1 = new.f_int1 + @max_row,
37692 new.f_int2 = new.f_int2 - @max_row,
37693 new.f_charbig = '####updated per update trigger####';
37694 END|
37695 UPDATE t1
37696 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
37697 f_charbig = '####updated per update statement itself####';
37698         
37699 # check trigger-10 success:     1
37700 DROP TRIGGER trg_2;
37701 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37702 f_int2 = CAST(f_char1 AS SIGNED INT),
37703 f_charbig = CONCAT('===',f_char1,'===');
37704 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
37705 BEGIN
37706 SET new.f_int1 = @my_max1 + @counter,
37707 new.f_int2 = @my_min2 - @counter,
37708 new.f_charbig = '####updated per insert trigger####';
37709 SET @counter = @counter + 1;
37710 END|
37711 SET @counter = 1;
37712 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
37713 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37714 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
37715 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
37716 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
37717 ORDER BY f_int1;
37718 DROP TRIGGER trg_3;
37719         
37720 # check trigger-11 success:     1
37721 DELETE FROM t1
37722 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
37723 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
37724 AND f_charbig = '####updated per insert trigger####';
37725 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
37726 BEGIN
37727 SET new.f_int1 = @my_max1 + @counter,
37728 new.f_int2 = @my_min2 - @counter,
37729 new.f_charbig = '####updated per insert trigger####';
37730 SET @counter = @counter + 1;
37731 END|
37732 SET @counter = 1;
37733 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
37734 INSERT INTO t1 (f_char1, f_char2, f_charbig)
37735 SELECT CAST(f_int1 AS CHAR),
37736 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
37737 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
37738 ORDER BY f_int1;
37739 DROP TRIGGER trg_3;
37740         
37741 # check trigger-12 success:     1
37742 DELETE FROM t1
37743 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
37744 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
37745 AND f_charbig = '####updated per insert trigger####';
37746 ANALYZE  TABLE t1;
37747 Table   Op      Msg_type        Msg_text
37748 test.t1 analyze status  OK
37749 CHECK    TABLE t1 EXTENDED;
37750 Table   Op      Msg_type        Msg_text
37751 test.t1 check   status  OK
37752 CHECKSUM TABLE t1 EXTENDED;
37753 Table   Checksum
37754 test.t1 <some_value>
37755 OPTIMIZE TABLE t1;
37756 Table   Op      Msg_type        Msg_text
37757 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
37758 test.t1 optimize        status  OK
37759 # check layout success:    1
37760 REPAIR   TABLE t1 EXTENDED;
37761 Table   Op      Msg_type        Msg_text
37762 test.t1 repair  note    The storage engine for the table doesn't support repair
37763 # check layout success:    1
37764 TRUNCATE t1;
37765         
37766 # check TRUNCATE success:       1
37767 # check layout success:    1
37768 # End usability test (inc/partition_check.inc)
37769 DROP TABLE t1;
37770 CREATE TABLE t1 (
37771 f_int1 INTEGER,
37772 f_int2 INTEGER,
37773 f_char1 CHAR(20),
37774 f_char2 CHAR(20),
37775 f_charbig VARCHAR(1000)
37776 , PRIMARY KEY (f_int2,f_int1)
37778 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
37779 (PARTITION parta VALUES LESS THAN (0),
37780 PARTITION partb VALUES LESS THAN (5),
37781 PARTITION partc VALUES LESS THAN (10),
37782 PARTITION partd VALUES LESS THAN (2147483646));
37783 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
37784 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
37785 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
37786 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
37787 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
37788 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
37789 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
37790 # Start usability test (inc/partition_check.inc)
37791 create_command
37792 SHOW CREATE TABLE t1;
37793 Table   Create Table
37794 t1      CREATE TABLE `t1` (
37795   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
37796   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
37797   `f_char1` char(20) DEFAULT NULL,
37798   `f_char2` char(20) DEFAULT NULL,
37799   `f_charbig` varchar(1000) DEFAULT NULL,
37800   PRIMARY KEY (`f_int2`,`f_int1`)
37801 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
37802 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
37803 SUBPARTITION BY HASH (f_int1)
37804 SUBPARTITIONS 2
37805 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
37806  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
37807  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
37808  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
37810 # check prerequisites-1 success:    1
37811 # check COUNT(*) success:    1
37812 # check MIN/MAX(f_int1) success:    1
37813 # check MIN/MAX(f_int2) success:    1
37814 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37815 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
37816 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
37817 WHERE f_int1 IN (2,3);
37818 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
37819 # check prerequisites-3 success:    1
37820 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
37821 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37822 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
37823 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
37824 WHERE f_int1 IN (2,3);
37825 DELETE FROM t1 WHERE f_charbig = 'delete me';
37826 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37827 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
37828 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
37829 WHERE f_int1 IN (2,3);
37830 DELETE FROM t1 WHERE f_charbig = 'delete me';
37831 # check read via f_int1 success: 1
37832 # check read via f_int2 success: 1
37833         
37834 # check multiple-1 success:     1
37835 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
37836         
37837 # check multiple-2 success:     1
37838 INSERT INTO t1 SELECT * FROM t0_template
37839 WHERE MOD(f_int1,3) = 0;
37840         
37841 # check multiple-3 success:     1
37842 UPDATE t1 SET f_int1 = f_int1 + @max_row
37843 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
37844 AND @max_row_div2 + @max_row_div4;
37845         
37846 # check multiple-4 success:     1
37847 DELETE FROM t1
37848 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
37849 AND @max_row_div2 + @max_row_div4 + @max_row;
37850         
37851 # check multiple-5 success:     1
37852 SELECT COUNT(*) INTO @try_count FROM t0_template
37853 WHERE MOD(f_int1,3) = 0
37854 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37855 SELECT COUNT(*) INTO @clash_count
37856 FROM t1 INNER JOIN t0_template USING(f_int1)
37857 WHERE MOD(f_int1,3) = 0
37858 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37859 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
37860 INSERT INTO t1
37861 SET f_int1 = @cur_value , f_int2 = @cur_value,
37862 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
37863 f_charbig = '#SINGLE#';
37864         
37865 # check single-1 success:       1
37866 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
37867 INSERT INTO t1
37868 SET f_int1 = @cur_value , f_int2 = @cur_value,
37869 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
37870 f_charbig = '#SINGLE#';
37871         
37872 # check single-2 success:       1
37873 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
37874 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
37875 UPDATE t1 SET f_int1 = @cur_value2
37876 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
37877         
37878 # check single-3 success:       1
37879 SET @cur_value1= -1;
37880 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
37881 UPDATE t1 SET f_int1 = @cur_value1
37882 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
37883         
37884 # check single-4 success:       1
37885 SELECT MAX(f_int1) INTO @cur_value FROM t1;
37886 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
37887         
37888 # check single-5 success:       1
37889 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
37890         
37891 # check single-6 success:       1
37892 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
37893 Warnings:
37894 Warning 1264    Out of range value for column 'f_int1' at row 1
37895 Warning 1264    Out of range value for column 'f_int2' at row 1
37896         
37897 # check single-7 success:       1
37898 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
37899 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
37900 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
37901 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
37902 f_charbig = '#NULL#';
37903 INSERT INTO t1
37904 SET f_int1 = NULL , f_int2 = -@max_row,
37905 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
37906 f_charbig = '#NULL#';
37907 ERROR 23000: Column 'f_int1' cannot be null
37908 # check null success:    1
37909 DELETE FROM t1
37910 WHERE f_int1 = 0 AND f_int2 = 0
37911 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
37912 AND f_charbig = '#NULL#';
37913 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37914 SELECT f_int1, f_int1, '', '', 'was inserted'
37915    FROM t0_template source_tab
37916 WHERE MOD(f_int1,3) = 0
37917 AND f_int1 BETWEEN @max_row_div2 AND @max_row
37918 ON DUPLICATE KEY
37919 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
37920 f_int2 = 2 * @max_row + source_tab.f_int1,
37921 f_charbig = 'was updated';
37922         
37923 # check unique-1-a success:     1
37924         
37925 # check unique-1-b success:     1
37926 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37927 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
37928 f_int2 = CAST(f_char1 AS SIGNED INT),
37929 f_charbig = CONCAT('===',f_char1,'===')
37930 WHERE f_charbig = 'was updated';
37931 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37932 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
37933    FROM t0_template source_tab
37934 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
37935         
37936 # check replace success:        1
37937 DELETE FROM t1
37938 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
37939 DELETE FROM t1
37940 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
37941 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
37942 UPDATE t1 SET f_int2 = f_int1,
37943 f_char1 = CAST(f_int1 AS CHAR),
37944 f_char2 = CAST(f_int1 AS CHAR),
37945 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
37946 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
37947 SET AUTOCOMMIT= 0;
37948 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37949 SELECT f_int1, f_int1, '', '', 'was inserted'
37950 FROM t0_template source_tab
37951 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37952         
37953 # check transactions-1 success:         1
37954 COMMIT WORK;
37955         
37956 # check transactions-2 success:         1
37957 ROLLBACK WORK;
37958         
37959 # check transactions-3 success:         1
37960 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37961 COMMIT WORK;
37962 ROLLBACK WORK;
37963         
37964 # check transactions-4 success:         1
37965 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37966 SELECT f_int1, f_int1, '', '', 'was inserted'
37967 FROM t0_template source_tab
37968 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37969         
37970 # check transactions-5 success:         1
37971 ROLLBACK WORK;
37972         
37973 # check transactions-6 success:         1
37974 # INFO: Storage engine used for t1 seems to be transactional.
37975 COMMIT;
37976         
37977 # check transactions-7 success:         1
37978 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37979 COMMIT WORK;
37980 SET @@session.sql_mode = 'traditional';
37981 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
37982 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
37983 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
37984 '', '', 'was inserted' FROM t0_template
37985 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
37986 ERROR 22012: Division by 0
37987 COMMIT;
37988         
37989 # check transactions-8 success:         1
37990 # INFO: Storage engine used for t1 seems to be able to revert
37991 #       changes made by the failing statement.
37992 SET @@session.sql_mode = '';
37993 SET AUTOCOMMIT= 1;
37994 DELETE FROM t1 WHERE f_charbig = 'was inserted';
37995 COMMIT WORK;
37996 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
37997         
37998 # check special-1 success:      1
37999 UPDATE t1 SET f_charbig = '';
38000         
38001 # check special-2 success:      1
38002 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
38003 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38004 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
38005 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38006 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38007 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38008 'just inserted' FROM t0_template
38009 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38010 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
38011 BEGIN
38012 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38013 f_charbig = 'updated by trigger'
38014       WHERE f_int1 = new.f_int1;
38015 END|
38016 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38017 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
38018 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38019         
38020 # check trigger-1 success:      1
38021 DROP TRIGGER trg_1;
38022 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38023 f_int2 = CAST(f_char1 AS SIGNED INT),
38024 f_charbig = 'just inserted'
38025    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38026 DELETE FROM t0_aux
38027 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38028 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38029 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38030 'just inserted' FROM t0_template
38031 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38032 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
38033 BEGIN
38034 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38035 f_charbig = 'updated by trigger'
38036       WHERE f_int1 = new.f_int1;
38037 END|
38038 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38039 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
38040 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38041         
38042 # check trigger-2 success:      1
38043 DROP TRIGGER trg_1;
38044 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38045 f_int2 = CAST(f_char1 AS SIGNED INT),
38046 f_charbig = 'just inserted'
38047    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38048 DELETE FROM t0_aux
38049 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38050 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38051 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38052 'just inserted' FROM t0_template
38053 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38054 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
38055 BEGIN
38056 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38057 f_charbig = 'updated by trigger'
38058       WHERE f_int1 = new.f_int1;
38059 END|
38060 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38061 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38062         
38063 # check trigger-3 success:      1
38064 DROP TRIGGER trg_1;
38065 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38066 f_int2 = CAST(f_char1 AS SIGNED INT),
38067 f_charbig = 'just inserted'
38068    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38069 DELETE FROM t0_aux
38070 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38071 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38072 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38073 'just inserted' FROM t0_template
38074 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38075 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
38076 BEGIN
38077 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38078 f_charbig = 'updated by trigger'
38079       WHERE f_int1 = - old.f_int1;
38080 END|
38081 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38082 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38083         
38084 # check trigger-4 success:      1
38085 DROP TRIGGER trg_1;
38086 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38087 f_int2 = CAST(f_char1 AS SIGNED INT),
38088 f_charbig = 'just inserted'
38089    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38090 DELETE FROM t0_aux
38091 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38092 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38093 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38094 'just inserted' FROM t0_template
38095 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38096 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
38097 BEGIN
38098 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38099 f_charbig = 'updated by trigger'
38100       WHERE f_int1 = new.f_int1;
38101 END|
38102 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38103 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38104         
38105 # check trigger-5 success:      1
38106 DROP TRIGGER trg_1;
38107 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38108 f_int2 = CAST(f_char1 AS SIGNED INT),
38109 f_charbig = 'just inserted'
38110    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38111 DELETE FROM t0_aux
38112 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38113 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38114 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38115 'just inserted' FROM t0_template
38116 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38117 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
38118 BEGIN
38119 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38120 f_charbig = 'updated by trigger'
38121       WHERE f_int1 = - old.f_int1;
38122 END|
38123 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38124 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38125         
38126 # check trigger-6 success:      1
38127 DROP TRIGGER trg_1;
38128 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38129 f_int2 = CAST(f_char1 AS SIGNED INT),
38130 f_charbig = 'just inserted'
38131    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38132 DELETE FROM t0_aux
38133 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38134 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38135 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38136 'just inserted' FROM t0_template
38137 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38138 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
38139 BEGIN
38140 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38141 f_charbig = 'updated by trigger'
38142       WHERE f_int1 = - old.f_int1;
38143 END|
38144 DELETE FROM t0_aux
38145 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38146         
38147 # check trigger-7 success:      1
38148 DROP TRIGGER trg_1;
38149 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38150 f_int2 = CAST(f_char1 AS SIGNED INT),
38151 f_charbig = 'just inserted'
38152    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38153 DELETE FROM t0_aux
38154 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38155 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38156 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38157 'just inserted' FROM t0_template
38158 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38159 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
38160 BEGIN
38161 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38162 f_charbig = 'updated by trigger'
38163       WHERE f_int1 = - old.f_int1;
38164 END|
38165 DELETE FROM t0_aux
38166 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38167         
38168 # check trigger-8 success:      1
38169 DROP TRIGGER trg_1;
38170 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38171 f_int2 = CAST(f_char1 AS SIGNED INT),
38172 f_charbig = 'just inserted'
38173    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38174 DELETE FROM t0_aux
38175 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38176 DELETE FROM t1
38177 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38178 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
38179 BEGIN
38180 SET new.f_int1 = old.f_int1 + @max_row,
38181 new.f_int2 = old.f_int2 - @max_row,
38182 new.f_charbig = '####updated per update trigger####';
38183 END|
38184 UPDATE t1
38185 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
38186 f_charbig = '####updated per update statement itself####';
38187         
38188 # check trigger-9 success:      1
38189 DROP TRIGGER trg_2;
38190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38191 f_int2 = CAST(f_char1 AS SIGNED INT),
38192 f_charbig = CONCAT('===',f_char1,'===');
38193 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
38194 BEGIN
38195 SET new.f_int1 = new.f_int1 + @max_row,
38196 new.f_int2 = new.f_int2 - @max_row,
38197 new.f_charbig = '####updated per update trigger####';
38198 END|
38199 UPDATE t1
38200 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
38201 f_charbig = '####updated per update statement itself####';
38202         
38203 # check trigger-10 success:     1
38204 DROP TRIGGER trg_2;
38205 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38206 f_int2 = CAST(f_char1 AS SIGNED INT),
38207 f_charbig = CONCAT('===',f_char1,'===');
38208 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
38209 BEGIN
38210 SET new.f_int1 = @my_max1 + @counter,
38211 new.f_int2 = @my_min2 - @counter,
38212 new.f_charbig = '####updated per insert trigger####';
38213 SET @counter = @counter + 1;
38214 END|
38215 SET @counter = 1;
38216 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
38217 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38218 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
38219 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
38220 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
38221 ORDER BY f_int1;
38222 DROP TRIGGER trg_3;
38223         
38224 # check trigger-11 success:     1
38225 DELETE FROM t1
38226 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
38227 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
38228 AND f_charbig = '####updated per insert trigger####';
38229 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
38230 BEGIN
38231 SET new.f_int1 = @my_max1 + @counter,
38232 new.f_int2 = @my_min2 - @counter,
38233 new.f_charbig = '####updated per insert trigger####';
38234 SET @counter = @counter + 1;
38235 END|
38236 SET @counter = 1;
38237 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
38238 INSERT INTO t1 (f_char1, f_char2, f_charbig)
38239 SELECT CAST(f_int1 AS CHAR),
38240 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
38241 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
38242 ORDER BY f_int1;
38243 DROP TRIGGER trg_3;
38244         
38245 # check trigger-12 success:     1
38246 DELETE FROM t1
38247 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
38248 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
38249 AND f_charbig = '####updated per insert trigger####';
38250 ANALYZE  TABLE t1;
38251 Table   Op      Msg_type        Msg_text
38252 test.t1 analyze status  OK
38253 CHECK    TABLE t1 EXTENDED;
38254 Table   Op      Msg_type        Msg_text
38255 test.t1 check   status  OK
38256 CHECKSUM TABLE t1 EXTENDED;
38257 Table   Checksum
38258 test.t1 <some_value>
38259 OPTIMIZE TABLE t1;
38260 Table   Op      Msg_type        Msg_text
38261 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
38262 test.t1 optimize        status  OK
38263 # check layout success:    1
38264 REPAIR   TABLE t1 EXTENDED;
38265 Table   Op      Msg_type        Msg_text
38266 test.t1 repair  note    The storage engine for the table doesn't support repair
38267 # check layout success:    1
38268 TRUNCATE t1;
38269         
38270 # check TRUNCATE success:       1
38271 # check layout success:    1
38272 # End usability test (inc/partition_check.inc)
38273 DROP TABLE t1;
38274 CREATE TABLE t1 (
38275 f_int1 INTEGER,
38276 f_int2 INTEGER,
38277 f_char1 CHAR(20),
38278 f_char2 CHAR(20),
38279 f_charbig VARCHAR(1000)
38280 , PRIMARY KEY (f_int2,f_int1)
38282 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
38283 (PARTITION part1 VALUES LESS THAN (0)
38284 (SUBPARTITION subpart11, SUBPARTITION subpart12),
38285 PARTITION part2 VALUES LESS THAN (5)
38286 (SUBPARTITION subpart21, SUBPARTITION subpart22),
38287 PARTITION part3 VALUES LESS THAN (10)
38288 (SUBPARTITION subpart31, SUBPARTITION subpart32),
38289 PARTITION part4 VALUES LESS THAN (2147483646)
38290 (SUBPARTITION subpart41, SUBPARTITION subpart42));
38291 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38292 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
38293 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
38294 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
38295 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38296 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
38297 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
38298 # Start usability test (inc/partition_check.inc)
38299 create_command
38300 SHOW CREATE TABLE t1;
38301 Table   Create Table
38302 t1      CREATE TABLE `t1` (
38303   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
38304   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
38305   `f_char1` char(20) DEFAULT NULL,
38306   `f_char2` char(20) DEFAULT NULL,
38307   `f_charbig` varchar(1000) DEFAULT NULL,
38308   PRIMARY KEY (`f_int2`,`f_int1`)
38309 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
38310 /*!50100 PARTITION BY RANGE (f_int1)
38311 SUBPARTITION BY KEY (f_int1)
38312 (PARTITION part1 VALUES LESS THAN (0)
38313  (SUBPARTITION subpart11 ENGINE = InnoDB,
38314   SUBPARTITION subpart12 ENGINE = InnoDB),
38315  PARTITION part2 VALUES LESS THAN (5)
38316  (SUBPARTITION subpart21 ENGINE = InnoDB,
38317   SUBPARTITION subpart22 ENGINE = InnoDB),
38318  PARTITION part3 VALUES LESS THAN (10)
38319  (SUBPARTITION subpart31 ENGINE = InnoDB,
38320   SUBPARTITION subpart32 ENGINE = InnoDB),
38321  PARTITION part4 VALUES LESS THAN (2147483646)
38322  (SUBPARTITION subpart41 ENGINE = InnoDB,
38323   SUBPARTITION subpart42 ENGINE = InnoDB)) */
38325 # check prerequisites-1 success:    1
38326 # check COUNT(*) success:    1
38327 # check MIN/MAX(f_int1) success:    1
38328 # check MIN/MAX(f_int2) success:    1
38329 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38330 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
38331 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
38332 WHERE f_int1 IN (2,3);
38333 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
38334 # check prerequisites-3 success:    1
38335 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
38336 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38337 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
38338 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
38339 WHERE f_int1 IN (2,3);
38340 DELETE FROM t1 WHERE f_charbig = 'delete me';
38341 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38342 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
38343 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
38344 WHERE f_int1 IN (2,3);
38345 DELETE FROM t1 WHERE f_charbig = 'delete me';
38346 # check read via f_int1 success: 1
38347 # check read via f_int2 success: 1
38348         
38349 # check multiple-1 success:     1
38350 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
38351         
38352 # check multiple-2 success:     1
38353 INSERT INTO t1 SELECT * FROM t0_template
38354 WHERE MOD(f_int1,3) = 0;
38355         
38356 # check multiple-3 success:     1
38357 UPDATE t1 SET f_int1 = f_int1 + @max_row
38358 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
38359 AND @max_row_div2 + @max_row_div4;
38360         
38361 # check multiple-4 success:     1
38362 DELETE FROM t1
38363 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
38364 AND @max_row_div2 + @max_row_div4 + @max_row;
38365         
38366 # check multiple-5 success:     1
38367 SELECT COUNT(*) INTO @try_count FROM t0_template
38368 WHERE MOD(f_int1,3) = 0
38369 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38370 SELECT COUNT(*) INTO @clash_count
38371 FROM t1 INNER JOIN t0_template USING(f_int1)
38372 WHERE MOD(f_int1,3) = 0
38373 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38374 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
38375 INSERT INTO t1
38376 SET f_int1 = @cur_value , f_int2 = @cur_value,
38377 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
38378 f_charbig = '#SINGLE#';
38379         
38380 # check single-1 success:       1
38381 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
38382 INSERT INTO t1
38383 SET f_int1 = @cur_value , f_int2 = @cur_value,
38384 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
38385 f_charbig = '#SINGLE#';
38386         
38387 # check single-2 success:       1
38388 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
38389 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
38390 UPDATE t1 SET f_int1 = @cur_value2
38391 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
38392         
38393 # check single-3 success:       1
38394 SET @cur_value1= -1;
38395 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
38396 UPDATE t1 SET f_int1 = @cur_value1
38397 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
38398         
38399 # check single-4 success:       1
38400 SELECT MAX(f_int1) INTO @cur_value FROM t1;
38401 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
38402         
38403 # check single-5 success:       1
38404 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
38405         
38406 # check single-6 success:       1
38407 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
38408 Warnings:
38409 Warning 1264    Out of range value for column 'f_int1' at row 1
38410 Warning 1264    Out of range value for column 'f_int2' at row 1
38411         
38412 # check single-7 success:       1
38413 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
38414 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
38415 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
38416 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
38417 f_charbig = '#NULL#';
38418 INSERT INTO t1
38419 SET f_int1 = NULL , f_int2 = -@max_row,
38420 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
38421 f_charbig = '#NULL#';
38422 ERROR 23000: Column 'f_int1' cannot be null
38423 # check null success:    1
38424 DELETE FROM t1
38425 WHERE f_int1 = 0 AND f_int2 = 0
38426 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
38427 AND f_charbig = '#NULL#';
38428 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38429 SELECT f_int1, f_int1, '', '', 'was inserted'
38430    FROM t0_template source_tab
38431 WHERE MOD(f_int1,3) = 0
38432 AND f_int1 BETWEEN @max_row_div2 AND @max_row
38433 ON DUPLICATE KEY
38434 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
38435 f_int2 = 2 * @max_row + source_tab.f_int1,
38436 f_charbig = 'was updated';
38437         
38438 # check unique-1-a success:     1
38439         
38440 # check unique-1-b success:     1
38441 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38442 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38443 f_int2 = CAST(f_char1 AS SIGNED INT),
38444 f_charbig = CONCAT('===',f_char1,'===')
38445 WHERE f_charbig = 'was updated';
38446 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38447 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
38448    FROM t0_template source_tab
38449 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38450         
38451 # check replace success:        1
38452 DELETE FROM t1
38453 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
38454 DELETE FROM t1
38455 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
38456 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
38457 UPDATE t1 SET f_int2 = f_int1,
38458 f_char1 = CAST(f_int1 AS CHAR),
38459 f_char2 = CAST(f_int1 AS CHAR),
38460 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
38461 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
38462 SET AUTOCOMMIT= 0;
38463 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38464 SELECT f_int1, f_int1, '', '', 'was inserted'
38465 FROM t0_template source_tab
38466 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
38467         
38468 # check transactions-1 success:         1
38469 COMMIT WORK;
38470         
38471 # check transactions-2 success:         1
38472 ROLLBACK WORK;
38473         
38474 # check transactions-3 success:         1
38475 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38476 COMMIT WORK;
38477 ROLLBACK WORK;
38478         
38479 # check transactions-4 success:         1
38480 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38481 SELECT f_int1, f_int1, '', '', 'was inserted'
38482 FROM t0_template source_tab
38483 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
38484         
38485 # check transactions-5 success:         1
38486 ROLLBACK WORK;
38487         
38488 # check transactions-6 success:         1
38489 # INFO: Storage engine used for t1 seems to be transactional.
38490 COMMIT;
38491         
38492 # check transactions-7 success:         1
38493 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38494 COMMIT WORK;
38495 SET @@session.sql_mode = 'traditional';
38496 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
38497 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38498 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
38499 '', '', 'was inserted' FROM t0_template
38500 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
38501 ERROR 22012: Division by 0
38502 COMMIT;
38503         
38504 # check transactions-8 success:         1
38505 # INFO: Storage engine used for t1 seems to be able to revert
38506 #       changes made by the failing statement.
38507 SET @@session.sql_mode = '';
38508 SET AUTOCOMMIT= 1;
38509 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38510 COMMIT WORK;
38511 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
38512         
38513 # check special-1 success:      1
38514 UPDATE t1 SET f_charbig = '';
38515         
38516 # check special-2 success:      1
38517 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
38518 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38519 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
38520 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38523 'just inserted' FROM t0_template
38524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38525 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
38526 BEGIN
38527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38528 f_charbig = 'updated by trigger'
38529       WHERE f_int1 = new.f_int1;
38530 END|
38531 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38532 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
38533 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38534         
38535 # check trigger-1 success:      1
38536 DROP TRIGGER trg_1;
38537 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38538 f_int2 = CAST(f_char1 AS SIGNED INT),
38539 f_charbig = 'just inserted'
38540    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38541 DELETE FROM t0_aux
38542 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38543 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38544 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38545 'just inserted' FROM t0_template
38546 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38547 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
38548 BEGIN
38549 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38550 f_charbig = 'updated by trigger'
38551       WHERE f_int1 = new.f_int1;
38552 END|
38553 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38554 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
38555 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38556         
38557 # check trigger-2 success:      1
38558 DROP TRIGGER trg_1;
38559 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38560 f_int2 = CAST(f_char1 AS SIGNED INT),
38561 f_charbig = 'just inserted'
38562    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38563 DELETE FROM t0_aux
38564 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38565 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38566 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38567 'just inserted' FROM t0_template
38568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38569 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
38570 BEGIN
38571 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38572 f_charbig = 'updated by trigger'
38573       WHERE f_int1 = new.f_int1;
38574 END|
38575 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38576 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38577         
38578 # check trigger-3 success:      1
38579 DROP TRIGGER trg_1;
38580 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38581 f_int2 = CAST(f_char1 AS SIGNED INT),
38582 f_charbig = 'just inserted'
38583    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38584 DELETE FROM t0_aux
38585 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38586 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38587 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38588 'just inserted' FROM t0_template
38589 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38590 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
38591 BEGIN
38592 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38593 f_charbig = 'updated by trigger'
38594       WHERE f_int1 = - old.f_int1;
38595 END|
38596 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38597 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38598         
38599 # check trigger-4 success:      1
38600 DROP TRIGGER trg_1;
38601 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38602 f_int2 = CAST(f_char1 AS SIGNED INT),
38603 f_charbig = 'just inserted'
38604    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38605 DELETE FROM t0_aux
38606 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38607 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38608 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38609 'just inserted' FROM t0_template
38610 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38611 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
38612 BEGIN
38613 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38614 f_charbig = 'updated by trigger'
38615       WHERE f_int1 = new.f_int1;
38616 END|
38617 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38618 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38619         
38620 # check trigger-5 success:      1
38621 DROP TRIGGER trg_1;
38622 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38623 f_int2 = CAST(f_char1 AS SIGNED INT),
38624 f_charbig = 'just inserted'
38625    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38626 DELETE FROM t0_aux
38627 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38628 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38629 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38630 'just inserted' FROM t0_template
38631 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38632 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
38633 BEGIN
38634 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38635 f_charbig = 'updated by trigger'
38636       WHERE f_int1 = - old.f_int1;
38637 END|
38638 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
38639 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38640         
38641 # check trigger-6 success:      1
38642 DROP TRIGGER trg_1;
38643 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38644 f_int2 = CAST(f_char1 AS SIGNED INT),
38645 f_charbig = 'just inserted'
38646    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38647 DELETE FROM t0_aux
38648 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38649 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38650 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38651 'just inserted' FROM t0_template
38652 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38653 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
38654 BEGIN
38655 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38656 f_charbig = 'updated by trigger'
38657       WHERE f_int1 = - old.f_int1;
38658 END|
38659 DELETE FROM t0_aux
38660 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38661         
38662 # check trigger-7 success:      1
38663 DROP TRIGGER trg_1;
38664 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38665 f_int2 = CAST(f_char1 AS SIGNED INT),
38666 f_charbig = 'just inserted'
38667    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38668 DELETE FROM t0_aux
38669 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38670 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
38671 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
38672 'just inserted' FROM t0_template
38673 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38674 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
38675 BEGIN
38676 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
38677 f_charbig = 'updated by trigger'
38678       WHERE f_int1 = - old.f_int1;
38679 END|
38680 DELETE FROM t0_aux
38681 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
38682         
38683 # check trigger-8 success:      1
38684 DROP TRIGGER trg_1;
38685 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38686 f_int2 = CAST(f_char1 AS SIGNED INT),
38687 f_charbig = 'just inserted'
38688    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
38689 DELETE FROM t0_aux
38690 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38691 DELETE FROM t1
38692 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
38693 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
38694 BEGIN
38695 SET new.f_int1 = old.f_int1 + @max_row,
38696 new.f_int2 = old.f_int2 - @max_row,
38697 new.f_charbig = '####updated per update trigger####';
38698 END|
38699 UPDATE t1
38700 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
38701 f_charbig = '####updated per update statement itself####';
38702         
38703 # check trigger-9 success:      1
38704 DROP TRIGGER trg_2;
38705 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38706 f_int2 = CAST(f_char1 AS SIGNED INT),
38707 f_charbig = CONCAT('===',f_char1,'===');
38708 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
38709 BEGIN
38710 SET new.f_int1 = new.f_int1 + @max_row,
38711 new.f_int2 = new.f_int2 - @max_row,
38712 new.f_charbig = '####updated per update trigger####';
38713 END|
38714 UPDATE t1
38715 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
38716 f_charbig = '####updated per update statement itself####';
38717         
38718 # check trigger-10 success:     1
38719 DROP TRIGGER trg_2;
38720 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38721 f_int2 = CAST(f_char1 AS SIGNED INT),
38722 f_charbig = CONCAT('===',f_char1,'===');
38723 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
38724 BEGIN
38725 SET new.f_int1 = @my_max1 + @counter,
38726 new.f_int2 = @my_min2 - @counter,
38727 new.f_charbig = '####updated per insert trigger####';
38728 SET @counter = @counter + 1;
38729 END|
38730 SET @counter = 1;
38731 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
38732 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38733 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
38734 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
38735 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
38736 ORDER BY f_int1;
38737 DROP TRIGGER trg_3;
38738         
38739 # check trigger-11 success:     1
38740 DELETE FROM t1
38741 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
38742 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
38743 AND f_charbig = '####updated per insert trigger####';
38744 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
38745 BEGIN
38746 SET new.f_int1 = @my_max1 + @counter,
38747 new.f_int2 = @my_min2 - @counter,
38748 new.f_charbig = '####updated per insert trigger####';
38749 SET @counter = @counter + 1;
38750 END|
38751 SET @counter = 1;
38752 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
38753 INSERT INTO t1 (f_char1, f_char2, f_charbig)
38754 SELECT CAST(f_int1 AS CHAR),
38755 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
38756 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
38757 ORDER BY f_int1;
38758 DROP TRIGGER trg_3;
38759         
38760 # check trigger-12 success:     1
38761 DELETE FROM t1
38762 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
38763 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
38764 AND f_charbig = '####updated per insert trigger####';
38765 ANALYZE  TABLE t1;
38766 Table   Op      Msg_type        Msg_text
38767 test.t1 analyze status  OK
38768 CHECK    TABLE t1 EXTENDED;
38769 Table   Op      Msg_type        Msg_text
38770 test.t1 check   status  OK
38771 CHECKSUM TABLE t1 EXTENDED;
38772 Table   Checksum
38773 test.t1 <some_value>
38774 OPTIMIZE TABLE t1;
38775 Table   Op      Msg_type        Msg_text
38776 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
38777 test.t1 optimize        status  OK
38778 # check layout success:    1
38779 REPAIR   TABLE t1 EXTENDED;
38780 Table   Op      Msg_type        Msg_text
38781 test.t1 repair  note    The storage engine for the table doesn't support repair
38782 # check layout success:    1
38783 TRUNCATE t1;
38784         
38785 # check TRUNCATE success:       1
38786 # check layout success:    1
38787 # End usability test (inc/partition_check.inc)
38788 DROP TABLE t1;
38789 CREATE TABLE t1 (
38790 f_int1 INTEGER,
38791 f_int2 INTEGER,
38792 f_char1 CHAR(20),
38793 f_char2 CHAR(20),
38794 f_charbig VARCHAR(1000)
38795 , PRIMARY KEY (f_int2,f_int1)
38797 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
38798 (PARTITION part1 VALUES IN (0)
38799 (SUBPARTITION sp11, SUBPARTITION sp12),
38800 PARTITION part2 VALUES IN (1)
38801 (SUBPARTITION sp21, SUBPARTITION sp22),
38802 PARTITION part3 VALUES IN (2)
38803 (SUBPARTITION sp31, SUBPARTITION sp32),
38804 PARTITION part4 VALUES IN (NULL)
38805 (SUBPARTITION sp41, SUBPARTITION sp42));
38806 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38807 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
38808 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
38809 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
38810 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
38811 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
38812 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
38813 # Start usability test (inc/partition_check.inc)
38814 create_command
38815 SHOW CREATE TABLE t1;
38816 Table   Create Table
38817 t1      CREATE TABLE `t1` (
38818   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
38819   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
38820   `f_char1` char(20) DEFAULT NULL,
38821   `f_char2` char(20) DEFAULT NULL,
38822   `f_charbig` varchar(1000) DEFAULT NULL,
38823   PRIMARY KEY (`f_int2`,`f_int1`)
38824 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
38825 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
38826 SUBPARTITION BY HASH (f_int1 + 1)
38827 (PARTITION part1 VALUES IN (0)
38828  (SUBPARTITION sp11 ENGINE = InnoDB,
38829   SUBPARTITION sp12 ENGINE = InnoDB),
38830  PARTITION part2 VALUES IN (1)
38831  (SUBPARTITION sp21 ENGINE = InnoDB,
38832   SUBPARTITION sp22 ENGINE = InnoDB),
38833  PARTITION part3 VALUES IN (2)
38834  (SUBPARTITION sp31 ENGINE = InnoDB,
38835   SUBPARTITION sp32 ENGINE = InnoDB),
38836  PARTITION part4 VALUES IN (NULL)
38837  (SUBPARTITION sp41 ENGINE = InnoDB,
38838   SUBPARTITION sp42 ENGINE = InnoDB)) */
38840 # check prerequisites-1 success:    1
38841 # check COUNT(*) success:    1
38842 # check MIN/MAX(f_int1) success:    1
38843 # check MIN/MAX(f_int2) success:    1
38844 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38845 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
38846 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
38847 WHERE f_int1 IN (2,3);
38848 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
38849 # check prerequisites-3 success:    1
38850 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
38851 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38852 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
38853 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
38854 WHERE f_int1 IN (2,3);
38855 DELETE FROM t1 WHERE f_charbig = 'delete me';
38856 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38857 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
38858 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
38859 WHERE f_int1 IN (2,3);
38860 DELETE FROM t1 WHERE f_charbig = 'delete me';
38861 # check read via f_int1 success: 1
38862 # check read via f_int2 success: 1
38863         
38864 # check multiple-1 success:     1
38865 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
38866         
38867 # check multiple-2 success:     1
38868 INSERT INTO t1 SELECT * FROM t0_template
38869 WHERE MOD(f_int1,3) = 0;
38870         
38871 # check multiple-3 success:     1
38872 UPDATE t1 SET f_int1 = f_int1 + @max_row
38873 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
38874 AND @max_row_div2 + @max_row_div4;
38875         
38876 # check multiple-4 success:     1
38877 DELETE FROM t1
38878 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
38879 AND @max_row_div2 + @max_row_div4 + @max_row;
38880         
38881 # check multiple-5 success:     1
38882 SELECT COUNT(*) INTO @try_count FROM t0_template
38883 WHERE MOD(f_int1,3) = 0
38884 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38885 SELECT COUNT(*) INTO @clash_count
38886 FROM t1 INNER JOIN t0_template USING(f_int1)
38887 WHERE MOD(f_int1,3) = 0
38888 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38889 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
38890 INSERT INTO t1
38891 SET f_int1 = @cur_value , f_int2 = @cur_value,
38892 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
38893 f_charbig = '#SINGLE#';
38894         
38895 # check single-1 success:       1
38896 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
38897 INSERT INTO t1
38898 SET f_int1 = @cur_value , f_int2 = @cur_value,
38899 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
38900 f_charbig = '#SINGLE#';
38901         
38902 # check single-2 success:       1
38903 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
38904 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
38905 UPDATE t1 SET f_int1 = @cur_value2
38906 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
38907         
38908 # check single-3 success:       1
38909 SET @cur_value1= -1;
38910 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
38911 UPDATE t1 SET f_int1 = @cur_value1
38912 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
38913         
38914 # check single-4 success:       1
38915 SELECT MAX(f_int1) INTO @cur_value FROM t1;
38916 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
38917         
38918 # check single-5 success:       1
38919 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
38920         
38921 # check single-6 success:       1
38922 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
38923 Warnings:
38924 Warning 1264    Out of range value for column 'f_int1' at row 1
38925 Warning 1264    Out of range value for column 'f_int2' at row 1
38926         
38927 # check single-7 success:       1
38928 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
38929 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
38930 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
38931 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
38932 f_charbig = '#NULL#';
38933 INSERT INTO t1
38934 SET f_int1 = NULL , f_int2 = -@max_row,
38935 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
38936 f_charbig = '#NULL#';
38937 ERROR 23000: Column 'f_int1' cannot be null
38938 # check null success:    1
38939 DELETE FROM t1
38940 WHERE f_int1 = 0 AND f_int2 = 0
38941 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
38942 AND f_charbig = '#NULL#';
38943 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38944 SELECT f_int1, f_int1, '', '', 'was inserted'
38945    FROM t0_template source_tab
38946 WHERE MOD(f_int1,3) = 0
38947 AND f_int1 BETWEEN @max_row_div2 AND @max_row
38948 ON DUPLICATE KEY
38949 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
38950 f_int2 = 2 * @max_row + source_tab.f_int1,
38951 f_charbig = 'was updated';
38952         
38953 # check unique-1-a success:     1
38954         
38955 # check unique-1-b success:     1
38956 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38957 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
38958 f_int2 = CAST(f_char1 AS SIGNED INT),
38959 f_charbig = CONCAT('===',f_char1,'===')
38960 WHERE f_charbig = 'was updated';
38961 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38962 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
38963    FROM t0_template source_tab
38964 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
38965         
38966 # check replace success:        1
38967 DELETE FROM t1
38968 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
38969 DELETE FROM t1
38970 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
38971 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
38972 UPDATE t1 SET f_int2 = f_int1,
38973 f_char1 = CAST(f_int1 AS CHAR),
38974 f_char2 = CAST(f_int1 AS CHAR),
38975 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
38976 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
38977 SET AUTOCOMMIT= 0;
38978 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38979 SELECT f_int1, f_int1, '', '', 'was inserted'
38980 FROM t0_template source_tab
38981 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
38982         
38983 # check transactions-1 success:         1
38984 COMMIT WORK;
38985         
38986 # check transactions-2 success:         1
38987 ROLLBACK WORK;
38988         
38989 # check transactions-3 success:         1
38990 DELETE FROM t1 WHERE f_charbig = 'was inserted';
38991 COMMIT WORK;
38992 ROLLBACK WORK;
38993         
38994 # check transactions-4 success:         1
38995 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
38996 SELECT f_int1, f_int1, '', '', 'was inserted'
38997 FROM t0_template source_tab
38998 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
38999         
39000 # check transactions-5 success:         1
39001 ROLLBACK WORK;
39002         
39003 # check transactions-6 success:         1
39004 # INFO: Storage engine used for t1 seems to be transactional.
39005 COMMIT;
39006         
39007 # check transactions-7 success:         1
39008 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39009 COMMIT WORK;
39010 SET @@session.sql_mode = 'traditional';
39011 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
39012 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39013 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
39014 '', '', 'was inserted' FROM t0_template
39015 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39016 ERROR 22012: Division by 0
39017 COMMIT;
39018         
39019 # check transactions-8 success:         1
39020 # INFO: Storage engine used for t1 seems to be able to revert
39021 #       changes made by the failing statement.
39022 SET @@session.sql_mode = '';
39023 SET AUTOCOMMIT= 1;
39024 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39025 COMMIT WORK;
39026 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
39027         
39028 # check special-1 success:      1
39029 UPDATE t1 SET f_charbig = '';
39030         
39031 # check special-2 success:      1
39032 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
39033 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39034 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
39035 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39036 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39037 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39038 'just inserted' FROM t0_template
39039 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39040 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
39041 BEGIN
39042 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39043 f_charbig = 'updated by trigger'
39044       WHERE f_int1 = new.f_int1;
39045 END|
39046 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39047 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
39048 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39049         
39050 # check trigger-1 success:      1
39051 DROP TRIGGER trg_1;
39052 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39053 f_int2 = CAST(f_char1 AS SIGNED INT),
39054 f_charbig = 'just inserted'
39055    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39056 DELETE FROM t0_aux
39057 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39058 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39059 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39060 'just inserted' FROM t0_template
39061 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39062 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
39063 BEGIN
39064 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39065 f_charbig = 'updated by trigger'
39066       WHERE f_int1 = new.f_int1;
39067 END|
39068 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39069 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
39070 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39071         
39072 # check trigger-2 success:      1
39073 DROP TRIGGER trg_1;
39074 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39075 f_int2 = CAST(f_char1 AS SIGNED INT),
39076 f_charbig = 'just inserted'
39077    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39078 DELETE FROM t0_aux
39079 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39080 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39081 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39082 'just inserted' FROM t0_template
39083 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39084 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
39085 BEGIN
39086 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39087 f_charbig = 'updated by trigger'
39088       WHERE f_int1 = new.f_int1;
39089 END|
39090 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39091 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39092         
39093 # check trigger-3 success:      1
39094 DROP TRIGGER trg_1;
39095 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39096 f_int2 = CAST(f_char1 AS SIGNED INT),
39097 f_charbig = 'just inserted'
39098    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39099 DELETE FROM t0_aux
39100 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39101 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39102 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39103 'just inserted' FROM t0_template
39104 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39105 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
39106 BEGIN
39107 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39108 f_charbig = 'updated by trigger'
39109       WHERE f_int1 = - old.f_int1;
39110 END|
39111 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39112 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39113         
39114 # check trigger-4 success:      1
39115 DROP TRIGGER trg_1;
39116 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39117 f_int2 = CAST(f_char1 AS SIGNED INT),
39118 f_charbig = 'just inserted'
39119    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39120 DELETE FROM t0_aux
39121 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39122 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39123 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39124 'just inserted' FROM t0_template
39125 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39126 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
39127 BEGIN
39128 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39129 f_charbig = 'updated by trigger'
39130       WHERE f_int1 = new.f_int1;
39131 END|
39132 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39133 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39134         
39135 # check trigger-5 success:      1
39136 DROP TRIGGER trg_1;
39137 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39138 f_int2 = CAST(f_char1 AS SIGNED INT),
39139 f_charbig = 'just inserted'
39140    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39141 DELETE FROM t0_aux
39142 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39143 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39144 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39145 'just inserted' FROM t0_template
39146 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39147 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
39148 BEGIN
39149 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39150 f_charbig = 'updated by trigger'
39151       WHERE f_int1 = - old.f_int1;
39152 END|
39153 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39154 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39155         
39156 # check trigger-6 success:      1
39157 DROP TRIGGER trg_1;
39158 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39159 f_int2 = CAST(f_char1 AS SIGNED INT),
39160 f_charbig = 'just inserted'
39161    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39162 DELETE FROM t0_aux
39163 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39164 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39165 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39166 'just inserted' FROM t0_template
39167 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39168 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
39169 BEGIN
39170 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39171 f_charbig = 'updated by trigger'
39172       WHERE f_int1 = - old.f_int1;
39173 END|
39174 DELETE FROM t0_aux
39175 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39176         
39177 # check trigger-7 success:      1
39178 DROP TRIGGER trg_1;
39179 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39180 f_int2 = CAST(f_char1 AS SIGNED INT),
39181 f_charbig = 'just inserted'
39182    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39183 DELETE FROM t0_aux
39184 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39185 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39186 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39187 'just inserted' FROM t0_template
39188 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39189 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
39190 BEGIN
39191 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39192 f_charbig = 'updated by trigger'
39193       WHERE f_int1 = - old.f_int1;
39194 END|
39195 DELETE FROM t0_aux
39196 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39197         
39198 # check trigger-8 success:      1
39199 DROP TRIGGER trg_1;
39200 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39201 f_int2 = CAST(f_char1 AS SIGNED INT),
39202 f_charbig = 'just inserted'
39203    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39204 DELETE FROM t0_aux
39205 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39206 DELETE FROM t1
39207 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39208 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
39209 BEGIN
39210 SET new.f_int1 = old.f_int1 + @max_row,
39211 new.f_int2 = old.f_int2 - @max_row,
39212 new.f_charbig = '####updated per update trigger####';
39213 END|
39214 UPDATE t1
39215 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
39216 f_charbig = '####updated per update statement itself####';
39217         
39218 # check trigger-9 success:      1
39219 DROP TRIGGER trg_2;
39220 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39221 f_int2 = CAST(f_char1 AS SIGNED INT),
39222 f_charbig = CONCAT('===',f_char1,'===');
39223 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
39224 BEGIN
39225 SET new.f_int1 = new.f_int1 + @max_row,
39226 new.f_int2 = new.f_int2 - @max_row,
39227 new.f_charbig = '####updated per update trigger####';
39228 END|
39229 UPDATE t1
39230 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
39231 f_charbig = '####updated per update statement itself####';
39232         
39233 # check trigger-10 success:     1
39234 DROP TRIGGER trg_2;
39235 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39236 f_int2 = CAST(f_char1 AS SIGNED INT),
39237 f_charbig = CONCAT('===',f_char1,'===');
39238 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
39239 BEGIN
39240 SET new.f_int1 = @my_max1 + @counter,
39241 new.f_int2 = @my_min2 - @counter,
39242 new.f_charbig = '####updated per insert trigger####';
39243 SET @counter = @counter + 1;
39244 END|
39245 SET @counter = 1;
39246 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
39247 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39248 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
39249 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
39250 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
39251 ORDER BY f_int1;
39252 DROP TRIGGER trg_3;
39253         
39254 # check trigger-11 success:     1
39255 DELETE FROM t1
39256 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
39257 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
39258 AND f_charbig = '####updated per insert trigger####';
39259 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
39260 BEGIN
39261 SET new.f_int1 = @my_max1 + @counter,
39262 new.f_int2 = @my_min2 - @counter,
39263 new.f_charbig = '####updated per insert trigger####';
39264 SET @counter = @counter + 1;
39265 END|
39266 SET @counter = 1;
39267 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
39268 INSERT INTO t1 (f_char1, f_char2, f_charbig)
39269 SELECT CAST(f_int1 AS CHAR),
39270 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
39271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
39272 ORDER BY f_int1;
39273 DROP TRIGGER trg_3;
39274         
39275 # check trigger-12 success:     1
39276 DELETE FROM t1
39277 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
39278 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
39279 AND f_charbig = '####updated per insert trigger####';
39280 ANALYZE  TABLE t1;
39281 Table   Op      Msg_type        Msg_text
39282 test.t1 analyze status  OK
39283 CHECK    TABLE t1 EXTENDED;
39284 Table   Op      Msg_type        Msg_text
39285 test.t1 check   status  OK
39286 CHECKSUM TABLE t1 EXTENDED;
39287 Table   Checksum
39288 test.t1 <some_value>
39289 OPTIMIZE TABLE t1;
39290 Table   Op      Msg_type        Msg_text
39291 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
39292 test.t1 optimize        status  OK
39293 # check layout success:    1
39294 REPAIR   TABLE t1 EXTENDED;
39295 Table   Op      Msg_type        Msg_text
39296 test.t1 repair  note    The storage engine for the table doesn't support repair
39297 # check layout success:    1
39298 TRUNCATE t1;
39299         
39300 # check TRUNCATE success:       1
39301 # check layout success:    1
39302 # End usability test (inc/partition_check.inc)
39303 DROP TABLE t1;
39304 CREATE TABLE t1 (
39305 f_int1 INTEGER,
39306 f_int2 INTEGER,
39307 f_char1 CHAR(20),
39308 f_char2 CHAR(20),
39309 f_charbig VARCHAR(1000)
39310 , PRIMARY KEY (f_int2,f_int1)
39312 PARTITION BY LIST(ABS(MOD(f_int1,2)))
39313 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
39314 (PARTITION part1 VALUES IN (0),
39315 PARTITION part2 VALUES IN (1),
39316 PARTITION part3 VALUES IN (NULL));
39317 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39318 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
39319 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
39320 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
39321 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39322 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
39323 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
39324 # Start usability test (inc/partition_check.inc)
39325 create_command
39326 SHOW CREATE TABLE t1;
39327 Table   Create Table
39328 t1      CREATE TABLE `t1` (
39329   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
39330   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
39331   `f_char1` char(20) DEFAULT NULL,
39332   `f_char2` char(20) DEFAULT NULL,
39333   `f_charbig` varchar(1000) DEFAULT NULL,
39334   PRIMARY KEY (`f_int2`,`f_int1`)
39335 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
39336 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
39337 SUBPARTITION BY KEY (f_int1)
39338 SUBPARTITIONS 3
39339 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
39340  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
39341  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
39343 # check prerequisites-1 success:    1
39344 # check COUNT(*) success:    1
39345 # check MIN/MAX(f_int1) success:    1
39346 # check MIN/MAX(f_int2) success:    1
39347 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39348 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
39349 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
39350 WHERE f_int1 IN (2,3);
39351 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
39352 # check prerequisites-3 success:    1
39353 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
39354 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39355 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
39356 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
39357 WHERE f_int1 IN (2,3);
39358 DELETE FROM t1 WHERE f_charbig = 'delete me';
39359 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39360 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
39361 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
39362 WHERE f_int1 IN (2,3);
39363 DELETE FROM t1 WHERE f_charbig = 'delete me';
39364 # check read via f_int1 success: 1
39365 # check read via f_int2 success: 1
39366         
39367 # check multiple-1 success:     1
39368 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
39369         
39370 # check multiple-2 success:     1
39371 INSERT INTO t1 SELECT * FROM t0_template
39372 WHERE MOD(f_int1,3) = 0;
39373         
39374 # check multiple-3 success:     1
39375 UPDATE t1 SET f_int1 = f_int1 + @max_row
39376 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
39377 AND @max_row_div2 + @max_row_div4;
39378         
39379 # check multiple-4 success:     1
39380 DELETE FROM t1
39381 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
39382 AND @max_row_div2 + @max_row_div4 + @max_row;
39383         
39384 # check multiple-5 success:     1
39385 SELECT COUNT(*) INTO @try_count FROM t0_template
39386 WHERE MOD(f_int1,3) = 0
39387 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39388 SELECT COUNT(*) INTO @clash_count
39389 FROM t1 INNER JOIN t0_template USING(f_int1)
39390 WHERE MOD(f_int1,3) = 0
39391 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39392 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
39393 INSERT INTO t1
39394 SET f_int1 = @cur_value , f_int2 = @cur_value,
39395 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
39396 f_charbig = '#SINGLE#';
39397         
39398 # check single-1 success:       1
39399 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
39400 INSERT INTO t1
39401 SET f_int1 = @cur_value , f_int2 = @cur_value,
39402 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
39403 f_charbig = '#SINGLE#';
39404         
39405 # check single-2 success:       1
39406 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
39407 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
39408 UPDATE t1 SET f_int1 = @cur_value2
39409 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
39410         
39411 # check single-3 success:       1
39412 SET @cur_value1= -1;
39413 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
39414 UPDATE t1 SET f_int1 = @cur_value1
39415 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
39416         
39417 # check single-4 success:       1
39418 SELECT MAX(f_int1) INTO @cur_value FROM t1;
39419 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
39420         
39421 # check single-5 success:       1
39422 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
39423         
39424 # check single-6 success:       1
39425 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
39426 Warnings:
39427 Warning 1264    Out of range value for column 'f_int1' at row 1
39428 Warning 1264    Out of range value for column 'f_int2' at row 1
39429         
39430 # check single-7 success:       1
39431 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
39432 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
39433 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
39434 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
39435 f_charbig = '#NULL#';
39436 INSERT INTO t1
39437 SET f_int1 = NULL , f_int2 = -@max_row,
39438 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
39439 f_charbig = '#NULL#';
39440 ERROR 23000: Column 'f_int1' cannot be null
39441 # check null success:    1
39442 DELETE FROM t1
39443 WHERE f_int1 = 0 AND f_int2 = 0
39444 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
39445 AND f_charbig = '#NULL#';
39446 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39447 SELECT f_int1, f_int1, '', '', 'was inserted'
39448    FROM t0_template source_tab
39449 WHERE MOD(f_int1,3) = 0
39450 AND f_int1 BETWEEN @max_row_div2 AND @max_row
39451 ON DUPLICATE KEY
39452 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
39453 f_int2 = 2 * @max_row + source_tab.f_int1,
39454 f_charbig = 'was updated';
39455         
39456 # check unique-1-a success:     1
39457         
39458 # check unique-1-b success:     1
39459 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39460 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39461 f_int2 = CAST(f_char1 AS SIGNED INT),
39462 f_charbig = CONCAT('===',f_char1,'===')
39463 WHERE f_charbig = 'was updated';
39464 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39465 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
39466    FROM t0_template source_tab
39467 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39468         
39469 # check replace success:        1
39470 DELETE FROM t1
39471 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
39472 DELETE FROM t1
39473 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
39474 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
39475 UPDATE t1 SET f_int2 = f_int1,
39476 f_char1 = CAST(f_int1 AS CHAR),
39477 f_char2 = CAST(f_int1 AS CHAR),
39478 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
39479 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
39480 SET AUTOCOMMIT= 0;
39481 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39482 SELECT f_int1, f_int1, '', '', 'was inserted'
39483 FROM t0_template source_tab
39484 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39485         
39486 # check transactions-1 success:         1
39487 COMMIT WORK;
39488         
39489 # check transactions-2 success:         1
39490 ROLLBACK WORK;
39491         
39492 # check transactions-3 success:         1
39493 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39494 COMMIT WORK;
39495 ROLLBACK WORK;
39496         
39497 # check transactions-4 success:         1
39498 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39499 SELECT f_int1, f_int1, '', '', 'was inserted'
39500 FROM t0_template source_tab
39501 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39502         
39503 # check transactions-5 success:         1
39504 ROLLBACK WORK;
39505         
39506 # check transactions-6 success:         1
39507 # INFO: Storage engine used for t1 seems to be transactional.
39508 COMMIT;
39509         
39510 # check transactions-7 success:         1
39511 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39512 COMMIT WORK;
39513 SET @@session.sql_mode = 'traditional';
39514 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
39515 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39516 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
39517 '', '', 'was inserted' FROM t0_template
39518 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39519 ERROR 22012: Division by 0
39520 COMMIT;
39521         
39522 # check transactions-8 success:         1
39523 # INFO: Storage engine used for t1 seems to be able to revert
39524 #       changes made by the failing statement.
39525 SET @@session.sql_mode = '';
39526 SET AUTOCOMMIT= 1;
39527 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39528 COMMIT WORK;
39529 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
39530         
39531 # check special-1 success:      1
39532 UPDATE t1 SET f_charbig = '';
39533         
39534 # check special-2 success:      1
39535 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
39536 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39537 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
39538 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39539 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39540 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39541 'just inserted' FROM t0_template
39542 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39543 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
39544 BEGIN
39545 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39546 f_charbig = 'updated by trigger'
39547       WHERE f_int1 = new.f_int1;
39548 END|
39549 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39550 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
39551 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39552         
39553 # check trigger-1 success:      1
39554 DROP TRIGGER trg_1;
39555 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39556 f_int2 = CAST(f_char1 AS SIGNED INT),
39557 f_charbig = 'just inserted'
39558    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39559 DELETE FROM t0_aux
39560 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39561 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39562 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39563 'just inserted' FROM t0_template
39564 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39565 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
39566 BEGIN
39567 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39568 f_charbig = 'updated by trigger'
39569       WHERE f_int1 = new.f_int1;
39570 END|
39571 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39572 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
39573 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39574         
39575 # check trigger-2 success:      1
39576 DROP TRIGGER trg_1;
39577 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39578 f_int2 = CAST(f_char1 AS SIGNED INT),
39579 f_charbig = 'just inserted'
39580    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39581 DELETE FROM t0_aux
39582 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39583 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39584 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39585 'just inserted' FROM t0_template
39586 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39587 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
39588 BEGIN
39589 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39590 f_charbig = 'updated by trigger'
39591       WHERE f_int1 = new.f_int1;
39592 END|
39593 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39594 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39595         
39596 # check trigger-3 success:      1
39597 DROP TRIGGER trg_1;
39598 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39599 f_int2 = CAST(f_char1 AS SIGNED INT),
39600 f_charbig = 'just inserted'
39601    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39602 DELETE FROM t0_aux
39603 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39604 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39605 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39606 'just inserted' FROM t0_template
39607 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39608 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
39609 BEGIN
39610 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39611 f_charbig = 'updated by trigger'
39612       WHERE f_int1 = - old.f_int1;
39613 END|
39614 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39615 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39616         
39617 # check trigger-4 success:      1
39618 DROP TRIGGER trg_1;
39619 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39620 f_int2 = CAST(f_char1 AS SIGNED INT),
39621 f_charbig = 'just inserted'
39622    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39623 DELETE FROM t0_aux
39624 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39625 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39626 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39627 'just inserted' FROM t0_template
39628 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39629 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
39630 BEGIN
39631 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39632 f_charbig = 'updated by trigger'
39633       WHERE f_int1 = new.f_int1;
39634 END|
39635 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39636 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39637         
39638 # check trigger-5 success:      1
39639 DROP TRIGGER trg_1;
39640 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39641 f_int2 = CAST(f_char1 AS SIGNED INT),
39642 f_charbig = 'just inserted'
39643    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39644 DELETE FROM t0_aux
39645 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39646 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39647 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39648 'just inserted' FROM t0_template
39649 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39650 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
39651 BEGIN
39652 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39653 f_charbig = 'updated by trigger'
39654       WHERE f_int1 = - old.f_int1;
39655 END|
39656 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
39657 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39658         
39659 # check trigger-6 success:      1
39660 DROP TRIGGER trg_1;
39661 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39662 f_int2 = CAST(f_char1 AS SIGNED INT),
39663 f_charbig = 'just inserted'
39664    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39665 DELETE FROM t0_aux
39666 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39667 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39668 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39669 'just inserted' FROM t0_template
39670 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39671 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
39672 BEGIN
39673 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39674 f_charbig = 'updated by trigger'
39675       WHERE f_int1 = - old.f_int1;
39676 END|
39677 DELETE FROM t0_aux
39678 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39679         
39680 # check trigger-7 success:      1
39681 DROP TRIGGER trg_1;
39682 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39683 f_int2 = CAST(f_char1 AS SIGNED INT),
39684 f_charbig = 'just inserted'
39685    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39686 DELETE FROM t0_aux
39687 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39688 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
39689 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
39690 'just inserted' FROM t0_template
39691 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39692 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
39693 BEGIN
39694 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
39695 f_charbig = 'updated by trigger'
39696       WHERE f_int1 = - old.f_int1;
39697 END|
39698 DELETE FROM t0_aux
39699 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
39700         
39701 # check trigger-8 success:      1
39702 DROP TRIGGER trg_1;
39703 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39704 f_int2 = CAST(f_char1 AS SIGNED INT),
39705 f_charbig = 'just inserted'
39706    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
39707 DELETE FROM t0_aux
39708 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39709 DELETE FROM t1
39710 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
39711 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
39712 BEGIN
39713 SET new.f_int1 = old.f_int1 + @max_row,
39714 new.f_int2 = old.f_int2 - @max_row,
39715 new.f_charbig = '####updated per update trigger####';
39716 END|
39717 UPDATE t1
39718 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
39719 f_charbig = '####updated per update statement itself####';
39720         
39721 # check trigger-9 success:      1
39722 DROP TRIGGER trg_2;
39723 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39724 f_int2 = CAST(f_char1 AS SIGNED INT),
39725 f_charbig = CONCAT('===',f_char1,'===');
39726 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
39727 BEGIN
39728 SET new.f_int1 = new.f_int1 + @max_row,
39729 new.f_int2 = new.f_int2 - @max_row,
39730 new.f_charbig = '####updated per update trigger####';
39731 END|
39732 UPDATE t1
39733 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
39734 f_charbig = '####updated per update statement itself####';
39735         
39736 # check trigger-10 success:     1
39737 DROP TRIGGER trg_2;
39738 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39739 f_int2 = CAST(f_char1 AS SIGNED INT),
39740 f_charbig = CONCAT('===',f_char1,'===');
39741 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
39742 BEGIN
39743 SET new.f_int1 = @my_max1 + @counter,
39744 new.f_int2 = @my_min2 - @counter,
39745 new.f_charbig = '####updated per insert trigger####';
39746 SET @counter = @counter + 1;
39747 END|
39748 SET @counter = 1;
39749 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
39750 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39751 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
39752 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
39753 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
39754 ORDER BY f_int1;
39755 DROP TRIGGER trg_3;
39756         
39757 # check trigger-11 success:     1
39758 DELETE FROM t1
39759 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
39760 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
39761 AND f_charbig = '####updated per insert trigger####';
39762 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
39763 BEGIN
39764 SET new.f_int1 = @my_max1 + @counter,
39765 new.f_int2 = @my_min2 - @counter,
39766 new.f_charbig = '####updated per insert trigger####';
39767 SET @counter = @counter + 1;
39768 END|
39769 SET @counter = 1;
39770 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
39771 INSERT INTO t1 (f_char1, f_char2, f_charbig)
39772 SELECT CAST(f_int1 AS CHAR),
39773 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
39774 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
39775 ORDER BY f_int1;
39776 DROP TRIGGER trg_3;
39777         
39778 # check trigger-12 success:     1
39779 DELETE FROM t1
39780 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
39781 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
39782 AND f_charbig = '####updated per insert trigger####';
39783 ANALYZE  TABLE t1;
39784 Table   Op      Msg_type        Msg_text
39785 test.t1 analyze status  OK
39786 CHECK    TABLE t1 EXTENDED;
39787 Table   Op      Msg_type        Msg_text
39788 test.t1 check   status  OK
39789 CHECKSUM TABLE t1 EXTENDED;
39790 Table   Checksum
39791 test.t1 <some_value>
39792 OPTIMIZE TABLE t1;
39793 Table   Op      Msg_type        Msg_text
39794 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
39795 test.t1 optimize        status  OK
39796 # check layout success:    1
39797 REPAIR   TABLE t1 EXTENDED;
39798 Table   Op      Msg_type        Msg_text
39799 test.t1 repair  note    The storage engine for the table doesn't support repair
39800 # check layout success:    1
39801 TRUNCATE t1;
39802         
39803 # check TRUNCATE success:       1
39804 # check layout success:    1
39805 # End usability test (inc/partition_check.inc)
39806 DROP TABLE t1;
39807 DROP TABLE IF EXISTS t1;
39808 CREATE TABLE t1 (
39809 f_int1 INTEGER,
39810 f_int2 INTEGER,
39811 f_char1 CHAR(20),
39812 f_char2 CHAR(20),
39813 f_charbig VARCHAR(1000)
39814 , PRIMARY KEY (f_int2,f_int1)
39816 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
39817 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39818 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
39819 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
39820 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
39821 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
39822 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
39823 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
39824 # Start usability test (inc/partition_check.inc)
39825 create_command
39826 SHOW CREATE TABLE t1;
39827 Table   Create Table
39828 t1      CREATE TABLE `t1` (
39829   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
39830   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
39831   `f_char1` char(20) DEFAULT NULL,
39832   `f_char2` char(20) DEFAULT NULL,
39833   `f_charbig` varchar(1000) DEFAULT NULL,
39834   PRIMARY KEY (`f_int2`,`f_int1`)
39835 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
39836 /*!50100 PARTITION BY HASH (f_int1 + f_int2)
39837 PARTITIONS 2 */
39839 # check prerequisites-1 success:    1
39840 # check COUNT(*) success:    1
39841 # check MIN/MAX(f_int1) success:    1
39842 # check MIN/MAX(f_int2) success:    1
39843 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39844 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
39845 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
39846 WHERE f_int1 IN (2,3);
39847 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
39848 # check prerequisites-3 success:    1
39849 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
39850 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39851 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
39852 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
39853 WHERE f_int1 IN (2,3);
39854 DELETE FROM t1 WHERE f_charbig = 'delete me';
39855 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39856 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
39857 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
39858 WHERE f_int1 IN (2,3);
39859 DELETE FROM t1 WHERE f_charbig = 'delete me';
39860 # check read via f_int1 success: 1
39861 # check read via f_int2 success: 1
39862         
39863 # check multiple-1 success:     1
39864 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
39865         
39866 # check multiple-2 success:     1
39867 INSERT INTO t1 SELECT * FROM t0_template
39868 WHERE MOD(f_int1,3) = 0;
39869         
39870 # check multiple-3 success:     1
39871 UPDATE t1 SET f_int1 = f_int1 + @max_row
39872 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
39873 AND @max_row_div2 + @max_row_div4;
39874         
39875 # check multiple-4 success:     1
39876 DELETE FROM t1
39877 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
39878 AND @max_row_div2 + @max_row_div4 + @max_row;
39879         
39880 # check multiple-5 success:     1
39881 SELECT COUNT(*) INTO @try_count FROM t0_template
39882 WHERE MOD(f_int1,3) = 0
39883 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39884 SELECT COUNT(*) INTO @clash_count
39885 FROM t1 INNER JOIN t0_template USING(f_int1)
39886 WHERE MOD(f_int1,3) = 0
39887 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39888 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
39889 INSERT INTO t1
39890 SET f_int1 = @cur_value , f_int2 = @cur_value,
39891 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
39892 f_charbig = '#SINGLE#';
39893         
39894 # check single-1 success:       1
39895 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
39896 INSERT INTO t1
39897 SET f_int1 = @cur_value , f_int2 = @cur_value,
39898 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
39899 f_charbig = '#SINGLE#';
39900         
39901 # check single-2 success:       1
39902 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
39903 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
39904 UPDATE t1 SET f_int1 = @cur_value2
39905 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
39906         
39907 # check single-3 success:       1
39908 SET @cur_value1= -1;
39909 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
39910 UPDATE t1 SET f_int1 = @cur_value1
39911 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
39912         
39913 # check single-4 success:       1
39914 SELECT MAX(f_int1) INTO @cur_value FROM t1;
39915 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
39916         
39917 # check single-5 success:       1
39918 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
39919         
39920 # check single-6 success:       1
39921 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
39922 Warnings:
39923 Warning 1264    Out of range value for column 'f_int1' at row 1
39924 Warning 1264    Out of range value for column 'f_int2' at row 1
39925         
39926 # check single-7 success:       1
39927 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
39928 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
39929 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
39930 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
39931 f_charbig = '#NULL#';
39932 INSERT INTO t1
39933 SET f_int1 = NULL , f_int2 = -@max_row,
39934 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
39935 f_charbig = '#NULL#';
39936 ERROR 23000: Column 'f_int1' cannot be null
39937 # check null success:    1
39938 DELETE FROM t1
39939 WHERE f_int1 = 0 AND f_int2 = 0
39940 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
39941 AND f_charbig = '#NULL#';
39942 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39943 SELECT f_int1, f_int1, '', '', 'was inserted'
39944    FROM t0_template source_tab
39945 WHERE MOD(f_int1,3) = 0
39946 AND f_int1 BETWEEN @max_row_div2 AND @max_row
39947 ON DUPLICATE KEY
39948 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
39949 f_int2 = 2 * @max_row + source_tab.f_int1,
39950 f_charbig = 'was updated';
39951         
39952 # check unique-1-a success:     1
39953         
39954 # check unique-1-b success:     1
39955 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39956 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
39957 f_int2 = CAST(f_char1 AS SIGNED INT),
39958 f_charbig = CONCAT('===',f_char1,'===')
39959 WHERE f_charbig = 'was updated';
39960 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39961 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
39962    FROM t0_template source_tab
39963 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
39964         
39965 # check replace success:        1
39966 DELETE FROM t1
39967 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
39968 DELETE FROM t1
39969 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
39970 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
39971 UPDATE t1 SET f_int2 = f_int1,
39972 f_char1 = CAST(f_int1 AS CHAR),
39973 f_char2 = CAST(f_int1 AS CHAR),
39974 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
39975 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
39976 SET AUTOCOMMIT= 0;
39977 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39978 SELECT f_int1, f_int1, '', '', 'was inserted'
39979 FROM t0_template source_tab
39980 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39981         
39982 # check transactions-1 success:         1
39983 COMMIT WORK;
39984         
39985 # check transactions-2 success:         1
39986 ROLLBACK WORK;
39987         
39988 # check transactions-3 success:         1
39989 DELETE FROM t1 WHERE f_charbig = 'was inserted';
39990 COMMIT WORK;
39991 ROLLBACK WORK;
39992         
39993 # check transactions-4 success:         1
39994 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
39995 SELECT f_int1, f_int1, '', '', 'was inserted'
39996 FROM t0_template source_tab
39997 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
39998         
39999 # check transactions-5 success:         1
40000 ROLLBACK WORK;
40001         
40002 # check transactions-6 success:         1
40003 # INFO: Storage engine used for t1 seems to be transactional.
40004 COMMIT;
40005         
40006 # check transactions-7 success:         1
40007 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40008 COMMIT WORK;
40009 SET @@session.sql_mode = 'traditional';
40010 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
40011 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40012 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
40013 '', '', 'was inserted' FROM t0_template
40014 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
40015 ERROR 22012: Division by 0
40016 COMMIT;
40017         
40018 # check transactions-8 success:         1
40019 # INFO: Storage engine used for t1 seems to be able to revert
40020 #       changes made by the failing statement.
40021 SET @@session.sql_mode = '';
40022 SET AUTOCOMMIT= 1;
40023 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40024 COMMIT WORK;
40025 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
40026         
40027 # check special-1 success:      1
40028 UPDATE t1 SET f_charbig = '';
40029         
40030 # check special-2 success:      1
40031 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
40032 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40033 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
40034 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40035 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40036 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40037 'just inserted' FROM t0_template
40038 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40039 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
40040 BEGIN
40041 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40042 f_charbig = 'updated by trigger'
40043       WHERE f_int1 = new.f_int1;
40044 END|
40045 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40046 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
40047 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40048         
40049 # check trigger-1 success:      1
40050 DROP TRIGGER trg_1;
40051 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40052 f_int2 = CAST(f_char1 AS SIGNED INT),
40053 f_charbig = 'just inserted'
40054    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40055 DELETE FROM t0_aux
40056 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40057 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40058 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40059 'just inserted' FROM t0_template
40060 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40061 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
40062 BEGIN
40063 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40064 f_charbig = 'updated by trigger'
40065       WHERE f_int1 = new.f_int1;
40066 END|
40067 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40068 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
40069 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40070         
40071 # check trigger-2 success:      1
40072 DROP TRIGGER trg_1;
40073 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40074 f_int2 = CAST(f_char1 AS SIGNED INT),
40075 f_charbig = 'just inserted'
40076    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40077 DELETE FROM t0_aux
40078 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40079 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40080 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40081 'just inserted' FROM t0_template
40082 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40083 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
40084 BEGIN
40085 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40086 f_charbig = 'updated by trigger'
40087       WHERE f_int1 = new.f_int1;
40088 END|
40089 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40090 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40091         
40092 # check trigger-3 success:      1
40093 DROP TRIGGER trg_1;
40094 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40095 f_int2 = CAST(f_char1 AS SIGNED INT),
40096 f_charbig = 'just inserted'
40097    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40098 DELETE FROM t0_aux
40099 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40100 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40101 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40102 'just inserted' FROM t0_template
40103 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40104 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
40105 BEGIN
40106 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40107 f_charbig = 'updated by trigger'
40108       WHERE f_int1 = - old.f_int1;
40109 END|
40110 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40111 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40112         
40113 # check trigger-4 success:      1
40114 DROP TRIGGER trg_1;
40115 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40116 f_int2 = CAST(f_char1 AS SIGNED INT),
40117 f_charbig = 'just inserted'
40118    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40119 DELETE FROM t0_aux
40120 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40121 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40122 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40123 'just inserted' FROM t0_template
40124 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40125 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
40126 BEGIN
40127 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40128 f_charbig = 'updated by trigger'
40129       WHERE f_int1 = new.f_int1;
40130 END|
40131 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40132 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40133         
40134 # check trigger-5 success:      1
40135 DROP TRIGGER trg_1;
40136 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40137 f_int2 = CAST(f_char1 AS SIGNED INT),
40138 f_charbig = 'just inserted'
40139    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40140 DELETE FROM t0_aux
40141 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40142 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40143 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40144 'just inserted' FROM t0_template
40145 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40146 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
40147 BEGIN
40148 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40149 f_charbig = 'updated by trigger'
40150       WHERE f_int1 = - old.f_int1;
40151 END|
40152 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40153 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40154         
40155 # check trigger-6 success:      1
40156 DROP TRIGGER trg_1;
40157 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40158 f_int2 = CAST(f_char1 AS SIGNED INT),
40159 f_charbig = 'just inserted'
40160    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40161 DELETE FROM t0_aux
40162 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40163 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40164 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40165 'just inserted' FROM t0_template
40166 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40167 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
40168 BEGIN
40169 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40170 f_charbig = 'updated by trigger'
40171       WHERE f_int1 = - old.f_int1;
40172 END|
40173 DELETE FROM t0_aux
40174 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40175         
40176 # check trigger-7 success:      1
40177 DROP TRIGGER trg_1;
40178 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40179 f_int2 = CAST(f_char1 AS SIGNED INT),
40180 f_charbig = 'just inserted'
40181    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40182 DELETE FROM t0_aux
40183 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40184 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40185 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40186 'just inserted' FROM t0_template
40187 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40188 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
40189 BEGIN
40190 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40191 f_charbig = 'updated by trigger'
40192       WHERE f_int1 = - old.f_int1;
40193 END|
40194 DELETE FROM t0_aux
40195 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40196         
40197 # check trigger-8 success:      1
40198 DROP TRIGGER trg_1;
40199 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40200 f_int2 = CAST(f_char1 AS SIGNED INT),
40201 f_charbig = 'just inserted'
40202    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40203 DELETE FROM t0_aux
40204 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40205 DELETE FROM t1
40206 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40207 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
40208 BEGIN
40209 SET new.f_int1 = old.f_int1 + @max_row,
40210 new.f_int2 = old.f_int2 - @max_row,
40211 new.f_charbig = '####updated per update trigger####';
40212 END|
40213 UPDATE t1
40214 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
40215 f_charbig = '####updated per update statement itself####';
40216         
40217 # check trigger-9 success:      1
40218 DROP TRIGGER trg_2;
40219 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40220 f_int2 = CAST(f_char1 AS SIGNED INT),
40221 f_charbig = CONCAT('===',f_char1,'===');
40222 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
40223 BEGIN
40224 SET new.f_int1 = new.f_int1 + @max_row,
40225 new.f_int2 = new.f_int2 - @max_row,
40226 new.f_charbig = '####updated per update trigger####';
40227 END|
40228 UPDATE t1
40229 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
40230 f_charbig = '####updated per update statement itself####';
40231         
40232 # check trigger-10 success:     1
40233 DROP TRIGGER trg_2;
40234 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40235 f_int2 = CAST(f_char1 AS SIGNED INT),
40236 f_charbig = CONCAT('===',f_char1,'===');
40237 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
40238 BEGIN
40239 SET new.f_int1 = @my_max1 + @counter,
40240 new.f_int2 = @my_min2 - @counter,
40241 new.f_charbig = '####updated per insert trigger####';
40242 SET @counter = @counter + 1;
40243 END|
40244 SET @counter = 1;
40245 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
40246 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40247 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
40248 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
40249 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
40250 ORDER BY f_int1;
40251 DROP TRIGGER trg_3;
40252         
40253 # check trigger-11 success:     1
40254 DELETE FROM t1
40255 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
40256 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
40257 AND f_charbig = '####updated per insert trigger####';
40258 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
40259 BEGIN
40260 SET new.f_int1 = @my_max1 + @counter,
40261 new.f_int2 = @my_min2 - @counter,
40262 new.f_charbig = '####updated per insert trigger####';
40263 SET @counter = @counter + 1;
40264 END|
40265 SET @counter = 1;
40266 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
40267 INSERT INTO t1 (f_char1, f_char2, f_charbig)
40268 SELECT CAST(f_int1 AS CHAR),
40269 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
40270 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
40271 ORDER BY f_int1;
40272 DROP TRIGGER trg_3;
40273         
40274 # check trigger-12 success:     1
40275 DELETE FROM t1
40276 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
40277 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
40278 AND f_charbig = '####updated per insert trigger####';
40279 ANALYZE  TABLE t1;
40280 Table   Op      Msg_type        Msg_text
40281 test.t1 analyze status  OK
40282 CHECK    TABLE t1 EXTENDED;
40283 Table   Op      Msg_type        Msg_text
40284 test.t1 check   status  OK
40285 CHECKSUM TABLE t1 EXTENDED;
40286 Table   Checksum
40287 test.t1 <some_value>
40288 OPTIMIZE TABLE t1;
40289 Table   Op      Msg_type        Msg_text
40290 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
40291 test.t1 optimize        status  OK
40292 # check layout success:    1
40293 REPAIR   TABLE t1 EXTENDED;
40294 Table   Op      Msg_type        Msg_text
40295 test.t1 repair  note    The storage engine for the table doesn't support repair
40296 # check layout success:    1
40297 TRUNCATE t1;
40298         
40299 # check TRUNCATE success:       1
40300 # check layout success:    1
40301 # End usability test (inc/partition_check.inc)
40302 DROP TABLE t1;
40303 CREATE TABLE t1 (
40304 f_int1 INTEGER,
40305 f_int2 INTEGER,
40306 f_char1 CHAR(20),
40307 f_char2 CHAR(20),
40308 f_charbig VARCHAR(1000)
40309 , PRIMARY KEY (f_int2,f_int1)
40311 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
40312 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40313 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
40314 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
40315 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
40316 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40317 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
40318 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
40319 # Start usability test (inc/partition_check.inc)
40320 create_command
40321 SHOW CREATE TABLE t1;
40322 Table   Create Table
40323 t1      CREATE TABLE `t1` (
40324   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
40325   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
40326   `f_char1` char(20) DEFAULT NULL,
40327   `f_char2` char(20) DEFAULT NULL,
40328   `f_charbig` varchar(1000) DEFAULT NULL,
40329   PRIMARY KEY (`f_int2`,`f_int1`)
40330 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
40331 /*!50100 PARTITION BY KEY (f_int1,f_int2)
40332 PARTITIONS 5 */
40334 # check prerequisites-1 success:    1
40335 # check COUNT(*) success:    1
40336 # check MIN/MAX(f_int1) success:    1
40337 # check MIN/MAX(f_int2) success:    1
40338 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40339 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
40340 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
40341 WHERE f_int1 IN (2,3);
40342 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
40343 # check prerequisites-3 success:    1
40344 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
40345 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40346 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
40347 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
40348 WHERE f_int1 IN (2,3);
40349 DELETE FROM t1 WHERE f_charbig = 'delete me';
40350 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40351 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
40352 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
40353 WHERE f_int1 IN (2,3);
40354 DELETE FROM t1 WHERE f_charbig = 'delete me';
40355 # check read via f_int1 success: 1
40356 # check read via f_int2 success: 1
40357         
40358 # check multiple-1 success:     1
40359 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
40360         
40361 # check multiple-2 success:     1
40362 INSERT INTO t1 SELECT * FROM t0_template
40363 WHERE MOD(f_int1,3) = 0;
40364         
40365 # check multiple-3 success:     1
40366 UPDATE t1 SET f_int1 = f_int1 + @max_row
40367 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
40368 AND @max_row_div2 + @max_row_div4;
40369         
40370 # check multiple-4 success:     1
40371 DELETE FROM t1
40372 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
40373 AND @max_row_div2 + @max_row_div4 + @max_row;
40374         
40375 # check multiple-5 success:     1
40376 SELECT COUNT(*) INTO @try_count FROM t0_template
40377 WHERE MOD(f_int1,3) = 0
40378 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40379 SELECT COUNT(*) INTO @clash_count
40380 FROM t1 INNER JOIN t0_template USING(f_int1)
40381 WHERE MOD(f_int1,3) = 0
40382 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40383 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
40384 INSERT INTO t1
40385 SET f_int1 = @cur_value , f_int2 = @cur_value,
40386 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
40387 f_charbig = '#SINGLE#';
40388         
40389 # check single-1 success:       1
40390 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
40391 INSERT INTO t1
40392 SET f_int1 = @cur_value , f_int2 = @cur_value,
40393 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
40394 f_charbig = '#SINGLE#';
40395         
40396 # check single-2 success:       1
40397 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
40398 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
40399 UPDATE t1 SET f_int1 = @cur_value2
40400 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
40401         
40402 # check single-3 success:       1
40403 SET @cur_value1= -1;
40404 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
40405 UPDATE t1 SET f_int1 = @cur_value1
40406 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
40407         
40408 # check single-4 success:       1
40409 SELECT MAX(f_int1) INTO @cur_value FROM t1;
40410 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
40411         
40412 # check single-5 success:       1
40413 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
40414         
40415 # check single-6 success:       1
40416 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
40417 Warnings:
40418 Warning 1264    Out of range value for column 'f_int1' at row 1
40419 Warning 1264    Out of range value for column 'f_int2' at row 1
40420         
40421 # check single-7 success:       1
40422 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
40423 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
40424 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
40425 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
40426 f_charbig = '#NULL#';
40427 INSERT INTO t1
40428 SET f_int1 = NULL , f_int2 = -@max_row,
40429 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
40430 f_charbig = '#NULL#';
40431 ERROR 23000: Column 'f_int1' cannot be null
40432 # check null success:    1
40433 DELETE FROM t1
40434 WHERE f_int1 = 0 AND f_int2 = 0
40435 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
40436 AND f_charbig = '#NULL#';
40437 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40438 SELECT f_int1, f_int1, '', '', 'was inserted'
40439    FROM t0_template source_tab
40440 WHERE MOD(f_int1,3) = 0
40441 AND f_int1 BETWEEN @max_row_div2 AND @max_row
40442 ON DUPLICATE KEY
40443 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
40444 f_int2 = 2 * @max_row + source_tab.f_int1,
40445 f_charbig = 'was updated';
40446         
40447 # check unique-1-a success:     1
40448         
40449 # check unique-1-b success:     1
40450 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40451 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40452 f_int2 = CAST(f_char1 AS SIGNED INT),
40453 f_charbig = CONCAT('===',f_char1,'===')
40454 WHERE f_charbig = 'was updated';
40455 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40456 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
40457    FROM t0_template source_tab
40458 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40459         
40460 # check replace success:        1
40461 DELETE FROM t1
40462 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
40463 DELETE FROM t1
40464 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
40465 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
40466 UPDATE t1 SET f_int2 = f_int1,
40467 f_char1 = CAST(f_int1 AS CHAR),
40468 f_char2 = CAST(f_int1 AS CHAR),
40469 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
40470 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
40471 SET AUTOCOMMIT= 0;
40472 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40473 SELECT f_int1, f_int1, '', '', 'was inserted'
40474 FROM t0_template source_tab
40475 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
40476         
40477 # check transactions-1 success:         1
40478 COMMIT WORK;
40479         
40480 # check transactions-2 success:         1
40481 ROLLBACK WORK;
40482         
40483 # check transactions-3 success:         1
40484 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40485 COMMIT WORK;
40486 ROLLBACK WORK;
40487         
40488 # check transactions-4 success:         1
40489 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40490 SELECT f_int1, f_int1, '', '', 'was inserted'
40491 FROM t0_template source_tab
40492 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
40493         
40494 # check transactions-5 success:         1
40495 ROLLBACK WORK;
40496         
40497 # check transactions-6 success:         1
40498 # INFO: Storage engine used for t1 seems to be transactional.
40499 COMMIT;
40500         
40501 # check transactions-7 success:         1
40502 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40503 COMMIT WORK;
40504 SET @@session.sql_mode = 'traditional';
40505 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
40506 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40507 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
40508 '', '', 'was inserted' FROM t0_template
40509 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
40510 ERROR 22012: Division by 0
40511 COMMIT;
40512         
40513 # check transactions-8 success:         1
40514 # INFO: Storage engine used for t1 seems to be able to revert
40515 #       changes made by the failing statement.
40516 SET @@session.sql_mode = '';
40517 SET AUTOCOMMIT= 1;
40518 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40519 COMMIT WORK;
40520 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
40521         
40522 # check special-1 success:      1
40523 UPDATE t1 SET f_charbig = '';
40524         
40525 # check special-2 success:      1
40526 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
40527 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40528 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
40529 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40530 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40531 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40532 'just inserted' FROM t0_template
40533 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40534 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
40535 BEGIN
40536 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40537 f_charbig = 'updated by trigger'
40538       WHERE f_int1 = new.f_int1;
40539 END|
40540 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40541 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
40542 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40543         
40544 # check trigger-1 success:      1
40545 DROP TRIGGER trg_1;
40546 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40547 f_int2 = CAST(f_char1 AS SIGNED INT),
40548 f_charbig = 'just inserted'
40549    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40550 DELETE FROM t0_aux
40551 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40552 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40553 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40554 'just inserted' FROM t0_template
40555 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40556 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
40557 BEGIN
40558 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40559 f_charbig = 'updated by trigger'
40560       WHERE f_int1 = new.f_int1;
40561 END|
40562 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40563 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
40564 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40565         
40566 # check trigger-2 success:      1
40567 DROP TRIGGER trg_1;
40568 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40569 f_int2 = CAST(f_char1 AS SIGNED INT),
40570 f_charbig = 'just inserted'
40571    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40572 DELETE FROM t0_aux
40573 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40574 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40575 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40576 'just inserted' FROM t0_template
40577 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40578 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
40579 BEGIN
40580 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40581 f_charbig = 'updated by trigger'
40582       WHERE f_int1 = new.f_int1;
40583 END|
40584 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40585 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40586         
40587 # check trigger-3 success:      1
40588 DROP TRIGGER trg_1;
40589 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40590 f_int2 = CAST(f_char1 AS SIGNED INT),
40591 f_charbig = 'just inserted'
40592    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40593 DELETE FROM t0_aux
40594 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40595 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40596 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40597 'just inserted' FROM t0_template
40598 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40599 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
40600 BEGIN
40601 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40602 f_charbig = 'updated by trigger'
40603       WHERE f_int1 = - old.f_int1;
40604 END|
40605 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40606 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40607         
40608 # check trigger-4 success:      1
40609 DROP TRIGGER trg_1;
40610 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40611 f_int2 = CAST(f_char1 AS SIGNED INT),
40612 f_charbig = 'just inserted'
40613    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40614 DELETE FROM t0_aux
40615 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40616 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40617 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40618 'just inserted' FROM t0_template
40619 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40620 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
40621 BEGIN
40622 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40623 f_charbig = 'updated by trigger'
40624       WHERE f_int1 = new.f_int1;
40625 END|
40626 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40627 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40628         
40629 # check trigger-5 success:      1
40630 DROP TRIGGER trg_1;
40631 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40632 f_int2 = CAST(f_char1 AS SIGNED INT),
40633 f_charbig = 'just inserted'
40634    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40635 DELETE FROM t0_aux
40636 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40637 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40638 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40639 'just inserted' FROM t0_template
40640 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40641 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
40642 BEGIN
40643 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40644 f_charbig = 'updated by trigger'
40645       WHERE f_int1 = - old.f_int1;
40646 END|
40647 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
40648 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40649         
40650 # check trigger-6 success:      1
40651 DROP TRIGGER trg_1;
40652 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40653 f_int2 = CAST(f_char1 AS SIGNED INT),
40654 f_charbig = 'just inserted'
40655    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40656 DELETE FROM t0_aux
40657 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40658 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40659 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40660 'just inserted' FROM t0_template
40661 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40662 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
40663 BEGIN
40664 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40665 f_charbig = 'updated by trigger'
40666       WHERE f_int1 = - old.f_int1;
40667 END|
40668 DELETE FROM t0_aux
40669 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40670         
40671 # check trigger-7 success:      1
40672 DROP TRIGGER trg_1;
40673 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40674 f_int2 = CAST(f_char1 AS SIGNED INT),
40675 f_charbig = 'just inserted'
40676    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40677 DELETE FROM t0_aux
40678 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40679 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
40680 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
40681 'just inserted' FROM t0_template
40682 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40683 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
40684 BEGIN
40685 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
40686 f_charbig = 'updated by trigger'
40687       WHERE f_int1 = - old.f_int1;
40688 END|
40689 DELETE FROM t0_aux
40690 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
40691         
40692 # check trigger-8 success:      1
40693 DROP TRIGGER trg_1;
40694 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40695 f_int2 = CAST(f_char1 AS SIGNED INT),
40696 f_charbig = 'just inserted'
40697    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
40698 DELETE FROM t0_aux
40699 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40700 DELETE FROM t1
40701 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
40702 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
40703 BEGIN
40704 SET new.f_int1 = old.f_int1 + @max_row,
40705 new.f_int2 = old.f_int2 - @max_row,
40706 new.f_charbig = '####updated per update trigger####';
40707 END|
40708 UPDATE t1
40709 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
40710 f_charbig = '####updated per update statement itself####';
40711         
40712 # check trigger-9 success:      1
40713 DROP TRIGGER trg_2;
40714 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40715 f_int2 = CAST(f_char1 AS SIGNED INT),
40716 f_charbig = CONCAT('===',f_char1,'===');
40717 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
40718 BEGIN
40719 SET new.f_int1 = new.f_int1 + @max_row,
40720 new.f_int2 = new.f_int2 - @max_row,
40721 new.f_charbig = '####updated per update trigger####';
40722 END|
40723 UPDATE t1
40724 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
40725 f_charbig = '####updated per update statement itself####';
40726         
40727 # check trigger-10 success:     1
40728 DROP TRIGGER trg_2;
40729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40730 f_int2 = CAST(f_char1 AS SIGNED INT),
40731 f_charbig = CONCAT('===',f_char1,'===');
40732 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
40733 BEGIN
40734 SET new.f_int1 = @my_max1 + @counter,
40735 new.f_int2 = @my_min2 - @counter,
40736 new.f_charbig = '####updated per insert trigger####';
40737 SET @counter = @counter + 1;
40738 END|
40739 SET @counter = 1;
40740 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
40741 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40742 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
40743 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
40744 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
40745 ORDER BY f_int1;
40746 DROP TRIGGER trg_3;
40747         
40748 # check trigger-11 success:     1
40749 DELETE FROM t1
40750 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
40751 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
40752 AND f_charbig = '####updated per insert trigger####';
40753 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
40754 BEGIN
40755 SET new.f_int1 = @my_max1 + @counter,
40756 new.f_int2 = @my_min2 - @counter,
40757 new.f_charbig = '####updated per insert trigger####';
40758 SET @counter = @counter + 1;
40759 END|
40760 SET @counter = 1;
40761 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
40762 INSERT INTO t1 (f_char1, f_char2, f_charbig)
40763 SELECT CAST(f_int1 AS CHAR),
40764 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
40765 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
40766 ORDER BY f_int1;
40767 DROP TRIGGER trg_3;
40768         
40769 # check trigger-12 success:     1
40770 DELETE FROM t1
40771 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
40772 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
40773 AND f_charbig = '####updated per insert trigger####';
40774 ANALYZE  TABLE t1;
40775 Table   Op      Msg_type        Msg_text
40776 test.t1 analyze status  OK
40777 CHECK    TABLE t1 EXTENDED;
40778 Table   Op      Msg_type        Msg_text
40779 test.t1 check   status  OK
40780 CHECKSUM TABLE t1 EXTENDED;
40781 Table   Checksum
40782 test.t1 <some_value>
40783 OPTIMIZE TABLE t1;
40784 Table   Op      Msg_type        Msg_text
40785 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
40786 test.t1 optimize        status  OK
40787 # check layout success:    1
40788 REPAIR   TABLE t1 EXTENDED;
40789 Table   Op      Msg_type        Msg_text
40790 test.t1 repair  note    The storage engine for the table doesn't support repair
40791 # check layout success:    1
40792 TRUNCATE t1;
40793         
40794 # check TRUNCATE success:       1
40795 # check layout success:    1
40796 # End usability test (inc/partition_check.inc)
40797 DROP TABLE t1;
40798 CREATE TABLE t1 (
40799 f_int1 INTEGER,
40800 f_int2 INTEGER,
40801 f_char1 CHAR(20),
40802 f_char2 CHAR(20),
40803 f_charbig VARCHAR(1000)
40804 , PRIMARY KEY (f_int2,f_int1)
40806 PARTITION BY LIST(MOD(f_int1 + f_int2,4))
40807 (PARTITION part_3 VALUES IN (-3),
40808 PARTITION part_2 VALUES IN (-2),
40809 PARTITION part_1 VALUES IN (-1),
40810 PARTITION part_N VALUES IN (NULL),
40811 PARTITION part0 VALUES IN (0),
40812 PARTITION part1 VALUES IN (1),
40813 PARTITION part2 VALUES IN (2),
40814 PARTITION part3 VALUES IN (3));
40815 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40816 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
40817 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
40818 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
40819 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
40820 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
40821 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
40822 # Start usability test (inc/partition_check.inc)
40823 create_command
40824 SHOW CREATE TABLE t1;
40825 Table   Create Table
40826 t1      CREATE TABLE `t1` (
40827   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
40828   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
40829   `f_char1` char(20) DEFAULT NULL,
40830   `f_char2` char(20) DEFAULT NULL,
40831   `f_charbig` varchar(1000) DEFAULT NULL,
40832   PRIMARY KEY (`f_int2`,`f_int1`)
40833 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
40834 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
40835 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
40836  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
40837  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
40838  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
40839  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
40840  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
40841  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
40842  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
40844 # check prerequisites-1 success:    1
40845 # check COUNT(*) success:    1
40846 # check MIN/MAX(f_int1) success:    1
40847 # check MIN/MAX(f_int2) success:    1
40848 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40849 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
40850 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
40851 WHERE f_int1 IN (2,3);
40852 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
40853 # check prerequisites-3 success:    1
40854 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
40855 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40856 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
40857 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
40858 WHERE f_int1 IN (2,3);
40859 DELETE FROM t1 WHERE f_charbig = 'delete me';
40860 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40861 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
40862 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
40863 WHERE f_int1 IN (2,3);
40864 DELETE FROM t1 WHERE f_charbig = 'delete me';
40865 # check read via f_int1 success: 1
40866 # check read via f_int2 success: 1
40867         
40868 # check multiple-1 success:     1
40869 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
40870         
40871 # check multiple-2 success:     1
40872 INSERT INTO t1 SELECT * FROM t0_template
40873 WHERE MOD(f_int1,3) = 0;
40874         
40875 # check multiple-3 success:     1
40876 UPDATE t1 SET f_int1 = f_int1 + @max_row
40877 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
40878 AND @max_row_div2 + @max_row_div4;
40879         
40880 # check multiple-4 success:     1
40881 DELETE FROM t1
40882 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
40883 AND @max_row_div2 + @max_row_div4 + @max_row;
40884         
40885 # check multiple-5 success:     1
40886 SELECT COUNT(*) INTO @try_count FROM t0_template
40887 WHERE MOD(f_int1,3) = 0
40888 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40889 SELECT COUNT(*) INTO @clash_count
40890 FROM t1 INNER JOIN t0_template USING(f_int1)
40891 WHERE MOD(f_int1,3) = 0
40892 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40893 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
40894 INSERT INTO t1
40895 SET f_int1 = @cur_value , f_int2 = @cur_value,
40896 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
40897 f_charbig = '#SINGLE#';
40898         
40899 # check single-1 success:       1
40900 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
40901 INSERT INTO t1
40902 SET f_int1 = @cur_value , f_int2 = @cur_value,
40903 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
40904 f_charbig = '#SINGLE#';
40905         
40906 # check single-2 success:       1
40907 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
40908 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
40909 UPDATE t1 SET f_int1 = @cur_value2
40910 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
40911         
40912 # check single-3 success:       1
40913 SET @cur_value1= -1;
40914 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
40915 UPDATE t1 SET f_int1 = @cur_value1
40916 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
40917         
40918 # check single-4 success:       1
40919 SELECT MAX(f_int1) INTO @cur_value FROM t1;
40920 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
40921         
40922 # check single-5 success:       1
40923 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
40924         
40925 # check single-6 success:       1
40926 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
40927 Warnings:
40928 Warning 1264    Out of range value for column 'f_int1' at row 1
40929 Warning 1264    Out of range value for column 'f_int2' at row 1
40930         
40931 # check single-7 success:       1
40932 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
40933 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
40934 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
40935 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
40936 f_charbig = '#NULL#';
40937 INSERT INTO t1
40938 SET f_int1 = NULL , f_int2 = -@max_row,
40939 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
40940 f_charbig = '#NULL#';
40941 ERROR 23000: Column 'f_int1' cannot be null
40942 # check null success:    1
40943 DELETE FROM t1
40944 WHERE f_int1 = 0 AND f_int2 = 0
40945 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
40946 AND f_charbig = '#NULL#';
40947 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40948 SELECT f_int1, f_int1, '', '', 'was inserted'
40949    FROM t0_template source_tab
40950 WHERE MOD(f_int1,3) = 0
40951 AND f_int1 BETWEEN @max_row_div2 AND @max_row
40952 ON DUPLICATE KEY
40953 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
40954 f_int2 = 2 * @max_row + source_tab.f_int1,
40955 f_charbig = 'was updated';
40956         
40957 # check unique-1-a success:     1
40958         
40959 # check unique-1-b success:     1
40960 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40961 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
40962 f_int2 = CAST(f_char1 AS SIGNED INT),
40963 f_charbig = CONCAT('===',f_char1,'===')
40964 WHERE f_charbig = 'was updated';
40965 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40966 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
40967    FROM t0_template source_tab
40968 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
40969         
40970 # check replace success:        1
40971 DELETE FROM t1
40972 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
40973 DELETE FROM t1
40974 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
40975 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
40976 UPDATE t1 SET f_int2 = f_int1,
40977 f_char1 = CAST(f_int1 AS CHAR),
40978 f_char2 = CAST(f_int1 AS CHAR),
40979 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
40980 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
40981 SET AUTOCOMMIT= 0;
40982 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
40983 SELECT f_int1, f_int1, '', '', 'was inserted'
40984 FROM t0_template source_tab
40985 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
40986         
40987 # check transactions-1 success:         1
40988 COMMIT WORK;
40989         
40990 # check transactions-2 success:         1
40991 ROLLBACK WORK;
40992         
40993 # check transactions-3 success:         1
40994 DELETE FROM t1 WHERE f_charbig = 'was inserted';
40995 COMMIT WORK;
40996 ROLLBACK WORK;
40997         
40998 # check transactions-4 success:         1
40999 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41000 SELECT f_int1, f_int1, '', '', 'was inserted'
41001 FROM t0_template source_tab
41002 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41003         
41004 # check transactions-5 success:         1
41005 ROLLBACK WORK;
41006         
41007 # check transactions-6 success:         1
41008 # INFO: Storage engine used for t1 seems to be transactional.
41009 COMMIT;
41010         
41011 # check transactions-7 success:         1
41012 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41013 COMMIT WORK;
41014 SET @@session.sql_mode = 'traditional';
41015 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
41016 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41017 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
41018 '', '', 'was inserted' FROM t0_template
41019 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41020 ERROR 22012: Division by 0
41021 COMMIT;
41022         
41023 # check transactions-8 success:         1
41024 # INFO: Storage engine used for t1 seems to be able to revert
41025 #       changes made by the failing statement.
41026 SET @@session.sql_mode = '';
41027 SET AUTOCOMMIT= 1;
41028 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41029 COMMIT WORK;
41030 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
41031         
41032 # check special-1 success:      1
41033 UPDATE t1 SET f_charbig = '';
41034         
41035 # check special-2 success:      1
41036 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
41037 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41038 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
41039 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41040 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41041 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41042 'just inserted' FROM t0_template
41043 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41044 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
41045 BEGIN
41046 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41047 f_charbig = 'updated by trigger'
41048       WHERE f_int1 = new.f_int1;
41049 END|
41050 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41051 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
41052 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41053         
41054 # check trigger-1 success:      1
41055 DROP TRIGGER trg_1;
41056 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41057 f_int2 = CAST(f_char1 AS SIGNED INT),
41058 f_charbig = 'just inserted'
41059    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41060 DELETE FROM t0_aux
41061 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41062 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41063 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41064 'just inserted' FROM t0_template
41065 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41066 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
41067 BEGIN
41068 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41069 f_charbig = 'updated by trigger'
41070       WHERE f_int1 = new.f_int1;
41071 END|
41072 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41073 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
41074 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41075         
41076 # check trigger-2 success:      1
41077 DROP TRIGGER trg_1;
41078 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41079 f_int2 = CAST(f_char1 AS SIGNED INT),
41080 f_charbig = 'just inserted'
41081    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41082 DELETE FROM t0_aux
41083 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41084 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41085 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41086 'just inserted' FROM t0_template
41087 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41088 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
41089 BEGIN
41090 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41091 f_charbig = 'updated by trigger'
41092       WHERE f_int1 = new.f_int1;
41093 END|
41094 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41095 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41096         
41097 # check trigger-3 success:      1
41098 DROP TRIGGER trg_1;
41099 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41100 f_int2 = CAST(f_char1 AS SIGNED INT),
41101 f_charbig = 'just inserted'
41102    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41103 DELETE FROM t0_aux
41104 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41105 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41106 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41107 'just inserted' FROM t0_template
41108 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41109 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
41110 BEGIN
41111 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41112 f_charbig = 'updated by trigger'
41113       WHERE f_int1 = - old.f_int1;
41114 END|
41115 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41116 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41117         
41118 # check trigger-4 success:      1
41119 DROP TRIGGER trg_1;
41120 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41121 f_int2 = CAST(f_char1 AS SIGNED INT),
41122 f_charbig = 'just inserted'
41123    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41124 DELETE FROM t0_aux
41125 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41126 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41127 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41128 'just inserted' FROM t0_template
41129 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41130 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
41131 BEGIN
41132 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41133 f_charbig = 'updated by trigger'
41134       WHERE f_int1 = new.f_int1;
41135 END|
41136 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41137 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41138         
41139 # check trigger-5 success:      1
41140 DROP TRIGGER trg_1;
41141 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41142 f_int2 = CAST(f_char1 AS SIGNED INT),
41143 f_charbig = 'just inserted'
41144    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41145 DELETE FROM t0_aux
41146 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41147 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41148 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41149 'just inserted' FROM t0_template
41150 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41151 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
41152 BEGIN
41153 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41154 f_charbig = 'updated by trigger'
41155       WHERE f_int1 = - old.f_int1;
41156 END|
41157 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41158 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41159         
41160 # check trigger-6 success:      1
41161 DROP TRIGGER trg_1;
41162 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41163 f_int2 = CAST(f_char1 AS SIGNED INT),
41164 f_charbig = 'just inserted'
41165    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41166 DELETE FROM t0_aux
41167 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41168 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41169 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41170 'just inserted' FROM t0_template
41171 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41172 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
41173 BEGIN
41174 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41175 f_charbig = 'updated by trigger'
41176       WHERE f_int1 = - old.f_int1;
41177 END|
41178 DELETE FROM t0_aux
41179 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41180         
41181 # check trigger-7 success:      1
41182 DROP TRIGGER trg_1;
41183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41184 f_int2 = CAST(f_char1 AS SIGNED INT),
41185 f_charbig = 'just inserted'
41186    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41187 DELETE FROM t0_aux
41188 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41189 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41190 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41191 'just inserted' FROM t0_template
41192 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41193 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
41194 BEGIN
41195 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41196 f_charbig = 'updated by trigger'
41197       WHERE f_int1 = - old.f_int1;
41198 END|
41199 DELETE FROM t0_aux
41200 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41201         
41202 # check trigger-8 success:      1
41203 DROP TRIGGER trg_1;
41204 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41205 f_int2 = CAST(f_char1 AS SIGNED INT),
41206 f_charbig = 'just inserted'
41207    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41208 DELETE FROM t0_aux
41209 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41210 DELETE FROM t1
41211 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41212 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
41213 BEGIN
41214 SET new.f_int1 = old.f_int1 + @max_row,
41215 new.f_int2 = old.f_int2 - @max_row,
41216 new.f_charbig = '####updated per update trigger####';
41217 END|
41218 UPDATE t1
41219 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
41220 f_charbig = '####updated per update statement itself####';
41221         
41222 # check trigger-9 success:      1
41223 DROP TRIGGER trg_2;
41224 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41225 f_int2 = CAST(f_char1 AS SIGNED INT),
41226 f_charbig = CONCAT('===',f_char1,'===');
41227 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
41228 BEGIN
41229 SET new.f_int1 = new.f_int1 + @max_row,
41230 new.f_int2 = new.f_int2 - @max_row,
41231 new.f_charbig = '####updated per update trigger####';
41232 END|
41233 UPDATE t1
41234 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
41235 f_charbig = '####updated per update statement itself####';
41236         
41237 # check trigger-10 success:     1
41238 DROP TRIGGER trg_2;
41239 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41240 f_int2 = CAST(f_char1 AS SIGNED INT),
41241 f_charbig = CONCAT('===',f_char1,'===');
41242 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
41243 BEGIN
41244 SET new.f_int1 = @my_max1 + @counter,
41245 new.f_int2 = @my_min2 - @counter,
41246 new.f_charbig = '####updated per insert trigger####';
41247 SET @counter = @counter + 1;
41248 END|
41249 SET @counter = 1;
41250 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
41251 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41252 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
41253 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
41254 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
41255 ORDER BY f_int1;
41256 DROP TRIGGER trg_3;
41257         
41258 # check trigger-11 success:     1
41259 DELETE FROM t1
41260 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
41261 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
41262 AND f_charbig = '####updated per insert trigger####';
41263 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
41264 BEGIN
41265 SET new.f_int1 = @my_max1 + @counter,
41266 new.f_int2 = @my_min2 - @counter,
41267 new.f_charbig = '####updated per insert trigger####';
41268 SET @counter = @counter + 1;
41269 END|
41270 SET @counter = 1;
41271 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
41272 INSERT INTO t1 (f_char1, f_char2, f_charbig)
41273 SELECT CAST(f_int1 AS CHAR),
41274 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
41275 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
41276 ORDER BY f_int1;
41277 DROP TRIGGER trg_3;
41278         
41279 # check trigger-12 success:     1
41280 DELETE FROM t1
41281 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
41282 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
41283 AND f_charbig = '####updated per insert trigger####';
41284 ANALYZE  TABLE t1;
41285 Table   Op      Msg_type        Msg_text
41286 test.t1 analyze status  OK
41287 CHECK    TABLE t1 EXTENDED;
41288 Table   Op      Msg_type        Msg_text
41289 test.t1 check   status  OK
41290 CHECKSUM TABLE t1 EXTENDED;
41291 Table   Checksum
41292 test.t1 <some_value>
41293 OPTIMIZE TABLE t1;
41294 Table   Op      Msg_type        Msg_text
41295 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
41296 test.t1 optimize        status  OK
41297 # check layout success:    1
41298 REPAIR   TABLE t1 EXTENDED;
41299 Table   Op      Msg_type        Msg_text
41300 test.t1 repair  note    The storage engine for the table doesn't support repair
41301 # check layout success:    1
41302 TRUNCATE t1;
41303         
41304 # check TRUNCATE success:       1
41305 # check layout success:    1
41306 # End usability test (inc/partition_check.inc)
41307 DROP TABLE t1;
41308 CREATE TABLE t1 (
41309 f_int1 INTEGER,
41310 f_int2 INTEGER,
41311 f_char1 CHAR(20),
41312 f_char2 CHAR(20),
41313 f_charbig VARCHAR(1000)
41314 , PRIMARY KEY (f_int2,f_int1)
41316 PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
41317 (PARTITION parta VALUES LESS THAN (0),
41318 PARTITION partb VALUES LESS THAN (5),
41319 PARTITION partc VALUES LESS THAN (10),
41320 PARTITION partd VALUES LESS THAN (10 + 5),
41321 PARTITION parte VALUES LESS THAN (20),
41322 PARTITION partf VALUES LESS THAN (2147483646));
41323 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41324 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
41325 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
41326 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
41327 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41328 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
41329 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
41330 # Start usability test (inc/partition_check.inc)
41331 create_command
41332 SHOW CREATE TABLE t1;
41333 Table   Create Table
41334 t1      CREATE TABLE `t1` (
41335   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
41336   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
41337   `f_char1` char(20) DEFAULT NULL,
41338   `f_char2` char(20) DEFAULT NULL,
41339   `f_charbig` varchar(1000) DEFAULT NULL,
41340   PRIMARY KEY (`f_int2`,`f_int1`)
41341 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
41342 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
41343 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
41344  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
41345  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
41346  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
41347  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
41348  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
41350 # check prerequisites-1 success:    1
41351 # check COUNT(*) success:    1
41352 # check MIN/MAX(f_int1) success:    1
41353 # check MIN/MAX(f_int2) success:    1
41354 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41355 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
41356 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
41357 WHERE f_int1 IN (2,3);
41358 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
41359 # check prerequisites-3 success:    1
41360 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
41361 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41362 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
41363 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
41364 WHERE f_int1 IN (2,3);
41365 DELETE FROM t1 WHERE f_charbig = 'delete me';
41366 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41367 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
41368 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
41369 WHERE f_int1 IN (2,3);
41370 DELETE FROM t1 WHERE f_charbig = 'delete me';
41371 # check read via f_int1 success: 1
41372 # check read via f_int2 success: 1
41373         
41374 # check multiple-1 success:     1
41375 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
41376         
41377 # check multiple-2 success:     1
41378 INSERT INTO t1 SELECT * FROM t0_template
41379 WHERE MOD(f_int1,3) = 0;
41380         
41381 # check multiple-3 success:     1
41382 UPDATE t1 SET f_int1 = f_int1 + @max_row
41383 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
41384 AND @max_row_div2 + @max_row_div4;
41385         
41386 # check multiple-4 success:     1
41387 DELETE FROM t1
41388 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
41389 AND @max_row_div2 + @max_row_div4 + @max_row;
41390         
41391 # check multiple-5 success:     1
41392 SELECT COUNT(*) INTO @try_count FROM t0_template
41393 WHERE MOD(f_int1,3) = 0
41394 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41395 SELECT COUNT(*) INTO @clash_count
41396 FROM t1 INNER JOIN t0_template USING(f_int1)
41397 WHERE MOD(f_int1,3) = 0
41398 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41399 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
41400 INSERT INTO t1
41401 SET f_int1 = @cur_value , f_int2 = @cur_value,
41402 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
41403 f_charbig = '#SINGLE#';
41404         
41405 # check single-1 success:       1
41406 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
41407 INSERT INTO t1
41408 SET f_int1 = @cur_value , f_int2 = @cur_value,
41409 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
41410 f_charbig = '#SINGLE#';
41411         
41412 # check single-2 success:       1
41413 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
41414 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
41415 UPDATE t1 SET f_int1 = @cur_value2
41416 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
41417         
41418 # check single-3 success:       1
41419 SET @cur_value1= -1;
41420 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
41421 UPDATE t1 SET f_int1 = @cur_value1
41422 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
41423         
41424 # check single-4 success:       1
41425 SELECT MAX(f_int1) INTO @cur_value FROM t1;
41426 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
41427         
41428 # check single-5 success:       1
41429 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
41430         
41431 # check single-6 success:       1
41432 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
41433 Warnings:
41434 Warning 1264    Out of range value for column 'f_int1' at row 1
41435 Warning 1264    Out of range value for column 'f_int2' at row 1
41436         
41437 # check single-7 success:       1
41438 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
41439 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
41440 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
41441 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
41442 f_charbig = '#NULL#';
41443 INSERT INTO t1
41444 SET f_int1 = NULL , f_int2 = -@max_row,
41445 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
41446 f_charbig = '#NULL#';
41447 ERROR 23000: Column 'f_int1' cannot be null
41448 # check null success:    1
41449 DELETE FROM t1
41450 WHERE f_int1 = 0 AND f_int2 = 0
41451 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
41452 AND f_charbig = '#NULL#';
41453 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41454 SELECT f_int1, f_int1, '', '', 'was inserted'
41455    FROM t0_template source_tab
41456 WHERE MOD(f_int1,3) = 0
41457 AND f_int1 BETWEEN @max_row_div2 AND @max_row
41458 ON DUPLICATE KEY
41459 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
41460 f_int2 = 2 * @max_row + source_tab.f_int1,
41461 f_charbig = 'was updated';
41462         
41463 # check unique-1-a success:     1
41464         
41465 # check unique-1-b success:     1
41466 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41467 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41468 f_int2 = CAST(f_char1 AS SIGNED INT),
41469 f_charbig = CONCAT('===',f_char1,'===')
41470 WHERE f_charbig = 'was updated';
41471 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41472 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
41473    FROM t0_template source_tab
41474 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41475         
41476 # check replace success:        1
41477 DELETE FROM t1
41478 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
41479 DELETE FROM t1
41480 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
41481 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
41482 UPDATE t1 SET f_int2 = f_int1,
41483 f_char1 = CAST(f_int1 AS CHAR),
41484 f_char2 = CAST(f_int1 AS CHAR),
41485 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
41486 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
41487 SET AUTOCOMMIT= 0;
41488 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41489 SELECT f_int1, f_int1, '', '', 'was inserted'
41490 FROM t0_template source_tab
41491 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41492         
41493 # check transactions-1 success:         1
41494 COMMIT WORK;
41495         
41496 # check transactions-2 success:         1
41497 ROLLBACK WORK;
41498         
41499 # check transactions-3 success:         1
41500 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41501 COMMIT WORK;
41502 ROLLBACK WORK;
41503         
41504 # check transactions-4 success:         1
41505 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41506 SELECT f_int1, f_int1, '', '', 'was inserted'
41507 FROM t0_template source_tab
41508 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41509         
41510 # check transactions-5 success:         1
41511 ROLLBACK WORK;
41512         
41513 # check transactions-6 success:         1
41514 # INFO: Storage engine used for t1 seems to be transactional.
41515 COMMIT;
41516         
41517 # check transactions-7 success:         1
41518 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41519 COMMIT WORK;
41520 SET @@session.sql_mode = 'traditional';
41521 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
41522 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41523 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
41524 '', '', 'was inserted' FROM t0_template
41525 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41526 ERROR 22012: Division by 0
41527 COMMIT;
41528         
41529 # check transactions-8 success:         1
41530 # INFO: Storage engine used for t1 seems to be able to revert
41531 #       changes made by the failing statement.
41532 SET @@session.sql_mode = '';
41533 SET AUTOCOMMIT= 1;
41534 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41535 COMMIT WORK;
41536 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
41537         
41538 # check special-1 success:      1
41539 UPDATE t1 SET f_charbig = '';
41540         
41541 # check special-2 success:      1
41542 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
41543 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41544 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
41545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41546 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41547 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41548 'just inserted' FROM t0_template
41549 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41550 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
41551 BEGIN
41552 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41553 f_charbig = 'updated by trigger'
41554       WHERE f_int1 = new.f_int1;
41555 END|
41556 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41557 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
41558 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41559         
41560 # check trigger-1 success:      1
41561 DROP TRIGGER trg_1;
41562 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41563 f_int2 = CAST(f_char1 AS SIGNED INT),
41564 f_charbig = 'just inserted'
41565    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41566 DELETE FROM t0_aux
41567 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41568 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41569 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41570 'just inserted' FROM t0_template
41571 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41572 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
41573 BEGIN
41574 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41575 f_charbig = 'updated by trigger'
41576       WHERE f_int1 = new.f_int1;
41577 END|
41578 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41579 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
41580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41581         
41582 # check trigger-2 success:      1
41583 DROP TRIGGER trg_1;
41584 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41585 f_int2 = CAST(f_char1 AS SIGNED INT),
41586 f_charbig = 'just inserted'
41587    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41588 DELETE FROM t0_aux
41589 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41590 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41591 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41592 'just inserted' FROM t0_template
41593 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41594 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
41595 BEGIN
41596 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41597 f_charbig = 'updated by trigger'
41598       WHERE f_int1 = new.f_int1;
41599 END|
41600 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41601 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41602         
41603 # check trigger-3 success:      1
41604 DROP TRIGGER trg_1;
41605 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41606 f_int2 = CAST(f_char1 AS SIGNED INT),
41607 f_charbig = 'just inserted'
41608    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41609 DELETE FROM t0_aux
41610 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41611 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41612 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41613 'just inserted' FROM t0_template
41614 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41615 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
41616 BEGIN
41617 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41618 f_charbig = 'updated by trigger'
41619       WHERE f_int1 = - old.f_int1;
41620 END|
41621 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41622 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41623         
41624 # check trigger-4 success:      1
41625 DROP TRIGGER trg_1;
41626 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41627 f_int2 = CAST(f_char1 AS SIGNED INT),
41628 f_charbig = 'just inserted'
41629    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41630 DELETE FROM t0_aux
41631 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41632 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41633 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41634 'just inserted' FROM t0_template
41635 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41636 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
41637 BEGIN
41638 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41639 f_charbig = 'updated by trigger'
41640       WHERE f_int1 = new.f_int1;
41641 END|
41642 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41643 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41644         
41645 # check trigger-5 success:      1
41646 DROP TRIGGER trg_1;
41647 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41648 f_int2 = CAST(f_char1 AS SIGNED INT),
41649 f_charbig = 'just inserted'
41650    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41651 DELETE FROM t0_aux
41652 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41653 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41654 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41655 'just inserted' FROM t0_template
41656 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41657 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
41658 BEGIN
41659 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41660 f_charbig = 'updated by trigger'
41661       WHERE f_int1 = - old.f_int1;
41662 END|
41663 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
41664 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41665         
41666 # check trigger-6 success:      1
41667 DROP TRIGGER trg_1;
41668 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41669 f_int2 = CAST(f_char1 AS SIGNED INT),
41670 f_charbig = 'just inserted'
41671    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41672 DELETE FROM t0_aux
41673 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41674 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41675 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41676 'just inserted' FROM t0_template
41677 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41678 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
41679 BEGIN
41680 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41681 f_charbig = 'updated by trigger'
41682       WHERE f_int1 = - old.f_int1;
41683 END|
41684 DELETE FROM t0_aux
41685 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41686         
41687 # check trigger-7 success:      1
41688 DROP TRIGGER trg_1;
41689 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41690 f_int2 = CAST(f_char1 AS SIGNED INT),
41691 f_charbig = 'just inserted'
41692    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41693 DELETE FROM t0_aux
41694 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41695 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
41696 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
41697 'just inserted' FROM t0_template
41698 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41699 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
41700 BEGIN
41701 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
41702 f_charbig = 'updated by trigger'
41703       WHERE f_int1 = - old.f_int1;
41704 END|
41705 DELETE FROM t0_aux
41706 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
41707         
41708 # check trigger-8 success:      1
41709 DROP TRIGGER trg_1;
41710 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41711 f_int2 = CAST(f_char1 AS SIGNED INT),
41712 f_charbig = 'just inserted'
41713    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
41714 DELETE FROM t0_aux
41715 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41716 DELETE FROM t1
41717 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
41718 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
41719 BEGIN
41720 SET new.f_int1 = old.f_int1 + @max_row,
41721 new.f_int2 = old.f_int2 - @max_row,
41722 new.f_charbig = '####updated per update trigger####';
41723 END|
41724 UPDATE t1
41725 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
41726 f_charbig = '####updated per update statement itself####';
41727         
41728 # check trigger-9 success:      1
41729 DROP TRIGGER trg_2;
41730 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41731 f_int2 = CAST(f_char1 AS SIGNED INT),
41732 f_charbig = CONCAT('===',f_char1,'===');
41733 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
41734 BEGIN
41735 SET new.f_int1 = new.f_int1 + @max_row,
41736 new.f_int2 = new.f_int2 - @max_row,
41737 new.f_charbig = '####updated per update trigger####';
41738 END|
41739 UPDATE t1
41740 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
41741 f_charbig = '####updated per update statement itself####';
41742         
41743 # check trigger-10 success:     1
41744 DROP TRIGGER trg_2;
41745 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41746 f_int2 = CAST(f_char1 AS SIGNED INT),
41747 f_charbig = CONCAT('===',f_char1,'===');
41748 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
41749 BEGIN
41750 SET new.f_int1 = @my_max1 + @counter,
41751 new.f_int2 = @my_min2 - @counter,
41752 new.f_charbig = '####updated per insert trigger####';
41753 SET @counter = @counter + 1;
41754 END|
41755 SET @counter = 1;
41756 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
41757 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41758 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
41759 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
41760 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
41761 ORDER BY f_int1;
41762 DROP TRIGGER trg_3;
41763         
41764 # check trigger-11 success:     1
41765 DELETE FROM t1
41766 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
41767 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
41768 AND f_charbig = '####updated per insert trigger####';
41769 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
41770 BEGIN
41771 SET new.f_int1 = @my_max1 + @counter,
41772 new.f_int2 = @my_min2 - @counter,
41773 new.f_charbig = '####updated per insert trigger####';
41774 SET @counter = @counter + 1;
41775 END|
41776 SET @counter = 1;
41777 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
41778 INSERT INTO t1 (f_char1, f_char2, f_charbig)
41779 SELECT CAST(f_int1 AS CHAR),
41780 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
41781 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
41782 ORDER BY f_int1;
41783 DROP TRIGGER trg_3;
41784         
41785 # check trigger-12 success:     1
41786 DELETE FROM t1
41787 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
41788 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
41789 AND f_charbig = '####updated per insert trigger####';
41790 ANALYZE  TABLE t1;
41791 Table   Op      Msg_type        Msg_text
41792 test.t1 analyze status  OK
41793 CHECK    TABLE t1 EXTENDED;
41794 Table   Op      Msg_type        Msg_text
41795 test.t1 check   status  OK
41796 CHECKSUM TABLE t1 EXTENDED;
41797 Table   Checksum
41798 test.t1 <some_value>
41799 OPTIMIZE TABLE t1;
41800 Table   Op      Msg_type        Msg_text
41801 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
41802 test.t1 optimize        status  OK
41803 # check layout success:    1
41804 REPAIR   TABLE t1 EXTENDED;
41805 Table   Op      Msg_type        Msg_text
41806 test.t1 repair  note    The storage engine for the table doesn't support repair
41807 # check layout success:    1
41808 TRUNCATE t1;
41809         
41810 # check TRUNCATE success:       1
41811 # check layout success:    1
41812 # End usability test (inc/partition_check.inc)
41813 DROP TABLE t1;
41814 CREATE TABLE t1 (
41815 f_int1 INTEGER,
41816 f_int2 INTEGER,
41817 f_char1 CHAR(20),
41818 f_char2 CHAR(20),
41819 f_charbig VARCHAR(1000)
41820 , PRIMARY KEY (f_int2,f_int1)
41822 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
41823 (PARTITION parta VALUES LESS THAN (0),
41824 PARTITION partb VALUES LESS THAN (5),
41825 PARTITION partc VALUES LESS THAN (10),
41826 PARTITION partd VALUES LESS THAN (2147483646));
41827 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41828 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
41829 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
41830 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
41831 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
41832 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
41833 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
41834 # Start usability test (inc/partition_check.inc)
41835 create_command
41836 SHOW CREATE TABLE t1;
41837 Table   Create Table
41838 t1      CREATE TABLE `t1` (
41839   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
41840   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
41841   `f_char1` char(20) DEFAULT NULL,
41842   `f_char2` char(20) DEFAULT NULL,
41843   `f_charbig` varchar(1000) DEFAULT NULL,
41844   PRIMARY KEY (`f_int2`,`f_int1`)
41845 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
41846 /*!50100 PARTITION BY RANGE (f_int1)
41847 SUBPARTITION BY HASH (f_int2)
41848 SUBPARTITIONS 2
41849 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
41850  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
41851  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
41852  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
41854 # check prerequisites-1 success:    1
41855 # check COUNT(*) success:    1
41856 # check MIN/MAX(f_int1) success:    1
41857 # check MIN/MAX(f_int2) success:    1
41858 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41859 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
41860 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
41861 WHERE f_int1 IN (2,3);
41862 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
41863 # check prerequisites-3 success:    1
41864 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
41865 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41866 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
41867 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
41868 WHERE f_int1 IN (2,3);
41869 DELETE FROM t1 WHERE f_charbig = 'delete me';
41870 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41871 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
41872 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
41873 WHERE f_int1 IN (2,3);
41874 DELETE FROM t1 WHERE f_charbig = 'delete me';
41875 # check read via f_int1 success: 1
41876 # check read via f_int2 success: 1
41877         
41878 # check multiple-1 success:     1
41879 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
41880         
41881 # check multiple-2 success:     1
41882 INSERT INTO t1 SELECT * FROM t0_template
41883 WHERE MOD(f_int1,3) = 0;
41884         
41885 # check multiple-3 success:     1
41886 UPDATE t1 SET f_int1 = f_int1 + @max_row
41887 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
41888 AND @max_row_div2 + @max_row_div4;
41889         
41890 # check multiple-4 success:     1
41891 DELETE FROM t1
41892 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
41893 AND @max_row_div2 + @max_row_div4 + @max_row;
41894         
41895 # check multiple-5 success:     1
41896 SELECT COUNT(*) INTO @try_count FROM t0_template
41897 WHERE MOD(f_int1,3) = 0
41898 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41899 SELECT COUNT(*) INTO @clash_count
41900 FROM t1 INNER JOIN t0_template USING(f_int1)
41901 WHERE MOD(f_int1,3) = 0
41902 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41903 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
41904 INSERT INTO t1
41905 SET f_int1 = @cur_value , f_int2 = @cur_value,
41906 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
41907 f_charbig = '#SINGLE#';
41908         
41909 # check single-1 success:       1
41910 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
41911 INSERT INTO t1
41912 SET f_int1 = @cur_value , f_int2 = @cur_value,
41913 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
41914 f_charbig = '#SINGLE#';
41915         
41916 # check single-2 success:       1
41917 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
41918 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
41919 UPDATE t1 SET f_int1 = @cur_value2
41920 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
41921         
41922 # check single-3 success:       1
41923 SET @cur_value1= -1;
41924 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
41925 UPDATE t1 SET f_int1 = @cur_value1
41926 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
41927         
41928 # check single-4 success:       1
41929 SELECT MAX(f_int1) INTO @cur_value FROM t1;
41930 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
41931         
41932 # check single-5 success:       1
41933 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
41934         
41935 # check single-6 success:       1
41936 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
41937 Warnings:
41938 Warning 1264    Out of range value for column 'f_int1' at row 1
41939 Warning 1264    Out of range value for column 'f_int2' at row 1
41940         
41941 # check single-7 success:       1
41942 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
41943 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
41944 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
41945 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
41946 f_charbig = '#NULL#';
41947 INSERT INTO t1
41948 SET f_int1 = NULL , f_int2 = -@max_row,
41949 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
41950 f_charbig = '#NULL#';
41951 ERROR 23000: Column 'f_int1' cannot be null
41952 # check null success:    1
41953 DELETE FROM t1
41954 WHERE f_int1 = 0 AND f_int2 = 0
41955 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
41956 AND f_charbig = '#NULL#';
41957 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41958 SELECT f_int1, f_int1, '', '', 'was inserted'
41959    FROM t0_template source_tab
41960 WHERE MOD(f_int1,3) = 0
41961 AND f_int1 BETWEEN @max_row_div2 AND @max_row
41962 ON DUPLICATE KEY
41963 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
41964 f_int2 = 2 * @max_row + source_tab.f_int1,
41965 f_charbig = 'was updated';
41966         
41967 # check unique-1-a success:     1
41968         
41969 # check unique-1-b success:     1
41970 DELETE FROM t1 WHERE f_charbig = 'was inserted';
41971 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
41972 f_int2 = CAST(f_char1 AS SIGNED INT),
41973 f_charbig = CONCAT('===',f_char1,'===')
41974 WHERE f_charbig = 'was updated';
41975 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41976 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
41977    FROM t0_template source_tab
41978 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
41979         
41980 # check replace success:        1
41981 DELETE FROM t1
41982 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
41983 DELETE FROM t1
41984 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
41985 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
41986 UPDATE t1 SET f_int2 = f_int1,
41987 f_char1 = CAST(f_int1 AS CHAR),
41988 f_char2 = CAST(f_int1 AS CHAR),
41989 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
41990 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
41991 SET AUTOCOMMIT= 0;
41992 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
41993 SELECT f_int1, f_int1, '', '', 'was inserted'
41994 FROM t0_template source_tab
41995 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
41996         
41997 # check transactions-1 success:         1
41998 COMMIT WORK;
41999         
42000 # check transactions-2 success:         1
42001 ROLLBACK WORK;
42002         
42003 # check transactions-3 success:         1
42004 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42005 COMMIT WORK;
42006 ROLLBACK WORK;
42007         
42008 # check transactions-4 success:         1
42009 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42010 SELECT f_int1, f_int1, '', '', 'was inserted'
42011 FROM t0_template source_tab
42012 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
42013         
42014 # check transactions-5 success:         1
42015 ROLLBACK WORK;
42016         
42017 # check transactions-6 success:         1
42018 # INFO: Storage engine used for t1 seems to be transactional.
42019 COMMIT;
42020         
42021 # check transactions-7 success:         1
42022 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42023 COMMIT WORK;
42024 SET @@session.sql_mode = 'traditional';
42025 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
42026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42027 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
42028 '', '', 'was inserted' FROM t0_template
42029 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
42030 ERROR 22012: Division by 0
42031 COMMIT;
42032         
42033 # check transactions-8 success:         1
42034 # INFO: Storage engine used for t1 seems to be able to revert
42035 #       changes made by the failing statement.
42036 SET @@session.sql_mode = '';
42037 SET AUTOCOMMIT= 1;
42038 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42039 COMMIT WORK;
42040 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
42041         
42042 # check special-1 success:      1
42043 UPDATE t1 SET f_charbig = '';
42044         
42045 # check special-2 success:      1
42046 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
42047 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42048 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
42049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42050 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42051 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42052 'just inserted' FROM t0_template
42053 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42054 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
42055 BEGIN
42056 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42057 f_charbig = 'updated by trigger'
42058       WHERE f_int1 = new.f_int1;
42059 END|
42060 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42061 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
42062 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42063         
42064 # check trigger-1 success:      1
42065 DROP TRIGGER trg_1;
42066 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42067 f_int2 = CAST(f_char1 AS SIGNED INT),
42068 f_charbig = 'just inserted'
42069    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42070 DELETE FROM t0_aux
42071 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42072 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42073 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42074 'just inserted' FROM t0_template
42075 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42076 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
42077 BEGIN
42078 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42079 f_charbig = 'updated by trigger'
42080       WHERE f_int1 = new.f_int1;
42081 END|
42082 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42083 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
42084 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42085         
42086 # check trigger-2 success:      1
42087 DROP TRIGGER trg_1;
42088 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42089 f_int2 = CAST(f_char1 AS SIGNED INT),
42090 f_charbig = 'just inserted'
42091    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42092 DELETE FROM t0_aux
42093 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42094 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42095 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42096 'just inserted' FROM t0_template
42097 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42098 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
42099 BEGIN
42100 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42101 f_charbig = 'updated by trigger'
42102       WHERE f_int1 = new.f_int1;
42103 END|
42104 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42105 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42106         
42107 # check trigger-3 success:      1
42108 DROP TRIGGER trg_1;
42109 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42110 f_int2 = CAST(f_char1 AS SIGNED INT),
42111 f_charbig = 'just inserted'
42112    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42113 DELETE FROM t0_aux
42114 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42115 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42116 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42117 'just inserted' FROM t0_template
42118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42119 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
42120 BEGIN
42121 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42122 f_charbig = 'updated by trigger'
42123       WHERE f_int1 = - old.f_int1;
42124 END|
42125 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42126 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42127         
42128 # check trigger-4 success:      1
42129 DROP TRIGGER trg_1;
42130 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42131 f_int2 = CAST(f_char1 AS SIGNED INT),
42132 f_charbig = 'just inserted'
42133    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42134 DELETE FROM t0_aux
42135 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42136 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42137 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42138 'just inserted' FROM t0_template
42139 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42140 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
42141 BEGIN
42142 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42143 f_charbig = 'updated by trigger'
42144       WHERE f_int1 = new.f_int1;
42145 END|
42146 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42147 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42148         
42149 # check trigger-5 success:      1
42150 DROP TRIGGER trg_1;
42151 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42152 f_int2 = CAST(f_char1 AS SIGNED INT),
42153 f_charbig = 'just inserted'
42154    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42155 DELETE FROM t0_aux
42156 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42157 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42158 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42159 'just inserted' FROM t0_template
42160 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42161 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
42162 BEGIN
42163 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42164 f_charbig = 'updated by trigger'
42165       WHERE f_int1 = - old.f_int1;
42166 END|
42167 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42168 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42169         
42170 # check trigger-6 success:      1
42171 DROP TRIGGER trg_1;
42172 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42173 f_int2 = CAST(f_char1 AS SIGNED INT),
42174 f_charbig = 'just inserted'
42175    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42176 DELETE FROM t0_aux
42177 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42178 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42179 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42180 'just inserted' FROM t0_template
42181 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42182 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
42183 BEGIN
42184 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42185 f_charbig = 'updated by trigger'
42186       WHERE f_int1 = - old.f_int1;
42187 END|
42188 DELETE FROM t0_aux
42189 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42190         
42191 # check trigger-7 success:      1
42192 DROP TRIGGER trg_1;
42193 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42194 f_int2 = CAST(f_char1 AS SIGNED INT),
42195 f_charbig = 'just inserted'
42196    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42197 DELETE FROM t0_aux
42198 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42199 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42200 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42201 'just inserted' FROM t0_template
42202 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42203 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
42204 BEGIN
42205 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42206 f_charbig = 'updated by trigger'
42207       WHERE f_int1 = - old.f_int1;
42208 END|
42209 DELETE FROM t0_aux
42210 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42211         
42212 # check trigger-8 success:      1
42213 DROP TRIGGER trg_1;
42214 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42215 f_int2 = CAST(f_char1 AS SIGNED INT),
42216 f_charbig = 'just inserted'
42217    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42218 DELETE FROM t0_aux
42219 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42220 DELETE FROM t1
42221 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42222 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
42223 BEGIN
42224 SET new.f_int1 = old.f_int1 + @max_row,
42225 new.f_int2 = old.f_int2 - @max_row,
42226 new.f_charbig = '####updated per update trigger####';
42227 END|
42228 UPDATE t1
42229 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
42230 f_charbig = '####updated per update statement itself####';
42231         
42232 # check trigger-9 success:      1
42233 DROP TRIGGER trg_2;
42234 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42235 f_int2 = CAST(f_char1 AS SIGNED INT),
42236 f_charbig = CONCAT('===',f_char1,'===');
42237 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
42238 BEGIN
42239 SET new.f_int1 = new.f_int1 + @max_row,
42240 new.f_int2 = new.f_int2 - @max_row,
42241 new.f_charbig = '####updated per update trigger####';
42242 END|
42243 UPDATE t1
42244 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
42245 f_charbig = '####updated per update statement itself####';
42246         
42247 # check trigger-10 success:     1
42248 DROP TRIGGER trg_2;
42249 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42250 f_int2 = CAST(f_char1 AS SIGNED INT),
42251 f_charbig = CONCAT('===',f_char1,'===');
42252 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
42253 BEGIN
42254 SET new.f_int1 = @my_max1 + @counter,
42255 new.f_int2 = @my_min2 - @counter,
42256 new.f_charbig = '####updated per insert trigger####';
42257 SET @counter = @counter + 1;
42258 END|
42259 SET @counter = 1;
42260 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
42261 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42262 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
42263 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
42264 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
42265 ORDER BY f_int1;
42266 DROP TRIGGER trg_3;
42267         
42268 # check trigger-11 success:     1
42269 DELETE FROM t1
42270 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
42271 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
42272 AND f_charbig = '####updated per insert trigger####';
42273 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
42274 BEGIN
42275 SET new.f_int1 = @my_max1 + @counter,
42276 new.f_int2 = @my_min2 - @counter,
42277 new.f_charbig = '####updated per insert trigger####';
42278 SET @counter = @counter + 1;
42279 END|
42280 SET @counter = 1;
42281 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
42282 INSERT INTO t1 (f_char1, f_char2, f_charbig)
42283 SELECT CAST(f_int1 AS CHAR),
42284 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
42285 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
42286 ORDER BY f_int1;
42287 DROP TRIGGER trg_3;
42288         
42289 # check trigger-12 success:     1
42290 DELETE FROM t1
42291 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
42292 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
42293 AND f_charbig = '####updated per insert trigger####';
42294 ANALYZE  TABLE t1;
42295 Table   Op      Msg_type        Msg_text
42296 test.t1 analyze status  OK
42297 CHECK    TABLE t1 EXTENDED;
42298 Table   Op      Msg_type        Msg_text
42299 test.t1 check   status  OK
42300 CHECKSUM TABLE t1 EXTENDED;
42301 Table   Checksum
42302 test.t1 <some_value>
42303 OPTIMIZE TABLE t1;
42304 Table   Op      Msg_type        Msg_text
42305 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
42306 test.t1 optimize        status  OK
42307 # check layout success:    1
42308 REPAIR   TABLE t1 EXTENDED;
42309 Table   Op      Msg_type        Msg_text
42310 test.t1 repair  note    The storage engine for the table doesn't support repair
42311 # check layout success:    1
42312 TRUNCATE t1;
42313         
42314 # check TRUNCATE success:       1
42315 # check layout success:    1
42316 # End usability test (inc/partition_check.inc)
42317 DROP TABLE t1;
42318 CREATE TABLE t1 (
42319 f_int1 INTEGER,
42320 f_int2 INTEGER,
42321 f_char1 CHAR(20),
42322 f_char2 CHAR(20),
42323 f_charbig VARCHAR(1000)
42324 , PRIMARY KEY (f_int2,f_int1)
42326 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
42327 (PARTITION part1 VALUES LESS THAN (0)
42328 (SUBPARTITION subpart11, SUBPARTITION subpart12),
42329 PARTITION part2 VALUES LESS THAN (5)
42330 (SUBPARTITION subpart21, SUBPARTITION subpart22),
42331 PARTITION part3 VALUES LESS THAN (10)
42332 (SUBPARTITION subpart31, SUBPARTITION subpart32),
42333 PARTITION part4 VALUES LESS THAN (2147483646)
42334 (SUBPARTITION subpart41, SUBPARTITION subpart42));
42335 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42336 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
42337 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
42338 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
42339 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42340 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
42341 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
42342 # Start usability test (inc/partition_check.inc)
42343 create_command
42344 SHOW CREATE TABLE t1;
42345 Table   Create Table
42346 t1      CREATE TABLE `t1` (
42347   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
42348   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
42349   `f_char1` char(20) DEFAULT NULL,
42350   `f_char2` char(20) DEFAULT NULL,
42351   `f_charbig` varchar(1000) DEFAULT NULL,
42352   PRIMARY KEY (`f_int2`,`f_int1`)
42353 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
42354 /*!50100 PARTITION BY RANGE (f_int1)
42355 SUBPARTITION BY KEY (f_int2)
42356 (PARTITION part1 VALUES LESS THAN (0)
42357  (SUBPARTITION subpart11 ENGINE = InnoDB,
42358   SUBPARTITION subpart12 ENGINE = InnoDB),
42359  PARTITION part2 VALUES LESS THAN (5)
42360  (SUBPARTITION subpart21 ENGINE = InnoDB,
42361   SUBPARTITION subpart22 ENGINE = InnoDB),
42362  PARTITION part3 VALUES LESS THAN (10)
42363  (SUBPARTITION subpart31 ENGINE = InnoDB,
42364   SUBPARTITION subpart32 ENGINE = InnoDB),
42365  PARTITION part4 VALUES LESS THAN (2147483646)
42366  (SUBPARTITION subpart41 ENGINE = InnoDB,
42367   SUBPARTITION subpart42 ENGINE = InnoDB)) */
42369 # check prerequisites-1 success:    1
42370 # check COUNT(*) success:    1
42371 # check MIN/MAX(f_int1) success:    1
42372 # check MIN/MAX(f_int2) success:    1
42373 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42374 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
42375 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
42376 WHERE f_int1 IN (2,3);
42377 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
42378 # check prerequisites-3 success:    1
42379 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
42380 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42381 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
42382 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
42383 WHERE f_int1 IN (2,3);
42384 DELETE FROM t1 WHERE f_charbig = 'delete me';
42385 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42386 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
42387 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
42388 WHERE f_int1 IN (2,3);
42389 DELETE FROM t1 WHERE f_charbig = 'delete me';
42390 # check read via f_int1 success: 1
42391 # check read via f_int2 success: 1
42392         
42393 # check multiple-1 success:     1
42394 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
42395         
42396 # check multiple-2 success:     1
42397 INSERT INTO t1 SELECT * FROM t0_template
42398 WHERE MOD(f_int1,3) = 0;
42399         
42400 # check multiple-3 success:     1
42401 UPDATE t1 SET f_int1 = f_int1 + @max_row
42402 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
42403 AND @max_row_div2 + @max_row_div4;
42404         
42405 # check multiple-4 success:     1
42406 DELETE FROM t1
42407 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
42408 AND @max_row_div2 + @max_row_div4 + @max_row;
42409         
42410 # check multiple-5 success:     1
42411 SELECT COUNT(*) INTO @try_count FROM t0_template
42412 WHERE MOD(f_int1,3) = 0
42413 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
42414 SELECT COUNT(*) INTO @clash_count
42415 FROM t1 INNER JOIN t0_template USING(f_int1)
42416 WHERE MOD(f_int1,3) = 0
42417 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
42418 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
42419 INSERT INTO t1
42420 SET f_int1 = @cur_value , f_int2 = @cur_value,
42421 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
42422 f_charbig = '#SINGLE#';
42423         
42424 # check single-1 success:       1
42425 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
42426 INSERT INTO t1
42427 SET f_int1 = @cur_value , f_int2 = @cur_value,
42428 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
42429 f_charbig = '#SINGLE#';
42430         
42431 # check single-2 success:       1
42432 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
42433 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
42434 UPDATE t1 SET f_int1 = @cur_value2
42435 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
42436         
42437 # check single-3 success:       1
42438 SET @cur_value1= -1;
42439 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
42440 UPDATE t1 SET f_int1 = @cur_value1
42441 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
42442         
42443 # check single-4 success:       1
42444 SELECT MAX(f_int1) INTO @cur_value FROM t1;
42445 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
42446         
42447 # check single-5 success:       1
42448 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
42449         
42450 # check single-6 success:       1
42451 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
42452 Warnings:
42453 Warning 1264    Out of range value for column 'f_int1' at row 1
42454 Warning 1264    Out of range value for column 'f_int2' at row 1
42455         
42456 # check single-7 success:       1
42457 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
42458 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
42459 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
42460 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
42461 f_charbig = '#NULL#';
42462 INSERT INTO t1
42463 SET f_int1 = NULL , f_int2 = -@max_row,
42464 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
42465 f_charbig = '#NULL#';
42466 ERROR 23000: Column 'f_int1' cannot be null
42467 # check null success:    1
42468 DELETE FROM t1
42469 WHERE f_int1 = 0 AND f_int2 = 0
42470 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
42471 AND f_charbig = '#NULL#';
42472 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42473 SELECT f_int1, f_int1, '', '', 'was inserted'
42474    FROM t0_template source_tab
42475 WHERE MOD(f_int1,3) = 0
42476 AND f_int1 BETWEEN @max_row_div2 AND @max_row
42477 ON DUPLICATE KEY
42478 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
42479 f_int2 = 2 * @max_row + source_tab.f_int1,
42480 f_charbig = 'was updated';
42481         
42482 # check unique-1-a success:     1
42483         
42484 # check unique-1-b success:     1
42485 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42486 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42487 f_int2 = CAST(f_char1 AS SIGNED INT),
42488 f_charbig = CONCAT('===',f_char1,'===')
42489 WHERE f_charbig = 'was updated';
42490 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42491 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
42492    FROM t0_template source_tab
42493 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
42494         
42495 # check replace success:        1
42496 DELETE FROM t1
42497 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
42498 DELETE FROM t1
42499 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
42500 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
42501 UPDATE t1 SET f_int2 = f_int1,
42502 f_char1 = CAST(f_int1 AS CHAR),
42503 f_char2 = CAST(f_int1 AS CHAR),
42504 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
42505 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
42506 SET AUTOCOMMIT= 0;
42507 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42508 SELECT f_int1, f_int1, '', '', 'was inserted'
42509 FROM t0_template source_tab
42510 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
42511         
42512 # check transactions-1 success:         1
42513 COMMIT WORK;
42514         
42515 # check transactions-2 success:         1
42516 ROLLBACK WORK;
42517         
42518 # check transactions-3 success:         1
42519 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42520 COMMIT WORK;
42521 ROLLBACK WORK;
42522         
42523 # check transactions-4 success:         1
42524 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42525 SELECT f_int1, f_int1, '', '', 'was inserted'
42526 FROM t0_template source_tab
42527 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
42528         
42529 # check transactions-5 success:         1
42530 ROLLBACK WORK;
42531         
42532 # check transactions-6 success:         1
42533 # INFO: Storage engine used for t1 seems to be transactional.
42534 COMMIT;
42535         
42536 # check transactions-7 success:         1
42537 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42538 COMMIT WORK;
42539 SET @@session.sql_mode = 'traditional';
42540 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
42541 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42542 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
42543 '', '', 'was inserted' FROM t0_template
42544 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
42545 ERROR 22012: Division by 0
42546 COMMIT;
42547         
42548 # check transactions-8 success:         1
42549 # INFO: Storage engine used for t1 seems to be able to revert
42550 #       changes made by the failing statement.
42551 SET @@session.sql_mode = '';
42552 SET AUTOCOMMIT= 1;
42553 DELETE FROM t1 WHERE f_charbig = 'was inserted';
42554 COMMIT WORK;
42555 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
42556         
42557 # check special-1 success:      1
42558 UPDATE t1 SET f_charbig = '';
42559         
42560 # check special-2 success:      1
42561 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
42562 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42563 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
42564 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42565 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42566 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42567 'just inserted' FROM t0_template
42568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42569 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
42570 BEGIN
42571 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42572 f_charbig = 'updated by trigger'
42573       WHERE f_int1 = new.f_int1;
42574 END|
42575 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42576 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
42577 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42578         
42579 # check trigger-1 success:      1
42580 DROP TRIGGER trg_1;
42581 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42582 f_int2 = CAST(f_char1 AS SIGNED INT),
42583 f_charbig = 'just inserted'
42584    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42585 DELETE FROM t0_aux
42586 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42587 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42588 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42589 'just inserted' FROM t0_template
42590 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42591 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
42592 BEGIN
42593 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42594 f_charbig = 'updated by trigger'
42595       WHERE f_int1 = new.f_int1;
42596 END|
42597 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42598 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
42599 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42600         
42601 # check trigger-2 success:      1
42602 DROP TRIGGER trg_1;
42603 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42604 f_int2 = CAST(f_char1 AS SIGNED INT),
42605 f_charbig = 'just inserted'
42606    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42607 DELETE FROM t0_aux
42608 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42610 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42611 'just inserted' FROM t0_template
42612 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42613 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
42614 BEGIN
42615 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42616 f_charbig = 'updated by trigger'
42617       WHERE f_int1 = new.f_int1;
42618 END|
42619 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42620 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42621         
42622 # check trigger-3 success:      1
42623 DROP TRIGGER trg_1;
42624 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42625 f_int2 = CAST(f_char1 AS SIGNED INT),
42626 f_charbig = 'just inserted'
42627    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42628 DELETE FROM t0_aux
42629 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42630 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42631 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42632 'just inserted' FROM t0_template
42633 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42634 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
42635 BEGIN
42636 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42637 f_charbig = 'updated by trigger'
42638       WHERE f_int1 = - old.f_int1;
42639 END|
42640 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42641 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42642         
42643 # check trigger-4 success:      1
42644 DROP TRIGGER trg_1;
42645 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42646 f_int2 = CAST(f_char1 AS SIGNED INT),
42647 f_charbig = 'just inserted'
42648    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42649 DELETE FROM t0_aux
42650 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42652 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42653 'just inserted' FROM t0_template
42654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42655 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
42656 BEGIN
42657 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42658 f_charbig = 'updated by trigger'
42659       WHERE f_int1 = new.f_int1;
42660 END|
42661 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42662 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42663         
42664 # check trigger-5 success:      1
42665 DROP TRIGGER trg_1;
42666 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42667 f_int2 = CAST(f_char1 AS SIGNED INT),
42668 f_charbig = 'just inserted'
42669    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42670 DELETE FROM t0_aux
42671 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42672 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42673 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42674 'just inserted' FROM t0_template
42675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42676 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
42677 BEGIN
42678 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42679 f_charbig = 'updated by trigger'
42680       WHERE f_int1 = - old.f_int1;
42681 END|
42682 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
42683 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42684         
42685 # check trigger-6 success:      1
42686 DROP TRIGGER trg_1;
42687 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42688 f_int2 = CAST(f_char1 AS SIGNED INT),
42689 f_charbig = 'just inserted'
42690    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42691 DELETE FROM t0_aux
42692 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42693 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42694 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42695 'just inserted' FROM t0_template
42696 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42697 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
42698 BEGIN
42699 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42700 f_charbig = 'updated by trigger'
42701       WHERE f_int1 = - old.f_int1;
42702 END|
42703 DELETE FROM t0_aux
42704 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42705         
42706 # check trigger-7 success:      1
42707 DROP TRIGGER trg_1;
42708 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42709 f_int2 = CAST(f_char1 AS SIGNED INT),
42710 f_charbig = 'just inserted'
42711    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42712 DELETE FROM t0_aux
42713 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42714 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
42715 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
42716 'just inserted' FROM t0_template
42717 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42718 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
42719 BEGIN
42720 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
42721 f_charbig = 'updated by trigger'
42722       WHERE f_int1 = - old.f_int1;
42723 END|
42724 DELETE FROM t0_aux
42725 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
42726         
42727 # check trigger-8 success:      1
42728 DROP TRIGGER trg_1;
42729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42730 f_int2 = CAST(f_char1 AS SIGNED INT),
42731 f_charbig = 'just inserted'
42732    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
42733 DELETE FROM t0_aux
42734 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42735 DELETE FROM t1
42736 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
42737 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
42738 BEGIN
42739 SET new.f_int1 = old.f_int1 + @max_row,
42740 new.f_int2 = old.f_int2 - @max_row,
42741 new.f_charbig = '####updated per update trigger####';
42742 END|
42743 UPDATE t1
42744 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
42745 f_charbig = '####updated per update statement itself####';
42746         
42747 # check trigger-9 success:      1
42748 DROP TRIGGER trg_2;
42749 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42750 f_int2 = CAST(f_char1 AS SIGNED INT),
42751 f_charbig = CONCAT('===',f_char1,'===');
42752 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
42753 BEGIN
42754 SET new.f_int1 = new.f_int1 + @max_row,
42755 new.f_int2 = new.f_int2 - @max_row,
42756 new.f_charbig = '####updated per update trigger####';
42757 END|
42758 UPDATE t1
42759 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
42760 f_charbig = '####updated per update statement itself####';
42761         
42762 # check trigger-10 success:     1
42763 DROP TRIGGER trg_2;
42764 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
42765 f_int2 = CAST(f_char1 AS SIGNED INT),
42766 f_charbig = CONCAT('===',f_char1,'===');
42767 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
42768 BEGIN
42769 SET new.f_int1 = @my_max1 + @counter,
42770 new.f_int2 = @my_min2 - @counter,
42771 new.f_charbig = '####updated per insert trigger####';
42772 SET @counter = @counter + 1;
42773 END|
42774 SET @counter = 1;
42775 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
42776 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42777 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
42778 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
42779 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
42780 ORDER BY f_int1;
42781 DROP TRIGGER trg_3;
42782         
42783 # check trigger-11 success:     1
42784 DELETE FROM t1
42785 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
42786 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
42787 AND f_charbig = '####updated per insert trigger####';
42788 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
42789 BEGIN
42790 SET new.f_int1 = @my_max1 + @counter,
42791 new.f_int2 = @my_min2 - @counter,
42792 new.f_charbig = '####updated per insert trigger####';
42793 SET @counter = @counter + 1;
42794 END|
42795 SET @counter = 1;
42796 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
42797 INSERT INTO t1 (f_char1, f_char2, f_charbig)
42798 SELECT CAST(f_int1 AS CHAR),
42799 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
42800 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
42801 ORDER BY f_int1;
42802 DROP TRIGGER trg_3;
42803         
42804 # check trigger-12 success:     1
42805 DELETE FROM t1
42806 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
42807 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
42808 AND f_charbig = '####updated per insert trigger####';
42809 ANALYZE  TABLE t1;
42810 Table   Op      Msg_type        Msg_text
42811 test.t1 analyze status  OK
42812 CHECK    TABLE t1 EXTENDED;
42813 Table   Op      Msg_type        Msg_text
42814 test.t1 check   status  OK
42815 CHECKSUM TABLE t1 EXTENDED;
42816 Table   Checksum
42817 test.t1 <some_value>
42818 OPTIMIZE TABLE t1;
42819 Table   Op      Msg_type        Msg_text
42820 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
42821 test.t1 optimize        status  OK
42822 # check layout success:    1
42823 REPAIR   TABLE t1 EXTENDED;
42824 Table   Op      Msg_type        Msg_text
42825 test.t1 repair  note    The storage engine for the table doesn't support repair
42826 # check layout success:    1
42827 TRUNCATE t1;
42828         
42829 # check TRUNCATE success:       1
42830 # check layout success:    1
42831 # End usability test (inc/partition_check.inc)
42832 DROP TABLE t1;
42833 CREATE TABLE t1 (
42834 f_int1 INTEGER,
42835 f_int2 INTEGER,
42836 f_char1 CHAR(20),
42837 f_char2 CHAR(20),
42838 f_charbig VARCHAR(1000)
42839 , PRIMARY KEY (f_int2,f_int1)
42841 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
42842 (PARTITION part1 VALUES IN (0)
42843 (SUBPARTITION sp11, SUBPARTITION sp12),
42844 PARTITION part2 VALUES IN (1)
42845 (SUBPARTITION sp21, SUBPARTITION sp22),
42846 PARTITION part3 VALUES IN (2)
42847 (SUBPARTITION sp31, SUBPARTITION sp32),
42848 PARTITION part4 VALUES IN (NULL)
42849 (SUBPARTITION sp41, SUBPARTITION sp42));
42850 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42851 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
42852 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
42853 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
42854 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
42855 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
42856 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
42857 # Start usability test (inc/partition_check.inc)
42858 create_command
42859 SHOW CREATE TABLE t1;
42860 Table   Create Table
42861 t1      CREATE TABLE `t1` (
42862   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
42863   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
42864   `f_char1` char(20) DEFAULT NULL,
42865   `f_char2` char(20) DEFAULT NULL,
42866   `f_charbig` varchar(1000) DEFAULT NULL,
42867   PRIMARY KEY (`f_int2`,`f_int1`)
42868 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
42869 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
42870 SUBPARTITION BY HASH (f_int2 + 1)
42871 (PARTITION part1 VALUES IN (0)
42872  (SUBPARTITION sp11 ENGINE = InnoDB,
42873   SUBPARTITION sp12 ENGINE = InnoDB),
42874  PARTITION part2 VALUES IN (1)
42875  (SUBPARTITION sp21 ENGINE = InnoDB,
42876   SUBPARTITION sp22 ENGINE = InnoDB),
42877  PARTITION part3 VALUES IN (2)
42878  (SUBPARTITION sp31 ENGINE = InnoDB,
42879   SUBPARTITION sp32 ENGINE = InnoDB),
42880  PARTITION part4 VALUES IN (NULL)
42881  (SUBPARTITION sp41 ENGINE = InnoDB,
42882   SUBPARTITION sp42 ENGINE = InnoDB)) */
42884 # check prerequisites-1 success:    1
42885 # check COUNT(*) success:    1
42886 # check MIN/MAX(f_int1) success:    1
42887 # check MIN/MAX(f_int2) success:    1
42888 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42889 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
42890 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
42891 WHERE f_int1 IN (2,3);
42892 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
42893 # check prerequisites-3 success:    1
42894 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
42895 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42896 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
42897 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
42898 WHERE f_int1 IN (2,3);
42899 DELETE FROM t1 WHERE f_charbig = 'delete me';
42900 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42901 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
42902 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
42903 WHERE f_int1 IN (2,3);
42904 DELETE FROM t1 WHERE f_charbig = 'delete me';
42905 # check read via f_int1 success: 1
42906 # check read via f_int2 success: 1
42907         
42908 # check multiple-1 success:     1
42909 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
42910         
42911 # check multiple-2 success:     1
42912 INSERT INTO t1 SELECT * FROM t0_template
42913 WHERE MOD(f_int1,3) = 0;
42914         
42915 # check multiple-3 success:     1
42916 UPDATE t1 SET f_int1 = f_int1 + @max_row
42917 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
42918 AND @max_row_div2 + @max_row_div4;
42919         
42920 # check multiple-4 success:     1
42921 DELETE FROM t1
42922 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
42923 AND @max_row_div2 + @max_row_div4 + @max_row;
42924         
42925 # check multiple-5 success:     1
42926 SELECT COUNT(*) INTO @try_count FROM t0_template
42927 WHERE MOD(f_int1,3) = 0
42928 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
42929 SELECT COUNT(*) INTO @clash_count
42930 FROM t1 INNER JOIN t0_template USING(f_int1)
42931 WHERE MOD(f_int1,3) = 0
42932 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
42933 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
42934 INSERT INTO t1
42935 SET f_int1 = @cur_value , f_int2 = @cur_value,
42936 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
42937 f_charbig = '#SINGLE#';
42938         
42939 # check single-1 success:       1
42940 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
42941 INSERT INTO t1
42942 SET f_int1 = @cur_value , f_int2 = @cur_value,
42943 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
42944 f_charbig = '#SINGLE#';
42945         
42946 # check single-2 success:       1
42947 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
42948 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
42949 UPDATE t1 SET f_int1 = @cur_value2
42950 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
42951         
42952 # check single-3 success:       1
42953 SET @cur_value1= -1;
42954 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
42955 UPDATE t1 SET f_int1 = @cur_value1
42956 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
42957         
42958 # check single-4 success:       1
42959 SELECT MAX(f_int1) INTO @cur_value FROM t1;
42960 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
42961         
42962 # check single-5 success:       1
42963 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
42964         
42965 # check single-6 success:       1
42966 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
42967 Warnings:
42968 Warning 1264    Out of range value for column 'f_int1' at row 1
42969 Warning 1264    Out of range value for column 'f_int2' at row 1
42970         
42971 # check single-7 success:       1
42972 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
42973 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
42974 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
42975 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
42976 f_charbig = '#NULL#';
42977 INSERT INTO t1
42978 SET f_int1 = NULL , f_int2 = -@max_row,
42979 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
42980 f_charbig = '#NULL#';
42981 ERROR 23000: Column 'f_int1' cannot be null
42982 # check null success:    1
42983 DELETE FROM t1
42984 WHERE f_int1 = 0 AND f_int2 = 0
42985 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
42986 AND f_charbig = '#NULL#';
42987 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
42988 SELECT f_int1, f_int1, '', '', 'was inserted'
42989    FROM t0_template source_tab
42990 WHERE MOD(f_int1,3) = 0
42991 AND f_int1 BETWEEN @max_row_div2 AND @max_row
42992 ON DUPLICATE KEY
42993 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
42994 f_int2 = 2 * @max_row + source_tab.f_int1,
42995 f_charbig = 'was updated';
42996         
42997 # check unique-1-a success:     1
42998         
42999 # check unique-1-b success:     1
43000 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43001 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43002 f_int2 = CAST(f_char1 AS SIGNED INT),
43003 f_charbig = CONCAT('===',f_char1,'===')
43004 WHERE f_charbig = 'was updated';
43005 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43006 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
43007    FROM t0_template source_tab
43008 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43009         
43010 # check replace success:        1
43011 DELETE FROM t1
43012 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
43013 DELETE FROM t1
43014 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
43015 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
43016 UPDATE t1 SET f_int2 = f_int1,
43017 f_char1 = CAST(f_int1 AS CHAR),
43018 f_char2 = CAST(f_int1 AS CHAR),
43019 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
43020 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
43021 SET AUTOCOMMIT= 0;
43022 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43023 SELECT f_int1, f_int1, '', '', 'was inserted'
43024 FROM t0_template source_tab
43025 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43026         
43027 # check transactions-1 success:         1
43028 COMMIT WORK;
43029         
43030 # check transactions-2 success:         1
43031 ROLLBACK WORK;
43032         
43033 # check transactions-3 success:         1
43034 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43035 COMMIT WORK;
43036 ROLLBACK WORK;
43037         
43038 # check transactions-4 success:         1
43039 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43040 SELECT f_int1, f_int1, '', '', 'was inserted'
43041 FROM t0_template source_tab
43042 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43043         
43044 # check transactions-5 success:         1
43045 ROLLBACK WORK;
43046         
43047 # check transactions-6 success:         1
43048 # INFO: Storage engine used for t1 seems to be transactional.
43049 COMMIT;
43050         
43051 # check transactions-7 success:         1
43052 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43053 COMMIT WORK;
43054 SET @@session.sql_mode = 'traditional';
43055 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
43056 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43057 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
43058 '', '', 'was inserted' FROM t0_template
43059 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43060 ERROR 22012: Division by 0
43061 COMMIT;
43062         
43063 # check transactions-8 success:         1
43064 # INFO: Storage engine used for t1 seems to be able to revert
43065 #       changes made by the failing statement.
43066 SET @@session.sql_mode = '';
43067 SET AUTOCOMMIT= 1;
43068 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43069 COMMIT WORK;
43070 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
43071         
43072 # check special-1 success:      1
43073 UPDATE t1 SET f_charbig = '';
43074         
43075 # check special-2 success:      1
43076 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
43077 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43078 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
43079 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43080 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43081 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43082 'just inserted' FROM t0_template
43083 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43084 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
43085 BEGIN
43086 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43087 f_charbig = 'updated by trigger'
43088       WHERE f_int1 = new.f_int1;
43089 END|
43090 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43091 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
43092 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43093         
43094 # check trigger-1 success:      1
43095 DROP TRIGGER trg_1;
43096 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43097 f_int2 = CAST(f_char1 AS SIGNED INT),
43098 f_charbig = 'just inserted'
43099    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43100 DELETE FROM t0_aux
43101 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43102 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43103 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43104 'just inserted' FROM t0_template
43105 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43106 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
43107 BEGIN
43108 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43109 f_charbig = 'updated by trigger'
43110       WHERE f_int1 = new.f_int1;
43111 END|
43112 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43113 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
43114 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43115         
43116 # check trigger-2 success:      1
43117 DROP TRIGGER trg_1;
43118 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43119 f_int2 = CAST(f_char1 AS SIGNED INT),
43120 f_charbig = 'just inserted'
43121    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43122 DELETE FROM t0_aux
43123 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43124 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43125 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43126 'just inserted' FROM t0_template
43127 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43128 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
43129 BEGIN
43130 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43131 f_charbig = 'updated by trigger'
43132       WHERE f_int1 = new.f_int1;
43133 END|
43134 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43135 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43136         
43137 # check trigger-3 success:      1
43138 DROP TRIGGER trg_1;
43139 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43140 f_int2 = CAST(f_char1 AS SIGNED INT),
43141 f_charbig = 'just inserted'
43142    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43143 DELETE FROM t0_aux
43144 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43145 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43146 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43147 'just inserted' FROM t0_template
43148 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43149 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
43150 BEGIN
43151 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43152 f_charbig = 'updated by trigger'
43153       WHERE f_int1 = - old.f_int1;
43154 END|
43155 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43156 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43157         
43158 # check trigger-4 success:      1
43159 DROP TRIGGER trg_1;
43160 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43161 f_int2 = CAST(f_char1 AS SIGNED INT),
43162 f_charbig = 'just inserted'
43163    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43164 DELETE FROM t0_aux
43165 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43166 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43167 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43168 'just inserted' FROM t0_template
43169 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43170 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
43171 BEGIN
43172 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43173 f_charbig = 'updated by trigger'
43174       WHERE f_int1 = new.f_int1;
43175 END|
43176 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43177 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43178         
43179 # check trigger-5 success:      1
43180 DROP TRIGGER trg_1;
43181 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43182 f_int2 = CAST(f_char1 AS SIGNED INT),
43183 f_charbig = 'just inserted'
43184    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43185 DELETE FROM t0_aux
43186 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43187 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43188 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43189 'just inserted' FROM t0_template
43190 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43191 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
43192 BEGIN
43193 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43194 f_charbig = 'updated by trigger'
43195       WHERE f_int1 = - old.f_int1;
43196 END|
43197 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43198 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43199         
43200 # check trigger-6 success:      1
43201 DROP TRIGGER trg_1;
43202 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43203 f_int2 = CAST(f_char1 AS SIGNED INT),
43204 f_charbig = 'just inserted'
43205    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43206 DELETE FROM t0_aux
43207 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43208 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43209 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43210 'just inserted' FROM t0_template
43211 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43212 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
43213 BEGIN
43214 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43215 f_charbig = 'updated by trigger'
43216       WHERE f_int1 = - old.f_int1;
43217 END|
43218 DELETE FROM t0_aux
43219 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43220         
43221 # check trigger-7 success:      1
43222 DROP TRIGGER trg_1;
43223 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43224 f_int2 = CAST(f_char1 AS SIGNED INT),
43225 f_charbig = 'just inserted'
43226    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43227 DELETE FROM t0_aux
43228 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43229 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43230 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43231 'just inserted' FROM t0_template
43232 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43233 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
43234 BEGIN
43235 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43236 f_charbig = 'updated by trigger'
43237       WHERE f_int1 = - old.f_int1;
43238 END|
43239 DELETE FROM t0_aux
43240 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43241         
43242 # check trigger-8 success:      1
43243 DROP TRIGGER trg_1;
43244 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43245 f_int2 = CAST(f_char1 AS SIGNED INT),
43246 f_charbig = 'just inserted'
43247    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43248 DELETE FROM t0_aux
43249 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43250 DELETE FROM t1
43251 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43252 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
43253 BEGIN
43254 SET new.f_int1 = old.f_int1 + @max_row,
43255 new.f_int2 = old.f_int2 - @max_row,
43256 new.f_charbig = '####updated per update trigger####';
43257 END|
43258 UPDATE t1
43259 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
43260 f_charbig = '####updated per update statement itself####';
43261         
43262 # check trigger-9 success:      1
43263 DROP TRIGGER trg_2;
43264 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43265 f_int2 = CAST(f_char1 AS SIGNED INT),
43266 f_charbig = CONCAT('===',f_char1,'===');
43267 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
43268 BEGIN
43269 SET new.f_int1 = new.f_int1 + @max_row,
43270 new.f_int2 = new.f_int2 - @max_row,
43271 new.f_charbig = '####updated per update trigger####';
43272 END|
43273 UPDATE t1
43274 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
43275 f_charbig = '####updated per update statement itself####';
43276         
43277 # check trigger-10 success:     1
43278 DROP TRIGGER trg_2;
43279 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43280 f_int2 = CAST(f_char1 AS SIGNED INT),
43281 f_charbig = CONCAT('===',f_char1,'===');
43282 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
43283 BEGIN
43284 SET new.f_int1 = @my_max1 + @counter,
43285 new.f_int2 = @my_min2 - @counter,
43286 new.f_charbig = '####updated per insert trigger####';
43287 SET @counter = @counter + 1;
43288 END|
43289 SET @counter = 1;
43290 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
43291 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43292 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
43293 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
43294 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
43295 ORDER BY f_int1;
43296 DROP TRIGGER trg_3;
43297         
43298 # check trigger-11 success:     1
43299 DELETE FROM t1
43300 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
43301 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
43302 AND f_charbig = '####updated per insert trigger####';
43303 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
43304 BEGIN
43305 SET new.f_int1 = @my_max1 + @counter,
43306 new.f_int2 = @my_min2 - @counter,
43307 new.f_charbig = '####updated per insert trigger####';
43308 SET @counter = @counter + 1;
43309 END|
43310 SET @counter = 1;
43311 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
43312 INSERT INTO t1 (f_char1, f_char2, f_charbig)
43313 SELECT CAST(f_int1 AS CHAR),
43314 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
43315 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
43316 ORDER BY f_int1;
43317 DROP TRIGGER trg_3;
43318         
43319 # check trigger-12 success:     1
43320 DELETE FROM t1
43321 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
43322 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
43323 AND f_charbig = '####updated per insert trigger####';
43324 ANALYZE  TABLE t1;
43325 Table   Op      Msg_type        Msg_text
43326 test.t1 analyze status  OK
43327 CHECK    TABLE t1 EXTENDED;
43328 Table   Op      Msg_type        Msg_text
43329 test.t1 check   status  OK
43330 CHECKSUM TABLE t1 EXTENDED;
43331 Table   Checksum
43332 test.t1 <some_value>
43333 OPTIMIZE TABLE t1;
43334 Table   Op      Msg_type        Msg_text
43335 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
43336 test.t1 optimize        status  OK
43337 # check layout success:    1
43338 REPAIR   TABLE t1 EXTENDED;
43339 Table   Op      Msg_type        Msg_text
43340 test.t1 repair  note    The storage engine for the table doesn't support repair
43341 # check layout success:    1
43342 TRUNCATE t1;
43343         
43344 # check TRUNCATE success:       1
43345 # check layout success:    1
43346 # End usability test (inc/partition_check.inc)
43347 DROP TABLE t1;
43348 CREATE TABLE t1 (
43349 f_int1 INTEGER,
43350 f_int2 INTEGER,
43351 f_char1 CHAR(20),
43352 f_char2 CHAR(20),
43353 f_charbig VARCHAR(1000)
43354 , PRIMARY KEY (f_int2,f_int1)
43356 PARTITION BY LIST(ABS(MOD(f_int1,2)))
43357 SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
43358 (PARTITION part1 VALUES IN (0),
43359  PARTITION part2 VALUES IN (1),
43360  PARTITION part3 VALUES IN (NULL));
43361 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43362 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
43363 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
43364 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
43365 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43366 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
43367 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
43368 # Start usability test (inc/partition_check.inc)
43369 create_command
43370 SHOW CREATE TABLE t1;
43371 Table   Create Table
43372 t1      CREATE TABLE `t1` (
43373   `f_int1` mediumint(9) NOT NULL DEFAULT '0',
43374   `f_int2` mediumint(9) NOT NULL DEFAULT '0',
43375   `f_char1` char(20) DEFAULT NULL,
43376   `f_char2` char(20) DEFAULT NULL,
43377   `f_charbig` varchar(1000) DEFAULT NULL,
43378   PRIMARY KEY (`f_int2`,`f_int1`)
43379 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
43380 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
43381 SUBPARTITION BY KEY (f_int2)
43382 SUBPARTITIONS 3
43383 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
43384  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
43385  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
43387 # check prerequisites-1 success:    1
43388 # check COUNT(*) success:    1
43389 # check MIN/MAX(f_int1) success:    1
43390 # check MIN/MAX(f_int2) success:    1
43391 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43392 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
43393 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
43394 WHERE f_int1 IN (2,3);
43395 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
43396 # check prerequisites-3 success:    1
43397 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
43398 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43399 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
43400 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
43401 WHERE f_int1 IN (2,3);
43402 DELETE FROM t1 WHERE f_charbig = 'delete me';
43403 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43404 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
43405 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
43406 WHERE f_int1 IN (2,3);
43407 DELETE FROM t1 WHERE f_charbig = 'delete me';
43408 # check read via f_int1 success: 1
43409 # check read via f_int2 success: 1
43410         
43411 # check multiple-1 success:     1
43412 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
43413         
43414 # check multiple-2 success:     1
43415 INSERT INTO t1 SELECT * FROM t0_template
43416 WHERE MOD(f_int1,3) = 0;
43417         
43418 # check multiple-3 success:     1
43419 UPDATE t1 SET f_int1 = f_int1 + @max_row
43420 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
43421 AND @max_row_div2 + @max_row_div4;
43422         
43423 # check multiple-4 success:     1
43424 DELETE FROM t1
43425 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
43426 AND @max_row_div2 + @max_row_div4 + @max_row;
43427         
43428 # check multiple-5 success:     1
43429 SELECT COUNT(*) INTO @try_count FROM t0_template
43430 WHERE MOD(f_int1,3) = 0
43431 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43432 SELECT COUNT(*) INTO @clash_count
43433 FROM t1 INNER JOIN t0_template USING(f_int1)
43434 WHERE MOD(f_int1,3) = 0
43435 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43436 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
43437 INSERT INTO t1
43438 SET f_int1 = @cur_value , f_int2 = @cur_value,
43439 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
43440 f_charbig = '#SINGLE#';
43441         
43442 # check single-1 success:       1
43443 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
43444 INSERT INTO t1
43445 SET f_int1 = @cur_value , f_int2 = @cur_value,
43446 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
43447 f_charbig = '#SINGLE#';
43448         
43449 # check single-2 success:       1
43450 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
43451 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
43452 UPDATE t1 SET f_int1 = @cur_value2
43453 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
43454         
43455 # check single-3 success:       1
43456 SET @cur_value1= -1;
43457 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
43458 UPDATE t1 SET f_int1 = @cur_value1
43459 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
43460         
43461 # check single-4 success:       1
43462 SELECT MAX(f_int1) INTO @cur_value FROM t1;
43463 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
43464         
43465 # check single-5 success:       1
43466 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
43467         
43468 # check single-6 success:       1
43469 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
43470 Warnings:
43471 Warning 1264    Out of range value for column 'f_int1' at row 1
43472 Warning 1264    Out of range value for column 'f_int2' at row 1
43473         
43474 # check single-7 success:       1
43475 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
43476 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
43477 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
43478 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
43479 f_charbig = '#NULL#';
43480 INSERT INTO t1
43481 SET f_int1 = NULL , f_int2 = -@max_row,
43482 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
43483 f_charbig = '#NULL#';
43484 ERROR 23000: Column 'f_int1' cannot be null
43485 # check null success:    1
43486 DELETE FROM t1
43487 WHERE f_int1 = 0 AND f_int2 = 0
43488 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
43489 AND f_charbig = '#NULL#';
43490 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43491 SELECT f_int1, f_int1, '', '', 'was inserted'
43492    FROM t0_template source_tab
43493 WHERE MOD(f_int1,3) = 0
43494 AND f_int1 BETWEEN @max_row_div2 AND @max_row
43495 ON DUPLICATE KEY
43496 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
43497 f_int2 = 2 * @max_row + source_tab.f_int1,
43498 f_charbig = 'was updated';
43499         
43500 # check unique-1-a success:     1
43501         
43502 # check unique-1-b success:     1
43503 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43504 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43505 f_int2 = CAST(f_char1 AS SIGNED INT),
43506 f_charbig = CONCAT('===',f_char1,'===')
43507 WHERE f_charbig = 'was updated';
43508 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43509 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
43510    FROM t0_template source_tab
43511 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43512         
43513 # check replace success:        1
43514 DELETE FROM t1
43515 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
43516 DELETE FROM t1
43517 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
43518 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
43519 UPDATE t1 SET f_int2 = f_int1,
43520 f_char1 = CAST(f_int1 AS CHAR),
43521 f_char2 = CAST(f_int1 AS CHAR),
43522 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
43523 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
43524 SET AUTOCOMMIT= 0;
43525 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43526 SELECT f_int1, f_int1, '', '', 'was inserted'
43527 FROM t0_template source_tab
43528 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43529         
43530 # check transactions-1 success:         1
43531 COMMIT WORK;
43532         
43533 # check transactions-2 success:         1
43534 ROLLBACK WORK;
43535         
43536 # check transactions-3 success:         1
43537 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43538 COMMIT WORK;
43539 ROLLBACK WORK;
43540         
43541 # check transactions-4 success:         1
43542 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43543 SELECT f_int1, f_int1, '', '', 'was inserted'
43544 FROM t0_template source_tab
43545 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43546         
43547 # check transactions-5 success:         1
43548 ROLLBACK WORK;
43549         
43550 # check transactions-6 success:         1
43551 # INFO: Storage engine used for t1 seems to be transactional.
43552 COMMIT;
43553         
43554 # check transactions-7 success:         1
43555 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43556 COMMIT WORK;
43557 SET @@session.sql_mode = 'traditional';
43558 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
43559 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43560 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
43561 '', '', 'was inserted' FROM t0_template
43562 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
43563 ERROR 22012: Division by 0
43564 COMMIT;
43565         
43566 # check transactions-8 success:         1
43567 # INFO: Storage engine used for t1 seems to be able to revert
43568 #       changes made by the failing statement.
43569 SET @@session.sql_mode = '';
43570 SET AUTOCOMMIT= 1;
43571 DELETE FROM t1 WHERE f_charbig = 'was inserted';
43572 COMMIT WORK;
43573 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
43574         
43575 # check special-1 success:      1
43576 UPDATE t1 SET f_charbig = '';
43577         
43578 # check special-2 success:      1
43579 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
43580 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43581 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
43582 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43583 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43584 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43585 'just inserted' FROM t0_template
43586 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43587 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
43588 BEGIN
43589 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43590 f_charbig = 'updated by trigger'
43591       WHERE f_int1 = new.f_int1;
43592 END|
43593 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43594 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
43595 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43596         
43597 # check trigger-1 success:      1
43598 DROP TRIGGER trg_1;
43599 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43600 f_int2 = CAST(f_char1 AS SIGNED INT),
43601 f_charbig = 'just inserted'
43602    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43603 DELETE FROM t0_aux
43604 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43605 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43606 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43607 'just inserted' FROM t0_template
43608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43609 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
43610 BEGIN
43611 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43612 f_charbig = 'updated by trigger'
43613       WHERE f_int1 = new.f_int1;
43614 END|
43615 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43616 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
43617 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43618         
43619 # check trigger-2 success:      1
43620 DROP TRIGGER trg_1;
43621 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43622 f_int2 = CAST(f_char1 AS SIGNED INT),
43623 f_charbig = 'just inserted'
43624    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43625 DELETE FROM t0_aux
43626 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43627 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43628 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43629 'just inserted' FROM t0_template
43630 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43631 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
43632 BEGIN
43633 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43634 f_charbig = 'updated by trigger'
43635       WHERE f_int1 = new.f_int1;
43636 END|
43637 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43638 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43639         
43640 # check trigger-3 success:      1
43641 DROP TRIGGER trg_1;
43642 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43643 f_int2 = CAST(f_char1 AS SIGNED INT),
43644 f_charbig = 'just inserted'
43645    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43646 DELETE FROM t0_aux
43647 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43648 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43649 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43650 'just inserted' FROM t0_template
43651 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43652 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
43653 BEGIN
43654 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43655 f_charbig = 'updated by trigger'
43656       WHERE f_int1 = - old.f_int1;
43657 END|
43658 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43659 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43660         
43661 # check trigger-4 success:      1
43662 DROP TRIGGER trg_1;
43663 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43664 f_int2 = CAST(f_char1 AS SIGNED INT),
43665 f_charbig = 'just inserted'
43666    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43667 DELETE FROM t0_aux
43668 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43669 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43670 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43671 'just inserted' FROM t0_template
43672 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43673 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
43674 BEGIN
43675 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43676 f_charbig = 'updated by trigger'
43677       WHERE f_int1 = new.f_int1;
43678 END|
43679 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43680 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43681         
43682 # check trigger-5 success:      1
43683 DROP TRIGGER trg_1;
43684 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43685 f_int2 = CAST(f_char1 AS SIGNED INT),
43686 f_charbig = 'just inserted'
43687    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43688 DELETE FROM t0_aux
43689 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43690 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43691 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43692 'just inserted' FROM t0_template
43693 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43694 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
43695 BEGIN
43696 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43697 f_charbig = 'updated by trigger'
43698       WHERE f_int1 = - old.f_int1;
43699 END|
43700 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
43701 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43702         
43703 # check trigger-6 success:      1
43704 DROP TRIGGER trg_1;
43705 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43706 f_int2 = CAST(f_char1 AS SIGNED INT),
43707 f_charbig = 'just inserted'
43708    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43709 DELETE FROM t0_aux
43710 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43711 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43712 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43713 'just inserted' FROM t0_template
43714 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43715 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
43716 BEGIN
43717 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43718 f_charbig = 'updated by trigger'
43719       WHERE f_int1 = - old.f_int1;
43720 END|
43721 DELETE FROM t0_aux
43722 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43723         
43724 # check trigger-7 success:      1
43725 DROP TRIGGER trg_1;
43726 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43727 f_int2 = CAST(f_char1 AS SIGNED INT),
43728 f_charbig = 'just inserted'
43729    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43730 DELETE FROM t0_aux
43731 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43732 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
43733 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
43734 'just inserted' FROM t0_template
43735 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43736 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
43737 BEGIN
43738 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
43739 f_charbig = 'updated by trigger'
43740       WHERE f_int1 = - old.f_int1;
43741 END|
43742 DELETE FROM t0_aux
43743 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
43744         
43745 # check trigger-8 success:      1
43746 DROP TRIGGER trg_1;
43747 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43748 f_int2 = CAST(f_char1 AS SIGNED INT),
43749 f_charbig = 'just inserted'
43750    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
43751 DELETE FROM t0_aux
43752 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43753 DELETE FROM t1
43754 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
43755 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
43756 BEGIN
43757 SET new.f_int1 = old.f_int1 + @max_row,
43758 new.f_int2 = old.f_int2 - @max_row,
43759 new.f_charbig = '####updated per update trigger####';
43760 END|
43761 UPDATE t1
43762 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
43763 f_charbig = '####updated per update statement itself####';
43764         
43765 # check trigger-9 success:      1
43766 DROP TRIGGER trg_2;
43767 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43768 f_int2 = CAST(f_char1 AS SIGNED INT),
43769 f_charbig = CONCAT('===',f_char1,'===');
43770 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
43771 BEGIN
43772 SET new.f_int1 = new.f_int1 + @max_row,
43773 new.f_int2 = new.f_int2 - @max_row,
43774 new.f_charbig = '####updated per update trigger####';
43775 END|
43776 UPDATE t1
43777 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
43778 f_charbig = '####updated per update statement itself####';
43779         
43780 # check trigger-10 success:     1
43781 DROP TRIGGER trg_2;
43782 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
43783 f_int2 = CAST(f_char1 AS SIGNED INT),
43784 f_charbig = CONCAT('===',f_char1,'===');
43785 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
43786 BEGIN
43787 SET new.f_int1 = @my_max1 + @counter,
43788 new.f_int2 = @my_min2 - @counter,
43789 new.f_charbig = '####updated per insert trigger####';
43790 SET @counter = @counter + 1;
43791 END|
43792 SET @counter = 1;
43793 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
43794 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43795 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
43796 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
43797 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
43798 ORDER BY f_int1;
43799 DROP TRIGGER trg_3;
43800         
43801 # check trigger-11 success:     1
43802 DELETE FROM t1
43803 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
43804 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
43805 AND f_charbig = '####updated per insert trigger####';
43806 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
43807 BEGIN
43808 SET new.f_int1 = @my_max1 + @counter,
43809 new.f_int2 = @my_min2 - @counter,
43810 new.f_charbig = '####updated per insert trigger####';
43811 SET @counter = @counter + 1;
43812 END|
43813 SET @counter = 1;
43814 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
43815 INSERT INTO t1 (f_char1, f_char2, f_charbig)
43816 SELECT CAST(f_int1 AS CHAR),
43817 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
43818 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
43819 ORDER BY f_int1;
43820 DROP TRIGGER trg_3;
43821         
43822 # check trigger-12 success:     1
43823 DELETE FROM t1
43824 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
43825 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
43826 AND f_charbig = '####updated per insert trigger####';
43827 ANALYZE  TABLE t1;
43828 Table   Op      Msg_type        Msg_text
43829 test.t1 analyze status  OK
43830 CHECK    TABLE t1 EXTENDED;
43831 Table   Op      Msg_type        Msg_text
43832 test.t1 check   status  OK
43833 CHECKSUM TABLE t1 EXTENDED;
43834 Table   Checksum
43835 test.t1 <some_value>
43836 OPTIMIZE TABLE t1;
43837 Table   Op      Msg_type        Msg_text
43838 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
43839 test.t1 optimize        status  OK
43840 # check layout success:    1
43841 REPAIR   TABLE t1 EXTENDED;
43842 Table   Op      Msg_type        Msg_text
43843 test.t1 repair  note    The storage engine for the table doesn't support repair
43844 # check layout success:    1
43845 TRUNCATE t1;
43846         
43847 # check TRUNCATE success:       1
43848 # check layout success:    1
43849 # End usability test (inc/partition_check.inc)
43850 DROP TABLE t1;
43851 #  2.3.3 UNIQUE INDEX exists
43852 DROP TABLE IF EXISTS t1;
43853 CREATE TABLE t1 (
43854 f_int1 INTEGER,
43855 f_int2 INTEGER,
43856 f_char1 CHAR(20),
43857 f_char2 CHAR(20),
43858 f_charbig VARCHAR(1000)
43859 , UNIQUE INDEX uidx (f_int1,f_int2)
43861 PARTITION BY HASH(f_int1) PARTITIONS 2;
43862 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43863 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
43864 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
43865 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
43866 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
43867 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
43868 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
43869 # Start usability test (inc/partition_check.inc)
43870 create_command
43871 SHOW CREATE TABLE t1;
43872 Table   Create Table
43873 t1      CREATE TABLE `t1` (
43874   `f_int1` mediumint(9) DEFAULT NULL,
43875   `f_int2` mediumint(9) DEFAULT NULL,
43876   `f_char1` char(20) DEFAULT NULL,
43877   `f_char2` char(20) DEFAULT NULL,
43878   `f_charbig` varchar(1000) DEFAULT NULL,
43879   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
43880 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
43881 /*!50100 PARTITION BY HASH (f_int1)
43882 PARTITIONS 2 */
43884 # check prerequisites-1 success:    1
43885 # check COUNT(*) success:    1
43886 # check MIN/MAX(f_int1) success:    1
43887 # check MIN/MAX(f_int2) success:    1
43888 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43889 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
43890 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
43891 WHERE f_int1 IN (2,3);
43892 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
43893 # check prerequisites-3 success:    1
43894 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
43895 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43896 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
43897 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
43898 WHERE f_int1 IN (2,3);
43899 DELETE FROM t1 WHERE f_charbig = 'delete me';
43900 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
43901 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
43902 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
43903 WHERE f_int1 IN (2,3);
43904 DELETE FROM t1 WHERE f_charbig = 'delete me';
43905 # check read via f_int1 success: 1
43906 # check read via f_int2 success: 1
43907         
43908 # check multiple-1 success:     1
43909 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
43910         
43911 # check multiple-2 success:     1
43912 INSERT INTO t1 SELECT * FROM t0_template
43913 WHERE MOD(f_int1,3) = 0;
43914         
43915 # check multiple-3 success:     1
43916 UPDATE t1 SET f_int1 = f_int1 + @max_row
43917 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
43918 AND @max_row_div2 + @max_row_div4;
43919         
43920 # check multiple-4 success:     1
43921 DELETE FROM t1
43922 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
43923 AND @max_row_div2 + @max_row_div4 + @max_row;
43924         
43925 # check multiple-5 success:     1
43926 SELECT COUNT(*) INTO @try_count FROM t0_template
43927 WHERE MOD(f_int1,3) = 0
43928 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43929 SELECT COUNT(*) INTO @clash_count
43930 FROM t1 INNER JOIN t0_template USING(f_int1)
43931 WHERE MOD(f_int1,3) = 0
43932 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
43933 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
43934 INSERT INTO t1
43935 SET f_int1 = @cur_value , f_int2 = @cur_value,
43936 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
43937 f_charbig = '#SINGLE#';
43938         
43939 # check single-1 success:       1
43940 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
43941 INSERT INTO t1
43942 SET f_int1 = @cur_value , f_int2 = @cur_value,
43943 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
43944 f_charbig = '#SINGLE#';
43945         
43946 # check single-2 success:       1
43947 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
43948 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
43949 UPDATE t1 SET f_int1 = @cur_value2
43950 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
43951         
43952 # check single-3 success:       1
43953 SET @cur_value1= -1;
43954 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
43955 UPDATE t1 SET f_int1 = @cur_value1
43956 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
43957         
43958 # check single-4 success:       1
43959 SELECT MAX(f_int1) INTO @cur_value FROM t1;
43960 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
43961         
43962 # check single-5 success:       1
43963 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
43964         
43965 # check single-6 success:       1
43966 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
43967 Warnings:
43968 Warning 1264    Out of range value for column 'f_int1' at row 1
43969 Warning 1264    Out of range value for column 'f_int2' at row 1
43970         
43971 # check single-7 success:       1
43972 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
43973 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
43974 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
43975 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
43976 f_charbig = '#NULL#';
43977 INSERT INTO t1
43978 SET f_int1 = NULL , f_int2 = -@max_row,
43979 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
43980 f_charbig = '#NULL#';
43981 # check null success:    1
43982         
43983 # check null-1 success:         1
43984 UPDATE t1 SET f_int1 = -@max_row
43985 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
43986 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
43987         
43988 # check null-2 success:         1
43989 UPDATE t1 SET f_int1 = NULL
43990 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
43991 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
43992         
43993 # check null-3 success:         1
43994 DELETE FROM t1
43995 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
43996 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
43997         
43998 # check null-4 success:         1
43999 DELETE FROM t1
44000 WHERE f_int1 = 0 AND f_int2 = 0
44001 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
44002 AND f_charbig = '#NULL#';
44003 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44004 SELECT f_int1, f_int1, '', '', 'was inserted'
44005    FROM t0_template source_tab
44006 WHERE MOD(f_int1,3) = 0
44007 AND f_int1 BETWEEN @max_row_div2 AND @max_row
44008 ON DUPLICATE KEY
44009 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
44010 f_int2 = 2 * @max_row + source_tab.f_int1,
44011 f_charbig = 'was updated';
44012         
44013 # check unique-1-a success:     1
44014         
44015 # check unique-1-b success:     1
44016 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44017 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44018 f_int2 = CAST(f_char1 AS SIGNED INT),
44019 f_charbig = CONCAT('===',f_char1,'===')
44020 WHERE f_charbig = 'was updated';
44021 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44022 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
44023    FROM t0_template source_tab
44024 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44025         
44026 # check replace success:        1
44027 DELETE FROM t1
44028 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
44029 DELETE FROM t1
44030 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
44031 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
44032 UPDATE t1 SET f_int2 = f_int1,
44033 f_char1 = CAST(f_int1 AS CHAR),
44034 f_char2 = CAST(f_int1 AS CHAR),
44035 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
44036 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
44037 SET AUTOCOMMIT= 0;
44038 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44039 SELECT f_int1, f_int1, '', '', 'was inserted'
44040 FROM t0_template source_tab
44041 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44042         
44043 # check transactions-1 success:         1
44044 COMMIT WORK;
44045         
44046 # check transactions-2 success:         1
44047 ROLLBACK WORK;
44048         
44049 # check transactions-3 success:         1
44050 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44051 COMMIT WORK;
44052 ROLLBACK WORK;
44053         
44054 # check transactions-4 success:         1
44055 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44056 SELECT f_int1, f_int1, '', '', 'was inserted'
44057 FROM t0_template source_tab
44058 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44059         
44060 # check transactions-5 success:         1
44061 ROLLBACK WORK;
44062         
44063 # check transactions-6 success:         1
44064 # INFO: Storage engine used for t1 seems to be transactional.
44065 COMMIT;
44066         
44067 # check transactions-7 success:         1
44068 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44069 COMMIT WORK;
44070 SET @@session.sql_mode = 'traditional';
44071 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
44072 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44073 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
44074 '', '', 'was inserted' FROM t0_template
44075 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44076 ERROR 22012: Division by 0
44077 COMMIT;
44078         
44079 # check transactions-8 success:         1
44080 # INFO: Storage engine used for t1 seems to be able to revert
44081 #       changes made by the failing statement.
44082 SET @@session.sql_mode = '';
44083 SET AUTOCOMMIT= 1;
44084 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44085 COMMIT WORK;
44086 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
44087         
44088 # check special-1 success:      1
44089 UPDATE t1 SET f_charbig = '';
44090         
44091 # check special-2 success:      1
44092 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
44093 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44094 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
44095 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44096 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44097 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44098 'just inserted' FROM t0_template
44099 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44100 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
44101 BEGIN
44102 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44103 f_charbig = 'updated by trigger'
44104       WHERE f_int1 = new.f_int1;
44105 END|
44106 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44107 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
44108 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44109         
44110 # check trigger-1 success:      1
44111 DROP TRIGGER trg_1;
44112 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44113 f_int2 = CAST(f_char1 AS SIGNED INT),
44114 f_charbig = 'just inserted'
44115    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44116 DELETE FROM t0_aux
44117 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44118 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44119 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44120 'just inserted' FROM t0_template
44121 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44122 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
44123 BEGIN
44124 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44125 f_charbig = 'updated by trigger'
44126       WHERE f_int1 = new.f_int1;
44127 END|
44128 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44129 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
44130 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44131         
44132 # check trigger-2 success:      1
44133 DROP TRIGGER trg_1;
44134 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44135 f_int2 = CAST(f_char1 AS SIGNED INT),
44136 f_charbig = 'just inserted'
44137    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44138 DELETE FROM t0_aux
44139 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44140 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44141 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44142 'just inserted' FROM t0_template
44143 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44144 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
44145 BEGIN
44146 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44147 f_charbig = 'updated by trigger'
44148       WHERE f_int1 = new.f_int1;
44149 END|
44150 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44151 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44152         
44153 # check trigger-3 success:      1
44154 DROP TRIGGER trg_1;
44155 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44156 f_int2 = CAST(f_char1 AS SIGNED INT),
44157 f_charbig = 'just inserted'
44158    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44159 DELETE FROM t0_aux
44160 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44161 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44162 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44163 'just inserted' FROM t0_template
44164 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44165 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
44166 BEGIN
44167 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44168 f_charbig = 'updated by trigger'
44169       WHERE f_int1 = - old.f_int1;
44170 END|
44171 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44172 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44173         
44174 # check trigger-4 success:      1
44175 DROP TRIGGER trg_1;
44176 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44177 f_int2 = CAST(f_char1 AS SIGNED INT),
44178 f_charbig = 'just inserted'
44179    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44180 DELETE FROM t0_aux
44181 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44182 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44183 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44184 'just inserted' FROM t0_template
44185 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44186 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
44187 BEGIN
44188 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44189 f_charbig = 'updated by trigger'
44190       WHERE f_int1 = new.f_int1;
44191 END|
44192 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44193 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44194         
44195 # check trigger-5 success:      1
44196 DROP TRIGGER trg_1;
44197 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44198 f_int2 = CAST(f_char1 AS SIGNED INT),
44199 f_charbig = 'just inserted'
44200    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44201 DELETE FROM t0_aux
44202 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44203 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44204 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44205 'just inserted' FROM t0_template
44206 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44207 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
44208 BEGIN
44209 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44210 f_charbig = 'updated by trigger'
44211       WHERE f_int1 = - old.f_int1;
44212 END|
44213 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44214 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44215         
44216 # check trigger-6 success:      1
44217 DROP TRIGGER trg_1;
44218 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44219 f_int2 = CAST(f_char1 AS SIGNED INT),
44220 f_charbig = 'just inserted'
44221    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44222 DELETE FROM t0_aux
44223 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44224 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44225 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44226 'just inserted' FROM t0_template
44227 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44228 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
44229 BEGIN
44230 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44231 f_charbig = 'updated by trigger'
44232       WHERE f_int1 = - old.f_int1;
44233 END|
44234 DELETE FROM t0_aux
44235 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44236         
44237 # check trigger-7 success:      1
44238 DROP TRIGGER trg_1;
44239 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44240 f_int2 = CAST(f_char1 AS SIGNED INT),
44241 f_charbig = 'just inserted'
44242    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44243 DELETE FROM t0_aux
44244 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44245 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44246 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44247 'just inserted' FROM t0_template
44248 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44249 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
44250 BEGIN
44251 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44252 f_charbig = 'updated by trigger'
44253       WHERE f_int1 = - old.f_int1;
44254 END|
44255 DELETE FROM t0_aux
44256 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44257         
44258 # check trigger-8 success:      1
44259 DROP TRIGGER trg_1;
44260 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44261 f_int2 = CAST(f_char1 AS SIGNED INT),
44262 f_charbig = 'just inserted'
44263    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44264 DELETE FROM t0_aux
44265 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44266 DELETE FROM t1
44267 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44268 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
44269 BEGIN
44270 SET new.f_int1 = old.f_int1 + @max_row,
44271 new.f_int2 = old.f_int2 - @max_row,
44272 new.f_charbig = '####updated per update trigger####';
44273 END|
44274 UPDATE t1
44275 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
44276 f_charbig = '####updated per update statement itself####';
44277         
44278 # check trigger-9 success:      1
44279 DROP TRIGGER trg_2;
44280 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44281 f_int2 = CAST(f_char1 AS SIGNED INT),
44282 f_charbig = CONCAT('===',f_char1,'===');
44283 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
44284 BEGIN
44285 SET new.f_int1 = new.f_int1 + @max_row,
44286 new.f_int2 = new.f_int2 - @max_row,
44287 new.f_charbig = '####updated per update trigger####';
44288 END|
44289 UPDATE t1
44290 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
44291 f_charbig = '####updated per update statement itself####';
44292         
44293 # check trigger-10 success:     1
44294 DROP TRIGGER trg_2;
44295 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44296 f_int2 = CAST(f_char1 AS SIGNED INT),
44297 f_charbig = CONCAT('===',f_char1,'===');
44298 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
44299 BEGIN
44300 SET new.f_int1 = @my_max1 + @counter,
44301 new.f_int2 = @my_min2 - @counter,
44302 new.f_charbig = '####updated per insert trigger####';
44303 SET @counter = @counter + 1;
44304 END|
44305 SET @counter = 1;
44306 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
44307 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44308 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
44309 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
44310 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
44311 ORDER BY f_int1;
44312 DROP TRIGGER trg_3;
44313         
44314 # check trigger-11 success:     1
44315 DELETE FROM t1
44316 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
44317 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
44318 AND f_charbig = '####updated per insert trigger####';
44319 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
44320 BEGIN
44321 SET new.f_int1 = @my_max1 + @counter,
44322 new.f_int2 = @my_min2 - @counter,
44323 new.f_charbig = '####updated per insert trigger####';
44324 SET @counter = @counter + 1;
44325 END|
44326 SET @counter = 1;
44327 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
44328 INSERT INTO t1 (f_char1, f_char2, f_charbig)
44329 SELECT CAST(f_int1 AS CHAR),
44330 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
44331 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
44332 ORDER BY f_int1;
44333 DROP TRIGGER trg_3;
44334         
44335 # check trigger-12 success:     1
44336 DELETE FROM t1
44337 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
44338 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
44339 AND f_charbig = '####updated per insert trigger####';
44340 ANALYZE  TABLE t1;
44341 Table   Op      Msg_type        Msg_text
44342 test.t1 analyze status  OK
44343 CHECK    TABLE t1 EXTENDED;
44344 Table   Op      Msg_type        Msg_text
44345 test.t1 check   status  OK
44346 CHECKSUM TABLE t1 EXTENDED;
44347 Table   Checksum
44348 test.t1 <some_value>
44349 OPTIMIZE TABLE t1;
44350 Table   Op      Msg_type        Msg_text
44351 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
44352 test.t1 optimize        status  OK
44353 # check layout success:    1
44354 REPAIR   TABLE t1 EXTENDED;
44355 Table   Op      Msg_type        Msg_text
44356 test.t1 repair  note    The storage engine for the table doesn't support repair
44357 # check layout success:    1
44358 TRUNCATE t1;
44359         
44360 # check TRUNCATE success:       1
44361 # check layout success:    1
44362 # End usability test (inc/partition_check.inc)
44363 DROP TABLE t1;
44364 CREATE TABLE t1 (
44365 f_int1 INTEGER,
44366 f_int2 INTEGER,
44367 f_char1 CHAR(20),
44368 f_char2 CHAR(20),
44369 f_charbig VARCHAR(1000)
44370 , UNIQUE INDEX uidx (f_int1,f_int2)
44372 PARTITION BY KEY(f_int1) PARTITIONS 5;
44373 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44374 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
44375 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
44376 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
44377 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44378 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
44379 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
44380 # Start usability test (inc/partition_check.inc)
44381 create_command
44382 SHOW CREATE TABLE t1;
44383 Table   Create Table
44384 t1      CREATE TABLE `t1` (
44385   `f_int1` mediumint(9) DEFAULT NULL,
44386   `f_int2` mediumint(9) DEFAULT NULL,
44387   `f_char1` char(20) DEFAULT NULL,
44388   `f_char2` char(20) DEFAULT NULL,
44389   `f_charbig` varchar(1000) DEFAULT NULL,
44390   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
44391 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
44392 /*!50100 PARTITION BY KEY (f_int1)
44393 PARTITIONS 5 */
44395 # check prerequisites-1 success:    1
44396 # check COUNT(*) success:    1
44397 # check MIN/MAX(f_int1) success:    1
44398 # check MIN/MAX(f_int2) success:    1
44399 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44400 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
44401 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
44402 WHERE f_int1 IN (2,3);
44403 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
44404 # check prerequisites-3 success:    1
44405 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
44406 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44407 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
44408 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
44409 WHERE f_int1 IN (2,3);
44410 DELETE FROM t1 WHERE f_charbig = 'delete me';
44411 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44412 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
44413 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
44414 WHERE f_int1 IN (2,3);
44415 DELETE FROM t1 WHERE f_charbig = 'delete me';
44416 # check read via f_int1 success: 1
44417 # check read via f_int2 success: 1
44418         
44419 # check multiple-1 success:     1
44420 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
44421         
44422 # check multiple-2 success:     1
44423 INSERT INTO t1 SELECT * FROM t0_template
44424 WHERE MOD(f_int1,3) = 0;
44425         
44426 # check multiple-3 success:     1
44427 UPDATE t1 SET f_int1 = f_int1 + @max_row
44428 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
44429 AND @max_row_div2 + @max_row_div4;
44430         
44431 # check multiple-4 success:     1
44432 DELETE FROM t1
44433 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
44434 AND @max_row_div2 + @max_row_div4 + @max_row;
44435         
44436 # check multiple-5 success:     1
44437 SELECT COUNT(*) INTO @try_count FROM t0_template
44438 WHERE MOD(f_int1,3) = 0
44439 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44440 SELECT COUNT(*) INTO @clash_count
44441 FROM t1 INNER JOIN t0_template USING(f_int1)
44442 WHERE MOD(f_int1,3) = 0
44443 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44444 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
44445 INSERT INTO t1
44446 SET f_int1 = @cur_value , f_int2 = @cur_value,
44447 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
44448 f_charbig = '#SINGLE#';
44449         
44450 # check single-1 success:       1
44451 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
44452 INSERT INTO t1
44453 SET f_int1 = @cur_value , f_int2 = @cur_value,
44454 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
44455 f_charbig = '#SINGLE#';
44456         
44457 # check single-2 success:       1
44458 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
44459 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
44460 UPDATE t1 SET f_int1 = @cur_value2
44461 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
44462         
44463 # check single-3 success:       1
44464 SET @cur_value1= -1;
44465 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
44466 UPDATE t1 SET f_int1 = @cur_value1
44467 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
44468         
44469 # check single-4 success:       1
44470 SELECT MAX(f_int1) INTO @cur_value FROM t1;
44471 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
44472         
44473 # check single-5 success:       1
44474 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
44475         
44476 # check single-6 success:       1
44477 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
44478 Warnings:
44479 Warning 1264    Out of range value for column 'f_int1' at row 1
44480 Warning 1264    Out of range value for column 'f_int2' at row 1
44481         
44482 # check single-7 success:       1
44483 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
44484 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
44485 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
44486 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
44487 f_charbig = '#NULL#';
44488 INSERT INTO t1
44489 SET f_int1 = NULL , f_int2 = -@max_row,
44490 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
44491 f_charbig = '#NULL#';
44492 # check null success:    1
44493         
44494 # check null-1 success:         1
44495 UPDATE t1 SET f_int1 = -@max_row
44496 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
44497 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
44498         
44499 # check null-2 success:         1
44500 UPDATE t1 SET f_int1 = NULL
44501 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
44502 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
44503         
44504 # check null-3 success:         1
44505 DELETE FROM t1
44506 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
44507 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
44508         
44509 # check null-4 success:         1
44510 DELETE FROM t1
44511 WHERE f_int1 = 0 AND f_int2 = 0
44512 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
44513 AND f_charbig = '#NULL#';
44514 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44515 SELECT f_int1, f_int1, '', '', 'was inserted'
44516    FROM t0_template source_tab
44517 WHERE MOD(f_int1,3) = 0
44518 AND f_int1 BETWEEN @max_row_div2 AND @max_row
44519 ON DUPLICATE KEY
44520 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
44521 f_int2 = 2 * @max_row + source_tab.f_int1,
44522 f_charbig = 'was updated';
44523         
44524 # check unique-1-a success:     1
44525         
44526 # check unique-1-b success:     1
44527 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44528 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44529 f_int2 = CAST(f_char1 AS SIGNED INT),
44530 f_charbig = CONCAT('===',f_char1,'===')
44531 WHERE f_charbig = 'was updated';
44532 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44533 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
44534    FROM t0_template source_tab
44535 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44536         
44537 # check replace success:        1
44538 DELETE FROM t1
44539 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
44540 DELETE FROM t1
44541 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
44542 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
44543 UPDATE t1 SET f_int2 = f_int1,
44544 f_char1 = CAST(f_int1 AS CHAR),
44545 f_char2 = CAST(f_int1 AS CHAR),
44546 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
44547 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
44548 SET AUTOCOMMIT= 0;
44549 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44550 SELECT f_int1, f_int1, '', '', 'was inserted'
44551 FROM t0_template source_tab
44552 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44553         
44554 # check transactions-1 success:         1
44555 COMMIT WORK;
44556         
44557 # check transactions-2 success:         1
44558 ROLLBACK WORK;
44559         
44560 # check transactions-3 success:         1
44561 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44562 COMMIT WORK;
44563 ROLLBACK WORK;
44564         
44565 # check transactions-4 success:         1
44566 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44567 SELECT f_int1, f_int1, '', '', 'was inserted'
44568 FROM t0_template source_tab
44569 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44570         
44571 # check transactions-5 success:         1
44572 ROLLBACK WORK;
44573         
44574 # check transactions-6 success:         1
44575 # INFO: Storage engine used for t1 seems to be transactional.
44576 COMMIT;
44577         
44578 # check transactions-7 success:         1
44579 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44580 COMMIT WORK;
44581 SET @@session.sql_mode = 'traditional';
44582 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
44583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44584 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
44585 '', '', 'was inserted' FROM t0_template
44586 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
44587 ERROR 22012: Division by 0
44588 COMMIT;
44589         
44590 # check transactions-8 success:         1
44591 # INFO: Storage engine used for t1 seems to be able to revert
44592 #       changes made by the failing statement.
44593 SET @@session.sql_mode = '';
44594 SET AUTOCOMMIT= 1;
44595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
44596 COMMIT WORK;
44597 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
44598         
44599 # check special-1 success:      1
44600 UPDATE t1 SET f_charbig = '';
44601         
44602 # check special-2 success:      1
44603 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
44604 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44605 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
44606 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44607 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44608 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44609 'just inserted' FROM t0_template
44610 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44611 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
44612 BEGIN
44613 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44614 f_charbig = 'updated by trigger'
44615       WHERE f_int1 = new.f_int1;
44616 END|
44617 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44618 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
44619 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44620         
44621 # check trigger-1 success:      1
44622 DROP TRIGGER trg_1;
44623 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44624 f_int2 = CAST(f_char1 AS SIGNED INT),
44625 f_charbig = 'just inserted'
44626    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44627 DELETE FROM t0_aux
44628 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44629 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44630 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44631 'just inserted' FROM t0_template
44632 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44633 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
44634 BEGIN
44635 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44636 f_charbig = 'updated by trigger'
44637       WHERE f_int1 = new.f_int1;
44638 END|
44639 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44640 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
44641 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44642         
44643 # check trigger-2 success:      1
44644 DROP TRIGGER trg_1;
44645 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44646 f_int2 = CAST(f_char1 AS SIGNED INT),
44647 f_charbig = 'just inserted'
44648    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44649 DELETE FROM t0_aux
44650 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44652 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44653 'just inserted' FROM t0_template
44654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44655 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
44656 BEGIN
44657 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44658 f_charbig = 'updated by trigger'
44659       WHERE f_int1 = new.f_int1;
44660 END|
44661 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44662 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44663         
44664 # check trigger-3 success:      1
44665 DROP TRIGGER trg_1;
44666 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44667 f_int2 = CAST(f_char1 AS SIGNED INT),
44668 f_charbig = 'just inserted'
44669    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44670 DELETE FROM t0_aux
44671 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44672 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44673 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44674 'just inserted' FROM t0_template
44675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44676 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
44677 BEGIN
44678 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44679 f_charbig = 'updated by trigger'
44680       WHERE f_int1 = - old.f_int1;
44681 END|
44682 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44683 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44684         
44685 # check trigger-4 success:      1
44686 DROP TRIGGER trg_1;
44687 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44688 f_int2 = CAST(f_char1 AS SIGNED INT),
44689 f_charbig = 'just inserted'
44690    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44691 DELETE FROM t0_aux
44692 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44693 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44694 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44695 'just inserted' FROM t0_template
44696 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44697 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
44698 BEGIN
44699 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44700 f_charbig = 'updated by trigger'
44701       WHERE f_int1 = new.f_int1;
44702 END|
44703 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44704 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44705         
44706 # check trigger-5 success:      1
44707 DROP TRIGGER trg_1;
44708 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44709 f_int2 = CAST(f_char1 AS SIGNED INT),
44710 f_charbig = 'just inserted'
44711    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44712 DELETE FROM t0_aux
44713 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44714 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44715 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44716 'just inserted' FROM t0_template
44717 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44718 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
44719 BEGIN
44720 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44721 f_charbig = 'updated by trigger'
44722       WHERE f_int1 = - old.f_int1;
44723 END|
44724 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
44725 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44726         
44727 # check trigger-6 success:      1
44728 DROP TRIGGER trg_1;
44729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44730 f_int2 = CAST(f_char1 AS SIGNED INT),
44731 f_charbig = 'just inserted'
44732    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44733 DELETE FROM t0_aux
44734 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44735 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44736 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44737 'just inserted' FROM t0_template
44738 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44739 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
44740 BEGIN
44741 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44742 f_charbig = 'updated by trigger'
44743       WHERE f_int1 = - old.f_int1;
44744 END|
44745 DELETE FROM t0_aux
44746 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44747         
44748 # check trigger-7 success:      1
44749 DROP TRIGGER trg_1;
44750 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44751 f_int2 = CAST(f_char1 AS SIGNED INT),
44752 f_charbig = 'just inserted'
44753    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44754 DELETE FROM t0_aux
44755 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
44757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
44758 'just inserted' FROM t0_template
44759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44760 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
44761 BEGIN
44762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
44763 f_charbig = 'updated by trigger'
44764       WHERE f_int1 = - old.f_int1;
44765 END|
44766 DELETE FROM t0_aux
44767 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
44768         
44769 # check trigger-8 success:      1
44770 DROP TRIGGER trg_1;
44771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44772 f_int2 = CAST(f_char1 AS SIGNED INT),
44773 f_charbig = 'just inserted'
44774    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
44775 DELETE FROM t0_aux
44776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44777 DELETE FROM t1
44778 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
44779 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
44780 BEGIN
44781 SET new.f_int1 = old.f_int1 + @max_row,
44782 new.f_int2 = old.f_int2 - @max_row,
44783 new.f_charbig = '####updated per update trigger####';
44784 END|
44785 UPDATE t1
44786 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
44787 f_charbig = '####updated per update statement itself####';
44788         
44789 # check trigger-9 success:      1
44790 DROP TRIGGER trg_2;
44791 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44792 f_int2 = CAST(f_char1 AS SIGNED INT),
44793 f_charbig = CONCAT('===',f_char1,'===');
44794 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
44795 BEGIN
44796 SET new.f_int1 = new.f_int1 + @max_row,
44797 new.f_int2 = new.f_int2 - @max_row,
44798 new.f_charbig = '####updated per update trigger####';
44799 END|
44800 UPDATE t1
44801 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
44802 f_charbig = '####updated per update statement itself####';
44803         
44804 # check trigger-10 success:     1
44805 DROP TRIGGER trg_2;
44806 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
44807 f_int2 = CAST(f_char1 AS SIGNED INT),
44808 f_charbig = CONCAT('===',f_char1,'===');
44809 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
44810 BEGIN
44811 SET new.f_int1 = @my_max1 + @counter,
44812 new.f_int2 = @my_min2 - @counter,
44813 new.f_charbig = '####updated per insert trigger####';
44814 SET @counter = @counter + 1;
44815 END|
44816 SET @counter = 1;
44817 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
44818 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44819 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
44820 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
44821 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
44822 ORDER BY f_int1;
44823 DROP TRIGGER trg_3;
44824         
44825 # check trigger-11 success:     1
44826 DELETE FROM t1
44827 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
44828 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
44829 AND f_charbig = '####updated per insert trigger####';
44830 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
44831 BEGIN
44832 SET new.f_int1 = @my_max1 + @counter,
44833 new.f_int2 = @my_min2 - @counter,
44834 new.f_charbig = '####updated per insert trigger####';
44835 SET @counter = @counter + 1;
44836 END|
44837 SET @counter = 1;
44838 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
44839 INSERT INTO t1 (f_char1, f_char2, f_charbig)
44840 SELECT CAST(f_int1 AS CHAR),
44841 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
44842 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
44843 ORDER BY f_int1;
44844 DROP TRIGGER trg_3;
44845         
44846 # check trigger-12 success:     1
44847 DELETE FROM t1
44848 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
44849 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
44850 AND f_charbig = '####updated per insert trigger####';
44851 ANALYZE  TABLE t1;
44852 Table   Op      Msg_type        Msg_text
44853 test.t1 analyze status  OK
44854 CHECK    TABLE t1 EXTENDED;
44855 Table   Op      Msg_type        Msg_text
44856 test.t1 check   status  OK
44857 CHECKSUM TABLE t1 EXTENDED;
44858 Table   Checksum
44859 test.t1 <some_value>
44860 OPTIMIZE TABLE t1;
44861 Table   Op      Msg_type        Msg_text
44862 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
44863 test.t1 optimize        status  OK
44864 # check layout success:    1
44865 REPAIR   TABLE t1 EXTENDED;
44866 Table   Op      Msg_type        Msg_text
44867 test.t1 repair  note    The storage engine for the table doesn't support repair
44868 # check layout success:    1
44869 TRUNCATE t1;
44870         
44871 # check TRUNCATE success:       1
44872 # check layout success:    1
44873 # End usability test (inc/partition_check.inc)
44874 DROP TABLE t1;
44875 CREATE TABLE t1 (
44876 f_int1 INTEGER,
44877 f_int2 INTEGER,
44878 f_char1 CHAR(20),
44879 f_char2 CHAR(20),
44880 f_charbig VARCHAR(1000)
44881 , UNIQUE INDEX uidx (f_int1,f_int2)
44883 PARTITION BY LIST(MOD(f_int1,4))
44884 (PARTITION part_3 VALUES IN (-3),
44885 PARTITION part_2 VALUES IN (-2),
44886 PARTITION part_1 VALUES IN (-1),
44887 PARTITION part_N VALUES IN (NULL),
44888 PARTITION part0 VALUES IN (0),
44889 PARTITION part1 VALUES IN (1),
44890 PARTITION part2 VALUES IN (2),
44891 PARTITION part3 VALUES IN (3));
44892 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44893 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
44894 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
44895 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
44896 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
44897 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
44898 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
44899 # Start usability test (inc/partition_check.inc)
44900 create_command
44901 SHOW CREATE TABLE t1;
44902 Table   Create Table
44903 t1      CREATE TABLE `t1` (
44904   `f_int1` mediumint(9) DEFAULT NULL,
44905   `f_int2` mediumint(9) DEFAULT NULL,
44906   `f_char1` char(20) DEFAULT NULL,
44907   `f_char2` char(20) DEFAULT NULL,
44908   `f_charbig` varchar(1000) DEFAULT NULL,
44909   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
44910 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
44911 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
44912 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
44913  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
44914  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
44915  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
44916  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
44917  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
44918  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
44919  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
44921 # check prerequisites-1 success:    1
44922 # check COUNT(*) success:    1
44923 # check MIN/MAX(f_int1) success:    1
44924 # check MIN/MAX(f_int2) success:    1
44925 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44926 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
44927 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
44928 WHERE f_int1 IN (2,3);
44929 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
44930 # check prerequisites-3 success:    1
44931 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
44932 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44933 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
44934 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
44935 WHERE f_int1 IN (2,3);
44936 DELETE FROM t1 WHERE f_charbig = 'delete me';
44937 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
44938 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
44939 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
44940 WHERE f_int1 IN (2,3);
44941 DELETE FROM t1 WHERE f_charbig = 'delete me';
44942 # check read via f_int1 success: 1
44943 # check read via f_int2 success: 1
44944         
44945 # check multiple-1 success:     1
44946 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
44947         
44948 # check multiple-2 success:     1
44949 INSERT INTO t1 SELECT * FROM t0_template
44950 WHERE MOD(f_int1,3) = 0;
44951         
44952 # check multiple-3 success:     1
44953 UPDATE t1 SET f_int1 = f_int1 + @max_row
44954 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
44955 AND @max_row_div2 + @max_row_div4;
44956         
44957 # check multiple-4 success:     1
44958 DELETE FROM t1
44959 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
44960 AND @max_row_div2 + @max_row_div4 + @max_row;
44961         
44962 # check multiple-5 success:     1
44963 SELECT COUNT(*) INTO @try_count FROM t0_template
44964 WHERE MOD(f_int1,3) = 0
44965 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44966 SELECT COUNT(*) INTO @clash_count
44967 FROM t1 INNER JOIN t0_template USING(f_int1)
44968 WHERE MOD(f_int1,3) = 0
44969 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
44970 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
44971 INSERT INTO t1
44972 SET f_int1 = @cur_value , f_int2 = @cur_value,
44973 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
44974 f_charbig = '#SINGLE#';
44975         
44976 # check single-1 success:       1
44977 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
44978 INSERT INTO t1
44979 SET f_int1 = @cur_value , f_int2 = @cur_value,
44980 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
44981 f_charbig = '#SINGLE#';
44982         
44983 # check single-2 success:       1
44984 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
44985 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
44986 UPDATE t1 SET f_int1 = @cur_value2
44987 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
44988         
44989 # check single-3 success:       1
44990 SET @cur_value1= -1;
44991 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
44992 UPDATE t1 SET f_int1 = @cur_value1
44993 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
44994         
44995 # check single-4 success:       1
44996 SELECT MAX(f_int1) INTO @cur_value FROM t1;
44997 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
44998         
44999 # check single-5 success:       1
45000 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
45001         
45002 # check single-6 success:       1
45003 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
45004 Warnings:
45005 Warning 1264    Out of range value for column 'f_int1' at row 1
45006 Warning 1264    Out of range value for column 'f_int2' at row 1
45007         
45008 # check single-7 success:       1
45009 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
45010 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
45011 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
45012 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
45013 f_charbig = '#NULL#';
45014 INSERT INTO t1
45015 SET f_int1 = NULL , f_int2 = -@max_row,
45016 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
45017 f_charbig = '#NULL#';
45018 # check null success:    1
45019         
45020 # check null-1 success:         1
45021 UPDATE t1 SET f_int1 = -@max_row
45022 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45023 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45024         
45025 # check null-2 success:         1
45026 UPDATE t1 SET f_int1 = NULL
45027 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45028 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45029         
45030 # check null-3 success:         1
45031 DELETE FROM t1
45032 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45033 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45034         
45035 # check null-4 success:         1
45036 DELETE FROM t1
45037 WHERE f_int1 = 0 AND f_int2 = 0
45038 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
45039 AND f_charbig = '#NULL#';
45040 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45041 SELECT f_int1, f_int1, '', '', 'was inserted'
45042    FROM t0_template source_tab
45043 WHERE MOD(f_int1,3) = 0
45044 AND f_int1 BETWEEN @max_row_div2 AND @max_row
45045 ON DUPLICATE KEY
45046 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
45047 f_int2 = 2 * @max_row + source_tab.f_int1,
45048 f_charbig = 'was updated';
45049         
45050 # check unique-1-a success:     1
45051         
45052 # check unique-1-b success:     1
45053 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45054 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45055 f_int2 = CAST(f_char1 AS SIGNED INT),
45056 f_charbig = CONCAT('===',f_char1,'===')
45057 WHERE f_charbig = 'was updated';
45058 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45059 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
45060    FROM t0_template source_tab
45061 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
45062         
45063 # check replace success:        1
45064 DELETE FROM t1
45065 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
45066 DELETE FROM t1
45067 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
45068 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
45069 UPDATE t1 SET f_int2 = f_int1,
45070 f_char1 = CAST(f_int1 AS CHAR),
45071 f_char2 = CAST(f_int1 AS CHAR),
45072 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
45073 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
45074 SET AUTOCOMMIT= 0;
45075 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45076 SELECT f_int1, f_int1, '', '', 'was inserted'
45077 FROM t0_template source_tab
45078 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45079         
45080 # check transactions-1 success:         1
45081 COMMIT WORK;
45082         
45083 # check transactions-2 success:         1
45084 ROLLBACK WORK;
45085         
45086 # check transactions-3 success:         1
45087 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45088 COMMIT WORK;
45089 ROLLBACK WORK;
45090         
45091 # check transactions-4 success:         1
45092 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45093 SELECT f_int1, f_int1, '', '', 'was inserted'
45094 FROM t0_template source_tab
45095 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45096         
45097 # check transactions-5 success:         1
45098 ROLLBACK WORK;
45099         
45100 # check transactions-6 success:         1
45101 # INFO: Storage engine used for t1 seems to be transactional.
45102 COMMIT;
45103         
45104 # check transactions-7 success:         1
45105 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45106 COMMIT WORK;
45107 SET @@session.sql_mode = 'traditional';
45108 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
45109 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45110 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
45111 '', '', 'was inserted' FROM t0_template
45112 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45113 ERROR 22012: Division by 0
45114 COMMIT;
45115         
45116 # check transactions-8 success:         1
45117 # INFO: Storage engine used for t1 seems to be able to revert
45118 #       changes made by the failing statement.
45119 SET @@session.sql_mode = '';
45120 SET AUTOCOMMIT= 1;
45121 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45122 COMMIT WORK;
45123 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
45124         
45125 # check special-1 success:      1
45126 UPDATE t1 SET f_charbig = '';
45127         
45128 # check special-2 success:      1
45129 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
45130 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45131 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
45132 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45133 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45134 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45135 'just inserted' FROM t0_template
45136 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45137 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
45138 BEGIN
45139 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45140 f_charbig = 'updated by trigger'
45141       WHERE f_int1 = new.f_int1;
45142 END|
45143 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45144 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
45145 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45146         
45147 # check trigger-1 success:      1
45148 DROP TRIGGER trg_1;
45149 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45150 f_int2 = CAST(f_char1 AS SIGNED INT),
45151 f_charbig = 'just inserted'
45152    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45153 DELETE FROM t0_aux
45154 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45155 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45156 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45157 'just inserted' FROM t0_template
45158 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45159 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
45160 BEGIN
45161 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45162 f_charbig = 'updated by trigger'
45163       WHERE f_int1 = new.f_int1;
45164 END|
45165 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45166 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
45167 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45168         
45169 # check trigger-2 success:      1
45170 DROP TRIGGER trg_1;
45171 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45172 f_int2 = CAST(f_char1 AS SIGNED INT),
45173 f_charbig = 'just inserted'
45174    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45175 DELETE FROM t0_aux
45176 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45177 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45178 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45179 'just inserted' FROM t0_template
45180 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45181 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
45182 BEGIN
45183 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45184 f_charbig = 'updated by trigger'
45185       WHERE f_int1 = new.f_int1;
45186 END|
45187 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45188 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45189         
45190 # check trigger-3 success:      1
45191 DROP TRIGGER trg_1;
45192 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45193 f_int2 = CAST(f_char1 AS SIGNED INT),
45194 f_charbig = 'just inserted'
45195    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45196 DELETE FROM t0_aux
45197 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45198 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45199 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45200 'just inserted' FROM t0_template
45201 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45202 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
45203 BEGIN
45204 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45205 f_charbig = 'updated by trigger'
45206       WHERE f_int1 = - old.f_int1;
45207 END|
45208 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45209 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45210         
45211 # check trigger-4 success:      1
45212 DROP TRIGGER trg_1;
45213 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45214 f_int2 = CAST(f_char1 AS SIGNED INT),
45215 f_charbig = 'just inserted'
45216    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45217 DELETE FROM t0_aux
45218 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45219 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45220 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45221 'just inserted' FROM t0_template
45222 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45223 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
45224 BEGIN
45225 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45226 f_charbig = 'updated by trigger'
45227       WHERE f_int1 = new.f_int1;
45228 END|
45229 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45230 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45231         
45232 # check trigger-5 success:      1
45233 DROP TRIGGER trg_1;
45234 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45235 f_int2 = CAST(f_char1 AS SIGNED INT),
45236 f_charbig = 'just inserted'
45237    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45238 DELETE FROM t0_aux
45239 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45240 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45241 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45242 'just inserted' FROM t0_template
45243 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45244 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
45245 BEGIN
45246 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45247 f_charbig = 'updated by trigger'
45248       WHERE f_int1 = - old.f_int1;
45249 END|
45250 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45251 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45252         
45253 # check trigger-6 success:      1
45254 DROP TRIGGER trg_1;
45255 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45256 f_int2 = CAST(f_char1 AS SIGNED INT),
45257 f_charbig = 'just inserted'
45258    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45259 DELETE FROM t0_aux
45260 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45261 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45262 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45263 'just inserted' FROM t0_template
45264 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45265 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
45266 BEGIN
45267 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45268 f_charbig = 'updated by trigger'
45269       WHERE f_int1 = - old.f_int1;
45270 END|
45271 DELETE FROM t0_aux
45272 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45273         
45274 # check trigger-7 success:      1
45275 DROP TRIGGER trg_1;
45276 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45277 f_int2 = CAST(f_char1 AS SIGNED INT),
45278 f_charbig = 'just inserted'
45279    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45280 DELETE FROM t0_aux
45281 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45282 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45283 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45284 'just inserted' FROM t0_template
45285 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45286 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
45287 BEGIN
45288 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45289 f_charbig = 'updated by trigger'
45290       WHERE f_int1 = - old.f_int1;
45291 END|
45292 DELETE FROM t0_aux
45293 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45294         
45295 # check trigger-8 success:      1
45296 DROP TRIGGER trg_1;
45297 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45298 f_int2 = CAST(f_char1 AS SIGNED INT),
45299 f_charbig = 'just inserted'
45300    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45301 DELETE FROM t0_aux
45302 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45303 DELETE FROM t1
45304 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45305 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
45306 BEGIN
45307 SET new.f_int1 = old.f_int1 + @max_row,
45308 new.f_int2 = old.f_int2 - @max_row,
45309 new.f_charbig = '####updated per update trigger####';
45310 END|
45311 UPDATE t1
45312 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
45313 f_charbig = '####updated per update statement itself####';
45314         
45315 # check trigger-9 success:      1
45316 DROP TRIGGER trg_2;
45317 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45318 f_int2 = CAST(f_char1 AS SIGNED INT),
45319 f_charbig = CONCAT('===',f_char1,'===');
45320 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
45321 BEGIN
45322 SET new.f_int1 = new.f_int1 + @max_row,
45323 new.f_int2 = new.f_int2 - @max_row,
45324 new.f_charbig = '####updated per update trigger####';
45325 END|
45326 UPDATE t1
45327 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
45328 f_charbig = '####updated per update statement itself####';
45329         
45330 # check trigger-10 success:     1
45331 DROP TRIGGER trg_2;
45332 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45333 f_int2 = CAST(f_char1 AS SIGNED INT),
45334 f_charbig = CONCAT('===',f_char1,'===');
45335 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
45336 BEGIN
45337 SET new.f_int1 = @my_max1 + @counter,
45338 new.f_int2 = @my_min2 - @counter,
45339 new.f_charbig = '####updated per insert trigger####';
45340 SET @counter = @counter + 1;
45341 END|
45342 SET @counter = 1;
45343 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
45344 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45345 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
45346 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
45347 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
45348 ORDER BY f_int1;
45349 DROP TRIGGER trg_3;
45350         
45351 # check trigger-11 success:     1
45352 DELETE FROM t1
45353 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
45354 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
45355 AND f_charbig = '####updated per insert trigger####';
45356 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
45357 BEGIN
45358 SET new.f_int1 = @my_max1 + @counter,
45359 new.f_int2 = @my_min2 - @counter,
45360 new.f_charbig = '####updated per insert trigger####';
45361 SET @counter = @counter + 1;
45362 END|
45363 SET @counter = 1;
45364 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
45365 INSERT INTO t1 (f_char1, f_char2, f_charbig)
45366 SELECT CAST(f_int1 AS CHAR),
45367 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
45368 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
45369 ORDER BY f_int1;
45370 DROP TRIGGER trg_3;
45371         
45372 # check trigger-12 success:     1
45373 DELETE FROM t1
45374 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
45375 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
45376 AND f_charbig = '####updated per insert trigger####';
45377 ANALYZE  TABLE t1;
45378 Table   Op      Msg_type        Msg_text
45379 test.t1 analyze status  OK
45380 CHECK    TABLE t1 EXTENDED;
45381 Table   Op      Msg_type        Msg_text
45382 test.t1 check   status  OK
45383 CHECKSUM TABLE t1 EXTENDED;
45384 Table   Checksum
45385 test.t1 <some_value>
45386 OPTIMIZE TABLE t1;
45387 Table   Op      Msg_type        Msg_text
45388 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
45389 test.t1 optimize        status  OK
45390 # check layout success:    1
45391 REPAIR   TABLE t1 EXTENDED;
45392 Table   Op      Msg_type        Msg_text
45393 test.t1 repair  note    The storage engine for the table doesn't support repair
45394 # check layout success:    1
45395 TRUNCATE t1;
45396         
45397 # check TRUNCATE success:       1
45398 # check layout success:    1
45399 # End usability test (inc/partition_check.inc)
45400 DROP TABLE t1;
45401 CREATE TABLE t1 (
45402 f_int1 INTEGER,
45403 f_int2 INTEGER,
45404 f_char1 CHAR(20),
45405 f_char2 CHAR(20),
45406 f_charbig VARCHAR(1000)
45407 , UNIQUE INDEX uidx (f_int1,f_int2)
45409 PARTITION BY RANGE(f_int1)
45410 (PARTITION parta VALUES LESS THAN (0),
45411 PARTITION partb VALUES LESS THAN (5),
45412 PARTITION partc VALUES LESS THAN (10),
45413 PARTITION partd VALUES LESS THAN (10 + 5),
45414 PARTITION parte VALUES LESS THAN (20),
45415 PARTITION partf VALUES LESS THAN (2147483646));
45416 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45417 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
45418 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
45419 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
45420 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45421 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
45422 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
45423 # Start usability test (inc/partition_check.inc)
45424 create_command
45425 SHOW CREATE TABLE t1;
45426 Table   Create Table
45427 t1      CREATE TABLE `t1` (
45428   `f_int1` mediumint(9) DEFAULT NULL,
45429   `f_int2` mediumint(9) DEFAULT NULL,
45430   `f_char1` char(20) DEFAULT NULL,
45431   `f_char2` char(20) DEFAULT NULL,
45432   `f_charbig` varchar(1000) DEFAULT NULL,
45433   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
45434 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
45435 /*!50100 PARTITION BY RANGE (f_int1)
45436 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
45437  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
45438  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
45439  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
45440  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
45441  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
45443 # check prerequisites-1 success:    1
45444 # check COUNT(*) success:    1
45445 # check MIN/MAX(f_int1) success:    1
45446 # check MIN/MAX(f_int2) success:    1
45447 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45448 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
45449 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
45450 WHERE f_int1 IN (2,3);
45451 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
45452 # check prerequisites-3 success:    1
45453 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
45454 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45455 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
45456 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
45457 WHERE f_int1 IN (2,3);
45458 DELETE FROM t1 WHERE f_charbig = 'delete me';
45459 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45460 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
45461 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
45462 WHERE f_int1 IN (2,3);
45463 DELETE FROM t1 WHERE f_charbig = 'delete me';
45464 # check read via f_int1 success: 1
45465 # check read via f_int2 success: 1
45466         
45467 # check multiple-1 success:     1
45468 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
45469         
45470 # check multiple-2 success:     1
45471 INSERT INTO t1 SELECT * FROM t0_template
45472 WHERE MOD(f_int1,3) = 0;
45473         
45474 # check multiple-3 success:     1
45475 UPDATE t1 SET f_int1 = f_int1 + @max_row
45476 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
45477 AND @max_row_div2 + @max_row_div4;
45478         
45479 # check multiple-4 success:     1
45480 DELETE FROM t1
45481 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
45482 AND @max_row_div2 + @max_row_div4 + @max_row;
45483         
45484 # check multiple-5 success:     1
45485 SELECT COUNT(*) INTO @try_count FROM t0_template
45486 WHERE MOD(f_int1,3) = 0
45487 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
45488 SELECT COUNT(*) INTO @clash_count
45489 FROM t1 INNER JOIN t0_template USING(f_int1)
45490 WHERE MOD(f_int1,3) = 0
45491 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
45492 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
45493 INSERT INTO t1
45494 SET f_int1 = @cur_value , f_int2 = @cur_value,
45495 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
45496 f_charbig = '#SINGLE#';
45497         
45498 # check single-1 success:       1
45499 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
45500 INSERT INTO t1
45501 SET f_int1 = @cur_value , f_int2 = @cur_value,
45502 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
45503 f_charbig = '#SINGLE#';
45504         
45505 # check single-2 success:       1
45506 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
45507 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
45508 UPDATE t1 SET f_int1 = @cur_value2
45509 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
45510         
45511 # check single-3 success:       1
45512 SET @cur_value1= -1;
45513 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
45514 UPDATE t1 SET f_int1 = @cur_value1
45515 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
45516         
45517 # check single-4 success:       1
45518 SELECT MAX(f_int1) INTO @cur_value FROM t1;
45519 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
45520         
45521 # check single-5 success:       1
45522 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
45523         
45524 # check single-6 success:       1
45525 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
45526 Warnings:
45527 Warning 1264    Out of range value for column 'f_int1' at row 1
45528 Warning 1264    Out of range value for column 'f_int2' at row 1
45529         
45530 # check single-7 success:       1
45531 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
45532 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
45533 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
45534 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
45535 f_charbig = '#NULL#';
45536 INSERT INTO t1
45537 SET f_int1 = NULL , f_int2 = -@max_row,
45538 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
45539 f_charbig = '#NULL#';
45540 # check null success:    1
45541         
45542 # check null-1 success:         1
45543 UPDATE t1 SET f_int1 = -@max_row
45544 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45545 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45546         
45547 # check null-2 success:         1
45548 UPDATE t1 SET f_int1 = NULL
45549 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45550 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45551         
45552 # check null-3 success:         1
45553 DELETE FROM t1
45554 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
45555 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
45556         
45557 # check null-4 success:         1
45558 DELETE FROM t1
45559 WHERE f_int1 = 0 AND f_int2 = 0
45560 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
45561 AND f_charbig = '#NULL#';
45562 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45563 SELECT f_int1, f_int1, '', '', 'was inserted'
45564    FROM t0_template source_tab
45565 WHERE MOD(f_int1,3) = 0
45566 AND f_int1 BETWEEN @max_row_div2 AND @max_row
45567 ON DUPLICATE KEY
45568 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
45569 f_int2 = 2 * @max_row + source_tab.f_int1,
45570 f_charbig = 'was updated';
45571         
45572 # check unique-1-a success:     1
45573         
45574 # check unique-1-b success:     1
45575 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45576 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45577 f_int2 = CAST(f_char1 AS SIGNED INT),
45578 f_charbig = CONCAT('===',f_char1,'===')
45579 WHERE f_charbig = 'was updated';
45580 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45581 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
45582    FROM t0_template source_tab
45583 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
45584         
45585 # check replace success:        1
45586 DELETE FROM t1
45587 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
45588 DELETE FROM t1
45589 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
45590 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
45591 UPDATE t1 SET f_int2 = f_int1,
45592 f_char1 = CAST(f_int1 AS CHAR),
45593 f_char2 = CAST(f_int1 AS CHAR),
45594 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
45595 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
45596 SET AUTOCOMMIT= 0;
45597 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45598 SELECT f_int1, f_int1, '', '', 'was inserted'
45599 FROM t0_template source_tab
45600 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45601         
45602 # check transactions-1 success:         1
45603 COMMIT WORK;
45604         
45605 # check transactions-2 success:         1
45606 ROLLBACK WORK;
45607         
45608 # check transactions-3 success:         1
45609 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45610 COMMIT WORK;
45611 ROLLBACK WORK;
45612         
45613 # check transactions-4 success:         1
45614 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45615 SELECT f_int1, f_int1, '', '', 'was inserted'
45616 FROM t0_template source_tab
45617 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45618         
45619 # check transactions-5 success:         1
45620 ROLLBACK WORK;
45621         
45622 # check transactions-6 success:         1
45623 # INFO: Storage engine used for t1 seems to be transactional.
45624 COMMIT;
45625         
45626 # check transactions-7 success:         1
45627 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45628 COMMIT WORK;
45629 SET @@session.sql_mode = 'traditional';
45630 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
45631 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45632 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
45633 '', '', 'was inserted' FROM t0_template
45634 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
45635 ERROR 22012: Division by 0
45636 COMMIT;
45637         
45638 # check transactions-8 success:         1
45639 # INFO: Storage engine used for t1 seems to be able to revert
45640 #       changes made by the failing statement.
45641 SET @@session.sql_mode = '';
45642 SET AUTOCOMMIT= 1;
45643 DELETE FROM t1 WHERE f_charbig = 'was inserted';
45644 COMMIT WORK;
45645 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
45646         
45647 # check special-1 success:      1
45648 UPDATE t1 SET f_charbig = '';
45649         
45650 # check special-2 success:      1
45651 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
45652 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45653 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
45654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45655 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45656 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45657 'just inserted' FROM t0_template
45658 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45659 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
45660 BEGIN
45661 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45662 f_charbig = 'updated by trigger'
45663       WHERE f_int1 = new.f_int1;
45664 END|
45665 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45666 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
45667 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45668         
45669 # check trigger-1 success:      1
45670 DROP TRIGGER trg_1;
45671 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45672 f_int2 = CAST(f_char1 AS SIGNED INT),
45673 f_charbig = 'just inserted'
45674    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45675 DELETE FROM t0_aux
45676 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45677 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45678 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45679 'just inserted' FROM t0_template
45680 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45681 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
45682 BEGIN
45683 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45684 f_charbig = 'updated by trigger'
45685       WHERE f_int1 = new.f_int1;
45686 END|
45687 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45688 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
45689 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45690         
45691 # check trigger-2 success:      1
45692 DROP TRIGGER trg_1;
45693 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45694 f_int2 = CAST(f_char1 AS SIGNED INT),
45695 f_charbig = 'just inserted'
45696    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45697 DELETE FROM t0_aux
45698 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45699 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45700 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45701 'just inserted' FROM t0_template
45702 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45703 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
45704 BEGIN
45705 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45706 f_charbig = 'updated by trigger'
45707       WHERE f_int1 = new.f_int1;
45708 END|
45709 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45710 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45711         
45712 # check trigger-3 success:      1
45713 DROP TRIGGER trg_1;
45714 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45715 f_int2 = CAST(f_char1 AS SIGNED INT),
45716 f_charbig = 'just inserted'
45717    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45718 DELETE FROM t0_aux
45719 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45720 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45721 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45722 'just inserted' FROM t0_template
45723 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45724 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
45725 BEGIN
45726 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45727 f_charbig = 'updated by trigger'
45728       WHERE f_int1 = - old.f_int1;
45729 END|
45730 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45731 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45732         
45733 # check trigger-4 success:      1
45734 DROP TRIGGER trg_1;
45735 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45736 f_int2 = CAST(f_char1 AS SIGNED INT),
45737 f_charbig = 'just inserted'
45738    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45739 DELETE FROM t0_aux
45740 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45741 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45742 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45743 'just inserted' FROM t0_template
45744 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45745 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
45746 BEGIN
45747 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45748 f_charbig = 'updated by trigger'
45749       WHERE f_int1 = new.f_int1;
45750 END|
45751 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45752 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45753         
45754 # check trigger-5 success:      1
45755 DROP TRIGGER trg_1;
45756 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45757 f_int2 = CAST(f_char1 AS SIGNED INT),
45758 f_charbig = 'just inserted'
45759    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45760 DELETE FROM t0_aux
45761 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45762 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45763 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45764 'just inserted' FROM t0_template
45765 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45766 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
45767 BEGIN
45768 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45769 f_charbig = 'updated by trigger'
45770       WHERE f_int1 = - old.f_int1;
45771 END|
45772 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
45773 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45774         
45775 # check trigger-6 success:      1
45776 DROP TRIGGER trg_1;
45777 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45778 f_int2 = CAST(f_char1 AS SIGNED INT),
45779 f_charbig = 'just inserted'
45780    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45781 DELETE FROM t0_aux
45782 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45783 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45784 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45785 'just inserted' FROM t0_template
45786 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45787 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
45788 BEGIN
45789 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45790 f_charbig = 'updated by trigger'
45791       WHERE f_int1 = - old.f_int1;
45792 END|
45793 DELETE FROM t0_aux
45794 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45795         
45796 # check trigger-7 success:      1
45797 DROP TRIGGER trg_1;
45798 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45799 f_int2 = CAST(f_char1 AS SIGNED INT),
45800 f_charbig = 'just inserted'
45801    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45802 DELETE FROM t0_aux
45803 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45804 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
45805 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
45806 'just inserted' FROM t0_template
45807 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45808 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
45809 BEGIN
45810 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
45811 f_charbig = 'updated by trigger'
45812       WHERE f_int1 = - old.f_int1;
45813 END|
45814 DELETE FROM t0_aux
45815 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
45816         
45817 # check trigger-8 success:      1
45818 DROP TRIGGER trg_1;
45819 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45820 f_int2 = CAST(f_char1 AS SIGNED INT),
45821 f_charbig = 'just inserted'
45822    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
45823 DELETE FROM t0_aux
45824 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45825 DELETE FROM t1
45826 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
45827 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
45828 BEGIN
45829 SET new.f_int1 = old.f_int1 + @max_row,
45830 new.f_int2 = old.f_int2 - @max_row,
45831 new.f_charbig = '####updated per update trigger####';
45832 END|
45833 UPDATE t1
45834 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
45835 f_charbig = '####updated per update statement itself####';
45836         
45837 # check trigger-9 success:      1
45838 DROP TRIGGER trg_2;
45839 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45840 f_int2 = CAST(f_char1 AS SIGNED INT),
45841 f_charbig = CONCAT('===',f_char1,'===');
45842 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
45843 BEGIN
45844 SET new.f_int1 = new.f_int1 + @max_row,
45845 new.f_int2 = new.f_int2 - @max_row,
45846 new.f_charbig = '####updated per update trigger####';
45847 END|
45848 UPDATE t1
45849 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
45850 f_charbig = '####updated per update statement itself####';
45851         
45852 # check trigger-10 success:     1
45853 DROP TRIGGER trg_2;
45854 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
45855 f_int2 = CAST(f_char1 AS SIGNED INT),
45856 f_charbig = CONCAT('===',f_char1,'===');
45857 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
45858 BEGIN
45859 SET new.f_int1 = @my_max1 + @counter,
45860 new.f_int2 = @my_min2 - @counter,
45861 new.f_charbig = '####updated per insert trigger####';
45862 SET @counter = @counter + 1;
45863 END|
45864 SET @counter = 1;
45865 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
45866 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45867 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
45868 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
45869 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
45870 ORDER BY f_int1;
45871 DROP TRIGGER trg_3;
45872         
45873 # check trigger-11 success:     1
45874 DELETE FROM t1
45875 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
45876 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
45877 AND f_charbig = '####updated per insert trigger####';
45878 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
45879 BEGIN
45880 SET new.f_int1 = @my_max1 + @counter,
45881 new.f_int2 = @my_min2 - @counter,
45882 new.f_charbig = '####updated per insert trigger####';
45883 SET @counter = @counter + 1;
45884 END|
45885 SET @counter = 1;
45886 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
45887 INSERT INTO t1 (f_char1, f_char2, f_charbig)
45888 SELECT CAST(f_int1 AS CHAR),
45889 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
45890 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
45891 ORDER BY f_int1;
45892 DROP TRIGGER trg_3;
45893         
45894 # check trigger-12 success:     1
45895 DELETE FROM t1
45896 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
45897 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
45898 AND f_charbig = '####updated per insert trigger####';
45899 ANALYZE  TABLE t1;
45900 Table   Op      Msg_type        Msg_text
45901 test.t1 analyze status  OK
45902 CHECK    TABLE t1 EXTENDED;
45903 Table   Op      Msg_type        Msg_text
45904 test.t1 check   status  OK
45905 CHECKSUM TABLE t1 EXTENDED;
45906 Table   Checksum
45907 test.t1 <some_value>
45908 OPTIMIZE TABLE t1;
45909 Table   Op      Msg_type        Msg_text
45910 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
45911 test.t1 optimize        status  OK
45912 # check layout success:    1
45913 REPAIR   TABLE t1 EXTENDED;
45914 Table   Op      Msg_type        Msg_text
45915 test.t1 repair  note    The storage engine for the table doesn't support repair
45916 # check layout success:    1
45917 TRUNCATE t1;
45918         
45919 # check TRUNCATE success:       1
45920 # check layout success:    1
45921 # End usability test (inc/partition_check.inc)
45922 DROP TABLE t1;
45923 CREATE TABLE t1 (
45924 f_int1 INTEGER,
45925 f_int2 INTEGER,
45926 f_char1 CHAR(20),
45927 f_char2 CHAR(20),
45928 f_charbig VARCHAR(1000)
45929 , UNIQUE INDEX uidx (f_int1,f_int2)
45931 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
45932 (PARTITION parta VALUES LESS THAN (0),
45933 PARTITION partb VALUES LESS THAN (5),
45934 PARTITION partc VALUES LESS THAN (10),
45935 PARTITION partd VALUES LESS THAN (2147483646));
45936 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45937 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
45938 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
45939 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
45940 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
45941 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
45942 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
45943 # Start usability test (inc/partition_check.inc)
45944 create_command
45945 SHOW CREATE TABLE t1;
45946 Table   Create Table
45947 t1      CREATE TABLE `t1` (
45948   `f_int1` mediumint(9) DEFAULT NULL,
45949   `f_int2` mediumint(9) DEFAULT NULL,
45950   `f_char1` char(20) DEFAULT NULL,
45951   `f_char2` char(20) DEFAULT NULL,
45952   `f_charbig` varchar(1000) DEFAULT NULL,
45953   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
45954 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
45955 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
45956 SUBPARTITION BY HASH (f_int1)
45957 SUBPARTITIONS 2
45958 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
45959  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
45960  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
45961  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
45963 # check prerequisites-1 success:    1
45964 # check COUNT(*) success:    1
45965 # check MIN/MAX(f_int1) success:    1
45966 # check MIN/MAX(f_int2) success:    1
45967 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45968 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
45969 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
45970 WHERE f_int1 IN (2,3);
45971 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
45972 # check prerequisites-3 success:    1
45973 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
45974 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45975 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
45976 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
45977 WHERE f_int1 IN (2,3);
45978 DELETE FROM t1 WHERE f_charbig = 'delete me';
45979 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
45980 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
45981 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
45982 WHERE f_int1 IN (2,3);
45983 DELETE FROM t1 WHERE f_charbig = 'delete me';
45984 # check read via f_int1 success: 1
45985 # check read via f_int2 success: 1
45986         
45987 # check multiple-1 success:     1
45988 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
45989         
45990 # check multiple-2 success:     1
45991 INSERT INTO t1 SELECT * FROM t0_template
45992 WHERE MOD(f_int1,3) = 0;
45993         
45994 # check multiple-3 success:     1
45995 UPDATE t1 SET f_int1 = f_int1 + @max_row
45996 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
45997 AND @max_row_div2 + @max_row_div4;
45998         
45999 # check multiple-4 success:     1
46000 DELETE FROM t1
46001 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
46002 AND @max_row_div2 + @max_row_div4 + @max_row;
46003         
46004 # check multiple-5 success:     1
46005 SELECT COUNT(*) INTO @try_count FROM t0_template
46006 WHERE MOD(f_int1,3) = 0
46007 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46008 SELECT COUNT(*) INTO @clash_count
46009 FROM t1 INNER JOIN t0_template USING(f_int1)
46010 WHERE MOD(f_int1,3) = 0
46011 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46012 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
46013 INSERT INTO t1
46014 SET f_int1 = @cur_value , f_int2 = @cur_value,
46015 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
46016 f_charbig = '#SINGLE#';
46017         
46018 # check single-1 success:       1
46019 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
46020 INSERT INTO t1
46021 SET f_int1 = @cur_value , f_int2 = @cur_value,
46022 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
46023 f_charbig = '#SINGLE#';
46024         
46025 # check single-2 success:       1
46026 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
46027 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
46028 UPDATE t1 SET f_int1 = @cur_value2
46029 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
46030         
46031 # check single-3 success:       1
46032 SET @cur_value1= -1;
46033 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
46034 UPDATE t1 SET f_int1 = @cur_value1
46035 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
46036         
46037 # check single-4 success:       1
46038 SELECT MAX(f_int1) INTO @cur_value FROM t1;
46039 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
46040         
46041 # check single-5 success:       1
46042 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
46043         
46044 # check single-6 success:       1
46045 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
46046 Warnings:
46047 Warning 1264    Out of range value for column 'f_int1' at row 1
46048 Warning 1264    Out of range value for column 'f_int2' at row 1
46049         
46050 # check single-7 success:       1
46051 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
46052 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
46053 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
46054 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
46055 f_charbig = '#NULL#';
46056 INSERT INTO t1
46057 SET f_int1 = NULL , f_int2 = -@max_row,
46058 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
46059 f_charbig = '#NULL#';
46060 # check null success:    1
46061         
46062 # check null-1 success:         1
46063 UPDATE t1 SET f_int1 = -@max_row
46064 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46065 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46066         
46067 # check null-2 success:         1
46068 UPDATE t1 SET f_int1 = NULL
46069 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46070 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46071         
46072 # check null-3 success:         1
46073 DELETE FROM t1
46074 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46075 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46076         
46077 # check null-4 success:         1
46078 DELETE FROM t1
46079 WHERE f_int1 = 0 AND f_int2 = 0
46080 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
46081 AND f_charbig = '#NULL#';
46082 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46083 SELECT f_int1, f_int1, '', '', 'was inserted'
46084    FROM t0_template source_tab
46085 WHERE MOD(f_int1,3) = 0
46086 AND f_int1 BETWEEN @max_row_div2 AND @max_row
46087 ON DUPLICATE KEY
46088 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
46089 f_int2 = 2 * @max_row + source_tab.f_int1,
46090 f_charbig = 'was updated';
46091         
46092 # check unique-1-a success:     1
46093         
46094 # check unique-1-b success:     1
46095 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46096 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46097 f_int2 = CAST(f_char1 AS SIGNED INT),
46098 f_charbig = CONCAT('===',f_char1,'===')
46099 WHERE f_charbig = 'was updated';
46100 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46101 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
46102    FROM t0_template source_tab
46103 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46104         
46105 # check replace success:        1
46106 DELETE FROM t1
46107 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
46108 DELETE FROM t1
46109 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
46110 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
46111 UPDATE t1 SET f_int2 = f_int1,
46112 f_char1 = CAST(f_int1 AS CHAR),
46113 f_char2 = CAST(f_int1 AS CHAR),
46114 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
46115 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
46116 SET AUTOCOMMIT= 0;
46117 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46118 SELECT f_int1, f_int1, '', '', 'was inserted'
46119 FROM t0_template source_tab
46120 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46121         
46122 # check transactions-1 success:         1
46123 COMMIT WORK;
46124         
46125 # check transactions-2 success:         1
46126 ROLLBACK WORK;
46127         
46128 # check transactions-3 success:         1
46129 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46130 COMMIT WORK;
46131 ROLLBACK WORK;
46132         
46133 # check transactions-4 success:         1
46134 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46135 SELECT f_int1, f_int1, '', '', 'was inserted'
46136 FROM t0_template source_tab
46137 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46138         
46139 # check transactions-5 success:         1
46140 ROLLBACK WORK;
46141         
46142 # check transactions-6 success:         1
46143 # INFO: Storage engine used for t1 seems to be transactional.
46144 COMMIT;
46145         
46146 # check transactions-7 success:         1
46147 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46148 COMMIT WORK;
46149 SET @@session.sql_mode = 'traditional';
46150 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
46151 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46152 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
46153 '', '', 'was inserted' FROM t0_template
46154 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46155 ERROR 22012: Division by 0
46156 COMMIT;
46157         
46158 # check transactions-8 success:         1
46159 # INFO: Storage engine used for t1 seems to be able to revert
46160 #       changes made by the failing statement.
46161 SET @@session.sql_mode = '';
46162 SET AUTOCOMMIT= 1;
46163 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46164 COMMIT WORK;
46165 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
46166         
46167 # check special-1 success:      1
46168 UPDATE t1 SET f_charbig = '';
46169         
46170 # check special-2 success:      1
46171 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
46172 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46173 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
46174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46177 'just inserted' FROM t0_template
46178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46179 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
46180 BEGIN
46181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46182 f_charbig = 'updated by trigger'
46183       WHERE f_int1 = new.f_int1;
46184 END|
46185 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46186 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
46187 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46188         
46189 # check trigger-1 success:      1
46190 DROP TRIGGER trg_1;
46191 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46192 f_int2 = CAST(f_char1 AS SIGNED INT),
46193 f_charbig = 'just inserted'
46194    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46195 DELETE FROM t0_aux
46196 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46197 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46198 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46199 'just inserted' FROM t0_template
46200 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46201 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
46202 BEGIN
46203 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46204 f_charbig = 'updated by trigger'
46205       WHERE f_int1 = new.f_int1;
46206 END|
46207 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46208 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
46209 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46210         
46211 # check trigger-2 success:      1
46212 DROP TRIGGER trg_1;
46213 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46214 f_int2 = CAST(f_char1 AS SIGNED INT),
46215 f_charbig = 'just inserted'
46216    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46217 DELETE FROM t0_aux
46218 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46219 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46220 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46221 'just inserted' FROM t0_template
46222 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46223 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
46224 BEGIN
46225 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46226 f_charbig = 'updated by trigger'
46227       WHERE f_int1 = new.f_int1;
46228 END|
46229 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46230 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46231         
46232 # check trigger-3 success:      1
46233 DROP TRIGGER trg_1;
46234 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46235 f_int2 = CAST(f_char1 AS SIGNED INT),
46236 f_charbig = 'just inserted'
46237    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46238 DELETE FROM t0_aux
46239 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46240 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46241 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46242 'just inserted' FROM t0_template
46243 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46244 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
46245 BEGIN
46246 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46247 f_charbig = 'updated by trigger'
46248       WHERE f_int1 = - old.f_int1;
46249 END|
46250 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46251 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46252         
46253 # check trigger-4 success:      1
46254 DROP TRIGGER trg_1;
46255 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46256 f_int2 = CAST(f_char1 AS SIGNED INT),
46257 f_charbig = 'just inserted'
46258    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46259 DELETE FROM t0_aux
46260 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46261 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46262 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46263 'just inserted' FROM t0_template
46264 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46265 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
46266 BEGIN
46267 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46268 f_charbig = 'updated by trigger'
46269       WHERE f_int1 = new.f_int1;
46270 END|
46271 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46272 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46273         
46274 # check trigger-5 success:      1
46275 DROP TRIGGER trg_1;
46276 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46277 f_int2 = CAST(f_char1 AS SIGNED INT),
46278 f_charbig = 'just inserted'
46279    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46280 DELETE FROM t0_aux
46281 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46282 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46283 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46284 'just inserted' FROM t0_template
46285 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46286 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
46287 BEGIN
46288 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46289 f_charbig = 'updated by trigger'
46290       WHERE f_int1 = - old.f_int1;
46291 END|
46292 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46293 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46294         
46295 # check trigger-6 success:      1
46296 DROP TRIGGER trg_1;
46297 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46298 f_int2 = CAST(f_char1 AS SIGNED INT),
46299 f_charbig = 'just inserted'
46300    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46301 DELETE FROM t0_aux
46302 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46303 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46304 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46305 'just inserted' FROM t0_template
46306 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46307 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
46308 BEGIN
46309 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46310 f_charbig = 'updated by trigger'
46311       WHERE f_int1 = - old.f_int1;
46312 END|
46313 DELETE FROM t0_aux
46314 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46315         
46316 # check trigger-7 success:      1
46317 DROP TRIGGER trg_1;
46318 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46319 f_int2 = CAST(f_char1 AS SIGNED INT),
46320 f_charbig = 'just inserted'
46321    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46322 DELETE FROM t0_aux
46323 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46324 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46325 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46326 'just inserted' FROM t0_template
46327 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46328 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
46329 BEGIN
46330 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46331 f_charbig = 'updated by trigger'
46332       WHERE f_int1 = - old.f_int1;
46333 END|
46334 DELETE FROM t0_aux
46335 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46336         
46337 # check trigger-8 success:      1
46338 DROP TRIGGER trg_1;
46339 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46340 f_int2 = CAST(f_char1 AS SIGNED INT),
46341 f_charbig = 'just inserted'
46342    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46343 DELETE FROM t0_aux
46344 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46345 DELETE FROM t1
46346 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46347 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
46348 BEGIN
46349 SET new.f_int1 = old.f_int1 + @max_row,
46350 new.f_int2 = old.f_int2 - @max_row,
46351 new.f_charbig = '####updated per update trigger####';
46352 END|
46353 UPDATE t1
46354 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
46355 f_charbig = '####updated per update statement itself####';
46356         
46357 # check trigger-9 success:      1
46358 DROP TRIGGER trg_2;
46359 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46360 f_int2 = CAST(f_char1 AS SIGNED INT),
46361 f_charbig = CONCAT('===',f_char1,'===');
46362 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
46363 BEGIN
46364 SET new.f_int1 = new.f_int1 + @max_row,
46365 new.f_int2 = new.f_int2 - @max_row,
46366 new.f_charbig = '####updated per update trigger####';
46367 END|
46368 UPDATE t1
46369 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
46370 f_charbig = '####updated per update statement itself####';
46371         
46372 # check trigger-10 success:     1
46373 DROP TRIGGER trg_2;
46374 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46375 f_int2 = CAST(f_char1 AS SIGNED INT),
46376 f_charbig = CONCAT('===',f_char1,'===');
46377 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
46378 BEGIN
46379 SET new.f_int1 = @my_max1 + @counter,
46380 new.f_int2 = @my_min2 - @counter,
46381 new.f_charbig = '####updated per insert trigger####';
46382 SET @counter = @counter + 1;
46383 END|
46384 SET @counter = 1;
46385 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
46386 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46387 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
46388 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
46389 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
46390 ORDER BY f_int1;
46391 DROP TRIGGER trg_3;
46392         
46393 # check trigger-11 success:     1
46394 DELETE FROM t1
46395 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
46396 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
46397 AND f_charbig = '####updated per insert trigger####';
46398 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
46399 BEGIN
46400 SET new.f_int1 = @my_max1 + @counter,
46401 new.f_int2 = @my_min2 - @counter,
46402 new.f_charbig = '####updated per insert trigger####';
46403 SET @counter = @counter + 1;
46404 END|
46405 SET @counter = 1;
46406 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
46407 INSERT INTO t1 (f_char1, f_char2, f_charbig)
46408 SELECT CAST(f_int1 AS CHAR),
46409 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
46410 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
46411 ORDER BY f_int1;
46412 DROP TRIGGER trg_3;
46413         
46414 # check trigger-12 success:     1
46415 DELETE FROM t1
46416 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
46417 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
46418 AND f_charbig = '####updated per insert trigger####';
46419 ANALYZE  TABLE t1;
46420 Table   Op      Msg_type        Msg_text
46421 test.t1 analyze status  OK
46422 CHECK    TABLE t1 EXTENDED;
46423 Table   Op      Msg_type        Msg_text
46424 test.t1 check   status  OK
46425 CHECKSUM TABLE t1 EXTENDED;
46426 Table   Checksum
46427 test.t1 <some_value>
46428 OPTIMIZE TABLE t1;
46429 Table   Op      Msg_type        Msg_text
46430 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
46431 test.t1 optimize        status  OK
46432 # check layout success:    1
46433 REPAIR   TABLE t1 EXTENDED;
46434 Table   Op      Msg_type        Msg_text
46435 test.t1 repair  note    The storage engine for the table doesn't support repair
46436 # check layout success:    1
46437 TRUNCATE t1;
46438         
46439 # check TRUNCATE success:       1
46440 # check layout success:    1
46441 # End usability test (inc/partition_check.inc)
46442 DROP TABLE t1;
46443 CREATE TABLE t1 (
46444 f_int1 INTEGER,
46445 f_int2 INTEGER,
46446 f_char1 CHAR(20),
46447 f_char2 CHAR(20),
46448 f_charbig VARCHAR(1000)
46449 , UNIQUE INDEX uidx (f_int1,f_int2)
46451 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
46452 (PARTITION part1 VALUES LESS THAN (0)
46453 (SUBPARTITION subpart11, SUBPARTITION subpart12),
46454 PARTITION part2 VALUES LESS THAN (5)
46455 (SUBPARTITION subpart21, SUBPARTITION subpart22),
46456 PARTITION part3 VALUES LESS THAN (10)
46457 (SUBPARTITION subpart31, SUBPARTITION subpart32),
46458 PARTITION part4 VALUES LESS THAN (2147483646)
46459 (SUBPARTITION subpart41, SUBPARTITION subpart42));
46460 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46461 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
46462 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
46463 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
46464 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46465 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
46466 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
46467 # Start usability test (inc/partition_check.inc)
46468 create_command
46469 SHOW CREATE TABLE t1;
46470 Table   Create Table
46471 t1      CREATE TABLE `t1` (
46472   `f_int1` mediumint(9) DEFAULT NULL,
46473   `f_int2` mediumint(9) DEFAULT NULL,
46474   `f_char1` char(20) DEFAULT NULL,
46475   `f_char2` char(20) DEFAULT NULL,
46476   `f_charbig` varchar(1000) DEFAULT NULL,
46477   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
46478 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
46479 /*!50100 PARTITION BY RANGE (f_int1)
46480 SUBPARTITION BY KEY (f_int1)
46481 (PARTITION part1 VALUES LESS THAN (0)
46482  (SUBPARTITION subpart11 ENGINE = InnoDB,
46483   SUBPARTITION subpart12 ENGINE = InnoDB),
46484  PARTITION part2 VALUES LESS THAN (5)
46485  (SUBPARTITION subpart21 ENGINE = InnoDB,
46486   SUBPARTITION subpart22 ENGINE = InnoDB),
46487  PARTITION part3 VALUES LESS THAN (10)
46488  (SUBPARTITION subpart31 ENGINE = InnoDB,
46489   SUBPARTITION subpart32 ENGINE = InnoDB),
46490  PARTITION part4 VALUES LESS THAN (2147483646)
46491  (SUBPARTITION subpart41 ENGINE = InnoDB,
46492   SUBPARTITION subpart42 ENGINE = InnoDB)) */
46494 # check prerequisites-1 success:    1
46495 # check COUNT(*) success:    1
46496 # check MIN/MAX(f_int1) success:    1
46497 # check MIN/MAX(f_int2) success:    1
46498 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46499 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
46500 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
46501 WHERE f_int1 IN (2,3);
46502 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
46503 # check prerequisites-3 success:    1
46504 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
46505 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46506 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
46507 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
46508 WHERE f_int1 IN (2,3);
46509 DELETE FROM t1 WHERE f_charbig = 'delete me';
46510 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46511 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
46512 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
46513 WHERE f_int1 IN (2,3);
46514 DELETE FROM t1 WHERE f_charbig = 'delete me';
46515 # check read via f_int1 success: 1
46516 # check read via f_int2 success: 1
46517         
46518 # check multiple-1 success:     1
46519 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
46520         
46521 # check multiple-2 success:     1
46522 INSERT INTO t1 SELECT * FROM t0_template
46523 WHERE MOD(f_int1,3) = 0;
46524         
46525 # check multiple-3 success:     1
46526 UPDATE t1 SET f_int1 = f_int1 + @max_row
46527 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
46528 AND @max_row_div2 + @max_row_div4;
46529         
46530 # check multiple-4 success:     1
46531 DELETE FROM t1
46532 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
46533 AND @max_row_div2 + @max_row_div4 + @max_row;
46534         
46535 # check multiple-5 success:     1
46536 SELECT COUNT(*) INTO @try_count FROM t0_template
46537 WHERE MOD(f_int1,3) = 0
46538 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46539 SELECT COUNT(*) INTO @clash_count
46540 FROM t1 INNER JOIN t0_template USING(f_int1)
46541 WHERE MOD(f_int1,3) = 0
46542 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46543 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
46544 INSERT INTO t1
46545 SET f_int1 = @cur_value , f_int2 = @cur_value,
46546 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
46547 f_charbig = '#SINGLE#';
46548         
46549 # check single-1 success:       1
46550 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
46551 INSERT INTO t1
46552 SET f_int1 = @cur_value , f_int2 = @cur_value,
46553 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
46554 f_charbig = '#SINGLE#';
46555         
46556 # check single-2 success:       1
46557 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
46558 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
46559 UPDATE t1 SET f_int1 = @cur_value2
46560 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
46561         
46562 # check single-3 success:       1
46563 SET @cur_value1= -1;
46564 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
46565 UPDATE t1 SET f_int1 = @cur_value1
46566 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
46567         
46568 # check single-4 success:       1
46569 SELECT MAX(f_int1) INTO @cur_value FROM t1;
46570 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
46571         
46572 # check single-5 success:       1
46573 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
46574         
46575 # check single-6 success:       1
46576 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
46577 Warnings:
46578 Warning 1264    Out of range value for column 'f_int1' at row 1
46579 Warning 1264    Out of range value for column 'f_int2' at row 1
46580         
46581 # check single-7 success:       1
46582 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
46583 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
46584 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
46585 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
46586 f_charbig = '#NULL#';
46587 INSERT INTO t1
46588 SET f_int1 = NULL , f_int2 = -@max_row,
46589 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
46590 f_charbig = '#NULL#';
46591 # check null success:    1
46592         
46593 # check null-1 success:         1
46594 UPDATE t1 SET f_int1 = -@max_row
46595 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46596 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46597         
46598 # check null-2 success:         1
46599 UPDATE t1 SET f_int1 = NULL
46600 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46601 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46602         
46603 # check null-3 success:         1
46604 DELETE FROM t1
46605 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
46606 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
46607         
46608 # check null-4 success:         1
46609 DELETE FROM t1
46610 WHERE f_int1 = 0 AND f_int2 = 0
46611 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
46612 AND f_charbig = '#NULL#';
46613 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46614 SELECT f_int1, f_int1, '', '', 'was inserted'
46615    FROM t0_template source_tab
46616 WHERE MOD(f_int1,3) = 0
46617 AND f_int1 BETWEEN @max_row_div2 AND @max_row
46618 ON DUPLICATE KEY
46619 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
46620 f_int2 = 2 * @max_row + source_tab.f_int1,
46621 f_charbig = 'was updated';
46622         
46623 # check unique-1-a success:     1
46624         
46625 # check unique-1-b success:     1
46626 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46627 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46628 f_int2 = CAST(f_char1 AS SIGNED INT),
46629 f_charbig = CONCAT('===',f_char1,'===')
46630 WHERE f_charbig = 'was updated';
46631 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46632 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
46633    FROM t0_template source_tab
46634 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
46635         
46636 # check replace success:        1
46637 DELETE FROM t1
46638 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
46639 DELETE FROM t1
46640 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
46641 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
46642 UPDATE t1 SET f_int2 = f_int1,
46643 f_char1 = CAST(f_int1 AS CHAR),
46644 f_char2 = CAST(f_int1 AS CHAR),
46645 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
46646 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
46647 SET AUTOCOMMIT= 0;
46648 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46649 SELECT f_int1, f_int1, '', '', 'was inserted'
46650 FROM t0_template source_tab
46651 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46652         
46653 # check transactions-1 success:         1
46654 COMMIT WORK;
46655         
46656 # check transactions-2 success:         1
46657 ROLLBACK WORK;
46658         
46659 # check transactions-3 success:         1
46660 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46661 COMMIT WORK;
46662 ROLLBACK WORK;
46663         
46664 # check transactions-4 success:         1
46665 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46666 SELECT f_int1, f_int1, '', '', 'was inserted'
46667 FROM t0_template source_tab
46668 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46669         
46670 # check transactions-5 success:         1
46671 ROLLBACK WORK;
46672         
46673 # check transactions-6 success:         1
46674 # INFO: Storage engine used for t1 seems to be transactional.
46675 COMMIT;
46676         
46677 # check transactions-7 success:         1
46678 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46679 COMMIT WORK;
46680 SET @@session.sql_mode = 'traditional';
46681 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
46682 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46683 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
46684 '', '', 'was inserted' FROM t0_template
46685 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
46686 ERROR 22012: Division by 0
46687 COMMIT;
46688         
46689 # check transactions-8 success:         1
46690 # INFO: Storage engine used for t1 seems to be able to revert
46691 #       changes made by the failing statement.
46692 SET @@session.sql_mode = '';
46693 SET AUTOCOMMIT= 1;
46694 DELETE FROM t1 WHERE f_charbig = 'was inserted';
46695 COMMIT WORK;
46696 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
46697         
46698 # check special-1 success:      1
46699 UPDATE t1 SET f_charbig = '';
46700         
46701 # check special-2 success:      1
46702 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
46703 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46704 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
46705 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46706 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46707 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46708 'just inserted' FROM t0_template
46709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46710 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
46711 BEGIN
46712 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46713 f_charbig = 'updated by trigger'
46714       WHERE f_int1 = new.f_int1;
46715 END|
46716 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46717 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
46718 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46719         
46720 # check trigger-1 success:      1
46721 DROP TRIGGER trg_1;
46722 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46723 f_int2 = CAST(f_char1 AS SIGNED INT),
46724 f_charbig = 'just inserted'
46725    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46726 DELETE FROM t0_aux
46727 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46728 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46729 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46730 'just inserted' FROM t0_template
46731 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46732 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
46733 BEGIN
46734 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46735 f_charbig = 'updated by trigger'
46736       WHERE f_int1 = new.f_int1;
46737 END|
46738 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46739 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
46740 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46741         
46742 # check trigger-2 success:      1
46743 DROP TRIGGER trg_1;
46744 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46745 f_int2 = CAST(f_char1 AS SIGNED INT),
46746 f_charbig = 'just inserted'
46747    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46748 DELETE FROM t0_aux
46749 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46750 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46751 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46752 'just inserted' FROM t0_template
46753 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46754 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
46755 BEGIN
46756 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46757 f_charbig = 'updated by trigger'
46758       WHERE f_int1 = new.f_int1;
46759 END|
46760 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46761 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46762         
46763 # check trigger-3 success:      1
46764 DROP TRIGGER trg_1;
46765 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46766 f_int2 = CAST(f_char1 AS SIGNED INT),
46767 f_charbig = 'just inserted'
46768    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46769 DELETE FROM t0_aux
46770 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46771 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46772 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46773 'just inserted' FROM t0_template
46774 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46775 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
46776 BEGIN
46777 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46778 f_charbig = 'updated by trigger'
46779       WHERE f_int1 = - old.f_int1;
46780 END|
46781 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46782 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46783         
46784 # check trigger-4 success:      1
46785 DROP TRIGGER trg_1;
46786 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46787 f_int2 = CAST(f_char1 AS SIGNED INT),
46788 f_charbig = 'just inserted'
46789    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46790 DELETE FROM t0_aux
46791 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46792 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46793 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46794 'just inserted' FROM t0_template
46795 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46796 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
46797 BEGIN
46798 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46799 f_charbig = 'updated by trigger'
46800       WHERE f_int1 = new.f_int1;
46801 END|
46802 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46803 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46804         
46805 # check trigger-5 success:      1
46806 DROP TRIGGER trg_1;
46807 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46808 f_int2 = CAST(f_char1 AS SIGNED INT),
46809 f_charbig = 'just inserted'
46810    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46811 DELETE FROM t0_aux
46812 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46813 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46814 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46815 'just inserted' FROM t0_template
46816 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46817 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
46818 BEGIN
46819 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46820 f_charbig = 'updated by trigger'
46821       WHERE f_int1 = - old.f_int1;
46822 END|
46823 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
46824 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46825         
46826 # check trigger-6 success:      1
46827 DROP TRIGGER trg_1;
46828 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46829 f_int2 = CAST(f_char1 AS SIGNED INT),
46830 f_charbig = 'just inserted'
46831    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46832 DELETE FROM t0_aux
46833 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46834 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46835 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46836 'just inserted' FROM t0_template
46837 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46838 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
46839 BEGIN
46840 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46841 f_charbig = 'updated by trigger'
46842       WHERE f_int1 = - old.f_int1;
46843 END|
46844 DELETE FROM t0_aux
46845 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46846         
46847 # check trigger-7 success:      1
46848 DROP TRIGGER trg_1;
46849 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46850 f_int2 = CAST(f_char1 AS SIGNED INT),
46851 f_charbig = 'just inserted'
46852    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46853 DELETE FROM t0_aux
46854 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46855 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
46856 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
46857 'just inserted' FROM t0_template
46858 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46859 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
46860 BEGIN
46861 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
46862 f_charbig = 'updated by trigger'
46863       WHERE f_int1 = - old.f_int1;
46864 END|
46865 DELETE FROM t0_aux
46866 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
46867         
46868 # check trigger-8 success:      1
46869 DROP TRIGGER trg_1;
46870 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46871 f_int2 = CAST(f_char1 AS SIGNED INT),
46872 f_charbig = 'just inserted'
46873    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
46874 DELETE FROM t0_aux
46875 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46876 DELETE FROM t1
46877 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
46878 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
46879 BEGIN
46880 SET new.f_int1 = old.f_int1 + @max_row,
46881 new.f_int2 = old.f_int2 - @max_row,
46882 new.f_charbig = '####updated per update trigger####';
46883 END|
46884 UPDATE t1
46885 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
46886 f_charbig = '####updated per update statement itself####';
46887         
46888 # check trigger-9 success:      1
46889 DROP TRIGGER trg_2;
46890 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46891 f_int2 = CAST(f_char1 AS SIGNED INT),
46892 f_charbig = CONCAT('===',f_char1,'===');
46893 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
46894 BEGIN
46895 SET new.f_int1 = new.f_int1 + @max_row,
46896 new.f_int2 = new.f_int2 - @max_row,
46897 new.f_charbig = '####updated per update trigger####';
46898 END|
46899 UPDATE t1
46900 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
46901 f_charbig = '####updated per update statement itself####';
46902         
46903 # check trigger-10 success:     1
46904 DROP TRIGGER trg_2;
46905 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
46906 f_int2 = CAST(f_char1 AS SIGNED INT),
46907 f_charbig = CONCAT('===',f_char1,'===');
46908 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
46909 BEGIN
46910 SET new.f_int1 = @my_max1 + @counter,
46911 new.f_int2 = @my_min2 - @counter,
46912 new.f_charbig = '####updated per insert trigger####';
46913 SET @counter = @counter + 1;
46914 END|
46915 SET @counter = 1;
46916 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
46917 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
46918 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
46919 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
46920 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
46921 ORDER BY f_int1;
46922 DROP TRIGGER trg_3;
46923         
46924 # check trigger-11 success:     1
46925 DELETE FROM t1
46926 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
46927 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
46928 AND f_charbig = '####updated per insert trigger####';
46929 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
46930 BEGIN
46931 SET new.f_int1 = @my_max1 + @counter,
46932 new.f_int2 = @my_min2 - @counter,
46933 new.f_charbig = '####updated per insert trigger####';
46934 SET @counter = @counter + 1;
46935 END|
46936 SET @counter = 1;
46937 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
46938 INSERT INTO t1 (f_char1, f_char2, f_charbig)
46939 SELECT CAST(f_int1 AS CHAR),
46940 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
46941 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
46942 ORDER BY f_int1;
46943 DROP TRIGGER trg_3;
46944         
46945 # check trigger-12 success:     1
46946 DELETE FROM t1
46947 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
46948 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
46949 AND f_charbig = '####updated per insert trigger####';
46950 ANALYZE  TABLE t1;
46951 Table   Op      Msg_type        Msg_text
46952 test.t1 analyze status  OK
46953 CHECK    TABLE t1 EXTENDED;
46954 Table   Op      Msg_type        Msg_text
46955 test.t1 check   status  OK
46956 CHECKSUM TABLE t1 EXTENDED;
46957 Table   Checksum
46958 test.t1 <some_value>
46959 OPTIMIZE TABLE t1;
46960 Table   Op      Msg_type        Msg_text
46961 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
46962 test.t1 optimize        status  OK
46963 # check layout success:    1
46964 REPAIR   TABLE t1 EXTENDED;
46965 Table   Op      Msg_type        Msg_text
46966 test.t1 repair  note    The storage engine for the table doesn't support repair
46967 # check layout success:    1
46968 TRUNCATE t1;
46969         
46970 # check TRUNCATE success:       1
46971 # check layout success:    1
46972 # End usability test (inc/partition_check.inc)
46973 DROP TABLE t1;
46974 CREATE TABLE t1 (
46975 f_int1 INTEGER,
46976 f_int2 INTEGER,
46977 f_char1 CHAR(20),
46978 f_char2 CHAR(20),
46979 f_charbig VARCHAR(1000)
46980 , UNIQUE INDEX uidx (f_int1,f_int2)
46982 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
46983 (PARTITION part1 VALUES IN (0)
46984 (SUBPARTITION sp11, SUBPARTITION sp12),
46985 PARTITION part2 VALUES IN (1)
46986 (SUBPARTITION sp21, SUBPARTITION sp22),
46987 PARTITION part3 VALUES IN (2)
46988 (SUBPARTITION sp31, SUBPARTITION sp32),
46989 PARTITION part4 VALUES IN (NULL)
46990 (SUBPARTITION sp41, SUBPARTITION sp42));
46991 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46992 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
46993 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
46994 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
46995 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
46996 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
46997 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
46998 # Start usability test (inc/partition_check.inc)
46999 create_command
47000 SHOW CREATE TABLE t1;
47001 Table   Create Table
47002 t1      CREATE TABLE `t1` (
47003   `f_int1` mediumint(9) DEFAULT NULL,
47004   `f_int2` mediumint(9) DEFAULT NULL,
47005   `f_char1` char(20) DEFAULT NULL,
47006   `f_char2` char(20) DEFAULT NULL,
47007   `f_charbig` varchar(1000) DEFAULT NULL,
47008   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
47009 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
47010 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
47011 SUBPARTITION BY HASH (f_int1 + 1)
47012 (PARTITION part1 VALUES IN (0)
47013  (SUBPARTITION sp11 ENGINE = InnoDB,
47014   SUBPARTITION sp12 ENGINE = InnoDB),
47015  PARTITION part2 VALUES IN (1)
47016  (SUBPARTITION sp21 ENGINE = InnoDB,
47017   SUBPARTITION sp22 ENGINE = InnoDB),
47018  PARTITION part3 VALUES IN (2)
47019  (SUBPARTITION sp31 ENGINE = InnoDB,
47020   SUBPARTITION sp32 ENGINE = InnoDB),
47021  PARTITION part4 VALUES IN (NULL)
47022  (SUBPARTITION sp41 ENGINE = InnoDB,
47023   SUBPARTITION sp42 ENGINE = InnoDB)) */
47025 # check prerequisites-1 success:    1
47026 # check COUNT(*) success:    1
47027 # check MIN/MAX(f_int1) success:    1
47028 # check MIN/MAX(f_int2) success:    1
47029 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47030 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
47031 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
47032 WHERE f_int1 IN (2,3);
47033 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
47034 # check prerequisites-3 success:    1
47035 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
47036 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47037 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
47038 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
47039 WHERE f_int1 IN (2,3);
47040 DELETE FROM t1 WHERE f_charbig = 'delete me';
47041 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47042 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
47043 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
47044 WHERE f_int1 IN (2,3);
47045 DELETE FROM t1 WHERE f_charbig = 'delete me';
47046 # check read via f_int1 success: 1
47047 # check read via f_int2 success: 1
47048         
47049 # check multiple-1 success:     1
47050 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
47051         
47052 # check multiple-2 success:     1
47053 INSERT INTO t1 SELECT * FROM t0_template
47054 WHERE MOD(f_int1,3) = 0;
47055         
47056 # check multiple-3 success:     1
47057 UPDATE t1 SET f_int1 = f_int1 + @max_row
47058 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
47059 AND @max_row_div2 + @max_row_div4;
47060         
47061 # check multiple-4 success:     1
47062 DELETE FROM t1
47063 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
47064 AND @max_row_div2 + @max_row_div4 + @max_row;
47065         
47066 # check multiple-5 success:     1
47067 SELECT COUNT(*) INTO @try_count FROM t0_template
47068 WHERE MOD(f_int1,3) = 0
47069 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47070 SELECT COUNT(*) INTO @clash_count
47071 FROM t1 INNER JOIN t0_template USING(f_int1)
47072 WHERE MOD(f_int1,3) = 0
47073 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47074 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
47075 INSERT INTO t1
47076 SET f_int1 = @cur_value , f_int2 = @cur_value,
47077 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
47078 f_charbig = '#SINGLE#';
47079         
47080 # check single-1 success:       1
47081 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
47082 INSERT INTO t1
47083 SET f_int1 = @cur_value , f_int2 = @cur_value,
47084 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
47085 f_charbig = '#SINGLE#';
47086         
47087 # check single-2 success:       1
47088 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
47089 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
47090 UPDATE t1 SET f_int1 = @cur_value2
47091 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
47092         
47093 # check single-3 success:       1
47094 SET @cur_value1= -1;
47095 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
47096 UPDATE t1 SET f_int1 = @cur_value1
47097 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
47098         
47099 # check single-4 success:       1
47100 SELECT MAX(f_int1) INTO @cur_value FROM t1;
47101 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
47102         
47103 # check single-5 success:       1
47104 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
47105         
47106 # check single-6 success:       1
47107 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
47108 Warnings:
47109 Warning 1264    Out of range value for column 'f_int1' at row 1
47110 Warning 1264    Out of range value for column 'f_int2' at row 1
47111         
47112 # check single-7 success:       1
47113 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
47114 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
47115 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
47116 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
47117 f_charbig = '#NULL#';
47118 INSERT INTO t1
47119 SET f_int1 = NULL , f_int2 = -@max_row,
47120 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
47121 f_charbig = '#NULL#';
47122 # check null success:    1
47123         
47124 # check null-1 success:         1
47125 UPDATE t1 SET f_int1 = -@max_row
47126 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47127 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47128         
47129 # check null-2 success:         1
47130 UPDATE t1 SET f_int1 = NULL
47131 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47132 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47133         
47134 # check null-3 success:         1
47135 DELETE FROM t1
47136 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47137 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47138         
47139 # check null-4 success:         1
47140 DELETE FROM t1
47141 WHERE f_int1 = 0 AND f_int2 = 0
47142 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
47143 AND f_charbig = '#NULL#';
47144 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47145 SELECT f_int1, f_int1, '', '', 'was inserted'
47146    FROM t0_template source_tab
47147 WHERE MOD(f_int1,3) = 0
47148 AND f_int1 BETWEEN @max_row_div2 AND @max_row
47149 ON DUPLICATE KEY
47150 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
47151 f_int2 = 2 * @max_row + source_tab.f_int1,
47152 f_charbig = 'was updated';
47153         
47154 # check unique-1-a success:     1
47155         
47156 # check unique-1-b success:     1
47157 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47158 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47159 f_int2 = CAST(f_char1 AS SIGNED INT),
47160 f_charbig = CONCAT('===',f_char1,'===')
47161 WHERE f_charbig = 'was updated';
47162 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47163 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
47164    FROM t0_template source_tab
47165 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47166         
47167 # check replace success:        1
47168 DELETE FROM t1
47169 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
47170 DELETE FROM t1
47171 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
47172 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
47173 UPDATE t1 SET f_int2 = f_int1,
47174 f_char1 = CAST(f_int1 AS CHAR),
47175 f_char2 = CAST(f_int1 AS CHAR),
47176 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
47177 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
47178 SET AUTOCOMMIT= 0;
47179 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47180 SELECT f_int1, f_int1, '', '', 'was inserted'
47181 FROM t0_template source_tab
47182 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47183         
47184 # check transactions-1 success:         1
47185 COMMIT WORK;
47186         
47187 # check transactions-2 success:         1
47188 ROLLBACK WORK;
47189         
47190 # check transactions-3 success:         1
47191 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47192 COMMIT WORK;
47193 ROLLBACK WORK;
47194         
47195 # check transactions-4 success:         1
47196 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47197 SELECT f_int1, f_int1, '', '', 'was inserted'
47198 FROM t0_template source_tab
47199 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47200         
47201 # check transactions-5 success:         1
47202 ROLLBACK WORK;
47203         
47204 # check transactions-6 success:         1
47205 # INFO: Storage engine used for t1 seems to be transactional.
47206 COMMIT;
47207         
47208 # check transactions-7 success:         1
47209 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47210 COMMIT WORK;
47211 SET @@session.sql_mode = 'traditional';
47212 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
47213 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47214 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
47215 '', '', 'was inserted' FROM t0_template
47216 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47217 ERROR 22012: Division by 0
47218 COMMIT;
47219         
47220 # check transactions-8 success:         1
47221 # INFO: Storage engine used for t1 seems to be able to revert
47222 #       changes made by the failing statement.
47223 SET @@session.sql_mode = '';
47224 SET AUTOCOMMIT= 1;
47225 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47226 COMMIT WORK;
47227 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
47228         
47229 # check special-1 success:      1
47230 UPDATE t1 SET f_charbig = '';
47231         
47232 # check special-2 success:      1
47233 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
47234 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
47235 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
47236 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47237 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47238 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47239 'just inserted' FROM t0_template
47240 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47241 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
47242 BEGIN
47243 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47244 f_charbig = 'updated by trigger'
47245       WHERE f_int1 = new.f_int1;
47246 END|
47247 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47248 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
47249 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47250         
47251 # check trigger-1 success:      1
47252 DROP TRIGGER trg_1;
47253 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47254 f_int2 = CAST(f_char1 AS SIGNED INT),
47255 f_charbig = 'just inserted'
47256    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47257 DELETE FROM t0_aux
47258 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47259 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47260 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47261 'just inserted' FROM t0_template
47262 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47263 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
47264 BEGIN
47265 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47266 f_charbig = 'updated by trigger'
47267       WHERE f_int1 = new.f_int1;
47268 END|
47269 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47270 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
47271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47272         
47273 # check trigger-2 success:      1
47274 DROP TRIGGER trg_1;
47275 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47276 f_int2 = CAST(f_char1 AS SIGNED INT),
47277 f_charbig = 'just inserted'
47278    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47279 DELETE FROM t0_aux
47280 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47281 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47282 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47283 'just inserted' FROM t0_template
47284 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47285 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
47286 BEGIN
47287 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47288 f_charbig = 'updated by trigger'
47289       WHERE f_int1 = new.f_int1;
47290 END|
47291 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47292 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47293         
47294 # check trigger-3 success:      1
47295 DROP TRIGGER trg_1;
47296 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47297 f_int2 = CAST(f_char1 AS SIGNED INT),
47298 f_charbig = 'just inserted'
47299    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47300 DELETE FROM t0_aux
47301 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47302 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47303 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47304 'just inserted' FROM t0_template
47305 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47306 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
47307 BEGIN
47308 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47309 f_charbig = 'updated by trigger'
47310       WHERE f_int1 = - old.f_int1;
47311 END|
47312 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47313 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47314         
47315 # check trigger-4 success:      1
47316 DROP TRIGGER trg_1;
47317 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47318 f_int2 = CAST(f_char1 AS SIGNED INT),
47319 f_charbig = 'just inserted'
47320    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47321 DELETE FROM t0_aux
47322 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47323 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47324 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47325 'just inserted' FROM t0_template
47326 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47327 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
47328 BEGIN
47329 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47330 f_charbig = 'updated by trigger'
47331       WHERE f_int1 = new.f_int1;
47332 END|
47333 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47334 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47335         
47336 # check trigger-5 success:      1
47337 DROP TRIGGER trg_1;
47338 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47339 f_int2 = CAST(f_char1 AS SIGNED INT),
47340 f_charbig = 'just inserted'
47341    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47342 DELETE FROM t0_aux
47343 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47344 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47345 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47346 'just inserted' FROM t0_template
47347 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47348 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
47349 BEGIN
47350 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47351 f_charbig = 'updated by trigger'
47352       WHERE f_int1 = - old.f_int1;
47353 END|
47354 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47355 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47356         
47357 # check trigger-6 success:      1
47358 DROP TRIGGER trg_1;
47359 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47360 f_int2 = CAST(f_char1 AS SIGNED INT),
47361 f_charbig = 'just inserted'
47362    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47363 DELETE FROM t0_aux
47364 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47365 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47366 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47367 'just inserted' FROM t0_template
47368 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47369 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
47370 BEGIN
47371 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47372 f_charbig = 'updated by trigger'
47373       WHERE f_int1 = - old.f_int1;
47374 END|
47375 DELETE FROM t0_aux
47376 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47377         
47378 # check trigger-7 success:      1
47379 DROP TRIGGER trg_1;
47380 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47381 f_int2 = CAST(f_char1 AS SIGNED INT),
47382 f_charbig = 'just inserted'
47383    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47384 DELETE FROM t0_aux
47385 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47386 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47387 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47388 'just inserted' FROM t0_template
47389 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47390 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
47391 BEGIN
47392 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47393 f_charbig = 'updated by trigger'
47394       WHERE f_int1 = - old.f_int1;
47395 END|
47396 DELETE FROM t0_aux
47397 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47398         
47399 # check trigger-8 success:      1
47400 DROP TRIGGER trg_1;
47401 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47402 f_int2 = CAST(f_char1 AS SIGNED INT),
47403 f_charbig = 'just inserted'
47404    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47405 DELETE FROM t0_aux
47406 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47407 DELETE FROM t1
47408 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47409 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
47410 BEGIN
47411 SET new.f_int1 = old.f_int1 + @max_row,
47412 new.f_int2 = old.f_int2 - @max_row,
47413 new.f_charbig = '####updated per update trigger####';
47414 END|
47415 UPDATE t1
47416 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
47417 f_charbig = '####updated per update statement itself####';
47418         
47419 # check trigger-9 success:      1
47420 DROP TRIGGER trg_2;
47421 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47422 f_int2 = CAST(f_char1 AS SIGNED INT),
47423 f_charbig = CONCAT('===',f_char1,'===');
47424 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
47425 BEGIN
47426 SET new.f_int1 = new.f_int1 + @max_row,
47427 new.f_int2 = new.f_int2 - @max_row,
47428 new.f_charbig = '####updated per update trigger####';
47429 END|
47430 UPDATE t1
47431 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
47432 f_charbig = '####updated per update statement itself####';
47433         
47434 # check trigger-10 success:     1
47435 DROP TRIGGER trg_2;
47436 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47437 f_int2 = CAST(f_char1 AS SIGNED INT),
47438 f_charbig = CONCAT('===',f_char1,'===');
47439 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
47440 BEGIN
47441 SET new.f_int1 = @my_max1 + @counter,
47442 new.f_int2 = @my_min2 - @counter,
47443 new.f_charbig = '####updated per insert trigger####';
47444 SET @counter = @counter + 1;
47445 END|
47446 SET @counter = 1;
47447 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
47448 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47449 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
47450 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
47451 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
47452 ORDER BY f_int1;
47453 DROP TRIGGER trg_3;
47454         
47455 # check trigger-11 success:     1
47456 DELETE FROM t1
47457 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
47458 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
47459 AND f_charbig = '####updated per insert trigger####';
47460 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
47461 BEGIN
47462 SET new.f_int1 = @my_max1 + @counter,
47463 new.f_int2 = @my_min2 - @counter,
47464 new.f_charbig = '####updated per insert trigger####';
47465 SET @counter = @counter + 1;
47466 END|
47467 SET @counter = 1;
47468 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
47469 INSERT INTO t1 (f_char1, f_char2, f_charbig)
47470 SELECT CAST(f_int1 AS CHAR),
47471 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
47472 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
47473 ORDER BY f_int1;
47474 DROP TRIGGER trg_3;
47475         
47476 # check trigger-12 success:     1
47477 DELETE FROM t1
47478 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
47479 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
47480 AND f_charbig = '####updated per insert trigger####';
47481 ANALYZE  TABLE t1;
47482 Table   Op      Msg_type        Msg_text
47483 test.t1 analyze status  OK
47484 CHECK    TABLE t1 EXTENDED;
47485 Table   Op      Msg_type        Msg_text
47486 test.t1 check   status  OK
47487 CHECKSUM TABLE t1 EXTENDED;
47488 Table   Checksum
47489 test.t1 <some_value>
47490 OPTIMIZE TABLE t1;
47491 Table   Op      Msg_type        Msg_text
47492 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
47493 test.t1 optimize        status  OK
47494 # check layout success:    1
47495 REPAIR   TABLE t1 EXTENDED;
47496 Table   Op      Msg_type        Msg_text
47497 test.t1 repair  note    The storage engine for the table doesn't support repair
47498 # check layout success:    1
47499 TRUNCATE t1;
47500         
47501 # check TRUNCATE success:       1
47502 # check layout success:    1
47503 # End usability test (inc/partition_check.inc)
47504 DROP TABLE t1;
47505 CREATE TABLE t1 (
47506 f_int1 INTEGER,
47507 f_int2 INTEGER,
47508 f_char1 CHAR(20),
47509 f_char2 CHAR(20),
47510 f_charbig VARCHAR(1000)
47511 , UNIQUE INDEX uidx (f_int1,f_int2)
47513 PARTITION BY LIST(ABS(MOD(f_int1,2)))
47514 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
47515 (PARTITION part1 VALUES IN (0),
47516 PARTITION part2 VALUES IN (1),
47517 PARTITION part3 VALUES IN (NULL));
47518 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
47519 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
47520 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
47521 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
47522 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
47523 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
47524 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
47525 # Start usability test (inc/partition_check.inc)
47526 create_command
47527 SHOW CREATE TABLE t1;
47528 Table   Create Table
47529 t1      CREATE TABLE `t1` (
47530   `f_int1` mediumint(9) DEFAULT NULL,
47531   `f_int2` mediumint(9) DEFAULT NULL,
47532   `f_char1` char(20) DEFAULT NULL,
47533   `f_char2` char(20) DEFAULT NULL,
47534   `f_charbig` varchar(1000) DEFAULT NULL,
47535   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
47536 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
47537 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
47538 SUBPARTITION BY KEY (f_int1)
47539 SUBPARTITIONS 3
47540 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
47541  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
47542  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
47544 # check prerequisites-1 success:    1
47545 # check COUNT(*) success:    1
47546 # check MIN/MAX(f_int1) success:    1
47547 # check MIN/MAX(f_int2) success:    1
47548 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47549 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
47550 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
47551 WHERE f_int1 IN (2,3);
47552 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
47553 # check prerequisites-3 success:    1
47554 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
47555 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47556 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
47557 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
47558 WHERE f_int1 IN (2,3);
47559 DELETE FROM t1 WHERE f_charbig = 'delete me';
47560 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47561 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
47562 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
47563 WHERE f_int1 IN (2,3);
47564 DELETE FROM t1 WHERE f_charbig = 'delete me';
47565 # check read via f_int1 success: 1
47566 # check read via f_int2 success: 1
47567         
47568 # check multiple-1 success:     1
47569 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
47570         
47571 # check multiple-2 success:     1
47572 INSERT INTO t1 SELECT * FROM t0_template
47573 WHERE MOD(f_int1,3) = 0;
47574         
47575 # check multiple-3 success:     1
47576 UPDATE t1 SET f_int1 = f_int1 + @max_row
47577 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
47578 AND @max_row_div2 + @max_row_div4;
47579         
47580 # check multiple-4 success:     1
47581 DELETE FROM t1
47582 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
47583 AND @max_row_div2 + @max_row_div4 + @max_row;
47584         
47585 # check multiple-5 success:     1
47586 SELECT COUNT(*) INTO @try_count FROM t0_template
47587 WHERE MOD(f_int1,3) = 0
47588 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47589 SELECT COUNT(*) INTO @clash_count
47590 FROM t1 INNER JOIN t0_template USING(f_int1)
47591 WHERE MOD(f_int1,3) = 0
47592 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47593 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
47594 INSERT INTO t1
47595 SET f_int1 = @cur_value , f_int2 = @cur_value,
47596 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
47597 f_charbig = '#SINGLE#';
47598         
47599 # check single-1 success:       1
47600 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
47601 INSERT INTO t1
47602 SET f_int1 = @cur_value , f_int2 = @cur_value,
47603 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
47604 f_charbig = '#SINGLE#';
47605         
47606 # check single-2 success:       1
47607 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
47608 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
47609 UPDATE t1 SET f_int1 = @cur_value2
47610 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
47611         
47612 # check single-3 success:       1
47613 SET @cur_value1= -1;
47614 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
47615 UPDATE t1 SET f_int1 = @cur_value1
47616 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
47617         
47618 # check single-4 success:       1
47619 SELECT MAX(f_int1) INTO @cur_value FROM t1;
47620 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
47621         
47622 # check single-5 success:       1
47623 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
47624         
47625 # check single-6 success:       1
47626 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
47627 Warnings:
47628 Warning 1264    Out of range value for column 'f_int1' at row 1
47629 Warning 1264    Out of range value for column 'f_int2' at row 1
47630         
47631 # check single-7 success:       1
47632 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
47633 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
47634 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
47635 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
47636 f_charbig = '#NULL#';
47637 INSERT INTO t1
47638 SET f_int1 = NULL , f_int2 = -@max_row,
47639 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
47640 f_charbig = '#NULL#';
47641 # check null success:    1
47642         
47643 # check null-1 success:         1
47644 UPDATE t1 SET f_int1 = -@max_row
47645 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47646 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47647         
47648 # check null-2 success:         1
47649 UPDATE t1 SET f_int1 = NULL
47650 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47651 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47652         
47653 # check null-3 success:         1
47654 DELETE FROM t1
47655 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
47656 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
47657         
47658 # check null-4 success:         1
47659 DELETE FROM t1
47660 WHERE f_int1 = 0 AND f_int2 = 0
47661 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
47662 AND f_charbig = '#NULL#';
47663 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47664 SELECT f_int1, f_int1, '', '', 'was inserted'
47665    FROM t0_template source_tab
47666 WHERE MOD(f_int1,3) = 0
47667 AND f_int1 BETWEEN @max_row_div2 AND @max_row
47668 ON DUPLICATE KEY
47669 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
47670 f_int2 = 2 * @max_row + source_tab.f_int1,
47671 f_charbig = 'was updated';
47672         
47673 # check unique-1-a success:     1
47674         
47675 # check unique-1-b success:     1
47676 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47677 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47678 f_int2 = CAST(f_char1 AS SIGNED INT),
47679 f_charbig = CONCAT('===',f_char1,'===')
47680 WHERE f_charbig = 'was updated';
47681 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47682 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
47683    FROM t0_template source_tab
47684 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
47685         
47686 # check replace success:        1
47687 DELETE FROM t1
47688 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
47689 DELETE FROM t1
47690 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
47691 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
47692 UPDATE t1 SET f_int2 = f_int1,
47693 f_char1 = CAST(f_int1 AS CHAR),
47694 f_char2 = CAST(f_int1 AS CHAR),
47695 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
47696 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
47697 SET AUTOCOMMIT= 0;
47698 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47699 SELECT f_int1, f_int1, '', '', 'was inserted'
47700 FROM t0_template source_tab
47701 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47702         
47703 # check transactions-1 success:         1
47704 COMMIT WORK;
47705         
47706 # check transactions-2 success:         1
47707 ROLLBACK WORK;
47708         
47709 # check transactions-3 success:         1
47710 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47711 COMMIT WORK;
47712 ROLLBACK WORK;
47713         
47714 # check transactions-4 success:         1
47715 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47716 SELECT f_int1, f_int1, '', '', 'was inserted'
47717 FROM t0_template source_tab
47718 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47719         
47720 # check transactions-5 success:         1
47721 ROLLBACK WORK;
47722         
47723 # check transactions-6 success:         1
47724 # INFO: Storage engine used for t1 seems to be transactional.
47725 COMMIT;
47726         
47727 # check transactions-7 success:         1
47728 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47729 COMMIT WORK;
47730 SET @@session.sql_mode = 'traditional';
47731 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
47732 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47733 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
47734 '', '', 'was inserted' FROM t0_template
47735 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
47736 ERROR 22012: Division by 0
47737 COMMIT;
47738         
47739 # check transactions-8 success:         1
47740 # INFO: Storage engine used for t1 seems to be able to revert
47741 #       changes made by the failing statement.
47742 SET @@session.sql_mode = '';
47743 SET AUTOCOMMIT= 1;
47744 DELETE FROM t1 WHERE f_charbig = 'was inserted';
47745 COMMIT WORK;
47746 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
47747         
47748 # check special-1 success:      1
47749 UPDATE t1 SET f_charbig = '';
47750         
47751 # check special-2 success:      1
47752 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
47753 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
47754 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
47755 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47758 'just inserted' FROM t0_template
47759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47760 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
47761 BEGIN
47762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47763 f_charbig = 'updated by trigger'
47764       WHERE f_int1 = new.f_int1;
47765 END|
47766 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47767 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
47768 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47769         
47770 # check trigger-1 success:      1
47771 DROP TRIGGER trg_1;
47772 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47773 f_int2 = CAST(f_char1 AS SIGNED INT),
47774 f_charbig = 'just inserted'
47775    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47776 DELETE FROM t0_aux
47777 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47778 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47779 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47780 'just inserted' FROM t0_template
47781 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47782 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
47783 BEGIN
47784 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47785 f_charbig = 'updated by trigger'
47786       WHERE f_int1 = new.f_int1;
47787 END|
47788 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47789 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
47790 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47791         
47792 # check trigger-2 success:      1
47793 DROP TRIGGER trg_1;
47794 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47795 f_int2 = CAST(f_char1 AS SIGNED INT),
47796 f_charbig = 'just inserted'
47797    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47798 DELETE FROM t0_aux
47799 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47800 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47801 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47802 'just inserted' FROM t0_template
47803 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47804 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
47805 BEGIN
47806 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47807 f_charbig = 'updated by trigger'
47808       WHERE f_int1 = new.f_int1;
47809 END|
47810 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47811 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47812         
47813 # check trigger-3 success:      1
47814 DROP TRIGGER trg_1;
47815 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47816 f_int2 = CAST(f_char1 AS SIGNED INT),
47817 f_charbig = 'just inserted'
47818    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47819 DELETE FROM t0_aux
47820 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47821 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47822 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47823 'just inserted' FROM t0_template
47824 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47825 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
47826 BEGIN
47827 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47828 f_charbig = 'updated by trigger'
47829       WHERE f_int1 = - old.f_int1;
47830 END|
47831 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47832 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47833         
47834 # check trigger-4 success:      1
47835 DROP TRIGGER trg_1;
47836 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47837 f_int2 = CAST(f_char1 AS SIGNED INT),
47838 f_charbig = 'just inserted'
47839    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47840 DELETE FROM t0_aux
47841 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47842 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47843 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47844 'just inserted' FROM t0_template
47845 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47846 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
47847 BEGIN
47848 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47849 f_charbig = 'updated by trigger'
47850       WHERE f_int1 = new.f_int1;
47851 END|
47852 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47853 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47854         
47855 # check trigger-5 success:      1
47856 DROP TRIGGER trg_1;
47857 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47858 f_int2 = CAST(f_char1 AS SIGNED INT),
47859 f_charbig = 'just inserted'
47860    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47861 DELETE FROM t0_aux
47862 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47863 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47864 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47865 'just inserted' FROM t0_template
47866 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47867 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
47868 BEGIN
47869 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47870 f_charbig = 'updated by trigger'
47871       WHERE f_int1 = - old.f_int1;
47872 END|
47873 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
47874 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47875         
47876 # check trigger-6 success:      1
47877 DROP TRIGGER trg_1;
47878 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47879 f_int2 = CAST(f_char1 AS SIGNED INT),
47880 f_charbig = 'just inserted'
47881    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47882 DELETE FROM t0_aux
47883 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47884 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47885 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47886 'just inserted' FROM t0_template
47887 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47888 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
47889 BEGIN
47890 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47891 f_charbig = 'updated by trigger'
47892       WHERE f_int1 = - old.f_int1;
47893 END|
47894 DELETE FROM t0_aux
47895 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47896         
47897 # check trigger-7 success:      1
47898 DROP TRIGGER trg_1;
47899 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47900 f_int2 = CAST(f_char1 AS SIGNED INT),
47901 f_charbig = 'just inserted'
47902    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47903 DELETE FROM t0_aux
47904 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47905 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
47906 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
47907 'just inserted' FROM t0_template
47908 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47909 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
47910 BEGIN
47911 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
47912 f_charbig = 'updated by trigger'
47913       WHERE f_int1 = - old.f_int1;
47914 END|
47915 DELETE FROM t0_aux
47916 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
47917         
47918 # check trigger-8 success:      1
47919 DROP TRIGGER trg_1;
47920 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47921 f_int2 = CAST(f_char1 AS SIGNED INT),
47922 f_charbig = 'just inserted'
47923    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
47924 DELETE FROM t0_aux
47925 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47926 DELETE FROM t1
47927 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
47928 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
47929 BEGIN
47930 SET new.f_int1 = old.f_int1 + @max_row,
47931 new.f_int2 = old.f_int2 - @max_row,
47932 new.f_charbig = '####updated per update trigger####';
47933 END|
47934 UPDATE t1
47935 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
47936 f_charbig = '####updated per update statement itself####';
47937         
47938 # check trigger-9 success:      1
47939 DROP TRIGGER trg_2;
47940 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47941 f_int2 = CAST(f_char1 AS SIGNED INT),
47942 f_charbig = CONCAT('===',f_char1,'===');
47943 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
47944 BEGIN
47945 SET new.f_int1 = new.f_int1 + @max_row,
47946 new.f_int2 = new.f_int2 - @max_row,
47947 new.f_charbig = '####updated per update trigger####';
47948 END|
47949 UPDATE t1
47950 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
47951 f_charbig = '####updated per update statement itself####';
47952         
47953 # check trigger-10 success:     1
47954 DROP TRIGGER trg_2;
47955 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
47956 f_int2 = CAST(f_char1 AS SIGNED INT),
47957 f_charbig = CONCAT('===',f_char1,'===');
47958 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
47959 BEGIN
47960 SET new.f_int1 = @my_max1 + @counter,
47961 new.f_int2 = @my_min2 - @counter,
47962 new.f_charbig = '####updated per insert trigger####';
47963 SET @counter = @counter + 1;
47964 END|
47965 SET @counter = 1;
47966 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
47967 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
47968 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
47969 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
47970 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
47971 ORDER BY f_int1;
47972 DROP TRIGGER trg_3;
47973         
47974 # check trigger-11 success:     1
47975 DELETE FROM t1
47976 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
47977 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
47978 AND f_charbig = '####updated per insert trigger####';
47979 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
47980 BEGIN
47981 SET new.f_int1 = @my_max1 + @counter,
47982 new.f_int2 = @my_min2 - @counter,
47983 new.f_charbig = '####updated per insert trigger####';
47984 SET @counter = @counter + 1;
47985 END|
47986 SET @counter = 1;
47987 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
47988 INSERT INTO t1 (f_char1, f_char2, f_charbig)
47989 SELECT CAST(f_int1 AS CHAR),
47990 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
47991 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
47992 ORDER BY f_int1;
47993 DROP TRIGGER trg_3;
47994         
47995 # check trigger-12 success:     1
47996 DELETE FROM t1
47997 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
47998 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
47999 AND f_charbig = '####updated per insert trigger####';
48000 ANALYZE  TABLE t1;
48001 Table   Op      Msg_type        Msg_text
48002 test.t1 analyze status  OK
48003 CHECK    TABLE t1 EXTENDED;
48004 Table   Op      Msg_type        Msg_text
48005 test.t1 check   status  OK
48006 CHECKSUM TABLE t1 EXTENDED;
48007 Table   Checksum
48008 test.t1 <some_value>
48009 OPTIMIZE TABLE t1;
48010 Table   Op      Msg_type        Msg_text
48011 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
48012 test.t1 optimize        status  OK
48013 # check layout success:    1
48014 REPAIR   TABLE t1 EXTENDED;
48015 Table   Op      Msg_type        Msg_text
48016 test.t1 repair  note    The storage engine for the table doesn't support repair
48017 # check layout success:    1
48018 TRUNCATE t1;
48019         
48020 # check TRUNCATE success:       1
48021 # check layout success:    1
48022 # End usability test (inc/partition_check.inc)
48023 DROP TABLE t1;
48024 DROP TABLE IF EXISTS t1;
48025 CREATE TABLE t1 (
48026 f_int1 INTEGER,
48027 f_int2 INTEGER,
48028 f_char1 CHAR(20),
48029 f_char2 CHAR(20),
48030 f_charbig VARCHAR(1000)
48031 , UNIQUE INDEX uidx (f_int1,f_int2)
48033 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
48034 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48035 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
48036 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
48037 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
48038 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48039 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
48040 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
48041 # Start usability test (inc/partition_check.inc)
48042 create_command
48043 SHOW CREATE TABLE t1;
48044 Table   Create Table
48045 t1      CREATE TABLE `t1` (
48046   `f_int1` mediumint(9) DEFAULT NULL,
48047   `f_int2` mediumint(9) DEFAULT NULL,
48048   `f_char1` char(20) DEFAULT NULL,
48049   `f_char2` char(20) DEFAULT NULL,
48050   `f_charbig` varchar(1000) DEFAULT NULL,
48051   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
48052 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
48053 /*!50100 PARTITION BY HASH (f_int1 + f_int2)
48054 PARTITIONS 2 */
48056 # check prerequisites-1 success:    1
48057 # check COUNT(*) success:    1
48058 # check MIN/MAX(f_int1) success:    1
48059 # check MIN/MAX(f_int2) success:    1
48060 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48061 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
48062 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
48063 WHERE f_int1 IN (2,3);
48064 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
48065 # check prerequisites-3 success:    1
48066 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
48067 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48068 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
48069 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
48070 WHERE f_int1 IN (2,3);
48071 DELETE FROM t1 WHERE f_charbig = 'delete me';
48072 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48073 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
48074 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
48075 WHERE f_int1 IN (2,3);
48076 DELETE FROM t1 WHERE f_charbig = 'delete me';
48077 # check read via f_int1 success: 1
48078 # check read via f_int2 success: 1
48079         
48080 # check multiple-1 success:     1
48081 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
48082         
48083 # check multiple-2 success:     1
48084 INSERT INTO t1 SELECT * FROM t0_template
48085 WHERE MOD(f_int1,3) = 0;
48086         
48087 # check multiple-3 success:     1
48088 UPDATE t1 SET f_int1 = f_int1 + @max_row
48089 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
48090 AND @max_row_div2 + @max_row_div4;
48091         
48092 # check multiple-4 success:     1
48093 DELETE FROM t1
48094 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
48095 AND @max_row_div2 + @max_row_div4 + @max_row;
48096         
48097 # check multiple-5 success:     1
48098 SELECT COUNT(*) INTO @try_count FROM t0_template
48099 WHERE MOD(f_int1,3) = 0
48100 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48101 SELECT COUNT(*) INTO @clash_count
48102 FROM t1 INNER JOIN t0_template USING(f_int1)
48103 WHERE MOD(f_int1,3) = 0
48104 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48105 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
48106 INSERT INTO t1
48107 SET f_int1 = @cur_value , f_int2 = @cur_value,
48108 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
48109 f_charbig = '#SINGLE#';
48110         
48111 # check single-1 success:       1
48112 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
48113 INSERT INTO t1
48114 SET f_int1 = @cur_value , f_int2 = @cur_value,
48115 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
48116 f_charbig = '#SINGLE#';
48117         
48118 # check single-2 success:       1
48119 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
48120 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
48121 UPDATE t1 SET f_int1 = @cur_value2
48122 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
48123         
48124 # check single-3 success:       1
48125 SET @cur_value1= -1;
48126 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
48127 UPDATE t1 SET f_int1 = @cur_value1
48128 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
48129         
48130 # check single-4 success:       1
48131 SELECT MAX(f_int1) INTO @cur_value FROM t1;
48132 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
48133         
48134 # check single-5 success:       1
48135 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
48136         
48137 # check single-6 success:       1
48138 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
48139 Warnings:
48140 Warning 1264    Out of range value for column 'f_int1' at row 1
48141 Warning 1264    Out of range value for column 'f_int2' at row 1
48142         
48143 # check single-7 success:       1
48144 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
48145 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
48146 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
48147 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
48148 f_charbig = '#NULL#';
48149 INSERT INTO t1
48150 SET f_int1 = NULL , f_int2 = -@max_row,
48151 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
48152 f_charbig = '#NULL#';
48153 # check null success:    1
48154         
48155 # check null-1 success:         1
48156 UPDATE t1 SET f_int1 = -@max_row
48157 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48158 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48159         
48160 # check null-2 success:         1
48161 UPDATE t1 SET f_int1 = NULL
48162 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48163 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48164         
48165 # check null-3 success:         1
48166 DELETE FROM t1
48167 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48168 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48169         
48170 # check null-4 success:         1
48171 DELETE FROM t1
48172 WHERE f_int1 = 0 AND f_int2 = 0
48173 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
48174 AND f_charbig = '#NULL#';
48175 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48176 SELECT f_int1, f_int1, '', '', 'was inserted'
48177    FROM t0_template source_tab
48178 WHERE MOD(f_int1,3) = 0
48179 AND f_int1 BETWEEN @max_row_div2 AND @max_row
48180 ON DUPLICATE KEY
48181 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
48182 f_int2 = 2 * @max_row + source_tab.f_int1,
48183 f_charbig = 'was updated';
48184         
48185 # check unique-1-a success:     1
48186         
48187 # check unique-1-b success:     1
48188 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48189 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48190 f_int2 = CAST(f_char1 AS SIGNED INT),
48191 f_charbig = CONCAT('===',f_char1,'===')
48192 WHERE f_charbig = 'was updated';
48193 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48194 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
48195    FROM t0_template source_tab
48196 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48197         
48198 # check replace success:        1
48199 DELETE FROM t1
48200 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
48201 DELETE FROM t1
48202 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
48203 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
48204 UPDATE t1 SET f_int2 = f_int1,
48205 f_char1 = CAST(f_int1 AS CHAR),
48206 f_char2 = CAST(f_int1 AS CHAR),
48207 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
48208 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
48209 SET AUTOCOMMIT= 0;
48210 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48211 SELECT f_int1, f_int1, '', '', 'was inserted'
48212 FROM t0_template source_tab
48213 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48214         
48215 # check transactions-1 success:         1
48216 COMMIT WORK;
48217         
48218 # check transactions-2 success:         1
48219 ROLLBACK WORK;
48220         
48221 # check transactions-3 success:         1
48222 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48223 COMMIT WORK;
48224 ROLLBACK WORK;
48225         
48226 # check transactions-4 success:         1
48227 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48228 SELECT f_int1, f_int1, '', '', 'was inserted'
48229 FROM t0_template source_tab
48230 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48231         
48232 # check transactions-5 success:         1
48233 ROLLBACK WORK;
48234         
48235 # check transactions-6 success:         1
48236 # INFO: Storage engine used for t1 seems to be transactional.
48237 COMMIT;
48238         
48239 # check transactions-7 success:         1
48240 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48241 COMMIT WORK;
48242 SET @@session.sql_mode = 'traditional';
48243 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
48244 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48245 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
48246 '', '', 'was inserted' FROM t0_template
48247 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48248 ERROR 22012: Division by 0
48249 COMMIT;
48250         
48251 # check transactions-8 success:         1
48252 # INFO: Storage engine used for t1 seems to be able to revert
48253 #       changes made by the failing statement.
48254 SET @@session.sql_mode = '';
48255 SET AUTOCOMMIT= 1;
48256 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48257 COMMIT WORK;
48258 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
48259         
48260 # check special-1 success:      1
48261 UPDATE t1 SET f_charbig = '';
48262         
48263 # check special-2 success:      1
48264 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
48265 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48266 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
48267 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48268 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48269 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48270 'just inserted' FROM t0_template
48271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48272 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
48273 BEGIN
48274 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48275 f_charbig = 'updated by trigger'
48276       WHERE f_int1 = new.f_int1;
48277 END|
48278 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48279 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
48280 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48281         
48282 # check trigger-1 success:      1
48283 DROP TRIGGER trg_1;
48284 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48285 f_int2 = CAST(f_char1 AS SIGNED INT),
48286 f_charbig = 'just inserted'
48287    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48288 DELETE FROM t0_aux
48289 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48290 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48291 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48292 'just inserted' FROM t0_template
48293 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48294 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
48295 BEGIN
48296 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48297 f_charbig = 'updated by trigger'
48298       WHERE f_int1 = new.f_int1;
48299 END|
48300 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48301 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
48302 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48303         
48304 # check trigger-2 success:      1
48305 DROP TRIGGER trg_1;
48306 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48307 f_int2 = CAST(f_char1 AS SIGNED INT),
48308 f_charbig = 'just inserted'
48309    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48310 DELETE FROM t0_aux
48311 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48312 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48313 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48314 'just inserted' FROM t0_template
48315 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48316 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
48317 BEGIN
48318 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48319 f_charbig = 'updated by trigger'
48320       WHERE f_int1 = new.f_int1;
48321 END|
48322 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48323 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48324         
48325 # check trigger-3 success:      1
48326 DROP TRIGGER trg_1;
48327 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48328 f_int2 = CAST(f_char1 AS SIGNED INT),
48329 f_charbig = 'just inserted'
48330    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48331 DELETE FROM t0_aux
48332 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48333 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48334 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48335 'just inserted' FROM t0_template
48336 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48337 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
48338 BEGIN
48339 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48340 f_charbig = 'updated by trigger'
48341       WHERE f_int1 = - old.f_int1;
48342 END|
48343 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48344 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48345         
48346 # check trigger-4 success:      1
48347 DROP TRIGGER trg_1;
48348 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48349 f_int2 = CAST(f_char1 AS SIGNED INT),
48350 f_charbig = 'just inserted'
48351    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48352 DELETE FROM t0_aux
48353 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48354 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48355 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48356 'just inserted' FROM t0_template
48357 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48358 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
48359 BEGIN
48360 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48361 f_charbig = 'updated by trigger'
48362       WHERE f_int1 = new.f_int1;
48363 END|
48364 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48365 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48366         
48367 # check trigger-5 success:      1
48368 DROP TRIGGER trg_1;
48369 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48370 f_int2 = CAST(f_char1 AS SIGNED INT),
48371 f_charbig = 'just inserted'
48372    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48373 DELETE FROM t0_aux
48374 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48375 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48376 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48377 'just inserted' FROM t0_template
48378 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48379 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
48380 BEGIN
48381 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48382 f_charbig = 'updated by trigger'
48383       WHERE f_int1 = - old.f_int1;
48384 END|
48385 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48386 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48387         
48388 # check trigger-6 success:      1
48389 DROP TRIGGER trg_1;
48390 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48391 f_int2 = CAST(f_char1 AS SIGNED INT),
48392 f_charbig = 'just inserted'
48393    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48394 DELETE FROM t0_aux
48395 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48396 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48397 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48398 'just inserted' FROM t0_template
48399 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48400 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
48401 BEGIN
48402 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48403 f_charbig = 'updated by trigger'
48404       WHERE f_int1 = - old.f_int1;
48405 END|
48406 DELETE FROM t0_aux
48407 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48408         
48409 # check trigger-7 success:      1
48410 DROP TRIGGER trg_1;
48411 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48412 f_int2 = CAST(f_char1 AS SIGNED INT),
48413 f_charbig = 'just inserted'
48414    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48415 DELETE FROM t0_aux
48416 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48417 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48418 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48419 'just inserted' FROM t0_template
48420 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48421 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
48422 BEGIN
48423 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48424 f_charbig = 'updated by trigger'
48425       WHERE f_int1 = - old.f_int1;
48426 END|
48427 DELETE FROM t0_aux
48428 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48429         
48430 # check trigger-8 success:      1
48431 DROP TRIGGER trg_1;
48432 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48433 f_int2 = CAST(f_char1 AS SIGNED INT),
48434 f_charbig = 'just inserted'
48435    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48436 DELETE FROM t0_aux
48437 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48438 DELETE FROM t1
48439 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48440 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
48441 BEGIN
48442 SET new.f_int1 = old.f_int1 + @max_row,
48443 new.f_int2 = old.f_int2 - @max_row,
48444 new.f_charbig = '####updated per update trigger####';
48445 END|
48446 UPDATE t1
48447 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
48448 f_charbig = '####updated per update statement itself####';
48449         
48450 # check trigger-9 success:      1
48451 DROP TRIGGER trg_2;
48452 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48453 f_int2 = CAST(f_char1 AS SIGNED INT),
48454 f_charbig = CONCAT('===',f_char1,'===');
48455 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
48456 BEGIN
48457 SET new.f_int1 = new.f_int1 + @max_row,
48458 new.f_int2 = new.f_int2 - @max_row,
48459 new.f_charbig = '####updated per update trigger####';
48460 END|
48461 UPDATE t1
48462 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
48463 f_charbig = '####updated per update statement itself####';
48464         
48465 # check trigger-10 success:     1
48466 DROP TRIGGER trg_2;
48467 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48468 f_int2 = CAST(f_char1 AS SIGNED INT),
48469 f_charbig = CONCAT('===',f_char1,'===');
48470 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
48471 BEGIN
48472 SET new.f_int1 = @my_max1 + @counter,
48473 new.f_int2 = @my_min2 - @counter,
48474 new.f_charbig = '####updated per insert trigger####';
48475 SET @counter = @counter + 1;
48476 END|
48477 SET @counter = 1;
48478 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
48479 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48480 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
48481 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
48482 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
48483 ORDER BY f_int1;
48484 DROP TRIGGER trg_3;
48485         
48486 # check trigger-11 success:     1
48487 DELETE FROM t1
48488 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
48489 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
48490 AND f_charbig = '####updated per insert trigger####';
48491 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
48492 BEGIN
48493 SET new.f_int1 = @my_max1 + @counter,
48494 new.f_int2 = @my_min2 - @counter,
48495 new.f_charbig = '####updated per insert trigger####';
48496 SET @counter = @counter + 1;
48497 END|
48498 SET @counter = 1;
48499 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
48500 INSERT INTO t1 (f_char1, f_char2, f_charbig)
48501 SELECT CAST(f_int1 AS CHAR),
48502 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
48503 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
48504 ORDER BY f_int1;
48505 DROP TRIGGER trg_3;
48506         
48507 # check trigger-12 success:     1
48508 DELETE FROM t1
48509 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
48510 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
48511 AND f_charbig = '####updated per insert trigger####';
48512 ANALYZE  TABLE t1;
48513 Table   Op      Msg_type        Msg_text
48514 test.t1 analyze status  OK
48515 CHECK    TABLE t1 EXTENDED;
48516 Table   Op      Msg_type        Msg_text
48517 test.t1 check   status  OK
48518 CHECKSUM TABLE t1 EXTENDED;
48519 Table   Checksum
48520 test.t1 <some_value>
48521 OPTIMIZE TABLE t1;
48522 Table   Op      Msg_type        Msg_text
48523 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
48524 test.t1 optimize        status  OK
48525 # check layout success:    1
48526 REPAIR   TABLE t1 EXTENDED;
48527 Table   Op      Msg_type        Msg_text
48528 test.t1 repair  note    The storage engine for the table doesn't support repair
48529 # check layout success:    1
48530 TRUNCATE t1;
48531         
48532 # check TRUNCATE success:       1
48533 # check layout success:    1
48534 # End usability test (inc/partition_check.inc)
48535 DROP TABLE t1;
48536 CREATE TABLE t1 (
48537 f_int1 INTEGER,
48538 f_int2 INTEGER,
48539 f_char1 CHAR(20),
48540 f_char2 CHAR(20),
48541 f_charbig VARCHAR(1000)
48542 , UNIQUE INDEX uidx (f_int1,f_int2)
48544 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
48545 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48546 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
48547 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
48548 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
48549 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48550 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
48551 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
48552 # Start usability test (inc/partition_check.inc)
48553 create_command
48554 SHOW CREATE TABLE t1;
48555 Table   Create Table
48556 t1      CREATE TABLE `t1` (
48557   `f_int1` mediumint(9) DEFAULT NULL,
48558   `f_int2` mediumint(9) DEFAULT NULL,
48559   `f_char1` char(20) DEFAULT NULL,
48560   `f_char2` char(20) DEFAULT NULL,
48561   `f_charbig` varchar(1000) DEFAULT NULL,
48562   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
48563 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
48564 /*!50100 PARTITION BY KEY (f_int1,f_int2)
48565 PARTITIONS 5 */
48567 # check prerequisites-1 success:    1
48568 # check COUNT(*) success:    1
48569 # check MIN/MAX(f_int1) success:    1
48570 # check MIN/MAX(f_int2) success:    1
48571 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48572 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
48573 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
48574 WHERE f_int1 IN (2,3);
48575 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
48576 # check prerequisites-3 success:    1
48577 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
48578 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48579 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
48580 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
48581 WHERE f_int1 IN (2,3);
48582 DELETE FROM t1 WHERE f_charbig = 'delete me';
48583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48584 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
48585 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
48586 WHERE f_int1 IN (2,3);
48587 DELETE FROM t1 WHERE f_charbig = 'delete me';
48588 # check read via f_int1 success: 1
48589 # check read via f_int2 success: 1
48590         
48591 # check multiple-1 success:     1
48592 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
48593         
48594 # check multiple-2 success:     1
48595 INSERT INTO t1 SELECT * FROM t0_template
48596 WHERE MOD(f_int1,3) = 0;
48597         
48598 # check multiple-3 success:     1
48599 UPDATE t1 SET f_int1 = f_int1 + @max_row
48600 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
48601 AND @max_row_div2 + @max_row_div4;
48602         
48603 # check multiple-4 success:     1
48604 DELETE FROM t1
48605 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
48606 AND @max_row_div2 + @max_row_div4 + @max_row;
48607         
48608 # check multiple-5 success:     1
48609 SELECT COUNT(*) INTO @try_count FROM t0_template
48610 WHERE MOD(f_int1,3) = 0
48611 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48612 SELECT COUNT(*) INTO @clash_count
48613 FROM t1 INNER JOIN t0_template USING(f_int1)
48614 WHERE MOD(f_int1,3) = 0
48615 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48616 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
48617 INSERT INTO t1
48618 SET f_int1 = @cur_value , f_int2 = @cur_value,
48619 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
48620 f_charbig = '#SINGLE#';
48621         
48622 # check single-1 success:       1
48623 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
48624 INSERT INTO t1
48625 SET f_int1 = @cur_value , f_int2 = @cur_value,
48626 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
48627 f_charbig = '#SINGLE#';
48628         
48629 # check single-2 success:       1
48630 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
48631 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
48632 UPDATE t1 SET f_int1 = @cur_value2
48633 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
48634         
48635 # check single-3 success:       1
48636 SET @cur_value1= -1;
48637 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
48638 UPDATE t1 SET f_int1 = @cur_value1
48639 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
48640         
48641 # check single-4 success:       1
48642 SELECT MAX(f_int1) INTO @cur_value FROM t1;
48643 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
48644         
48645 # check single-5 success:       1
48646 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
48647         
48648 # check single-6 success:       1
48649 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
48650 Warnings:
48651 Warning 1264    Out of range value for column 'f_int1' at row 1
48652 Warning 1264    Out of range value for column 'f_int2' at row 1
48653         
48654 # check single-7 success:       1
48655 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
48656 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
48657 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
48658 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
48659 f_charbig = '#NULL#';
48660 INSERT INTO t1
48661 SET f_int1 = NULL , f_int2 = -@max_row,
48662 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
48663 f_charbig = '#NULL#';
48664 # check null success:    1
48665         
48666 # check null-1 success:         1
48667 UPDATE t1 SET f_int1 = -@max_row
48668 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48669 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48670         
48671 # check null-2 success:         1
48672 UPDATE t1 SET f_int1 = NULL
48673 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48674 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48675         
48676 # check null-3 success:         1
48677 DELETE FROM t1
48678 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
48679 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
48680         
48681 # check null-4 success:         1
48682 DELETE FROM t1
48683 WHERE f_int1 = 0 AND f_int2 = 0
48684 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
48685 AND f_charbig = '#NULL#';
48686 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48687 SELECT f_int1, f_int1, '', '', 'was inserted'
48688    FROM t0_template source_tab
48689 WHERE MOD(f_int1,3) = 0
48690 AND f_int1 BETWEEN @max_row_div2 AND @max_row
48691 ON DUPLICATE KEY
48692 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
48693 f_int2 = 2 * @max_row + source_tab.f_int1,
48694 f_charbig = 'was updated';
48695         
48696 # check unique-1-a success:     1
48697         
48698 # check unique-1-b success:     1
48699 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48700 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48701 f_int2 = CAST(f_char1 AS SIGNED INT),
48702 f_charbig = CONCAT('===',f_char1,'===')
48703 WHERE f_charbig = 'was updated';
48704 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48705 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
48706    FROM t0_template source_tab
48707 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
48708         
48709 # check replace success:        1
48710 DELETE FROM t1
48711 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
48712 DELETE FROM t1
48713 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
48714 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
48715 UPDATE t1 SET f_int2 = f_int1,
48716 f_char1 = CAST(f_int1 AS CHAR),
48717 f_char2 = CAST(f_int1 AS CHAR),
48718 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
48719 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
48720 SET AUTOCOMMIT= 0;
48721 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48722 SELECT f_int1, f_int1, '', '', 'was inserted'
48723 FROM t0_template source_tab
48724 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48725         
48726 # check transactions-1 success:         1
48727 COMMIT WORK;
48728         
48729 # check transactions-2 success:         1
48730 ROLLBACK WORK;
48731         
48732 # check transactions-3 success:         1
48733 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48734 COMMIT WORK;
48735 ROLLBACK WORK;
48736         
48737 # check transactions-4 success:         1
48738 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48739 SELECT f_int1, f_int1, '', '', 'was inserted'
48740 FROM t0_template source_tab
48741 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48742         
48743 # check transactions-5 success:         1
48744 ROLLBACK WORK;
48745         
48746 # check transactions-6 success:         1
48747 # INFO: Storage engine used for t1 seems to be transactional.
48748 COMMIT;
48749         
48750 # check transactions-7 success:         1
48751 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48752 COMMIT WORK;
48753 SET @@session.sql_mode = 'traditional';
48754 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
48755 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48756 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
48757 '', '', 'was inserted' FROM t0_template
48758 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
48759 ERROR 22012: Division by 0
48760 COMMIT;
48761         
48762 # check transactions-8 success:         1
48763 # INFO: Storage engine used for t1 seems to be able to revert
48764 #       changes made by the failing statement.
48765 SET @@session.sql_mode = '';
48766 SET AUTOCOMMIT= 1;
48767 DELETE FROM t1 WHERE f_charbig = 'was inserted';
48768 COMMIT WORK;
48769 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
48770         
48771 # check special-1 success:      1
48772 UPDATE t1 SET f_charbig = '';
48773         
48774 # check special-2 success:      1
48775 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
48776 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
48777 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
48778 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48779 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48780 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48781 'just inserted' FROM t0_template
48782 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48783 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
48784 BEGIN
48785 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48786 f_charbig = 'updated by trigger'
48787       WHERE f_int1 = new.f_int1;
48788 END|
48789 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48790 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
48791 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48792         
48793 # check trigger-1 success:      1
48794 DROP TRIGGER trg_1;
48795 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48796 f_int2 = CAST(f_char1 AS SIGNED INT),
48797 f_charbig = 'just inserted'
48798    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48799 DELETE FROM t0_aux
48800 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48801 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48802 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48803 'just inserted' FROM t0_template
48804 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48805 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
48806 BEGIN
48807 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48808 f_charbig = 'updated by trigger'
48809       WHERE f_int1 = new.f_int1;
48810 END|
48811 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48812 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
48813 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48814         
48815 # check trigger-2 success:      1
48816 DROP TRIGGER trg_1;
48817 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48818 f_int2 = CAST(f_char1 AS SIGNED INT),
48819 f_charbig = 'just inserted'
48820    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48821 DELETE FROM t0_aux
48822 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48823 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48824 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48825 'just inserted' FROM t0_template
48826 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48827 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
48828 BEGIN
48829 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48830 f_charbig = 'updated by trigger'
48831       WHERE f_int1 = new.f_int1;
48832 END|
48833 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48834 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48835         
48836 # check trigger-3 success:      1
48837 DROP TRIGGER trg_1;
48838 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48839 f_int2 = CAST(f_char1 AS SIGNED INT),
48840 f_charbig = 'just inserted'
48841    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48842 DELETE FROM t0_aux
48843 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48844 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48845 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48846 'just inserted' FROM t0_template
48847 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48848 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
48849 BEGIN
48850 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48851 f_charbig = 'updated by trigger'
48852       WHERE f_int1 = - old.f_int1;
48853 END|
48854 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48855 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48856         
48857 # check trigger-4 success:      1
48858 DROP TRIGGER trg_1;
48859 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48860 f_int2 = CAST(f_char1 AS SIGNED INT),
48861 f_charbig = 'just inserted'
48862    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48863 DELETE FROM t0_aux
48864 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48865 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48866 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48867 'just inserted' FROM t0_template
48868 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48869 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
48870 BEGIN
48871 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48872 f_charbig = 'updated by trigger'
48873       WHERE f_int1 = new.f_int1;
48874 END|
48875 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48876 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48877         
48878 # check trigger-5 success:      1
48879 DROP TRIGGER trg_1;
48880 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48881 f_int2 = CAST(f_char1 AS SIGNED INT),
48882 f_charbig = 'just inserted'
48883    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48884 DELETE FROM t0_aux
48885 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48886 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48887 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48888 'just inserted' FROM t0_template
48889 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48890 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
48891 BEGIN
48892 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48893 f_charbig = 'updated by trigger'
48894       WHERE f_int1 = - old.f_int1;
48895 END|
48896 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
48897 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48898         
48899 # check trigger-6 success:      1
48900 DROP TRIGGER trg_1;
48901 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48902 f_int2 = CAST(f_char1 AS SIGNED INT),
48903 f_charbig = 'just inserted'
48904    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48905 DELETE FROM t0_aux
48906 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48907 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48908 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48909 'just inserted' FROM t0_template
48910 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48911 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
48912 BEGIN
48913 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48914 f_charbig = 'updated by trigger'
48915       WHERE f_int1 = - old.f_int1;
48916 END|
48917 DELETE FROM t0_aux
48918 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48919         
48920 # check trigger-7 success:      1
48921 DROP TRIGGER trg_1;
48922 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48923 f_int2 = CAST(f_char1 AS SIGNED INT),
48924 f_charbig = 'just inserted'
48925    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48926 DELETE FROM t0_aux
48927 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48928 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
48929 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
48930 'just inserted' FROM t0_template
48931 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48932 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
48933 BEGIN
48934 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
48935 f_charbig = 'updated by trigger'
48936       WHERE f_int1 = - old.f_int1;
48937 END|
48938 DELETE FROM t0_aux
48939 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
48940         
48941 # check trigger-8 success:      1
48942 DROP TRIGGER trg_1;
48943 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48944 f_int2 = CAST(f_char1 AS SIGNED INT),
48945 f_charbig = 'just inserted'
48946    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
48947 DELETE FROM t0_aux
48948 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48949 DELETE FROM t1
48950 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
48951 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
48952 BEGIN
48953 SET new.f_int1 = old.f_int1 + @max_row,
48954 new.f_int2 = old.f_int2 - @max_row,
48955 new.f_charbig = '####updated per update trigger####';
48956 END|
48957 UPDATE t1
48958 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
48959 f_charbig = '####updated per update statement itself####';
48960         
48961 # check trigger-9 success:      1
48962 DROP TRIGGER trg_2;
48963 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48964 f_int2 = CAST(f_char1 AS SIGNED INT),
48965 f_charbig = CONCAT('===',f_char1,'===');
48966 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
48967 BEGIN
48968 SET new.f_int1 = new.f_int1 + @max_row,
48969 new.f_int2 = new.f_int2 - @max_row,
48970 new.f_charbig = '####updated per update trigger####';
48971 END|
48972 UPDATE t1
48973 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
48974 f_charbig = '####updated per update statement itself####';
48975         
48976 # check trigger-10 success:     1
48977 DROP TRIGGER trg_2;
48978 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
48979 f_int2 = CAST(f_char1 AS SIGNED INT),
48980 f_charbig = CONCAT('===',f_char1,'===');
48981 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
48982 BEGIN
48983 SET new.f_int1 = @my_max1 + @counter,
48984 new.f_int2 = @my_min2 - @counter,
48985 new.f_charbig = '####updated per insert trigger####';
48986 SET @counter = @counter + 1;
48987 END|
48988 SET @counter = 1;
48989 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
48990 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
48991 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
48992 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
48993 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
48994 ORDER BY f_int1;
48995 DROP TRIGGER trg_3;
48996         
48997 # check trigger-11 success:     1
48998 DELETE FROM t1
48999 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
49000 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
49001 AND f_charbig = '####updated per insert trigger####';
49002 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
49003 BEGIN
49004 SET new.f_int1 = @my_max1 + @counter,
49005 new.f_int2 = @my_min2 - @counter,
49006 new.f_charbig = '####updated per insert trigger####';
49007 SET @counter = @counter + 1;
49008 END|
49009 SET @counter = 1;
49010 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
49011 INSERT INTO t1 (f_char1, f_char2, f_charbig)
49012 SELECT CAST(f_int1 AS CHAR),
49013 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
49014 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
49015 ORDER BY f_int1;
49016 DROP TRIGGER trg_3;
49017         
49018 # check trigger-12 success:     1
49019 DELETE FROM t1
49020 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
49021 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
49022 AND f_charbig = '####updated per insert trigger####';
49023 ANALYZE  TABLE t1;
49024 Table   Op      Msg_type        Msg_text
49025 test.t1 analyze status  OK
49026 CHECK    TABLE t1 EXTENDED;
49027 Table   Op      Msg_type        Msg_text
49028 test.t1 check   status  OK
49029 CHECKSUM TABLE t1 EXTENDED;
49030 Table   Checksum
49031 test.t1 <some_value>
49032 OPTIMIZE TABLE t1;
49033 Table   Op      Msg_type        Msg_text
49034 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
49035 test.t1 optimize        status  OK
49036 # check layout success:    1
49037 REPAIR   TABLE t1 EXTENDED;
49038 Table   Op      Msg_type        Msg_text
49039 test.t1 repair  note    The storage engine for the table doesn't support repair
49040 # check layout success:    1
49041 TRUNCATE t1;
49042         
49043 # check TRUNCATE success:       1
49044 # check layout success:    1
49045 # End usability test (inc/partition_check.inc)
49046 DROP TABLE t1;
49047 CREATE TABLE t1 (
49048 f_int1 INTEGER,
49049 f_int2 INTEGER,
49050 f_char1 CHAR(20),
49051 f_char2 CHAR(20),
49052 f_charbig VARCHAR(1000)
49053 , UNIQUE INDEX uidx (f_int1,f_int2)
49055 PARTITION BY LIST(MOD(f_int1 + f_int2,4))
49056 (PARTITION part_3 VALUES IN (-3),
49057 PARTITION part_2 VALUES IN (-2),
49058 PARTITION part_1 VALUES IN (-1),
49059 PARTITION part_N VALUES IN (NULL),
49060 PARTITION part0 VALUES IN (0),
49061 PARTITION part1 VALUES IN (1),
49062 PARTITION part2 VALUES IN (2),
49063 PARTITION part3 VALUES IN (3));
49064 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49065 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
49066 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
49067 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
49068 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49069 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
49070 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
49071 # Start usability test (inc/partition_check.inc)
49072 create_command
49073 SHOW CREATE TABLE t1;
49074 Table   Create Table
49075 t1      CREATE TABLE `t1` (
49076   `f_int1` mediumint(9) DEFAULT NULL,
49077   `f_int2` mediumint(9) DEFAULT NULL,
49078   `f_char1` char(20) DEFAULT NULL,
49079   `f_char2` char(20) DEFAULT NULL,
49080   `f_charbig` varchar(1000) DEFAULT NULL,
49081   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
49082 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
49083 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
49084 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
49085  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
49086  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
49087  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
49088  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
49089  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
49090  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
49091  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
49093 # check prerequisites-1 success:    1
49094 # check COUNT(*) success:    1
49095 # check MIN/MAX(f_int1) success:    1
49096 # check MIN/MAX(f_int2) success:    1
49097 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49098 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
49099 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
49100 WHERE f_int1 IN (2,3);
49101 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
49102 # check prerequisites-3 success:    1
49103 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
49104 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49105 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
49106 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
49107 WHERE f_int1 IN (2,3);
49108 DELETE FROM t1 WHERE f_charbig = 'delete me';
49109 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49110 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
49111 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
49112 WHERE f_int1 IN (2,3);
49113 DELETE FROM t1 WHERE f_charbig = 'delete me';
49114 # check read via f_int1 success: 1
49115 # check read via f_int2 success: 1
49116         
49117 # check multiple-1 success:     1
49118 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
49119         
49120 # check multiple-2 success:     1
49121 INSERT INTO t1 SELECT * FROM t0_template
49122 WHERE MOD(f_int1,3) = 0;
49123         
49124 # check multiple-3 success:     1
49125 UPDATE t1 SET f_int1 = f_int1 + @max_row
49126 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
49127 AND @max_row_div2 + @max_row_div4;
49128         
49129 # check multiple-4 success:     1
49130 DELETE FROM t1
49131 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
49132 AND @max_row_div2 + @max_row_div4 + @max_row;
49133         
49134 # check multiple-5 success:     1
49135 SELECT COUNT(*) INTO @try_count FROM t0_template
49136 WHERE MOD(f_int1,3) = 0
49137 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49138 SELECT COUNT(*) INTO @clash_count
49139 FROM t1 INNER JOIN t0_template USING(f_int1)
49140 WHERE MOD(f_int1,3) = 0
49141 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49142 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
49143 INSERT INTO t1
49144 SET f_int1 = @cur_value , f_int2 = @cur_value,
49145 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
49146 f_charbig = '#SINGLE#';
49147         
49148 # check single-1 success:       1
49149 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
49150 INSERT INTO t1
49151 SET f_int1 = @cur_value , f_int2 = @cur_value,
49152 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
49153 f_charbig = '#SINGLE#';
49154         
49155 # check single-2 success:       1
49156 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
49157 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
49158 UPDATE t1 SET f_int1 = @cur_value2
49159 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
49160         
49161 # check single-3 success:       1
49162 SET @cur_value1= -1;
49163 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
49164 UPDATE t1 SET f_int1 = @cur_value1
49165 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
49166         
49167 # check single-4 success:       1
49168 SELECT MAX(f_int1) INTO @cur_value FROM t1;
49169 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
49170         
49171 # check single-5 success:       1
49172 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
49173         
49174 # check single-6 success:       1
49175 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
49176 Warnings:
49177 Warning 1264    Out of range value for column 'f_int1' at row 1
49178 Warning 1264    Out of range value for column 'f_int2' at row 1
49179         
49180 # check single-7 success:       1
49181 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
49182 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
49183 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
49184 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
49185 f_charbig = '#NULL#';
49186 INSERT INTO t1
49187 SET f_int1 = NULL , f_int2 = -@max_row,
49188 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
49189 f_charbig = '#NULL#';
49190 # check null success:    1
49191         
49192 # check null-1 success:         1
49193 UPDATE t1 SET f_int1 = -@max_row
49194 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49195 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49196         
49197 # check null-2 success:         1
49198 UPDATE t1 SET f_int1 = NULL
49199 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49200 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49201         
49202 # check null-3 success:         1
49203 DELETE FROM t1
49204 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49205 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49206         
49207 # check null-4 success:         1
49208 DELETE FROM t1
49209 WHERE f_int1 = 0 AND f_int2 = 0
49210 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
49211 AND f_charbig = '#NULL#';
49212 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49213 SELECT f_int1, f_int1, '', '', 'was inserted'
49214    FROM t0_template source_tab
49215 WHERE MOD(f_int1,3) = 0
49216 AND f_int1 BETWEEN @max_row_div2 AND @max_row
49217 ON DUPLICATE KEY
49218 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
49219 f_int2 = 2 * @max_row + source_tab.f_int1,
49220 f_charbig = 'was updated';
49221         
49222 # check unique-1-a success:     1
49223         
49224 # check unique-1-b success:     1
49225 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49226 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49227 f_int2 = CAST(f_char1 AS SIGNED INT),
49228 f_charbig = CONCAT('===',f_char1,'===')
49229 WHERE f_charbig = 'was updated';
49230 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49231 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
49232    FROM t0_template source_tab
49233 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49234         
49235 # check replace success:        1
49236 DELETE FROM t1
49237 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
49238 DELETE FROM t1
49239 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
49240 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
49241 UPDATE t1 SET f_int2 = f_int1,
49242 f_char1 = CAST(f_int1 AS CHAR),
49243 f_char2 = CAST(f_int1 AS CHAR),
49244 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
49245 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
49246 SET AUTOCOMMIT= 0;
49247 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49248 SELECT f_int1, f_int1, '', '', 'was inserted'
49249 FROM t0_template source_tab
49250 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49251         
49252 # check transactions-1 success:         1
49253 COMMIT WORK;
49254         
49255 # check transactions-2 success:         1
49256 ROLLBACK WORK;
49257         
49258 # check transactions-3 success:         1
49259 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49260 COMMIT WORK;
49261 ROLLBACK WORK;
49262         
49263 # check transactions-4 success:         1
49264 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49265 SELECT f_int1, f_int1, '', '', 'was inserted'
49266 FROM t0_template source_tab
49267 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49268         
49269 # check transactions-5 success:         1
49270 ROLLBACK WORK;
49271         
49272 # check transactions-6 success:         1
49273 # INFO: Storage engine used for t1 seems to be transactional.
49274 COMMIT;
49275         
49276 # check transactions-7 success:         1
49277 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49278 COMMIT WORK;
49279 SET @@session.sql_mode = 'traditional';
49280 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
49281 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49282 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
49283 '', '', 'was inserted' FROM t0_template
49284 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49285 ERROR 22012: Division by 0
49286 COMMIT;
49287         
49288 # check transactions-8 success:         1
49289 # INFO: Storage engine used for t1 seems to be able to revert
49290 #       changes made by the failing statement.
49291 SET @@session.sql_mode = '';
49292 SET AUTOCOMMIT= 1;
49293 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49294 COMMIT WORK;
49295 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
49296         
49297 # check special-1 success:      1
49298 UPDATE t1 SET f_charbig = '';
49299         
49300 # check special-2 success:      1
49301 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
49302 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49303 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
49304 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49305 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49306 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49307 'just inserted' FROM t0_template
49308 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49309 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
49310 BEGIN
49311 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49312 f_charbig = 'updated by trigger'
49313       WHERE f_int1 = new.f_int1;
49314 END|
49315 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49316 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
49317 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49318         
49319 # check trigger-1 success:      1
49320 DROP TRIGGER trg_1;
49321 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49322 f_int2 = CAST(f_char1 AS SIGNED INT),
49323 f_charbig = 'just inserted'
49324    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49325 DELETE FROM t0_aux
49326 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49327 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49328 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49329 'just inserted' FROM t0_template
49330 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49331 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
49332 BEGIN
49333 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49334 f_charbig = 'updated by trigger'
49335       WHERE f_int1 = new.f_int1;
49336 END|
49337 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49338 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
49339 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49340         
49341 # check trigger-2 success:      1
49342 DROP TRIGGER trg_1;
49343 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49344 f_int2 = CAST(f_char1 AS SIGNED INT),
49345 f_charbig = 'just inserted'
49346    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49347 DELETE FROM t0_aux
49348 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49349 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49350 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49351 'just inserted' FROM t0_template
49352 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49353 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
49354 BEGIN
49355 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49356 f_charbig = 'updated by trigger'
49357       WHERE f_int1 = new.f_int1;
49358 END|
49359 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49360 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49361         
49362 # check trigger-3 success:      1
49363 DROP TRIGGER trg_1;
49364 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49365 f_int2 = CAST(f_char1 AS SIGNED INT),
49366 f_charbig = 'just inserted'
49367    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49368 DELETE FROM t0_aux
49369 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49370 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49371 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49372 'just inserted' FROM t0_template
49373 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49374 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
49375 BEGIN
49376 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49377 f_charbig = 'updated by trigger'
49378       WHERE f_int1 = - old.f_int1;
49379 END|
49380 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49381 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49382         
49383 # check trigger-4 success:      1
49384 DROP TRIGGER trg_1;
49385 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49386 f_int2 = CAST(f_char1 AS SIGNED INT),
49387 f_charbig = 'just inserted'
49388    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49389 DELETE FROM t0_aux
49390 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49391 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49392 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49393 'just inserted' FROM t0_template
49394 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49395 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
49396 BEGIN
49397 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49398 f_charbig = 'updated by trigger'
49399       WHERE f_int1 = new.f_int1;
49400 END|
49401 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49402 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49403         
49404 # check trigger-5 success:      1
49405 DROP TRIGGER trg_1;
49406 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49407 f_int2 = CAST(f_char1 AS SIGNED INT),
49408 f_charbig = 'just inserted'
49409    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49410 DELETE FROM t0_aux
49411 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49412 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49413 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49414 'just inserted' FROM t0_template
49415 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49416 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
49417 BEGIN
49418 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49419 f_charbig = 'updated by trigger'
49420       WHERE f_int1 = - old.f_int1;
49421 END|
49422 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49423 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49424         
49425 # check trigger-6 success:      1
49426 DROP TRIGGER trg_1;
49427 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49428 f_int2 = CAST(f_char1 AS SIGNED INT),
49429 f_charbig = 'just inserted'
49430    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49431 DELETE FROM t0_aux
49432 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49433 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49434 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49435 'just inserted' FROM t0_template
49436 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49437 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
49438 BEGIN
49439 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49440 f_charbig = 'updated by trigger'
49441       WHERE f_int1 = - old.f_int1;
49442 END|
49443 DELETE FROM t0_aux
49444 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49445         
49446 # check trigger-7 success:      1
49447 DROP TRIGGER trg_1;
49448 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49449 f_int2 = CAST(f_char1 AS SIGNED INT),
49450 f_charbig = 'just inserted'
49451    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49452 DELETE FROM t0_aux
49453 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49454 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49455 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49456 'just inserted' FROM t0_template
49457 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49458 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
49459 BEGIN
49460 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49461 f_charbig = 'updated by trigger'
49462       WHERE f_int1 = - old.f_int1;
49463 END|
49464 DELETE FROM t0_aux
49465 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49466         
49467 # check trigger-8 success:      1
49468 DROP TRIGGER trg_1;
49469 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49470 f_int2 = CAST(f_char1 AS SIGNED INT),
49471 f_charbig = 'just inserted'
49472    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49473 DELETE FROM t0_aux
49474 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49475 DELETE FROM t1
49476 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49477 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
49478 BEGIN
49479 SET new.f_int1 = old.f_int1 + @max_row,
49480 new.f_int2 = old.f_int2 - @max_row,
49481 new.f_charbig = '####updated per update trigger####';
49482 END|
49483 UPDATE t1
49484 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
49485 f_charbig = '####updated per update statement itself####';
49486         
49487 # check trigger-9 success:      1
49488 DROP TRIGGER trg_2;
49489 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49490 f_int2 = CAST(f_char1 AS SIGNED INT),
49491 f_charbig = CONCAT('===',f_char1,'===');
49492 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
49493 BEGIN
49494 SET new.f_int1 = new.f_int1 + @max_row,
49495 new.f_int2 = new.f_int2 - @max_row,
49496 new.f_charbig = '####updated per update trigger####';
49497 END|
49498 UPDATE t1
49499 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
49500 f_charbig = '####updated per update statement itself####';
49501         
49502 # check trigger-10 success:     1
49503 DROP TRIGGER trg_2;
49504 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49505 f_int2 = CAST(f_char1 AS SIGNED INT),
49506 f_charbig = CONCAT('===',f_char1,'===');
49507 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
49508 BEGIN
49509 SET new.f_int1 = @my_max1 + @counter,
49510 new.f_int2 = @my_min2 - @counter,
49511 new.f_charbig = '####updated per insert trigger####';
49512 SET @counter = @counter + 1;
49513 END|
49514 SET @counter = 1;
49515 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
49516 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49517 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
49518 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
49519 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
49520 ORDER BY f_int1;
49521 DROP TRIGGER trg_3;
49522         
49523 # check trigger-11 success:     1
49524 DELETE FROM t1
49525 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
49526 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
49527 AND f_charbig = '####updated per insert trigger####';
49528 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
49529 BEGIN
49530 SET new.f_int1 = @my_max1 + @counter,
49531 new.f_int2 = @my_min2 - @counter,
49532 new.f_charbig = '####updated per insert trigger####';
49533 SET @counter = @counter + 1;
49534 END|
49535 SET @counter = 1;
49536 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
49537 INSERT INTO t1 (f_char1, f_char2, f_charbig)
49538 SELECT CAST(f_int1 AS CHAR),
49539 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
49540 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
49541 ORDER BY f_int1;
49542 DROP TRIGGER trg_3;
49543         
49544 # check trigger-12 success:     1
49545 DELETE FROM t1
49546 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
49547 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
49548 AND f_charbig = '####updated per insert trigger####';
49549 ANALYZE  TABLE t1;
49550 Table   Op      Msg_type        Msg_text
49551 test.t1 analyze status  OK
49552 CHECK    TABLE t1 EXTENDED;
49553 Table   Op      Msg_type        Msg_text
49554 test.t1 check   status  OK
49555 CHECKSUM TABLE t1 EXTENDED;
49556 Table   Checksum
49557 test.t1 <some_value>
49558 OPTIMIZE TABLE t1;
49559 Table   Op      Msg_type        Msg_text
49560 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
49561 test.t1 optimize        status  OK
49562 # check layout success:    1
49563 REPAIR   TABLE t1 EXTENDED;
49564 Table   Op      Msg_type        Msg_text
49565 test.t1 repair  note    The storage engine for the table doesn't support repair
49566 # check layout success:    1
49567 TRUNCATE t1;
49568         
49569 # check TRUNCATE success:       1
49570 # check layout success:    1
49571 # End usability test (inc/partition_check.inc)
49572 DROP TABLE t1;
49573 CREATE TABLE t1 (
49574 f_int1 INTEGER,
49575 f_int2 INTEGER,
49576 f_char1 CHAR(20),
49577 f_char2 CHAR(20),
49578 f_charbig VARCHAR(1000)
49579 , UNIQUE INDEX uidx (f_int1,f_int2)
49581 PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
49582 (PARTITION parta VALUES LESS THAN (0),
49583 PARTITION partb VALUES LESS THAN (5),
49584 PARTITION partc VALUES LESS THAN (10),
49585 PARTITION partd VALUES LESS THAN (10 + 5),
49586 PARTITION parte VALUES LESS THAN (20),
49587 PARTITION partf VALUES LESS THAN (2147483646));
49588 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49589 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
49590 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
49591 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
49592 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49593 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
49594 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
49595 # Start usability test (inc/partition_check.inc)
49596 create_command
49597 SHOW CREATE TABLE t1;
49598 Table   Create Table
49599 t1      CREATE TABLE `t1` (
49600   `f_int1` mediumint(9) DEFAULT NULL,
49601   `f_int2` mediumint(9) DEFAULT NULL,
49602   `f_char1` char(20) DEFAULT NULL,
49603   `f_char2` char(20) DEFAULT NULL,
49604   `f_charbig` varchar(1000) DEFAULT NULL,
49605   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
49606 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
49607 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
49608 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
49609  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
49610  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
49611  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
49612  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
49613  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
49615 # check prerequisites-1 success:    1
49616 # check COUNT(*) success:    1
49617 # check MIN/MAX(f_int1) success:    1
49618 # check MIN/MAX(f_int2) success:    1
49619 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49620 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
49621 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
49622 WHERE f_int1 IN (2,3);
49623 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
49624 # check prerequisites-3 success:    1
49625 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
49626 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49627 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
49628 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
49629 WHERE f_int1 IN (2,3);
49630 DELETE FROM t1 WHERE f_charbig = 'delete me';
49631 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49632 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
49633 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
49634 WHERE f_int1 IN (2,3);
49635 DELETE FROM t1 WHERE f_charbig = 'delete me';
49636 # check read via f_int1 success: 1
49637 # check read via f_int2 success: 1
49638         
49639 # check multiple-1 success:     1
49640 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
49641         
49642 # check multiple-2 success:     1
49643 INSERT INTO t1 SELECT * FROM t0_template
49644 WHERE MOD(f_int1,3) = 0;
49645         
49646 # check multiple-3 success:     1
49647 UPDATE t1 SET f_int1 = f_int1 + @max_row
49648 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
49649 AND @max_row_div2 + @max_row_div4;
49650         
49651 # check multiple-4 success:     1
49652 DELETE FROM t1
49653 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
49654 AND @max_row_div2 + @max_row_div4 + @max_row;
49655         
49656 # check multiple-5 success:     1
49657 SELECT COUNT(*) INTO @try_count FROM t0_template
49658 WHERE MOD(f_int1,3) = 0
49659 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49660 SELECT COUNT(*) INTO @clash_count
49661 FROM t1 INNER JOIN t0_template USING(f_int1)
49662 WHERE MOD(f_int1,3) = 0
49663 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49664 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
49665 INSERT INTO t1
49666 SET f_int1 = @cur_value , f_int2 = @cur_value,
49667 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
49668 f_charbig = '#SINGLE#';
49669         
49670 # check single-1 success:       1
49671 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
49672 INSERT INTO t1
49673 SET f_int1 = @cur_value , f_int2 = @cur_value,
49674 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
49675 f_charbig = '#SINGLE#';
49676         
49677 # check single-2 success:       1
49678 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
49679 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
49680 UPDATE t1 SET f_int1 = @cur_value2
49681 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
49682         
49683 # check single-3 success:       1
49684 SET @cur_value1= -1;
49685 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
49686 UPDATE t1 SET f_int1 = @cur_value1
49687 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
49688         
49689 # check single-4 success:       1
49690 SELECT MAX(f_int1) INTO @cur_value FROM t1;
49691 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
49692         
49693 # check single-5 success:       1
49694 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
49695         
49696 # check single-6 success:       1
49697 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
49698 Warnings:
49699 Warning 1264    Out of range value for column 'f_int1' at row 1
49700 Warning 1264    Out of range value for column 'f_int2' at row 1
49701         
49702 # check single-7 success:       1
49703 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
49704 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
49705 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
49706 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
49707 f_charbig = '#NULL#';
49708 INSERT INTO t1
49709 SET f_int1 = NULL , f_int2 = -@max_row,
49710 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
49711 f_charbig = '#NULL#';
49712 # check null success:    1
49713         
49714 # check null-1 success:         1
49715 UPDATE t1 SET f_int1 = -@max_row
49716 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49717 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49718         
49719 # check null-2 success:         1
49720 UPDATE t1 SET f_int1 = NULL
49721 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49722 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49723         
49724 # check null-3 success:         1
49725 DELETE FROM t1
49726 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
49727 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
49728         
49729 # check null-4 success:         1
49730 DELETE FROM t1
49731 WHERE f_int1 = 0 AND f_int2 = 0
49732 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
49733 AND f_charbig = '#NULL#';
49734 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49735 SELECT f_int1, f_int1, '', '', 'was inserted'
49736    FROM t0_template source_tab
49737 WHERE MOD(f_int1,3) = 0
49738 AND f_int1 BETWEEN @max_row_div2 AND @max_row
49739 ON DUPLICATE KEY
49740 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
49741 f_int2 = 2 * @max_row + source_tab.f_int1,
49742 f_charbig = 'was updated';
49743         
49744 # check unique-1-a success:     1
49745         
49746 # check unique-1-b success:     1
49747 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49748 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49749 f_int2 = CAST(f_char1 AS SIGNED INT),
49750 f_charbig = CONCAT('===',f_char1,'===')
49751 WHERE f_charbig = 'was updated';
49752 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49753 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
49754    FROM t0_template source_tab
49755 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
49756         
49757 # check replace success:        1
49758 DELETE FROM t1
49759 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
49760 DELETE FROM t1
49761 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
49762 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
49763 UPDATE t1 SET f_int2 = f_int1,
49764 f_char1 = CAST(f_int1 AS CHAR),
49765 f_char2 = CAST(f_int1 AS CHAR),
49766 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
49767 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
49768 SET AUTOCOMMIT= 0;
49769 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49770 SELECT f_int1, f_int1, '', '', 'was inserted'
49771 FROM t0_template source_tab
49772 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49773         
49774 # check transactions-1 success:         1
49775 COMMIT WORK;
49776         
49777 # check transactions-2 success:         1
49778 ROLLBACK WORK;
49779         
49780 # check transactions-3 success:         1
49781 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49782 COMMIT WORK;
49783 ROLLBACK WORK;
49784         
49785 # check transactions-4 success:         1
49786 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49787 SELECT f_int1, f_int1, '', '', 'was inserted'
49788 FROM t0_template source_tab
49789 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49790         
49791 # check transactions-5 success:         1
49792 ROLLBACK WORK;
49793         
49794 # check transactions-6 success:         1
49795 # INFO: Storage engine used for t1 seems to be transactional.
49796 COMMIT;
49797         
49798 # check transactions-7 success:         1
49799 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49800 COMMIT WORK;
49801 SET @@session.sql_mode = 'traditional';
49802 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
49803 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
49804 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
49805 '', '', 'was inserted' FROM t0_template
49806 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
49807 ERROR 22012: Division by 0
49808 COMMIT;
49809         
49810 # check transactions-8 success:         1
49811 # INFO: Storage engine used for t1 seems to be able to revert
49812 #       changes made by the failing statement.
49813 SET @@session.sql_mode = '';
49814 SET AUTOCOMMIT= 1;
49815 DELETE FROM t1 WHERE f_charbig = 'was inserted';
49816 COMMIT WORK;
49817 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
49818         
49819 # check special-1 success:      1
49820 UPDATE t1 SET f_charbig = '';
49821         
49822 # check special-2 success:      1
49823 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
49824 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
49825 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
49826 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49827 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49828 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49829 'just inserted' FROM t0_template
49830 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49831 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
49832 BEGIN
49833 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49834 f_charbig = 'updated by trigger'
49835       WHERE f_int1 = new.f_int1;
49836 END|
49837 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49838 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
49839 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49840         
49841 # check trigger-1 success:      1
49842 DROP TRIGGER trg_1;
49843 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49844 f_int2 = CAST(f_char1 AS SIGNED INT),
49845 f_charbig = 'just inserted'
49846    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49847 DELETE FROM t0_aux
49848 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49849 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49850 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49851 'just inserted' FROM t0_template
49852 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49853 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
49854 BEGIN
49855 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49856 f_charbig = 'updated by trigger'
49857       WHERE f_int1 = new.f_int1;
49858 END|
49859 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49860 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
49861 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49862         
49863 # check trigger-2 success:      1
49864 DROP TRIGGER trg_1;
49865 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49866 f_int2 = CAST(f_char1 AS SIGNED INT),
49867 f_charbig = 'just inserted'
49868    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49869 DELETE FROM t0_aux
49870 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49871 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49872 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49873 'just inserted' FROM t0_template
49874 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49875 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
49876 BEGIN
49877 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49878 f_charbig = 'updated by trigger'
49879       WHERE f_int1 = new.f_int1;
49880 END|
49881 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49882 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49883         
49884 # check trigger-3 success:      1
49885 DROP TRIGGER trg_1;
49886 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49887 f_int2 = CAST(f_char1 AS SIGNED INT),
49888 f_charbig = 'just inserted'
49889    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49890 DELETE FROM t0_aux
49891 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49892 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49893 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49894 'just inserted' FROM t0_template
49895 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49896 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
49897 BEGIN
49898 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49899 f_charbig = 'updated by trigger'
49900       WHERE f_int1 = - old.f_int1;
49901 END|
49902 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49903 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49904         
49905 # check trigger-4 success:      1
49906 DROP TRIGGER trg_1;
49907 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49908 f_int2 = CAST(f_char1 AS SIGNED INT),
49909 f_charbig = 'just inserted'
49910    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49911 DELETE FROM t0_aux
49912 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49913 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49914 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49915 'just inserted' FROM t0_template
49916 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49917 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
49918 BEGIN
49919 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49920 f_charbig = 'updated by trigger'
49921       WHERE f_int1 = new.f_int1;
49922 END|
49923 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49924 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49925         
49926 # check trigger-5 success:      1
49927 DROP TRIGGER trg_1;
49928 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49929 f_int2 = CAST(f_char1 AS SIGNED INT),
49930 f_charbig = 'just inserted'
49931    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49932 DELETE FROM t0_aux
49933 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49934 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49935 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49936 'just inserted' FROM t0_template
49937 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49938 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
49939 BEGIN
49940 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49941 f_charbig = 'updated by trigger'
49942       WHERE f_int1 = - old.f_int1;
49943 END|
49944 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
49945 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49946         
49947 # check trigger-6 success:      1
49948 DROP TRIGGER trg_1;
49949 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49950 f_int2 = CAST(f_char1 AS SIGNED INT),
49951 f_charbig = 'just inserted'
49952    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49953 DELETE FROM t0_aux
49954 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49955 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49956 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49957 'just inserted' FROM t0_template
49958 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49959 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
49960 BEGIN
49961 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49962 f_charbig = 'updated by trigger'
49963       WHERE f_int1 = - old.f_int1;
49964 END|
49965 DELETE FROM t0_aux
49966 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49967         
49968 # check trigger-7 success:      1
49969 DROP TRIGGER trg_1;
49970 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49971 f_int2 = CAST(f_char1 AS SIGNED INT),
49972 f_charbig = 'just inserted'
49973    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49974 DELETE FROM t0_aux
49975 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49976 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
49977 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
49978 'just inserted' FROM t0_template
49979 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49980 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
49981 BEGIN
49982 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
49983 f_charbig = 'updated by trigger'
49984       WHERE f_int1 = - old.f_int1;
49985 END|
49986 DELETE FROM t0_aux
49987 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
49988         
49989 # check trigger-8 success:      1
49990 DROP TRIGGER trg_1;
49991 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
49992 f_int2 = CAST(f_char1 AS SIGNED INT),
49993 f_charbig = 'just inserted'
49994    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
49995 DELETE FROM t0_aux
49996 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49997 DELETE FROM t1
49998 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
49999 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
50000 BEGIN
50001 SET new.f_int1 = old.f_int1 + @max_row,
50002 new.f_int2 = old.f_int2 - @max_row,
50003 new.f_charbig = '####updated per update trigger####';
50004 END|
50005 UPDATE t1
50006 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
50007 f_charbig = '####updated per update statement itself####';
50008         
50009 # check trigger-9 success:      1
50010 DROP TRIGGER trg_2;
50011 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50012 f_int2 = CAST(f_char1 AS SIGNED INT),
50013 f_charbig = CONCAT('===',f_char1,'===');
50014 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
50015 BEGIN
50016 SET new.f_int1 = new.f_int1 + @max_row,
50017 new.f_int2 = new.f_int2 - @max_row,
50018 new.f_charbig = '####updated per update trigger####';
50019 END|
50020 UPDATE t1
50021 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
50022 f_charbig = '####updated per update statement itself####';
50023         
50024 # check trigger-10 success:     1
50025 DROP TRIGGER trg_2;
50026 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50027 f_int2 = CAST(f_char1 AS SIGNED INT),
50028 f_charbig = CONCAT('===',f_char1,'===');
50029 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
50030 BEGIN
50031 SET new.f_int1 = @my_max1 + @counter,
50032 new.f_int2 = @my_min2 - @counter,
50033 new.f_charbig = '####updated per insert trigger####';
50034 SET @counter = @counter + 1;
50035 END|
50036 SET @counter = 1;
50037 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
50038 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50039 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
50040 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
50041 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
50042 ORDER BY f_int1;
50043 DROP TRIGGER trg_3;
50044         
50045 # check trigger-11 success:     1
50046 DELETE FROM t1
50047 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
50048 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
50049 AND f_charbig = '####updated per insert trigger####';
50050 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
50051 BEGIN
50052 SET new.f_int1 = @my_max1 + @counter,
50053 new.f_int2 = @my_min2 - @counter,
50054 new.f_charbig = '####updated per insert trigger####';
50055 SET @counter = @counter + 1;
50056 END|
50057 SET @counter = 1;
50058 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
50059 INSERT INTO t1 (f_char1, f_char2, f_charbig)
50060 SELECT CAST(f_int1 AS CHAR),
50061 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
50062 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
50063 ORDER BY f_int1;
50064 DROP TRIGGER trg_3;
50065         
50066 # check trigger-12 success:     1
50067 DELETE FROM t1
50068 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
50069 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
50070 AND f_charbig = '####updated per insert trigger####';
50071 ANALYZE  TABLE t1;
50072 Table   Op      Msg_type        Msg_text
50073 test.t1 analyze status  OK
50074 CHECK    TABLE t1 EXTENDED;
50075 Table   Op      Msg_type        Msg_text
50076 test.t1 check   status  OK
50077 CHECKSUM TABLE t1 EXTENDED;
50078 Table   Checksum
50079 test.t1 <some_value>
50080 OPTIMIZE TABLE t1;
50081 Table   Op      Msg_type        Msg_text
50082 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
50083 test.t1 optimize        status  OK
50084 # check layout success:    1
50085 REPAIR   TABLE t1 EXTENDED;
50086 Table   Op      Msg_type        Msg_text
50087 test.t1 repair  note    The storage engine for the table doesn't support repair
50088 # check layout success:    1
50089 TRUNCATE t1;
50090         
50091 # check TRUNCATE success:       1
50092 # check layout success:    1
50093 # End usability test (inc/partition_check.inc)
50094 DROP TABLE t1;
50095 CREATE TABLE t1 (
50096 f_int1 INTEGER,
50097 f_int2 INTEGER,
50098 f_char1 CHAR(20),
50099 f_char2 CHAR(20),
50100 f_charbig VARCHAR(1000)
50101 , UNIQUE INDEX uidx (f_int1,f_int2)
50103 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
50104 (PARTITION parta VALUES LESS THAN (0),
50105 PARTITION partb VALUES LESS THAN (5),
50106 PARTITION partc VALUES LESS THAN (10),
50107 PARTITION partd VALUES LESS THAN (2147483646));
50108 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50109 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
50110 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
50111 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
50112 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50113 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
50114 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
50115 # Start usability test (inc/partition_check.inc)
50116 create_command
50117 SHOW CREATE TABLE t1;
50118 Table   Create Table
50119 t1      CREATE TABLE `t1` (
50120   `f_int1` mediumint(9) DEFAULT NULL,
50121   `f_int2` mediumint(9) DEFAULT NULL,
50122   `f_char1` char(20) DEFAULT NULL,
50123   `f_char2` char(20) DEFAULT NULL,
50124   `f_charbig` varchar(1000) DEFAULT NULL,
50125   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
50126 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
50127 /*!50100 PARTITION BY RANGE (f_int1)
50128 SUBPARTITION BY HASH (f_int2)
50129 SUBPARTITIONS 2
50130 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
50131  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
50132  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
50133  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
50135 # check prerequisites-1 success:    1
50136 # check COUNT(*) success:    1
50137 # check MIN/MAX(f_int1) success:    1
50138 # check MIN/MAX(f_int2) success:    1
50139 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50140 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
50141 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
50142 WHERE f_int1 IN (2,3);
50143 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
50144 # check prerequisites-3 success:    1
50145 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
50146 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50147 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
50148 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
50149 WHERE f_int1 IN (2,3);
50150 DELETE FROM t1 WHERE f_charbig = 'delete me';
50151 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50152 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
50153 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
50154 WHERE f_int1 IN (2,3);
50155 DELETE FROM t1 WHERE f_charbig = 'delete me';
50156 # check read via f_int1 success: 1
50157 # check read via f_int2 success: 1
50158         
50159 # check multiple-1 success:     1
50160 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
50161         
50162 # check multiple-2 success:     1
50163 INSERT INTO t1 SELECT * FROM t0_template
50164 WHERE MOD(f_int1,3) = 0;
50165         
50166 # check multiple-3 success:     1
50167 UPDATE t1 SET f_int1 = f_int1 + @max_row
50168 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
50169 AND @max_row_div2 + @max_row_div4;
50170         
50171 # check multiple-4 success:     1
50172 DELETE FROM t1
50173 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
50174 AND @max_row_div2 + @max_row_div4 + @max_row;
50175         
50176 # check multiple-5 success:     1
50177 SELECT COUNT(*) INTO @try_count FROM t0_template
50178 WHERE MOD(f_int1,3) = 0
50179 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50180 SELECT COUNT(*) INTO @clash_count
50181 FROM t1 INNER JOIN t0_template USING(f_int1)
50182 WHERE MOD(f_int1,3) = 0
50183 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50184 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
50185 INSERT INTO t1
50186 SET f_int1 = @cur_value , f_int2 = @cur_value,
50187 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
50188 f_charbig = '#SINGLE#';
50189         
50190 # check single-1 success:       1
50191 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
50192 INSERT INTO t1
50193 SET f_int1 = @cur_value , f_int2 = @cur_value,
50194 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
50195 f_charbig = '#SINGLE#';
50196         
50197 # check single-2 success:       1
50198 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
50199 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
50200 UPDATE t1 SET f_int1 = @cur_value2
50201 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
50202         
50203 # check single-3 success:       1
50204 SET @cur_value1= -1;
50205 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
50206 UPDATE t1 SET f_int1 = @cur_value1
50207 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
50208         
50209 # check single-4 success:       1
50210 SELECT MAX(f_int1) INTO @cur_value FROM t1;
50211 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
50212         
50213 # check single-5 success:       1
50214 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
50215         
50216 # check single-6 success:       1
50217 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
50218 Warnings:
50219 Warning 1264    Out of range value for column 'f_int1' at row 1
50220 Warning 1264    Out of range value for column 'f_int2' at row 1
50221         
50222 # check single-7 success:       1
50223 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
50224 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
50225 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
50226 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
50227 f_charbig = '#NULL#';
50228 INSERT INTO t1
50229 SET f_int1 = NULL , f_int2 = -@max_row,
50230 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
50231 f_charbig = '#NULL#';
50232 # check null success:    1
50233         
50234 # check null-1 success:         1
50235 UPDATE t1 SET f_int1 = -@max_row
50236 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50237 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50238         
50239 # check null-2 success:         1
50240 UPDATE t1 SET f_int1 = NULL
50241 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50242 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50243         
50244 # check null-3 success:         1
50245 DELETE FROM t1
50246 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50247 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50248         
50249 # check null-4 success:         1
50250 DELETE FROM t1
50251 WHERE f_int1 = 0 AND f_int2 = 0
50252 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
50253 AND f_charbig = '#NULL#';
50254 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50255 SELECT f_int1, f_int1, '', '', 'was inserted'
50256    FROM t0_template source_tab
50257 WHERE MOD(f_int1,3) = 0
50258 AND f_int1 BETWEEN @max_row_div2 AND @max_row
50259 ON DUPLICATE KEY
50260 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
50261 f_int2 = 2 * @max_row + source_tab.f_int1,
50262 f_charbig = 'was updated';
50263         
50264 # check unique-1-a success:     1
50265         
50266 # check unique-1-b success:     1
50267 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50268 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50269 f_int2 = CAST(f_char1 AS SIGNED INT),
50270 f_charbig = CONCAT('===',f_char1,'===')
50271 WHERE f_charbig = 'was updated';
50272 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50273 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
50274    FROM t0_template source_tab
50275 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50276         
50277 # check replace success:        1
50278 DELETE FROM t1
50279 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
50280 DELETE FROM t1
50281 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
50282 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
50283 UPDATE t1 SET f_int2 = f_int1,
50284 f_char1 = CAST(f_int1 AS CHAR),
50285 f_char2 = CAST(f_int1 AS CHAR),
50286 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
50287 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
50288 SET AUTOCOMMIT= 0;
50289 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50290 SELECT f_int1, f_int1, '', '', 'was inserted'
50291 FROM t0_template source_tab
50292 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50293         
50294 # check transactions-1 success:         1
50295 COMMIT WORK;
50296         
50297 # check transactions-2 success:         1
50298 ROLLBACK WORK;
50299         
50300 # check transactions-3 success:         1
50301 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50302 COMMIT WORK;
50303 ROLLBACK WORK;
50304         
50305 # check transactions-4 success:         1
50306 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50307 SELECT f_int1, f_int1, '', '', 'was inserted'
50308 FROM t0_template source_tab
50309 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50310         
50311 # check transactions-5 success:         1
50312 ROLLBACK WORK;
50313         
50314 # check transactions-6 success:         1
50315 # INFO: Storage engine used for t1 seems to be transactional.
50316 COMMIT;
50317         
50318 # check transactions-7 success:         1
50319 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50320 COMMIT WORK;
50321 SET @@session.sql_mode = 'traditional';
50322 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
50323 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50324 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
50325 '', '', 'was inserted' FROM t0_template
50326 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50327 ERROR 22012: Division by 0
50328 COMMIT;
50329         
50330 # check transactions-8 success:         1
50331 # INFO: Storage engine used for t1 seems to be able to revert
50332 #       changes made by the failing statement.
50333 SET @@session.sql_mode = '';
50334 SET AUTOCOMMIT= 1;
50335 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50336 COMMIT WORK;
50337 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
50338         
50339 # check special-1 success:      1
50340 UPDATE t1 SET f_charbig = '';
50341         
50342 # check special-2 success:      1
50343 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
50344 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50345 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
50346 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50347 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50348 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50349 'just inserted' FROM t0_template
50350 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50351 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
50352 BEGIN
50353 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50354 f_charbig = 'updated by trigger'
50355       WHERE f_int1 = new.f_int1;
50356 END|
50357 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50358 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
50359 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50360         
50361 # check trigger-1 success:      1
50362 DROP TRIGGER trg_1;
50363 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50364 f_int2 = CAST(f_char1 AS SIGNED INT),
50365 f_charbig = 'just inserted'
50366    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50367 DELETE FROM t0_aux
50368 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50369 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50370 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50371 'just inserted' FROM t0_template
50372 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50373 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
50374 BEGIN
50375 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50376 f_charbig = 'updated by trigger'
50377       WHERE f_int1 = new.f_int1;
50378 END|
50379 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50380 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
50381 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50382         
50383 # check trigger-2 success:      1
50384 DROP TRIGGER trg_1;
50385 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50386 f_int2 = CAST(f_char1 AS SIGNED INT),
50387 f_charbig = 'just inserted'
50388    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50389 DELETE FROM t0_aux
50390 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50391 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50392 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50393 'just inserted' FROM t0_template
50394 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50395 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
50396 BEGIN
50397 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50398 f_charbig = 'updated by trigger'
50399       WHERE f_int1 = new.f_int1;
50400 END|
50401 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50402 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50403         
50404 # check trigger-3 success:      1
50405 DROP TRIGGER trg_1;
50406 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50407 f_int2 = CAST(f_char1 AS SIGNED INT),
50408 f_charbig = 'just inserted'
50409    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50410 DELETE FROM t0_aux
50411 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50412 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50413 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50414 'just inserted' FROM t0_template
50415 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50416 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
50417 BEGIN
50418 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50419 f_charbig = 'updated by trigger'
50420       WHERE f_int1 = - old.f_int1;
50421 END|
50422 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50423 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50424         
50425 # check trigger-4 success:      1
50426 DROP TRIGGER trg_1;
50427 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50428 f_int2 = CAST(f_char1 AS SIGNED INT),
50429 f_charbig = 'just inserted'
50430    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50431 DELETE FROM t0_aux
50432 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50433 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50434 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50435 'just inserted' FROM t0_template
50436 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50437 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
50438 BEGIN
50439 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50440 f_charbig = 'updated by trigger'
50441       WHERE f_int1 = new.f_int1;
50442 END|
50443 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50444 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50445         
50446 # check trigger-5 success:      1
50447 DROP TRIGGER trg_1;
50448 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50449 f_int2 = CAST(f_char1 AS SIGNED INT),
50450 f_charbig = 'just inserted'
50451    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50452 DELETE FROM t0_aux
50453 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50454 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50455 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50456 'just inserted' FROM t0_template
50457 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50458 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
50459 BEGIN
50460 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50461 f_charbig = 'updated by trigger'
50462       WHERE f_int1 = - old.f_int1;
50463 END|
50464 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50465 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50466         
50467 # check trigger-6 success:      1
50468 DROP TRIGGER trg_1;
50469 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50470 f_int2 = CAST(f_char1 AS SIGNED INT),
50471 f_charbig = 'just inserted'
50472    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50473 DELETE FROM t0_aux
50474 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50475 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50476 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50477 'just inserted' FROM t0_template
50478 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50479 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
50480 BEGIN
50481 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50482 f_charbig = 'updated by trigger'
50483       WHERE f_int1 = - old.f_int1;
50484 END|
50485 DELETE FROM t0_aux
50486 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50487         
50488 # check trigger-7 success:      1
50489 DROP TRIGGER trg_1;
50490 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50491 f_int2 = CAST(f_char1 AS SIGNED INT),
50492 f_charbig = 'just inserted'
50493    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50494 DELETE FROM t0_aux
50495 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50496 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50497 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50498 'just inserted' FROM t0_template
50499 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50500 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
50501 BEGIN
50502 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50503 f_charbig = 'updated by trigger'
50504       WHERE f_int1 = - old.f_int1;
50505 END|
50506 DELETE FROM t0_aux
50507 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50508         
50509 # check trigger-8 success:      1
50510 DROP TRIGGER trg_1;
50511 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50512 f_int2 = CAST(f_char1 AS SIGNED INT),
50513 f_charbig = 'just inserted'
50514    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50515 DELETE FROM t0_aux
50516 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50517 DELETE FROM t1
50518 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50519 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
50520 BEGIN
50521 SET new.f_int1 = old.f_int1 + @max_row,
50522 new.f_int2 = old.f_int2 - @max_row,
50523 new.f_charbig = '####updated per update trigger####';
50524 END|
50525 UPDATE t1
50526 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
50527 f_charbig = '####updated per update statement itself####';
50528         
50529 # check trigger-9 success:      1
50530 DROP TRIGGER trg_2;
50531 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50532 f_int2 = CAST(f_char1 AS SIGNED INT),
50533 f_charbig = CONCAT('===',f_char1,'===');
50534 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
50535 BEGIN
50536 SET new.f_int1 = new.f_int1 + @max_row,
50537 new.f_int2 = new.f_int2 - @max_row,
50538 new.f_charbig = '####updated per update trigger####';
50539 END|
50540 UPDATE t1
50541 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
50542 f_charbig = '####updated per update statement itself####';
50543         
50544 # check trigger-10 success:     1
50545 DROP TRIGGER trg_2;
50546 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50547 f_int2 = CAST(f_char1 AS SIGNED INT),
50548 f_charbig = CONCAT('===',f_char1,'===');
50549 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
50550 BEGIN
50551 SET new.f_int1 = @my_max1 + @counter,
50552 new.f_int2 = @my_min2 - @counter,
50553 new.f_charbig = '####updated per insert trigger####';
50554 SET @counter = @counter + 1;
50555 END|
50556 SET @counter = 1;
50557 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
50558 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50559 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
50560 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
50561 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
50562 ORDER BY f_int1;
50563 DROP TRIGGER trg_3;
50564         
50565 # check trigger-11 success:     1
50566 DELETE FROM t1
50567 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
50568 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
50569 AND f_charbig = '####updated per insert trigger####';
50570 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
50571 BEGIN
50572 SET new.f_int1 = @my_max1 + @counter,
50573 new.f_int2 = @my_min2 - @counter,
50574 new.f_charbig = '####updated per insert trigger####';
50575 SET @counter = @counter + 1;
50576 END|
50577 SET @counter = 1;
50578 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
50579 INSERT INTO t1 (f_char1, f_char2, f_charbig)
50580 SELECT CAST(f_int1 AS CHAR),
50581 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
50582 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
50583 ORDER BY f_int1;
50584 DROP TRIGGER trg_3;
50585         
50586 # check trigger-12 success:     1
50587 DELETE FROM t1
50588 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
50589 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
50590 AND f_charbig = '####updated per insert trigger####';
50591 ANALYZE  TABLE t1;
50592 Table   Op      Msg_type        Msg_text
50593 test.t1 analyze status  OK
50594 CHECK    TABLE t1 EXTENDED;
50595 Table   Op      Msg_type        Msg_text
50596 test.t1 check   status  OK
50597 CHECKSUM TABLE t1 EXTENDED;
50598 Table   Checksum
50599 test.t1 <some_value>
50600 OPTIMIZE TABLE t1;
50601 Table   Op      Msg_type        Msg_text
50602 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
50603 test.t1 optimize        status  OK
50604 # check layout success:    1
50605 REPAIR   TABLE t1 EXTENDED;
50606 Table   Op      Msg_type        Msg_text
50607 test.t1 repair  note    The storage engine for the table doesn't support repair
50608 # check layout success:    1
50609 TRUNCATE t1;
50610         
50611 # check TRUNCATE success:       1
50612 # check layout success:    1
50613 # End usability test (inc/partition_check.inc)
50614 DROP TABLE t1;
50615 CREATE TABLE t1 (
50616 f_int1 INTEGER,
50617 f_int2 INTEGER,
50618 f_char1 CHAR(20),
50619 f_char2 CHAR(20),
50620 f_charbig VARCHAR(1000)
50621 , UNIQUE INDEX uidx (f_int1,f_int2)
50623 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
50624 (PARTITION part1 VALUES LESS THAN (0)
50625 (SUBPARTITION subpart11, SUBPARTITION subpart12),
50626 PARTITION part2 VALUES LESS THAN (5)
50627 (SUBPARTITION subpart21, SUBPARTITION subpart22),
50628 PARTITION part3 VALUES LESS THAN (10)
50629 (SUBPARTITION subpart31, SUBPARTITION subpart32),
50630 PARTITION part4 VALUES LESS THAN (2147483646)
50631 (SUBPARTITION subpart41, SUBPARTITION subpart42));
50632 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50633 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
50634 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
50635 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
50636 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50637 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
50638 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
50639 # Start usability test (inc/partition_check.inc)
50640 create_command
50641 SHOW CREATE TABLE t1;
50642 Table   Create Table
50643 t1      CREATE TABLE `t1` (
50644   `f_int1` mediumint(9) DEFAULT NULL,
50645   `f_int2` mediumint(9) DEFAULT NULL,
50646   `f_char1` char(20) DEFAULT NULL,
50647   `f_char2` char(20) DEFAULT NULL,
50648   `f_charbig` varchar(1000) DEFAULT NULL,
50649   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
50650 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
50651 /*!50100 PARTITION BY RANGE (f_int1)
50652 SUBPARTITION BY KEY (f_int2)
50653 (PARTITION part1 VALUES LESS THAN (0)
50654  (SUBPARTITION subpart11 ENGINE = InnoDB,
50655   SUBPARTITION subpart12 ENGINE = InnoDB),
50656  PARTITION part2 VALUES LESS THAN (5)
50657  (SUBPARTITION subpart21 ENGINE = InnoDB,
50658   SUBPARTITION subpart22 ENGINE = InnoDB),
50659  PARTITION part3 VALUES LESS THAN (10)
50660  (SUBPARTITION subpart31 ENGINE = InnoDB,
50661   SUBPARTITION subpart32 ENGINE = InnoDB),
50662  PARTITION part4 VALUES LESS THAN (2147483646)
50663  (SUBPARTITION subpart41 ENGINE = InnoDB,
50664   SUBPARTITION subpart42 ENGINE = InnoDB)) */
50666 # check prerequisites-1 success:    1
50667 # check COUNT(*) success:    1
50668 # check MIN/MAX(f_int1) success:    1
50669 # check MIN/MAX(f_int2) success:    1
50670 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50671 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
50672 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
50673 WHERE f_int1 IN (2,3);
50674 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
50675 # check prerequisites-3 success:    1
50676 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
50677 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50678 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
50679 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
50680 WHERE f_int1 IN (2,3);
50681 DELETE FROM t1 WHERE f_charbig = 'delete me';
50682 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50683 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
50684 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
50685 WHERE f_int1 IN (2,3);
50686 DELETE FROM t1 WHERE f_charbig = 'delete me';
50687 # check read via f_int1 success: 1
50688 # check read via f_int2 success: 1
50689         
50690 # check multiple-1 success:     1
50691 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
50692         
50693 # check multiple-2 success:     1
50694 INSERT INTO t1 SELECT * FROM t0_template
50695 WHERE MOD(f_int1,3) = 0;
50696         
50697 # check multiple-3 success:     1
50698 UPDATE t1 SET f_int1 = f_int1 + @max_row
50699 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
50700 AND @max_row_div2 + @max_row_div4;
50701         
50702 # check multiple-4 success:     1
50703 DELETE FROM t1
50704 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
50705 AND @max_row_div2 + @max_row_div4 + @max_row;
50706         
50707 # check multiple-5 success:     1
50708 SELECT COUNT(*) INTO @try_count FROM t0_template
50709 WHERE MOD(f_int1,3) = 0
50710 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50711 SELECT COUNT(*) INTO @clash_count
50712 FROM t1 INNER JOIN t0_template USING(f_int1)
50713 WHERE MOD(f_int1,3) = 0
50714 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50715 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
50716 INSERT INTO t1
50717 SET f_int1 = @cur_value , f_int2 = @cur_value,
50718 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
50719 f_charbig = '#SINGLE#';
50720         
50721 # check single-1 success:       1
50722 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
50723 INSERT INTO t1
50724 SET f_int1 = @cur_value , f_int2 = @cur_value,
50725 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
50726 f_charbig = '#SINGLE#';
50727         
50728 # check single-2 success:       1
50729 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
50730 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
50731 UPDATE t1 SET f_int1 = @cur_value2
50732 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
50733         
50734 # check single-3 success:       1
50735 SET @cur_value1= -1;
50736 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
50737 UPDATE t1 SET f_int1 = @cur_value1
50738 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
50739         
50740 # check single-4 success:       1
50741 SELECT MAX(f_int1) INTO @cur_value FROM t1;
50742 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
50743         
50744 # check single-5 success:       1
50745 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
50746         
50747 # check single-6 success:       1
50748 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
50749 Warnings:
50750 Warning 1264    Out of range value for column 'f_int1' at row 1
50751 Warning 1264    Out of range value for column 'f_int2' at row 1
50752         
50753 # check single-7 success:       1
50754 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
50755 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
50756 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
50757 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
50758 f_charbig = '#NULL#';
50759 INSERT INTO t1
50760 SET f_int1 = NULL , f_int2 = -@max_row,
50761 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
50762 f_charbig = '#NULL#';
50763 # check null success:    1
50764         
50765 # check null-1 success:         1
50766 UPDATE t1 SET f_int1 = -@max_row
50767 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50768 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50769         
50770 # check null-2 success:         1
50771 UPDATE t1 SET f_int1 = NULL
50772 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50773 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50774         
50775 # check null-3 success:         1
50776 DELETE FROM t1
50777 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
50778 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
50779         
50780 # check null-4 success:         1
50781 DELETE FROM t1
50782 WHERE f_int1 = 0 AND f_int2 = 0
50783 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
50784 AND f_charbig = '#NULL#';
50785 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50786 SELECT f_int1, f_int1, '', '', 'was inserted'
50787    FROM t0_template source_tab
50788 WHERE MOD(f_int1,3) = 0
50789 AND f_int1 BETWEEN @max_row_div2 AND @max_row
50790 ON DUPLICATE KEY
50791 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
50792 f_int2 = 2 * @max_row + source_tab.f_int1,
50793 f_charbig = 'was updated';
50794         
50795 # check unique-1-a success:     1
50796         
50797 # check unique-1-b success:     1
50798 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50799 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50800 f_int2 = CAST(f_char1 AS SIGNED INT),
50801 f_charbig = CONCAT('===',f_char1,'===')
50802 WHERE f_charbig = 'was updated';
50803 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50804 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
50805    FROM t0_template source_tab
50806 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
50807         
50808 # check replace success:        1
50809 DELETE FROM t1
50810 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
50811 DELETE FROM t1
50812 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
50813 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
50814 UPDATE t1 SET f_int2 = f_int1,
50815 f_char1 = CAST(f_int1 AS CHAR),
50816 f_char2 = CAST(f_int1 AS CHAR),
50817 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
50818 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
50819 SET AUTOCOMMIT= 0;
50820 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50821 SELECT f_int1, f_int1, '', '', 'was inserted'
50822 FROM t0_template source_tab
50823 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50824         
50825 # check transactions-1 success:         1
50826 COMMIT WORK;
50827         
50828 # check transactions-2 success:         1
50829 ROLLBACK WORK;
50830         
50831 # check transactions-3 success:         1
50832 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50833 COMMIT WORK;
50834 ROLLBACK WORK;
50835         
50836 # check transactions-4 success:         1
50837 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50838 SELECT f_int1, f_int1, '', '', 'was inserted'
50839 FROM t0_template source_tab
50840 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50841         
50842 # check transactions-5 success:         1
50843 ROLLBACK WORK;
50844         
50845 # check transactions-6 success:         1
50846 # INFO: Storage engine used for t1 seems to be transactional.
50847 COMMIT;
50848         
50849 # check transactions-7 success:         1
50850 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50851 COMMIT WORK;
50852 SET @@session.sql_mode = 'traditional';
50853 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
50854 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
50855 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
50856 '', '', 'was inserted' FROM t0_template
50857 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
50858 ERROR 22012: Division by 0
50859 COMMIT;
50860         
50861 # check transactions-8 success:         1
50862 # INFO: Storage engine used for t1 seems to be able to revert
50863 #       changes made by the failing statement.
50864 SET @@session.sql_mode = '';
50865 SET AUTOCOMMIT= 1;
50866 DELETE FROM t1 WHERE f_charbig = 'was inserted';
50867 COMMIT WORK;
50868 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
50869         
50870 # check special-1 success:      1
50871 UPDATE t1 SET f_charbig = '';
50872         
50873 # check special-2 success:      1
50874 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
50875 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
50876 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
50877 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50878 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50879 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50880 'just inserted' FROM t0_template
50881 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50882 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
50883 BEGIN
50884 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50885 f_charbig = 'updated by trigger'
50886       WHERE f_int1 = new.f_int1;
50887 END|
50888 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50889 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
50890 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50891         
50892 # check trigger-1 success:      1
50893 DROP TRIGGER trg_1;
50894 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50895 f_int2 = CAST(f_char1 AS SIGNED INT),
50896 f_charbig = 'just inserted'
50897    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50898 DELETE FROM t0_aux
50899 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50900 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50901 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50902 'just inserted' FROM t0_template
50903 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50904 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
50905 BEGIN
50906 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50907 f_charbig = 'updated by trigger'
50908       WHERE f_int1 = new.f_int1;
50909 END|
50910 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50911 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
50912 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50913         
50914 # check trigger-2 success:      1
50915 DROP TRIGGER trg_1;
50916 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50917 f_int2 = CAST(f_char1 AS SIGNED INT),
50918 f_charbig = 'just inserted'
50919    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50920 DELETE FROM t0_aux
50921 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50922 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50923 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50924 'just inserted' FROM t0_template
50925 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50926 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
50927 BEGIN
50928 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50929 f_charbig = 'updated by trigger'
50930       WHERE f_int1 = new.f_int1;
50931 END|
50932 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50933 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50934         
50935 # check trigger-3 success:      1
50936 DROP TRIGGER trg_1;
50937 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50938 f_int2 = CAST(f_char1 AS SIGNED INT),
50939 f_charbig = 'just inserted'
50940    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50941 DELETE FROM t0_aux
50942 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50943 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50944 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50945 'just inserted' FROM t0_template
50946 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50947 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
50948 BEGIN
50949 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50950 f_charbig = 'updated by trigger'
50951       WHERE f_int1 = - old.f_int1;
50952 END|
50953 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50954 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50955         
50956 # check trigger-4 success:      1
50957 DROP TRIGGER trg_1;
50958 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50959 f_int2 = CAST(f_char1 AS SIGNED INT),
50960 f_charbig = 'just inserted'
50961    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50962 DELETE FROM t0_aux
50963 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50964 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50965 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50966 'just inserted' FROM t0_template
50967 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50968 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
50969 BEGIN
50970 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50971 f_charbig = 'updated by trigger'
50972       WHERE f_int1 = new.f_int1;
50973 END|
50974 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50975 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50976         
50977 # check trigger-5 success:      1
50978 DROP TRIGGER trg_1;
50979 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
50980 f_int2 = CAST(f_char1 AS SIGNED INT),
50981 f_charbig = 'just inserted'
50982    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
50983 DELETE FROM t0_aux
50984 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50985 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
50986 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
50987 'just inserted' FROM t0_template
50988 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
50989 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
50990 BEGIN
50991 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
50992 f_charbig = 'updated by trigger'
50993       WHERE f_int1 = - old.f_int1;
50994 END|
50995 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
50996 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
50997         
50998 # check trigger-6 success:      1
50999 DROP TRIGGER trg_1;
51000 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51001 f_int2 = CAST(f_char1 AS SIGNED INT),
51002 f_charbig = 'just inserted'
51003    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51004 DELETE FROM t0_aux
51005 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51006 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51007 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51008 'just inserted' FROM t0_template
51009 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51010 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
51011 BEGIN
51012 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51013 f_charbig = 'updated by trigger'
51014       WHERE f_int1 = - old.f_int1;
51015 END|
51016 DELETE FROM t0_aux
51017 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51018         
51019 # check trigger-7 success:      1
51020 DROP TRIGGER trg_1;
51021 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51022 f_int2 = CAST(f_char1 AS SIGNED INT),
51023 f_charbig = 'just inserted'
51024    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51025 DELETE FROM t0_aux
51026 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51027 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51028 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51029 'just inserted' FROM t0_template
51030 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51031 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
51032 BEGIN
51033 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51034 f_charbig = 'updated by trigger'
51035       WHERE f_int1 = - old.f_int1;
51036 END|
51037 DELETE FROM t0_aux
51038 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51039         
51040 # check trigger-8 success:      1
51041 DROP TRIGGER trg_1;
51042 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51043 f_int2 = CAST(f_char1 AS SIGNED INT),
51044 f_charbig = 'just inserted'
51045    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51046 DELETE FROM t0_aux
51047 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51048 DELETE FROM t1
51049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51050 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
51051 BEGIN
51052 SET new.f_int1 = old.f_int1 + @max_row,
51053 new.f_int2 = old.f_int2 - @max_row,
51054 new.f_charbig = '####updated per update trigger####';
51055 END|
51056 UPDATE t1
51057 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
51058 f_charbig = '####updated per update statement itself####';
51059         
51060 # check trigger-9 success:      1
51061 DROP TRIGGER trg_2;
51062 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51063 f_int2 = CAST(f_char1 AS SIGNED INT),
51064 f_charbig = CONCAT('===',f_char1,'===');
51065 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
51066 BEGIN
51067 SET new.f_int1 = new.f_int1 + @max_row,
51068 new.f_int2 = new.f_int2 - @max_row,
51069 new.f_charbig = '####updated per update trigger####';
51070 END|
51071 UPDATE t1
51072 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
51073 f_charbig = '####updated per update statement itself####';
51074         
51075 # check trigger-10 success:     1
51076 DROP TRIGGER trg_2;
51077 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51078 f_int2 = CAST(f_char1 AS SIGNED INT),
51079 f_charbig = CONCAT('===',f_char1,'===');
51080 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
51081 BEGIN
51082 SET new.f_int1 = @my_max1 + @counter,
51083 new.f_int2 = @my_min2 - @counter,
51084 new.f_charbig = '####updated per insert trigger####';
51085 SET @counter = @counter + 1;
51086 END|
51087 SET @counter = 1;
51088 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
51089 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51090 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
51091 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
51092 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
51093 ORDER BY f_int1;
51094 DROP TRIGGER trg_3;
51095         
51096 # check trigger-11 success:     1
51097 DELETE FROM t1
51098 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
51099 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
51100 AND f_charbig = '####updated per insert trigger####';
51101 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
51102 BEGIN
51103 SET new.f_int1 = @my_max1 + @counter,
51104 new.f_int2 = @my_min2 - @counter,
51105 new.f_charbig = '####updated per insert trigger####';
51106 SET @counter = @counter + 1;
51107 END|
51108 SET @counter = 1;
51109 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
51110 INSERT INTO t1 (f_char1, f_char2, f_charbig)
51111 SELECT CAST(f_int1 AS CHAR),
51112 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
51113 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
51114 ORDER BY f_int1;
51115 DROP TRIGGER trg_3;
51116         
51117 # check trigger-12 success:     1
51118 DELETE FROM t1
51119 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
51120 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
51121 AND f_charbig = '####updated per insert trigger####';
51122 ANALYZE  TABLE t1;
51123 Table   Op      Msg_type        Msg_text
51124 test.t1 analyze status  OK
51125 CHECK    TABLE t1 EXTENDED;
51126 Table   Op      Msg_type        Msg_text
51127 test.t1 check   status  OK
51128 CHECKSUM TABLE t1 EXTENDED;
51129 Table   Checksum
51130 test.t1 <some_value>
51131 OPTIMIZE TABLE t1;
51132 Table   Op      Msg_type        Msg_text
51133 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
51134 test.t1 optimize        status  OK
51135 # check layout success:    1
51136 REPAIR   TABLE t1 EXTENDED;
51137 Table   Op      Msg_type        Msg_text
51138 test.t1 repair  note    The storage engine for the table doesn't support repair
51139 # check layout success:    1
51140 TRUNCATE t1;
51141         
51142 # check TRUNCATE success:       1
51143 # check layout success:    1
51144 # End usability test (inc/partition_check.inc)
51145 DROP TABLE t1;
51146 CREATE TABLE t1 (
51147 f_int1 INTEGER,
51148 f_int2 INTEGER,
51149 f_char1 CHAR(20),
51150 f_char2 CHAR(20),
51151 f_charbig VARCHAR(1000)
51152 , UNIQUE INDEX uidx (f_int1,f_int2)
51154 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
51155 (PARTITION part1 VALUES IN (0)
51156 (SUBPARTITION sp11, SUBPARTITION sp12),
51157 PARTITION part2 VALUES IN (1)
51158 (SUBPARTITION sp21, SUBPARTITION sp22),
51159 PARTITION part3 VALUES IN (2)
51160 (SUBPARTITION sp31, SUBPARTITION sp32),
51161 PARTITION part4 VALUES IN (NULL)
51162 (SUBPARTITION sp41, SUBPARTITION sp42));
51163 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51164 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
51165 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
51166 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
51167 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51168 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
51169 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
51170 # Start usability test (inc/partition_check.inc)
51171 create_command
51172 SHOW CREATE TABLE t1;
51173 Table   Create Table
51174 t1      CREATE TABLE `t1` (
51175   `f_int1` mediumint(9) DEFAULT NULL,
51176   `f_int2` mediumint(9) DEFAULT NULL,
51177   `f_char1` char(20) DEFAULT NULL,
51178   `f_char2` char(20) DEFAULT NULL,
51179   `f_charbig` varchar(1000) DEFAULT NULL,
51180   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
51181 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
51182 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
51183 SUBPARTITION BY HASH (f_int2 + 1)
51184 (PARTITION part1 VALUES IN (0)
51185  (SUBPARTITION sp11 ENGINE = InnoDB,
51186   SUBPARTITION sp12 ENGINE = InnoDB),
51187  PARTITION part2 VALUES IN (1)
51188  (SUBPARTITION sp21 ENGINE = InnoDB,
51189   SUBPARTITION sp22 ENGINE = InnoDB),
51190  PARTITION part3 VALUES IN (2)
51191  (SUBPARTITION sp31 ENGINE = InnoDB,
51192   SUBPARTITION sp32 ENGINE = InnoDB),
51193  PARTITION part4 VALUES IN (NULL)
51194  (SUBPARTITION sp41 ENGINE = InnoDB,
51195   SUBPARTITION sp42 ENGINE = InnoDB)) */
51197 # check prerequisites-1 success:    1
51198 # check COUNT(*) success:    1
51199 # check MIN/MAX(f_int1) success:    1
51200 # check MIN/MAX(f_int2) success:    1
51201 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51202 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
51203 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
51204 WHERE f_int1 IN (2,3);
51205 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
51206 # check prerequisites-3 success:    1
51207 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
51208 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51209 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
51210 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
51211 WHERE f_int1 IN (2,3);
51212 DELETE FROM t1 WHERE f_charbig = 'delete me';
51213 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51214 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
51215 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
51216 WHERE f_int1 IN (2,3);
51217 DELETE FROM t1 WHERE f_charbig = 'delete me';
51218 # check read via f_int1 success: 1
51219 # check read via f_int2 success: 1
51220         
51221 # check multiple-1 success:     1
51222 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
51223         
51224 # check multiple-2 success:     1
51225 INSERT INTO t1 SELECT * FROM t0_template
51226 WHERE MOD(f_int1,3) = 0;
51227         
51228 # check multiple-3 success:     1
51229 UPDATE t1 SET f_int1 = f_int1 + @max_row
51230 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
51231 AND @max_row_div2 + @max_row_div4;
51232         
51233 # check multiple-4 success:     1
51234 DELETE FROM t1
51235 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
51236 AND @max_row_div2 + @max_row_div4 + @max_row;
51237         
51238 # check multiple-5 success:     1
51239 SELECT COUNT(*) INTO @try_count FROM t0_template
51240 WHERE MOD(f_int1,3) = 0
51241 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51242 SELECT COUNT(*) INTO @clash_count
51243 FROM t1 INNER JOIN t0_template USING(f_int1)
51244 WHERE MOD(f_int1,3) = 0
51245 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51246 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
51247 INSERT INTO t1
51248 SET f_int1 = @cur_value , f_int2 = @cur_value,
51249 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
51250 f_charbig = '#SINGLE#';
51251         
51252 # check single-1 success:       1
51253 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
51254 INSERT INTO t1
51255 SET f_int1 = @cur_value , f_int2 = @cur_value,
51256 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
51257 f_charbig = '#SINGLE#';
51258         
51259 # check single-2 success:       1
51260 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
51261 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
51262 UPDATE t1 SET f_int1 = @cur_value2
51263 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
51264         
51265 # check single-3 success:       1
51266 SET @cur_value1= -1;
51267 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
51268 UPDATE t1 SET f_int1 = @cur_value1
51269 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
51270         
51271 # check single-4 success:       1
51272 SELECT MAX(f_int1) INTO @cur_value FROM t1;
51273 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
51274         
51275 # check single-5 success:       1
51276 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
51277         
51278 # check single-6 success:       1
51279 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
51280 Warnings:
51281 Warning 1264    Out of range value for column 'f_int1' at row 1
51282 Warning 1264    Out of range value for column 'f_int2' at row 1
51283         
51284 # check single-7 success:       1
51285 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
51286 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
51287 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
51288 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
51289 f_charbig = '#NULL#';
51290 INSERT INTO t1
51291 SET f_int1 = NULL , f_int2 = -@max_row,
51292 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
51293 f_charbig = '#NULL#';
51294 # check null success:    1
51295         
51296 # check null-1 success:         1
51297 UPDATE t1 SET f_int1 = -@max_row
51298 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51299 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51300         
51301 # check null-2 success:         1
51302 UPDATE t1 SET f_int1 = NULL
51303 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51304 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51305         
51306 # check null-3 success:         1
51307 DELETE FROM t1
51308 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51309 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51310         
51311 # check null-4 success:         1
51312 DELETE FROM t1
51313 WHERE f_int1 = 0 AND f_int2 = 0
51314 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
51315 AND f_charbig = '#NULL#';
51316 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51317 SELECT f_int1, f_int1, '', '', 'was inserted'
51318    FROM t0_template source_tab
51319 WHERE MOD(f_int1,3) = 0
51320 AND f_int1 BETWEEN @max_row_div2 AND @max_row
51321 ON DUPLICATE KEY
51322 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
51323 f_int2 = 2 * @max_row + source_tab.f_int1,
51324 f_charbig = 'was updated';
51325         
51326 # check unique-1-a success:     1
51327         
51328 # check unique-1-b success:     1
51329 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51330 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51331 f_int2 = CAST(f_char1 AS SIGNED INT),
51332 f_charbig = CONCAT('===',f_char1,'===')
51333 WHERE f_charbig = 'was updated';
51334 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51335 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
51336    FROM t0_template source_tab
51337 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51338         
51339 # check replace success:        1
51340 DELETE FROM t1
51341 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
51342 DELETE FROM t1
51343 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
51344 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
51345 UPDATE t1 SET f_int2 = f_int1,
51346 f_char1 = CAST(f_int1 AS CHAR),
51347 f_char2 = CAST(f_int1 AS CHAR),
51348 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
51349 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
51350 SET AUTOCOMMIT= 0;
51351 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51352 SELECT f_int1, f_int1, '', '', 'was inserted'
51353 FROM t0_template source_tab
51354 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51355         
51356 # check transactions-1 success:         1
51357 COMMIT WORK;
51358         
51359 # check transactions-2 success:         1
51360 ROLLBACK WORK;
51361         
51362 # check transactions-3 success:         1
51363 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51364 COMMIT WORK;
51365 ROLLBACK WORK;
51366         
51367 # check transactions-4 success:         1
51368 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51369 SELECT f_int1, f_int1, '', '', 'was inserted'
51370 FROM t0_template source_tab
51371 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51372         
51373 # check transactions-5 success:         1
51374 ROLLBACK WORK;
51375         
51376 # check transactions-6 success:         1
51377 # INFO: Storage engine used for t1 seems to be transactional.
51378 COMMIT;
51379         
51380 # check transactions-7 success:         1
51381 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51382 COMMIT WORK;
51383 SET @@session.sql_mode = 'traditional';
51384 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
51385 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51386 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
51387 '', '', 'was inserted' FROM t0_template
51388 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51389 ERROR 22012: Division by 0
51390 COMMIT;
51391         
51392 # check transactions-8 success:         1
51393 # INFO: Storage engine used for t1 seems to be able to revert
51394 #       changes made by the failing statement.
51395 SET @@session.sql_mode = '';
51396 SET AUTOCOMMIT= 1;
51397 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51398 COMMIT WORK;
51399 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
51400         
51401 # check special-1 success:      1
51402 UPDATE t1 SET f_charbig = '';
51403         
51404 # check special-2 success:      1
51405 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
51406 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51407 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
51408 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51409 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51410 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51411 'just inserted' FROM t0_template
51412 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51413 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
51414 BEGIN
51415 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51416 f_charbig = 'updated by trigger'
51417       WHERE f_int1 = new.f_int1;
51418 END|
51419 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51420 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
51421 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51422         
51423 # check trigger-1 success:      1
51424 DROP TRIGGER trg_1;
51425 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51426 f_int2 = CAST(f_char1 AS SIGNED INT),
51427 f_charbig = 'just inserted'
51428    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51429 DELETE FROM t0_aux
51430 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51431 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51432 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51433 'just inserted' FROM t0_template
51434 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51435 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
51436 BEGIN
51437 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51438 f_charbig = 'updated by trigger'
51439       WHERE f_int1 = new.f_int1;
51440 END|
51441 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51442 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
51443 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51444         
51445 # check trigger-2 success:      1
51446 DROP TRIGGER trg_1;
51447 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51448 f_int2 = CAST(f_char1 AS SIGNED INT),
51449 f_charbig = 'just inserted'
51450    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51451 DELETE FROM t0_aux
51452 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51453 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51454 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51455 'just inserted' FROM t0_template
51456 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51457 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
51458 BEGIN
51459 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51460 f_charbig = 'updated by trigger'
51461       WHERE f_int1 = new.f_int1;
51462 END|
51463 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
51464 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51465         
51466 # check trigger-3 success:      1
51467 DROP TRIGGER trg_1;
51468 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51469 f_int2 = CAST(f_char1 AS SIGNED INT),
51470 f_charbig = 'just inserted'
51471    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51472 DELETE FROM t0_aux
51473 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51474 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51475 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51476 'just inserted' FROM t0_template
51477 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51478 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
51479 BEGIN
51480 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51481 f_charbig = 'updated by trigger'
51482       WHERE f_int1 = - old.f_int1;
51483 END|
51484 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
51485 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51486         
51487 # check trigger-4 success:      1
51488 DROP TRIGGER trg_1;
51489 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51490 f_int2 = CAST(f_char1 AS SIGNED INT),
51491 f_charbig = 'just inserted'
51492    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51493 DELETE FROM t0_aux
51494 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51495 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51496 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51497 'just inserted' FROM t0_template
51498 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51499 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
51500 BEGIN
51501 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51502 f_charbig = 'updated by trigger'
51503       WHERE f_int1 = new.f_int1;
51504 END|
51505 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
51506 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51507         
51508 # check trigger-5 success:      1
51509 DROP TRIGGER trg_1;
51510 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51511 f_int2 = CAST(f_char1 AS SIGNED INT),
51512 f_charbig = 'just inserted'
51513    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51514 DELETE FROM t0_aux
51515 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51516 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51517 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51518 'just inserted' FROM t0_template
51519 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51520 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
51521 BEGIN
51522 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51523 f_charbig = 'updated by trigger'
51524       WHERE f_int1 = - old.f_int1;
51525 END|
51526 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
51527 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51528         
51529 # check trigger-6 success:      1
51530 DROP TRIGGER trg_1;
51531 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51532 f_int2 = CAST(f_char1 AS SIGNED INT),
51533 f_charbig = 'just inserted'
51534    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51535 DELETE FROM t0_aux
51536 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51537 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51538 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51539 'just inserted' FROM t0_template
51540 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51541 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
51542 BEGIN
51543 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51544 f_charbig = 'updated by trigger'
51545       WHERE f_int1 = - old.f_int1;
51546 END|
51547 DELETE FROM t0_aux
51548 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51549         
51550 # check trigger-7 success:      1
51551 DROP TRIGGER trg_1;
51552 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51553 f_int2 = CAST(f_char1 AS SIGNED INT),
51554 f_charbig = 'just inserted'
51555    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51556 DELETE FROM t0_aux
51557 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51558 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51559 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51560 'just inserted' FROM t0_template
51561 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51562 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
51563 BEGIN
51564 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51565 f_charbig = 'updated by trigger'
51566       WHERE f_int1 = - old.f_int1;
51567 END|
51568 DELETE FROM t0_aux
51569 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51570         
51571 # check trigger-8 success:      1
51572 DROP TRIGGER trg_1;
51573 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51574 f_int2 = CAST(f_char1 AS SIGNED INT),
51575 f_charbig = 'just inserted'
51576    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51577 DELETE FROM t0_aux
51578 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51579 DELETE FROM t1
51580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51581 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
51582 BEGIN
51583 SET new.f_int1 = old.f_int1 + @max_row,
51584 new.f_int2 = old.f_int2 - @max_row,
51585 new.f_charbig = '####updated per update trigger####';
51586 END|
51587 UPDATE t1
51588 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
51589 f_charbig = '####updated per update statement itself####';
51590         
51591 # check trigger-9 success:      1
51592 DROP TRIGGER trg_2;
51593 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51594 f_int2 = CAST(f_char1 AS SIGNED INT),
51595 f_charbig = CONCAT('===',f_char1,'===');
51596 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
51597 BEGIN
51598 SET new.f_int1 = new.f_int1 + @max_row,
51599 new.f_int2 = new.f_int2 - @max_row,
51600 new.f_charbig = '####updated per update trigger####';
51601 END|
51602 UPDATE t1
51603 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
51604 f_charbig = '####updated per update statement itself####';
51605         
51606 # check trigger-10 success:     1
51607 DROP TRIGGER trg_2;
51608 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51609 f_int2 = CAST(f_char1 AS SIGNED INT),
51610 f_charbig = CONCAT('===',f_char1,'===');
51611 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
51612 BEGIN
51613 SET new.f_int1 = @my_max1 + @counter,
51614 new.f_int2 = @my_min2 - @counter,
51615 new.f_charbig = '####updated per insert trigger####';
51616 SET @counter = @counter + 1;
51617 END|
51618 SET @counter = 1;
51619 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
51620 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51621 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
51622 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
51623 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
51624 ORDER BY f_int1;
51625 DROP TRIGGER trg_3;
51626         
51627 # check trigger-11 success:     1
51628 DELETE FROM t1
51629 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
51630 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
51631 AND f_charbig = '####updated per insert trigger####';
51632 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
51633 BEGIN
51634 SET new.f_int1 = @my_max1 + @counter,
51635 new.f_int2 = @my_min2 - @counter,
51636 new.f_charbig = '####updated per insert trigger####';
51637 SET @counter = @counter + 1;
51638 END|
51639 SET @counter = 1;
51640 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
51641 INSERT INTO t1 (f_char1, f_char2, f_charbig)
51642 SELECT CAST(f_int1 AS CHAR),
51643 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
51644 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
51645 ORDER BY f_int1;
51646 DROP TRIGGER trg_3;
51647         
51648 # check trigger-12 success:     1
51649 DELETE FROM t1
51650 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
51651 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
51652 AND f_charbig = '####updated per insert trigger####';
51653 ANALYZE  TABLE t1;
51654 Table   Op      Msg_type        Msg_text
51655 test.t1 analyze status  OK
51656 CHECK    TABLE t1 EXTENDED;
51657 Table   Op      Msg_type        Msg_text
51658 test.t1 check   status  OK
51659 CHECKSUM TABLE t1 EXTENDED;
51660 Table   Checksum
51661 test.t1 <some_value>
51662 OPTIMIZE TABLE t1;
51663 Table   Op      Msg_type        Msg_text
51664 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
51665 test.t1 optimize        status  OK
51666 # check layout success:    1
51667 REPAIR   TABLE t1 EXTENDED;
51668 Table   Op      Msg_type        Msg_text
51669 test.t1 repair  note    The storage engine for the table doesn't support repair
51670 # check layout success:    1
51671 TRUNCATE t1;
51672         
51673 # check TRUNCATE success:       1
51674 # check layout success:    1
51675 # End usability test (inc/partition_check.inc)
51676 DROP TABLE t1;
51677 CREATE TABLE t1 (
51678 f_int1 INTEGER,
51679 f_int2 INTEGER,
51680 f_char1 CHAR(20),
51681 f_char2 CHAR(20),
51682 f_charbig VARCHAR(1000)
51683 , UNIQUE INDEX uidx (f_int1,f_int2)
51685 PARTITION BY LIST(ABS(MOD(f_int1,2)))
51686 SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
51687 (PARTITION part1 VALUES IN (0),
51688  PARTITION part2 VALUES IN (1),
51689  PARTITION part3 VALUES IN (NULL));
51690 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51691 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
51692 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
51693 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
51694 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51695 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
51696 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
51697 # Start usability test (inc/partition_check.inc)
51698 create_command
51699 SHOW CREATE TABLE t1;
51700 Table   Create Table
51701 t1      CREATE TABLE `t1` (
51702   `f_int1` mediumint(9) DEFAULT NULL,
51703   `f_int2` mediumint(9) DEFAULT NULL,
51704   `f_char1` char(20) DEFAULT NULL,
51705   `f_char2` char(20) DEFAULT NULL,
51706   `f_charbig` varchar(1000) DEFAULT NULL,
51707   UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
51708 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
51709 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
51710 SUBPARTITION BY KEY (f_int2)
51711 SUBPARTITIONS 3
51712 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
51713  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
51714  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
51716 # check prerequisites-1 success:    1
51717 # check COUNT(*) success:    1
51718 # check MIN/MAX(f_int1) success:    1
51719 # check MIN/MAX(f_int2) success:    1
51720 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51721 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
51722 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
51723 WHERE f_int1 IN (2,3);
51724 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
51725 # check prerequisites-3 success:    1
51726 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
51727 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51728 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
51729 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
51730 WHERE f_int1 IN (2,3);
51731 DELETE FROM t1 WHERE f_charbig = 'delete me';
51732 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51733 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
51734 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
51735 WHERE f_int1 IN (2,3);
51736 DELETE FROM t1 WHERE f_charbig = 'delete me';
51737 # check read via f_int1 success: 1
51738 # check read via f_int2 success: 1
51739         
51740 # check multiple-1 success:     1
51741 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
51742         
51743 # check multiple-2 success:     1
51744 INSERT INTO t1 SELECT * FROM t0_template
51745 WHERE MOD(f_int1,3) = 0;
51746         
51747 # check multiple-3 success:     1
51748 UPDATE t1 SET f_int1 = f_int1 + @max_row
51749 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
51750 AND @max_row_div2 + @max_row_div4;
51751         
51752 # check multiple-4 success:     1
51753 DELETE FROM t1
51754 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
51755 AND @max_row_div2 + @max_row_div4 + @max_row;
51756         
51757 # check multiple-5 success:     1
51758 SELECT COUNT(*) INTO @try_count FROM t0_template
51759 WHERE MOD(f_int1,3) = 0
51760 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51761 SELECT COUNT(*) INTO @clash_count
51762 FROM t1 INNER JOIN t0_template USING(f_int1)
51763 WHERE MOD(f_int1,3) = 0
51764 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51765 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
51766 INSERT INTO t1
51767 SET f_int1 = @cur_value , f_int2 = @cur_value,
51768 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
51769 f_charbig = '#SINGLE#';
51770         
51771 # check single-1 success:       1
51772 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
51773 INSERT INTO t1
51774 SET f_int1 = @cur_value , f_int2 = @cur_value,
51775 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
51776 f_charbig = '#SINGLE#';
51777         
51778 # check single-2 success:       1
51779 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
51780 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
51781 UPDATE t1 SET f_int1 = @cur_value2
51782 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
51783         
51784 # check single-3 success:       1
51785 SET @cur_value1= -1;
51786 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
51787 UPDATE t1 SET f_int1 = @cur_value1
51788 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
51789         
51790 # check single-4 success:       1
51791 SELECT MAX(f_int1) INTO @cur_value FROM t1;
51792 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
51793         
51794 # check single-5 success:       1
51795 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
51796         
51797 # check single-6 success:       1
51798 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
51799 Warnings:
51800 Warning 1264    Out of range value for column 'f_int1' at row 1
51801 Warning 1264    Out of range value for column 'f_int2' at row 1
51802         
51803 # check single-7 success:       1
51804 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
51805 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
51806 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
51807 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
51808 f_charbig = '#NULL#';
51809 INSERT INTO t1
51810 SET f_int1 = NULL , f_int2 = -@max_row,
51811 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
51812 f_charbig = '#NULL#';
51813 # check null success:    1
51814         
51815 # check null-1 success:         1
51816 UPDATE t1 SET f_int1 = -@max_row
51817 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51818 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51819         
51820 # check null-2 success:         1
51821 UPDATE t1 SET f_int1 = NULL
51822 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51823 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51824         
51825 # check null-3 success:         1
51826 DELETE FROM t1
51827 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
51828 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
51829         
51830 # check null-4 success:         1
51831 DELETE FROM t1
51832 WHERE f_int1 = 0 AND f_int2 = 0
51833 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
51834 AND f_charbig = '#NULL#';
51835 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51836 SELECT f_int1, f_int1, '', '', 'was inserted'
51837    FROM t0_template source_tab
51838 WHERE MOD(f_int1,3) = 0
51839 AND f_int1 BETWEEN @max_row_div2 AND @max_row
51840 ON DUPLICATE KEY
51841 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
51842 f_int2 = 2 * @max_row + source_tab.f_int1,
51843 f_charbig = 'was updated';
51844         
51845 # check unique-1-a success:     1
51846         
51847 # check unique-1-b success:     1
51848 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51849 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51850 f_int2 = CAST(f_char1 AS SIGNED INT),
51851 f_charbig = CONCAT('===',f_char1,'===')
51852 WHERE f_charbig = 'was updated';
51853 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51854 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
51855    FROM t0_template source_tab
51856 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
51857         
51858 # check replace success:        1
51859 DELETE FROM t1
51860 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
51861 DELETE FROM t1
51862 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
51863 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
51864 UPDATE t1 SET f_int2 = f_int1,
51865 f_char1 = CAST(f_int1 AS CHAR),
51866 f_char2 = CAST(f_int1 AS CHAR),
51867 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
51868 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
51869 SET AUTOCOMMIT= 0;
51870 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51871 SELECT f_int1, f_int1, '', '', 'was inserted'
51872 FROM t0_template source_tab
51873 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51874         
51875 # check transactions-1 success:         1
51876 COMMIT WORK;
51877         
51878 # check transactions-2 success:         1
51879 ROLLBACK WORK;
51880         
51881 # check transactions-3 success:         1
51882 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51883 COMMIT WORK;
51884 ROLLBACK WORK;
51885         
51886 # check transactions-4 success:         1
51887 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51888 SELECT f_int1, f_int1, '', '', 'was inserted'
51889 FROM t0_template source_tab
51890 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51891         
51892 # check transactions-5 success:         1
51893 ROLLBACK WORK;
51894         
51895 # check transactions-6 success:         1
51896 # INFO: Storage engine used for t1 seems to be transactional.
51897 COMMIT;
51898         
51899 # check transactions-7 success:         1
51900 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51901 COMMIT WORK;
51902 SET @@session.sql_mode = 'traditional';
51903 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
51904 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
51905 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
51906 '', '', 'was inserted' FROM t0_template
51907 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
51908 ERROR 22012: Division by 0
51909 COMMIT;
51910         
51911 # check transactions-8 success:         1
51912 # INFO: Storage engine used for t1 seems to be able to revert
51913 #       changes made by the failing statement.
51914 SET @@session.sql_mode = '';
51915 SET AUTOCOMMIT= 1;
51916 DELETE FROM t1 WHERE f_charbig = 'was inserted';
51917 COMMIT WORK;
51918 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
51919         
51920 # check special-1 success:      1
51921 UPDATE t1 SET f_charbig = '';
51922         
51923 # check special-2 success:      1
51924 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
51925 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
51926 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
51927 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51928 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51929 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51930 'just inserted' FROM t0_template
51931 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51932 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
51933 BEGIN
51934 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51935 f_charbig = 'updated by trigger'
51936       WHERE f_int1 = new.f_int1;
51937 END|
51938 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51939 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
51940 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51941         
51942 # check trigger-1 success:      1
51943 DROP TRIGGER trg_1;
51944 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51945 f_int2 = CAST(f_char1 AS SIGNED INT),
51946 f_charbig = 'just inserted'
51947    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51948 DELETE FROM t0_aux
51949 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51950 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51951 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51952 'just inserted' FROM t0_template
51953 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51954 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
51955 BEGIN
51956 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51957 f_charbig = 'updated by trigger'
51958       WHERE f_int1 = new.f_int1;
51959 END|
51960 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51961 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
51962 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51963         
51964 # check trigger-2 success:      1
51965 DROP TRIGGER trg_1;
51966 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51967 f_int2 = CAST(f_char1 AS SIGNED INT),
51968 f_charbig = 'just inserted'
51969    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51970 DELETE FROM t0_aux
51971 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51972 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51973 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51974 'just inserted' FROM t0_template
51975 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51976 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
51977 BEGIN
51978 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
51979 f_charbig = 'updated by trigger'
51980       WHERE f_int1 = new.f_int1;
51981 END|
51982 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
51983 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
51984         
51985 # check trigger-3 success:      1
51986 DROP TRIGGER trg_1;
51987 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
51988 f_int2 = CAST(f_char1 AS SIGNED INT),
51989 f_charbig = 'just inserted'
51990    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
51991 DELETE FROM t0_aux
51992 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51993 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
51994 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
51995 'just inserted' FROM t0_template
51996 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
51997 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
51998 BEGIN
51999 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52000 f_charbig = 'updated by trigger'
52001       WHERE f_int1 = - old.f_int1;
52002 END|
52003 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52004 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52005         
52006 # check trigger-4 success:      1
52007 DROP TRIGGER trg_1;
52008 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52009 f_int2 = CAST(f_char1 AS SIGNED INT),
52010 f_charbig = 'just inserted'
52011    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52012 DELETE FROM t0_aux
52013 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52014 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52015 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52016 'just inserted' FROM t0_template
52017 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52018 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
52019 BEGIN
52020 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52021 f_charbig = 'updated by trigger'
52022       WHERE f_int1 = new.f_int1;
52023 END|
52024 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52025 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52026         
52027 # check trigger-5 success:      1
52028 DROP TRIGGER trg_1;
52029 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52030 f_int2 = CAST(f_char1 AS SIGNED INT),
52031 f_charbig = 'just inserted'
52032    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52033 DELETE FROM t0_aux
52034 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52035 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52036 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52037 'just inserted' FROM t0_template
52038 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52039 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
52040 BEGIN
52041 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52042 f_charbig = 'updated by trigger'
52043       WHERE f_int1 = - old.f_int1;
52044 END|
52045 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52046 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52047         
52048 # check trigger-6 success:      1
52049 DROP TRIGGER trg_1;
52050 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52051 f_int2 = CAST(f_char1 AS SIGNED INT),
52052 f_charbig = 'just inserted'
52053    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52054 DELETE FROM t0_aux
52055 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52056 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52057 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52058 'just inserted' FROM t0_template
52059 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52060 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
52061 BEGIN
52062 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52063 f_charbig = 'updated by trigger'
52064       WHERE f_int1 = - old.f_int1;
52065 END|
52066 DELETE FROM t0_aux
52067 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52068         
52069 # check trigger-7 success:      1
52070 DROP TRIGGER trg_1;
52071 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52072 f_int2 = CAST(f_char1 AS SIGNED INT),
52073 f_charbig = 'just inserted'
52074    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52075 DELETE FROM t0_aux
52076 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52077 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52078 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52079 'just inserted' FROM t0_template
52080 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52081 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
52082 BEGIN
52083 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52084 f_charbig = 'updated by trigger'
52085       WHERE f_int1 = - old.f_int1;
52086 END|
52087 DELETE FROM t0_aux
52088 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52089         
52090 # check trigger-8 success:      1
52091 DROP TRIGGER trg_1;
52092 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52093 f_int2 = CAST(f_char1 AS SIGNED INT),
52094 f_charbig = 'just inserted'
52095    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52096 DELETE FROM t0_aux
52097 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52098 DELETE FROM t1
52099 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52100 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
52101 BEGIN
52102 SET new.f_int1 = old.f_int1 + @max_row,
52103 new.f_int2 = old.f_int2 - @max_row,
52104 new.f_charbig = '####updated per update trigger####';
52105 END|
52106 UPDATE t1
52107 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
52108 f_charbig = '####updated per update statement itself####';
52109         
52110 # check trigger-9 success:      1
52111 DROP TRIGGER trg_2;
52112 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52113 f_int2 = CAST(f_char1 AS SIGNED INT),
52114 f_charbig = CONCAT('===',f_char1,'===');
52115 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
52116 BEGIN
52117 SET new.f_int1 = new.f_int1 + @max_row,
52118 new.f_int2 = new.f_int2 - @max_row,
52119 new.f_charbig = '####updated per update trigger####';
52120 END|
52121 UPDATE t1
52122 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
52123 f_charbig = '####updated per update statement itself####';
52124         
52125 # check trigger-10 success:     1
52126 DROP TRIGGER trg_2;
52127 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52128 f_int2 = CAST(f_char1 AS SIGNED INT),
52129 f_charbig = CONCAT('===',f_char1,'===');
52130 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
52131 BEGIN
52132 SET new.f_int1 = @my_max1 + @counter,
52133 new.f_int2 = @my_min2 - @counter,
52134 new.f_charbig = '####updated per insert trigger####';
52135 SET @counter = @counter + 1;
52136 END|
52137 SET @counter = 1;
52138 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
52139 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52140 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
52141 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
52142 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
52143 ORDER BY f_int1;
52144 DROP TRIGGER trg_3;
52145         
52146 # check trigger-11 success:     1
52147 DELETE FROM t1
52148 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
52149 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
52150 AND f_charbig = '####updated per insert trigger####';
52151 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
52152 BEGIN
52153 SET new.f_int1 = @my_max1 + @counter,
52154 new.f_int2 = @my_min2 - @counter,
52155 new.f_charbig = '####updated per insert trigger####';
52156 SET @counter = @counter + 1;
52157 END|
52158 SET @counter = 1;
52159 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
52160 INSERT INTO t1 (f_char1, f_char2, f_charbig)
52161 SELECT CAST(f_int1 AS CHAR),
52162 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
52163 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
52164 ORDER BY f_int1;
52165 DROP TRIGGER trg_3;
52166         
52167 # check trigger-12 success:     1
52168 DELETE FROM t1
52169 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
52170 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
52171 AND f_charbig = '####updated per insert trigger####';
52172 ANALYZE  TABLE t1;
52173 Table   Op      Msg_type        Msg_text
52174 test.t1 analyze status  OK
52175 CHECK    TABLE t1 EXTENDED;
52176 Table   Op      Msg_type        Msg_text
52177 test.t1 check   status  OK
52178 CHECKSUM TABLE t1 EXTENDED;
52179 Table   Checksum
52180 test.t1 <some_value>
52181 OPTIMIZE TABLE t1;
52182 Table   Op      Msg_type        Msg_text
52183 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
52184 test.t1 optimize        status  OK
52185 # check layout success:    1
52186 REPAIR   TABLE t1 EXTENDED;
52187 Table   Op      Msg_type        Msg_text
52188 test.t1 repair  note    The storage engine for the table doesn't support repair
52189 # check layout success:    1
52190 TRUNCATE t1;
52191         
52192 # check TRUNCATE success:       1
52193 # check layout success:    1
52194 # End usability test (inc/partition_check.inc)
52195 DROP TABLE t1;
52196 DROP TABLE IF EXISTS t1;
52197 CREATE TABLE t1 (
52198 f_int1 INTEGER,
52199 f_int2 INTEGER,
52200 f_char1 CHAR(20),
52201 f_char2 CHAR(20),
52202 f_charbig VARCHAR(1000)
52203 , UNIQUE INDEX uidx (f_int2,f_int1)
52205 PARTITION BY HASH(f_int1) PARTITIONS 2;
52206 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52207 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
52208 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
52209 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
52210 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52211 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
52212 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
52213 # Start usability test (inc/partition_check.inc)
52214 create_command
52215 SHOW CREATE TABLE t1;
52216 Table   Create Table
52217 t1      CREATE TABLE `t1` (
52218   `f_int1` mediumint(9) DEFAULT NULL,
52219   `f_int2` mediumint(9) DEFAULT NULL,
52220   `f_char1` char(20) DEFAULT NULL,
52221   `f_char2` char(20) DEFAULT NULL,
52222   `f_charbig` varchar(1000) DEFAULT NULL,
52223   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
52224 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
52225 /*!50100 PARTITION BY HASH (f_int1)
52226 PARTITIONS 2 */
52228 # check prerequisites-1 success:    1
52229 # check COUNT(*) success:    1
52230 # check MIN/MAX(f_int1) success:    1
52231 # check MIN/MAX(f_int2) success:    1
52232 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52233 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
52234 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
52235 WHERE f_int1 IN (2,3);
52236 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
52237 # check prerequisites-3 success:    1
52238 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
52239 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52240 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
52241 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
52242 WHERE f_int1 IN (2,3);
52243 DELETE FROM t1 WHERE f_charbig = 'delete me';
52244 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52245 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
52246 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
52247 WHERE f_int1 IN (2,3);
52248 DELETE FROM t1 WHERE f_charbig = 'delete me';
52249 # check read via f_int1 success: 1
52250 # check read via f_int2 success: 1
52251         
52252 # check multiple-1 success:     1
52253 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
52254         
52255 # check multiple-2 success:     1
52256 INSERT INTO t1 SELECT * FROM t0_template
52257 WHERE MOD(f_int1,3) = 0;
52258         
52259 # check multiple-3 success:     1
52260 UPDATE t1 SET f_int1 = f_int1 + @max_row
52261 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
52262 AND @max_row_div2 + @max_row_div4;
52263         
52264 # check multiple-4 success:     1
52265 DELETE FROM t1
52266 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
52267 AND @max_row_div2 + @max_row_div4 + @max_row;
52268         
52269 # check multiple-5 success:     1
52270 SELECT COUNT(*) INTO @try_count FROM t0_template
52271 WHERE MOD(f_int1,3) = 0
52272 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52273 SELECT COUNT(*) INTO @clash_count
52274 FROM t1 INNER JOIN t0_template USING(f_int1)
52275 WHERE MOD(f_int1,3) = 0
52276 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52277 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
52278 INSERT INTO t1
52279 SET f_int1 = @cur_value , f_int2 = @cur_value,
52280 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
52281 f_charbig = '#SINGLE#';
52282         
52283 # check single-1 success:       1
52284 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
52285 INSERT INTO t1
52286 SET f_int1 = @cur_value , f_int2 = @cur_value,
52287 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
52288 f_charbig = '#SINGLE#';
52289         
52290 # check single-2 success:       1
52291 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
52292 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
52293 UPDATE t1 SET f_int1 = @cur_value2
52294 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
52295         
52296 # check single-3 success:       1
52297 SET @cur_value1= -1;
52298 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
52299 UPDATE t1 SET f_int1 = @cur_value1
52300 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
52301         
52302 # check single-4 success:       1
52303 SELECT MAX(f_int1) INTO @cur_value FROM t1;
52304 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
52305         
52306 # check single-5 success:       1
52307 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
52308         
52309 # check single-6 success:       1
52310 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
52311 Warnings:
52312 Warning 1264    Out of range value for column 'f_int1' at row 1
52313 Warning 1264    Out of range value for column 'f_int2' at row 1
52314         
52315 # check single-7 success:       1
52316 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
52317 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
52318 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
52319 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
52320 f_charbig = '#NULL#';
52321 INSERT INTO t1
52322 SET f_int1 = NULL , f_int2 = -@max_row,
52323 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
52324 f_charbig = '#NULL#';
52325 # check null success:    1
52326         
52327 # check null-1 success:         1
52328 UPDATE t1 SET f_int1 = -@max_row
52329 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52330 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52331         
52332 # check null-2 success:         1
52333 UPDATE t1 SET f_int1 = NULL
52334 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52335 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52336         
52337 # check null-3 success:         1
52338 DELETE FROM t1
52339 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52340 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52341         
52342 # check null-4 success:         1
52343 DELETE FROM t1
52344 WHERE f_int1 = 0 AND f_int2 = 0
52345 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
52346 AND f_charbig = '#NULL#';
52347 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52348 SELECT f_int1, f_int1, '', '', 'was inserted'
52349    FROM t0_template source_tab
52350 WHERE MOD(f_int1,3) = 0
52351 AND f_int1 BETWEEN @max_row_div2 AND @max_row
52352 ON DUPLICATE KEY
52353 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
52354 f_int2 = 2 * @max_row + source_tab.f_int1,
52355 f_charbig = 'was updated';
52356         
52357 # check unique-1-a success:     1
52358         
52359 # check unique-1-b success:     1
52360 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52361 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52362 f_int2 = CAST(f_char1 AS SIGNED INT),
52363 f_charbig = CONCAT('===',f_char1,'===')
52364 WHERE f_charbig = 'was updated';
52365 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52366 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
52367    FROM t0_template source_tab
52368 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52369         
52370 # check replace success:        1
52371 DELETE FROM t1
52372 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
52373 DELETE FROM t1
52374 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
52375 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
52376 UPDATE t1 SET f_int2 = f_int1,
52377 f_char1 = CAST(f_int1 AS CHAR),
52378 f_char2 = CAST(f_int1 AS CHAR),
52379 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
52380 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
52381 SET AUTOCOMMIT= 0;
52382 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52383 SELECT f_int1, f_int1, '', '', 'was inserted'
52384 FROM t0_template source_tab
52385 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52386         
52387 # check transactions-1 success:         1
52388 COMMIT WORK;
52389         
52390 # check transactions-2 success:         1
52391 ROLLBACK WORK;
52392         
52393 # check transactions-3 success:         1
52394 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52395 COMMIT WORK;
52396 ROLLBACK WORK;
52397         
52398 # check transactions-4 success:         1
52399 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52400 SELECT f_int1, f_int1, '', '', 'was inserted'
52401 FROM t0_template source_tab
52402 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52403         
52404 # check transactions-5 success:         1
52405 ROLLBACK WORK;
52406         
52407 # check transactions-6 success:         1
52408 # INFO: Storage engine used for t1 seems to be transactional.
52409 COMMIT;
52410         
52411 # check transactions-7 success:         1
52412 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52413 COMMIT WORK;
52414 SET @@session.sql_mode = 'traditional';
52415 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
52416 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52417 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
52418 '', '', 'was inserted' FROM t0_template
52419 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52420 ERROR 22012: Division by 0
52421 COMMIT;
52422         
52423 # check transactions-8 success:         1
52424 # INFO: Storage engine used for t1 seems to be able to revert
52425 #       changes made by the failing statement.
52426 SET @@session.sql_mode = '';
52427 SET AUTOCOMMIT= 1;
52428 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52429 COMMIT WORK;
52430 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
52431         
52432 # check special-1 success:      1
52433 UPDATE t1 SET f_charbig = '';
52434         
52435 # check special-2 success:      1
52436 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
52437 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52438 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
52439 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52440 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52441 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52442 'just inserted' FROM t0_template
52443 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52444 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
52445 BEGIN
52446 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52447 f_charbig = 'updated by trigger'
52448       WHERE f_int1 = new.f_int1;
52449 END|
52450 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52451 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
52452 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52453         
52454 # check trigger-1 success:      1
52455 DROP TRIGGER trg_1;
52456 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52457 f_int2 = CAST(f_char1 AS SIGNED INT),
52458 f_charbig = 'just inserted'
52459    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52460 DELETE FROM t0_aux
52461 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52462 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52463 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52464 'just inserted' FROM t0_template
52465 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52466 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
52467 BEGIN
52468 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52469 f_charbig = 'updated by trigger'
52470       WHERE f_int1 = new.f_int1;
52471 END|
52472 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52473 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
52474 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52475         
52476 # check trigger-2 success:      1
52477 DROP TRIGGER trg_1;
52478 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52479 f_int2 = CAST(f_char1 AS SIGNED INT),
52480 f_charbig = 'just inserted'
52481    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52482 DELETE FROM t0_aux
52483 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52484 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52485 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52486 'just inserted' FROM t0_template
52487 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52488 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
52489 BEGIN
52490 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52491 f_charbig = 'updated by trigger'
52492       WHERE f_int1 = new.f_int1;
52493 END|
52494 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52495 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52496         
52497 # check trigger-3 success:      1
52498 DROP TRIGGER trg_1;
52499 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52500 f_int2 = CAST(f_char1 AS SIGNED INT),
52501 f_charbig = 'just inserted'
52502    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52503 DELETE FROM t0_aux
52504 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52505 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52506 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52507 'just inserted' FROM t0_template
52508 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52509 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
52510 BEGIN
52511 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52512 f_charbig = 'updated by trigger'
52513       WHERE f_int1 = - old.f_int1;
52514 END|
52515 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52516 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52517         
52518 # check trigger-4 success:      1
52519 DROP TRIGGER trg_1;
52520 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52521 f_int2 = CAST(f_char1 AS SIGNED INT),
52522 f_charbig = 'just inserted'
52523    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52524 DELETE FROM t0_aux
52525 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52526 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52527 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52528 'just inserted' FROM t0_template
52529 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52530 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
52531 BEGIN
52532 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52533 f_charbig = 'updated by trigger'
52534       WHERE f_int1 = new.f_int1;
52535 END|
52536 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52537 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52538         
52539 # check trigger-5 success:      1
52540 DROP TRIGGER trg_1;
52541 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52542 f_int2 = CAST(f_char1 AS SIGNED INT),
52543 f_charbig = 'just inserted'
52544    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52545 DELETE FROM t0_aux
52546 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52547 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52548 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52549 'just inserted' FROM t0_template
52550 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52551 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
52552 BEGIN
52553 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52554 f_charbig = 'updated by trigger'
52555       WHERE f_int1 = - old.f_int1;
52556 END|
52557 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
52558 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52559         
52560 # check trigger-6 success:      1
52561 DROP TRIGGER trg_1;
52562 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52563 f_int2 = CAST(f_char1 AS SIGNED INT),
52564 f_charbig = 'just inserted'
52565    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52566 DELETE FROM t0_aux
52567 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52568 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52569 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52570 'just inserted' FROM t0_template
52571 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52572 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
52573 BEGIN
52574 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52575 f_charbig = 'updated by trigger'
52576       WHERE f_int1 = - old.f_int1;
52577 END|
52578 DELETE FROM t0_aux
52579 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52580         
52581 # check trigger-7 success:      1
52582 DROP TRIGGER trg_1;
52583 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52584 f_int2 = CAST(f_char1 AS SIGNED INT),
52585 f_charbig = 'just inserted'
52586    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52587 DELETE FROM t0_aux
52588 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52589 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52590 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52591 'just inserted' FROM t0_template
52592 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52593 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
52594 BEGIN
52595 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52596 f_charbig = 'updated by trigger'
52597       WHERE f_int1 = - old.f_int1;
52598 END|
52599 DELETE FROM t0_aux
52600 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
52601         
52602 # check trigger-8 success:      1
52603 DROP TRIGGER trg_1;
52604 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52605 f_int2 = CAST(f_char1 AS SIGNED INT),
52606 f_charbig = 'just inserted'
52607    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52608 DELETE FROM t0_aux
52609 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52610 DELETE FROM t1
52611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52612 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
52613 BEGIN
52614 SET new.f_int1 = old.f_int1 + @max_row,
52615 new.f_int2 = old.f_int2 - @max_row,
52616 new.f_charbig = '####updated per update trigger####';
52617 END|
52618 UPDATE t1
52619 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
52620 f_charbig = '####updated per update statement itself####';
52621         
52622 # check trigger-9 success:      1
52623 DROP TRIGGER trg_2;
52624 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52625 f_int2 = CAST(f_char1 AS SIGNED INT),
52626 f_charbig = CONCAT('===',f_char1,'===');
52627 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
52628 BEGIN
52629 SET new.f_int1 = new.f_int1 + @max_row,
52630 new.f_int2 = new.f_int2 - @max_row,
52631 new.f_charbig = '####updated per update trigger####';
52632 END|
52633 UPDATE t1
52634 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
52635 f_charbig = '####updated per update statement itself####';
52636         
52637 # check trigger-10 success:     1
52638 DROP TRIGGER trg_2;
52639 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52640 f_int2 = CAST(f_char1 AS SIGNED INT),
52641 f_charbig = CONCAT('===',f_char1,'===');
52642 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
52643 BEGIN
52644 SET new.f_int1 = @my_max1 + @counter,
52645 new.f_int2 = @my_min2 - @counter,
52646 new.f_charbig = '####updated per insert trigger####';
52647 SET @counter = @counter + 1;
52648 END|
52649 SET @counter = 1;
52650 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
52651 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52652 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
52653 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
52654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
52655 ORDER BY f_int1;
52656 DROP TRIGGER trg_3;
52657         
52658 # check trigger-11 success:     1
52659 DELETE FROM t1
52660 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
52661 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
52662 AND f_charbig = '####updated per insert trigger####';
52663 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
52664 BEGIN
52665 SET new.f_int1 = @my_max1 + @counter,
52666 new.f_int2 = @my_min2 - @counter,
52667 new.f_charbig = '####updated per insert trigger####';
52668 SET @counter = @counter + 1;
52669 END|
52670 SET @counter = 1;
52671 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
52672 INSERT INTO t1 (f_char1, f_char2, f_charbig)
52673 SELECT CAST(f_int1 AS CHAR),
52674 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
52675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
52676 ORDER BY f_int1;
52677 DROP TRIGGER trg_3;
52678         
52679 # check trigger-12 success:     1
52680 DELETE FROM t1
52681 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
52682 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
52683 AND f_charbig = '####updated per insert trigger####';
52684 ANALYZE  TABLE t1;
52685 Table   Op      Msg_type        Msg_text
52686 test.t1 analyze status  OK
52687 CHECK    TABLE t1 EXTENDED;
52688 Table   Op      Msg_type        Msg_text
52689 test.t1 check   status  OK
52690 CHECKSUM TABLE t1 EXTENDED;
52691 Table   Checksum
52692 test.t1 <some_value>
52693 OPTIMIZE TABLE t1;
52694 Table   Op      Msg_type        Msg_text
52695 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
52696 test.t1 optimize        status  OK
52697 # check layout success:    1
52698 REPAIR   TABLE t1 EXTENDED;
52699 Table   Op      Msg_type        Msg_text
52700 test.t1 repair  note    The storage engine for the table doesn't support repair
52701 # check layout success:    1
52702 TRUNCATE t1;
52703         
52704 # check TRUNCATE success:       1
52705 # check layout success:    1
52706 # End usability test (inc/partition_check.inc)
52707 DROP TABLE t1;
52708 CREATE TABLE t1 (
52709 f_int1 INTEGER,
52710 f_int2 INTEGER,
52711 f_char1 CHAR(20),
52712 f_char2 CHAR(20),
52713 f_charbig VARCHAR(1000)
52714 , UNIQUE INDEX uidx (f_int2,f_int1)
52716 PARTITION BY KEY(f_int1) PARTITIONS 5;
52717 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52718 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
52719 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
52720 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
52721 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52722 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
52723 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
52724 # Start usability test (inc/partition_check.inc)
52725 create_command
52726 SHOW CREATE TABLE t1;
52727 Table   Create Table
52728 t1      CREATE TABLE `t1` (
52729   `f_int1` mediumint(9) DEFAULT NULL,
52730   `f_int2` mediumint(9) DEFAULT NULL,
52731   `f_char1` char(20) DEFAULT NULL,
52732   `f_char2` char(20) DEFAULT NULL,
52733   `f_charbig` varchar(1000) DEFAULT NULL,
52734   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
52735 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
52736 /*!50100 PARTITION BY KEY (f_int1)
52737 PARTITIONS 5 */
52739 # check prerequisites-1 success:    1
52740 # check COUNT(*) success:    1
52741 # check MIN/MAX(f_int1) success:    1
52742 # check MIN/MAX(f_int2) success:    1
52743 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52744 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
52745 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
52746 WHERE f_int1 IN (2,3);
52747 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
52748 # check prerequisites-3 success:    1
52749 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
52750 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52751 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
52752 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
52753 WHERE f_int1 IN (2,3);
52754 DELETE FROM t1 WHERE f_charbig = 'delete me';
52755 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52756 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
52757 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
52758 WHERE f_int1 IN (2,3);
52759 DELETE FROM t1 WHERE f_charbig = 'delete me';
52760 # check read via f_int1 success: 1
52761 # check read via f_int2 success: 1
52762         
52763 # check multiple-1 success:     1
52764 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
52765         
52766 # check multiple-2 success:     1
52767 INSERT INTO t1 SELECT * FROM t0_template
52768 WHERE MOD(f_int1,3) = 0;
52769         
52770 # check multiple-3 success:     1
52771 UPDATE t1 SET f_int1 = f_int1 + @max_row
52772 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
52773 AND @max_row_div2 + @max_row_div4;
52774         
52775 # check multiple-4 success:     1
52776 DELETE FROM t1
52777 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
52778 AND @max_row_div2 + @max_row_div4 + @max_row;
52779         
52780 # check multiple-5 success:     1
52781 SELECT COUNT(*) INTO @try_count FROM t0_template
52782 WHERE MOD(f_int1,3) = 0
52783 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52784 SELECT COUNT(*) INTO @clash_count
52785 FROM t1 INNER JOIN t0_template USING(f_int1)
52786 WHERE MOD(f_int1,3) = 0
52787 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52788 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
52789 INSERT INTO t1
52790 SET f_int1 = @cur_value , f_int2 = @cur_value,
52791 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
52792 f_charbig = '#SINGLE#';
52793         
52794 # check single-1 success:       1
52795 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
52796 INSERT INTO t1
52797 SET f_int1 = @cur_value , f_int2 = @cur_value,
52798 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
52799 f_charbig = '#SINGLE#';
52800         
52801 # check single-2 success:       1
52802 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
52803 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
52804 UPDATE t1 SET f_int1 = @cur_value2
52805 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
52806         
52807 # check single-3 success:       1
52808 SET @cur_value1= -1;
52809 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
52810 UPDATE t1 SET f_int1 = @cur_value1
52811 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
52812         
52813 # check single-4 success:       1
52814 SELECT MAX(f_int1) INTO @cur_value FROM t1;
52815 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
52816         
52817 # check single-5 success:       1
52818 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
52819         
52820 # check single-6 success:       1
52821 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
52822 Warnings:
52823 Warning 1264    Out of range value for column 'f_int1' at row 1
52824 Warning 1264    Out of range value for column 'f_int2' at row 1
52825         
52826 # check single-7 success:       1
52827 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
52828 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
52829 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
52830 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
52831 f_charbig = '#NULL#';
52832 INSERT INTO t1
52833 SET f_int1 = NULL , f_int2 = -@max_row,
52834 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
52835 f_charbig = '#NULL#';
52836 # check null success:    1
52837         
52838 # check null-1 success:         1
52839 UPDATE t1 SET f_int1 = -@max_row
52840 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52841 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52842         
52843 # check null-2 success:         1
52844 UPDATE t1 SET f_int1 = NULL
52845 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52846 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52847         
52848 # check null-3 success:         1
52849 DELETE FROM t1
52850 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
52851 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
52852         
52853 # check null-4 success:         1
52854 DELETE FROM t1
52855 WHERE f_int1 = 0 AND f_int2 = 0
52856 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
52857 AND f_charbig = '#NULL#';
52858 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52859 SELECT f_int1, f_int1, '', '', 'was inserted'
52860    FROM t0_template source_tab
52861 WHERE MOD(f_int1,3) = 0
52862 AND f_int1 BETWEEN @max_row_div2 AND @max_row
52863 ON DUPLICATE KEY
52864 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
52865 f_int2 = 2 * @max_row + source_tab.f_int1,
52866 f_charbig = 'was updated';
52867         
52868 # check unique-1-a success:     1
52869         
52870 # check unique-1-b success:     1
52871 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52872 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52873 f_int2 = CAST(f_char1 AS SIGNED INT),
52874 f_charbig = CONCAT('===',f_char1,'===')
52875 WHERE f_charbig = 'was updated';
52876 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52877 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
52878    FROM t0_template source_tab
52879 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
52880         
52881 # check replace success:        1
52882 DELETE FROM t1
52883 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
52884 DELETE FROM t1
52885 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
52886 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
52887 UPDATE t1 SET f_int2 = f_int1,
52888 f_char1 = CAST(f_int1 AS CHAR),
52889 f_char2 = CAST(f_int1 AS CHAR),
52890 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
52891 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
52892 SET AUTOCOMMIT= 0;
52893 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52894 SELECT f_int1, f_int1, '', '', 'was inserted'
52895 FROM t0_template source_tab
52896 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52897         
52898 # check transactions-1 success:         1
52899 COMMIT WORK;
52900         
52901 # check transactions-2 success:         1
52902 ROLLBACK WORK;
52903         
52904 # check transactions-3 success:         1
52905 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52906 COMMIT WORK;
52907 ROLLBACK WORK;
52908         
52909 # check transactions-4 success:         1
52910 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52911 SELECT f_int1, f_int1, '', '', 'was inserted'
52912 FROM t0_template source_tab
52913 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52914         
52915 # check transactions-5 success:         1
52916 ROLLBACK WORK;
52917         
52918 # check transactions-6 success:         1
52919 # INFO: Storage engine used for t1 seems to be transactional.
52920 COMMIT;
52921         
52922 # check transactions-7 success:         1
52923 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52924 COMMIT WORK;
52925 SET @@session.sql_mode = 'traditional';
52926 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
52927 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
52928 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
52929 '', '', 'was inserted' FROM t0_template
52930 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
52931 ERROR 22012: Division by 0
52932 COMMIT;
52933         
52934 # check transactions-8 success:         1
52935 # INFO: Storage engine used for t1 seems to be able to revert
52936 #       changes made by the failing statement.
52937 SET @@session.sql_mode = '';
52938 SET AUTOCOMMIT= 1;
52939 DELETE FROM t1 WHERE f_charbig = 'was inserted';
52940 COMMIT WORK;
52941 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
52942         
52943 # check special-1 success:      1
52944 UPDATE t1 SET f_charbig = '';
52945         
52946 # check special-2 success:      1
52947 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
52948 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
52949 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
52950 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52951 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52952 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52953 'just inserted' FROM t0_template
52954 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52955 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
52956 BEGIN
52957 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52958 f_charbig = 'updated by trigger'
52959       WHERE f_int1 = new.f_int1;
52960 END|
52961 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52962 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
52963 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52964         
52965 # check trigger-1 success:      1
52966 DROP TRIGGER trg_1;
52967 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52968 f_int2 = CAST(f_char1 AS SIGNED INT),
52969 f_charbig = 'just inserted'
52970    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52971 DELETE FROM t0_aux
52972 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52973 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52974 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52975 'just inserted' FROM t0_template
52976 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52977 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
52978 BEGIN
52979 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
52980 f_charbig = 'updated by trigger'
52981       WHERE f_int1 = new.f_int1;
52982 END|
52983 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52984 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
52985 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52986         
52987 # check trigger-2 success:      1
52988 DROP TRIGGER trg_1;
52989 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
52990 f_int2 = CAST(f_char1 AS SIGNED INT),
52991 f_charbig = 'just inserted'
52992    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
52993 DELETE FROM t0_aux
52994 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52995 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
52996 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
52997 'just inserted' FROM t0_template
52998 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
52999 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
53000 BEGIN
53001 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53002 f_charbig = 'updated by trigger'
53003       WHERE f_int1 = new.f_int1;
53004 END|
53005 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53006 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53007         
53008 # check trigger-3 success:      1
53009 DROP TRIGGER trg_1;
53010 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53011 f_int2 = CAST(f_char1 AS SIGNED INT),
53012 f_charbig = 'just inserted'
53013    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53014 DELETE FROM t0_aux
53015 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53016 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53017 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53018 'just inserted' FROM t0_template
53019 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53020 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
53021 BEGIN
53022 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53023 f_charbig = 'updated by trigger'
53024       WHERE f_int1 = - old.f_int1;
53025 END|
53026 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53027 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53028         
53029 # check trigger-4 success:      1
53030 DROP TRIGGER trg_1;
53031 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53032 f_int2 = CAST(f_char1 AS SIGNED INT),
53033 f_charbig = 'just inserted'
53034    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53035 DELETE FROM t0_aux
53036 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53037 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53038 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53039 'just inserted' FROM t0_template
53040 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53041 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
53042 BEGIN
53043 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53044 f_charbig = 'updated by trigger'
53045       WHERE f_int1 = new.f_int1;
53046 END|
53047 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53048 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53049         
53050 # check trigger-5 success:      1
53051 DROP TRIGGER trg_1;
53052 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53053 f_int2 = CAST(f_char1 AS SIGNED INT),
53054 f_charbig = 'just inserted'
53055    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53056 DELETE FROM t0_aux
53057 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53058 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53059 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53060 'just inserted' FROM t0_template
53061 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53062 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
53063 BEGIN
53064 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53065 f_charbig = 'updated by trigger'
53066       WHERE f_int1 = - old.f_int1;
53067 END|
53068 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53069 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53070         
53071 # check trigger-6 success:      1
53072 DROP TRIGGER trg_1;
53073 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53074 f_int2 = CAST(f_char1 AS SIGNED INT),
53075 f_charbig = 'just inserted'
53076    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53077 DELETE FROM t0_aux
53078 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53079 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53080 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53081 'just inserted' FROM t0_template
53082 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53083 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
53084 BEGIN
53085 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53086 f_charbig = 'updated by trigger'
53087       WHERE f_int1 = - old.f_int1;
53088 END|
53089 DELETE FROM t0_aux
53090 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53091         
53092 # check trigger-7 success:      1
53093 DROP TRIGGER trg_1;
53094 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53095 f_int2 = CAST(f_char1 AS SIGNED INT),
53096 f_charbig = 'just inserted'
53097    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53098 DELETE FROM t0_aux
53099 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53100 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53101 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53102 'just inserted' FROM t0_template
53103 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53104 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
53105 BEGIN
53106 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53107 f_charbig = 'updated by trigger'
53108       WHERE f_int1 = - old.f_int1;
53109 END|
53110 DELETE FROM t0_aux
53111 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53112         
53113 # check trigger-8 success:      1
53114 DROP TRIGGER trg_1;
53115 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53116 f_int2 = CAST(f_char1 AS SIGNED INT),
53117 f_charbig = 'just inserted'
53118    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53119 DELETE FROM t0_aux
53120 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53121 DELETE FROM t1
53122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53123 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
53124 BEGIN
53125 SET new.f_int1 = old.f_int1 + @max_row,
53126 new.f_int2 = old.f_int2 - @max_row,
53127 new.f_charbig = '####updated per update trigger####';
53128 END|
53129 UPDATE t1
53130 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
53131 f_charbig = '####updated per update statement itself####';
53132         
53133 # check trigger-9 success:      1
53134 DROP TRIGGER trg_2;
53135 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53136 f_int2 = CAST(f_char1 AS SIGNED INT),
53137 f_charbig = CONCAT('===',f_char1,'===');
53138 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
53139 BEGIN
53140 SET new.f_int1 = new.f_int1 + @max_row,
53141 new.f_int2 = new.f_int2 - @max_row,
53142 new.f_charbig = '####updated per update trigger####';
53143 END|
53144 UPDATE t1
53145 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
53146 f_charbig = '####updated per update statement itself####';
53147         
53148 # check trigger-10 success:     1
53149 DROP TRIGGER trg_2;
53150 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53151 f_int2 = CAST(f_char1 AS SIGNED INT),
53152 f_charbig = CONCAT('===',f_char1,'===');
53153 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
53154 BEGIN
53155 SET new.f_int1 = @my_max1 + @counter,
53156 new.f_int2 = @my_min2 - @counter,
53157 new.f_charbig = '####updated per insert trigger####';
53158 SET @counter = @counter + 1;
53159 END|
53160 SET @counter = 1;
53161 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
53162 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53163 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
53164 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
53165 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
53166 ORDER BY f_int1;
53167 DROP TRIGGER trg_3;
53168         
53169 # check trigger-11 success:     1
53170 DELETE FROM t1
53171 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
53172 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
53173 AND f_charbig = '####updated per insert trigger####';
53174 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
53175 BEGIN
53176 SET new.f_int1 = @my_max1 + @counter,
53177 new.f_int2 = @my_min2 - @counter,
53178 new.f_charbig = '####updated per insert trigger####';
53179 SET @counter = @counter + 1;
53180 END|
53181 SET @counter = 1;
53182 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
53183 INSERT INTO t1 (f_char1, f_char2, f_charbig)
53184 SELECT CAST(f_int1 AS CHAR),
53185 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
53186 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
53187 ORDER BY f_int1;
53188 DROP TRIGGER trg_3;
53189         
53190 # check trigger-12 success:     1
53191 DELETE FROM t1
53192 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
53193 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
53194 AND f_charbig = '####updated per insert trigger####';
53195 ANALYZE  TABLE t1;
53196 Table   Op      Msg_type        Msg_text
53197 test.t1 analyze status  OK
53198 CHECK    TABLE t1 EXTENDED;
53199 Table   Op      Msg_type        Msg_text
53200 test.t1 check   status  OK
53201 CHECKSUM TABLE t1 EXTENDED;
53202 Table   Checksum
53203 test.t1 <some_value>
53204 OPTIMIZE TABLE t1;
53205 Table   Op      Msg_type        Msg_text
53206 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
53207 test.t1 optimize        status  OK
53208 # check layout success:    1
53209 REPAIR   TABLE t1 EXTENDED;
53210 Table   Op      Msg_type        Msg_text
53211 test.t1 repair  note    The storage engine for the table doesn't support repair
53212 # check layout success:    1
53213 TRUNCATE t1;
53214         
53215 # check TRUNCATE success:       1
53216 # check layout success:    1
53217 # End usability test (inc/partition_check.inc)
53218 DROP TABLE t1;
53219 CREATE TABLE t1 (
53220 f_int1 INTEGER,
53221 f_int2 INTEGER,
53222 f_char1 CHAR(20),
53223 f_char2 CHAR(20),
53224 f_charbig VARCHAR(1000)
53225 , UNIQUE INDEX uidx (f_int2,f_int1)
53227 PARTITION BY LIST(MOD(f_int1,4))
53228 (PARTITION part_3 VALUES IN (-3),
53229 PARTITION part_2 VALUES IN (-2),
53230 PARTITION part_1 VALUES IN (-1),
53231 PARTITION part_N VALUES IN (NULL),
53232 PARTITION part0 VALUES IN (0),
53233 PARTITION part1 VALUES IN (1),
53234 PARTITION part2 VALUES IN (2),
53235 PARTITION part3 VALUES IN (3));
53236 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53237 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
53238 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
53239 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
53240 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53241 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
53242 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
53243 # Start usability test (inc/partition_check.inc)
53244 create_command
53245 SHOW CREATE TABLE t1;
53246 Table   Create Table
53247 t1      CREATE TABLE `t1` (
53248   `f_int1` mediumint(9) DEFAULT NULL,
53249   `f_int2` mediumint(9) DEFAULT NULL,
53250   `f_char1` char(20) DEFAULT NULL,
53251   `f_char2` char(20) DEFAULT NULL,
53252   `f_charbig` varchar(1000) DEFAULT NULL,
53253   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
53254 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
53255 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
53256 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
53257  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
53258  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
53259  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
53260  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
53261  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
53262  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
53263  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
53265 # check prerequisites-1 success:    1
53266 # check COUNT(*) success:    1
53267 # check MIN/MAX(f_int1) success:    1
53268 # check MIN/MAX(f_int2) success:    1
53269 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53270 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
53271 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
53272 WHERE f_int1 IN (2,3);
53273 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
53274 # check prerequisites-3 success:    1
53275 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
53276 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53277 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
53278 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
53279 WHERE f_int1 IN (2,3);
53280 DELETE FROM t1 WHERE f_charbig = 'delete me';
53281 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53282 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
53283 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
53284 WHERE f_int1 IN (2,3);
53285 DELETE FROM t1 WHERE f_charbig = 'delete me';
53286 # check read via f_int1 success: 1
53287 # check read via f_int2 success: 1
53288         
53289 # check multiple-1 success:     1
53290 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
53291         
53292 # check multiple-2 success:     1
53293 INSERT INTO t1 SELECT * FROM t0_template
53294 WHERE MOD(f_int1,3) = 0;
53295         
53296 # check multiple-3 success:     1
53297 UPDATE t1 SET f_int1 = f_int1 + @max_row
53298 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
53299 AND @max_row_div2 + @max_row_div4;
53300         
53301 # check multiple-4 success:     1
53302 DELETE FROM t1
53303 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
53304 AND @max_row_div2 + @max_row_div4 + @max_row;
53305         
53306 # check multiple-5 success:     1
53307 SELECT COUNT(*) INTO @try_count FROM t0_template
53308 WHERE MOD(f_int1,3) = 0
53309 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53310 SELECT COUNT(*) INTO @clash_count
53311 FROM t1 INNER JOIN t0_template USING(f_int1)
53312 WHERE MOD(f_int1,3) = 0
53313 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53314 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
53315 INSERT INTO t1
53316 SET f_int1 = @cur_value , f_int2 = @cur_value,
53317 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
53318 f_charbig = '#SINGLE#';
53319         
53320 # check single-1 success:       1
53321 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
53322 INSERT INTO t1
53323 SET f_int1 = @cur_value , f_int2 = @cur_value,
53324 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
53325 f_charbig = '#SINGLE#';
53326         
53327 # check single-2 success:       1
53328 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
53329 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
53330 UPDATE t1 SET f_int1 = @cur_value2
53331 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
53332         
53333 # check single-3 success:       1
53334 SET @cur_value1= -1;
53335 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
53336 UPDATE t1 SET f_int1 = @cur_value1
53337 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
53338         
53339 # check single-4 success:       1
53340 SELECT MAX(f_int1) INTO @cur_value FROM t1;
53341 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
53342         
53343 # check single-5 success:       1
53344 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
53345         
53346 # check single-6 success:       1
53347 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
53348 Warnings:
53349 Warning 1264    Out of range value for column 'f_int1' at row 1
53350 Warning 1264    Out of range value for column 'f_int2' at row 1
53351         
53352 # check single-7 success:       1
53353 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
53354 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
53355 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
53356 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
53357 f_charbig = '#NULL#';
53358 INSERT INTO t1
53359 SET f_int1 = NULL , f_int2 = -@max_row,
53360 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
53361 f_charbig = '#NULL#';
53362 # check null success:    1
53363         
53364 # check null-1 success:         1
53365 UPDATE t1 SET f_int1 = -@max_row
53366 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53367 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53368         
53369 # check null-2 success:         1
53370 UPDATE t1 SET f_int1 = NULL
53371 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53372 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53373         
53374 # check null-3 success:         1
53375 DELETE FROM t1
53376 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53377 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53378         
53379 # check null-4 success:         1
53380 DELETE FROM t1
53381 WHERE f_int1 = 0 AND f_int2 = 0
53382 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
53383 AND f_charbig = '#NULL#';
53384 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53385 SELECT f_int1, f_int1, '', '', 'was inserted'
53386    FROM t0_template source_tab
53387 WHERE MOD(f_int1,3) = 0
53388 AND f_int1 BETWEEN @max_row_div2 AND @max_row
53389 ON DUPLICATE KEY
53390 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
53391 f_int2 = 2 * @max_row + source_tab.f_int1,
53392 f_charbig = 'was updated';
53393         
53394 # check unique-1-a success:     1
53395         
53396 # check unique-1-b success:     1
53397 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53398 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53399 f_int2 = CAST(f_char1 AS SIGNED INT),
53400 f_charbig = CONCAT('===',f_char1,'===')
53401 WHERE f_charbig = 'was updated';
53402 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53403 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
53404    FROM t0_template source_tab
53405 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53406         
53407 # check replace success:        1
53408 DELETE FROM t1
53409 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
53410 DELETE FROM t1
53411 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
53412 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
53413 UPDATE t1 SET f_int2 = f_int1,
53414 f_char1 = CAST(f_int1 AS CHAR),
53415 f_char2 = CAST(f_int1 AS CHAR),
53416 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
53417 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
53418 SET AUTOCOMMIT= 0;
53419 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53420 SELECT f_int1, f_int1, '', '', 'was inserted'
53421 FROM t0_template source_tab
53422 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53423         
53424 # check transactions-1 success:         1
53425 COMMIT WORK;
53426         
53427 # check transactions-2 success:         1
53428 ROLLBACK WORK;
53429         
53430 # check transactions-3 success:         1
53431 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53432 COMMIT WORK;
53433 ROLLBACK WORK;
53434         
53435 # check transactions-4 success:         1
53436 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53437 SELECT f_int1, f_int1, '', '', 'was inserted'
53438 FROM t0_template source_tab
53439 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53440         
53441 # check transactions-5 success:         1
53442 ROLLBACK WORK;
53443         
53444 # check transactions-6 success:         1
53445 # INFO: Storage engine used for t1 seems to be transactional.
53446 COMMIT;
53447         
53448 # check transactions-7 success:         1
53449 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53450 COMMIT WORK;
53451 SET @@session.sql_mode = 'traditional';
53452 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
53453 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53454 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
53455 '', '', 'was inserted' FROM t0_template
53456 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53457 ERROR 22012: Division by 0
53458 COMMIT;
53459         
53460 # check transactions-8 success:         1
53461 # INFO: Storage engine used for t1 seems to be able to revert
53462 #       changes made by the failing statement.
53463 SET @@session.sql_mode = '';
53464 SET AUTOCOMMIT= 1;
53465 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53466 COMMIT WORK;
53467 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
53468         
53469 # check special-1 success:      1
53470 UPDATE t1 SET f_charbig = '';
53471         
53472 # check special-2 success:      1
53473 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
53474 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53475 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
53476 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53477 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53478 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53479 'just inserted' FROM t0_template
53480 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53481 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
53482 BEGIN
53483 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53484 f_charbig = 'updated by trigger'
53485       WHERE f_int1 = new.f_int1;
53486 END|
53487 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53488 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
53489 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53490         
53491 # check trigger-1 success:      1
53492 DROP TRIGGER trg_1;
53493 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53494 f_int2 = CAST(f_char1 AS SIGNED INT),
53495 f_charbig = 'just inserted'
53496    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53497 DELETE FROM t0_aux
53498 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53499 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53500 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53501 'just inserted' FROM t0_template
53502 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53503 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
53504 BEGIN
53505 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53506 f_charbig = 'updated by trigger'
53507       WHERE f_int1 = new.f_int1;
53508 END|
53509 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53510 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
53511 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53512         
53513 # check trigger-2 success:      1
53514 DROP TRIGGER trg_1;
53515 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53516 f_int2 = CAST(f_char1 AS SIGNED INT),
53517 f_charbig = 'just inserted'
53518    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53519 DELETE FROM t0_aux
53520 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53521 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53522 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53523 'just inserted' FROM t0_template
53524 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53525 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
53526 BEGIN
53527 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53528 f_charbig = 'updated by trigger'
53529       WHERE f_int1 = new.f_int1;
53530 END|
53531 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53532 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53533         
53534 # check trigger-3 success:      1
53535 DROP TRIGGER trg_1;
53536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53537 f_int2 = CAST(f_char1 AS SIGNED INT),
53538 f_charbig = 'just inserted'
53539    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53540 DELETE FROM t0_aux
53541 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53542 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53543 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53544 'just inserted' FROM t0_template
53545 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53546 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
53547 BEGIN
53548 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53549 f_charbig = 'updated by trigger'
53550       WHERE f_int1 = - old.f_int1;
53551 END|
53552 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53553 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53554         
53555 # check trigger-4 success:      1
53556 DROP TRIGGER trg_1;
53557 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53558 f_int2 = CAST(f_char1 AS SIGNED INT),
53559 f_charbig = 'just inserted'
53560    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53561 DELETE FROM t0_aux
53562 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53563 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53564 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53565 'just inserted' FROM t0_template
53566 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53567 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
53568 BEGIN
53569 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53570 f_charbig = 'updated by trigger'
53571       WHERE f_int1 = new.f_int1;
53572 END|
53573 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53574 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53575         
53576 # check trigger-5 success:      1
53577 DROP TRIGGER trg_1;
53578 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53579 f_int2 = CAST(f_char1 AS SIGNED INT),
53580 f_charbig = 'just inserted'
53581    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53582 DELETE FROM t0_aux
53583 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53584 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53585 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53586 'just inserted' FROM t0_template
53587 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53588 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
53589 BEGIN
53590 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53591 f_charbig = 'updated by trigger'
53592       WHERE f_int1 = - old.f_int1;
53593 END|
53594 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
53595 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53596         
53597 # check trigger-6 success:      1
53598 DROP TRIGGER trg_1;
53599 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53600 f_int2 = CAST(f_char1 AS SIGNED INT),
53601 f_charbig = 'just inserted'
53602    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53603 DELETE FROM t0_aux
53604 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53605 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53606 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53607 'just inserted' FROM t0_template
53608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53609 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
53610 BEGIN
53611 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53612 f_charbig = 'updated by trigger'
53613       WHERE f_int1 = - old.f_int1;
53614 END|
53615 DELETE FROM t0_aux
53616 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53617         
53618 # check trigger-7 success:      1
53619 DROP TRIGGER trg_1;
53620 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53621 f_int2 = CAST(f_char1 AS SIGNED INT),
53622 f_charbig = 'just inserted'
53623    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53624 DELETE FROM t0_aux
53625 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53626 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
53627 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
53628 'just inserted' FROM t0_template
53629 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53630 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
53631 BEGIN
53632 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
53633 f_charbig = 'updated by trigger'
53634       WHERE f_int1 = - old.f_int1;
53635 END|
53636 DELETE FROM t0_aux
53637 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
53638         
53639 # check trigger-8 success:      1
53640 DROP TRIGGER trg_1;
53641 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53642 f_int2 = CAST(f_char1 AS SIGNED INT),
53643 f_charbig = 'just inserted'
53644    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
53645 DELETE FROM t0_aux
53646 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53647 DELETE FROM t1
53648 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53649 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
53650 BEGIN
53651 SET new.f_int1 = old.f_int1 + @max_row,
53652 new.f_int2 = old.f_int2 - @max_row,
53653 new.f_charbig = '####updated per update trigger####';
53654 END|
53655 UPDATE t1
53656 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
53657 f_charbig = '####updated per update statement itself####';
53658         
53659 # check trigger-9 success:      1
53660 DROP TRIGGER trg_2;
53661 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53662 f_int2 = CAST(f_char1 AS SIGNED INT),
53663 f_charbig = CONCAT('===',f_char1,'===');
53664 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
53665 BEGIN
53666 SET new.f_int1 = new.f_int1 + @max_row,
53667 new.f_int2 = new.f_int2 - @max_row,
53668 new.f_charbig = '####updated per update trigger####';
53669 END|
53670 UPDATE t1
53671 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
53672 f_charbig = '####updated per update statement itself####';
53673         
53674 # check trigger-10 success:     1
53675 DROP TRIGGER trg_2;
53676 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53677 f_int2 = CAST(f_char1 AS SIGNED INT),
53678 f_charbig = CONCAT('===',f_char1,'===');
53679 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
53680 BEGIN
53681 SET new.f_int1 = @my_max1 + @counter,
53682 new.f_int2 = @my_min2 - @counter,
53683 new.f_charbig = '####updated per insert trigger####';
53684 SET @counter = @counter + 1;
53685 END|
53686 SET @counter = 1;
53687 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
53688 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53689 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
53690 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
53691 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
53692 ORDER BY f_int1;
53693 DROP TRIGGER trg_3;
53694         
53695 # check trigger-11 success:     1
53696 DELETE FROM t1
53697 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
53698 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
53699 AND f_charbig = '####updated per insert trigger####';
53700 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
53701 BEGIN
53702 SET new.f_int1 = @my_max1 + @counter,
53703 new.f_int2 = @my_min2 - @counter,
53704 new.f_charbig = '####updated per insert trigger####';
53705 SET @counter = @counter + 1;
53706 END|
53707 SET @counter = 1;
53708 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
53709 INSERT INTO t1 (f_char1, f_char2, f_charbig)
53710 SELECT CAST(f_int1 AS CHAR),
53711 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
53712 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
53713 ORDER BY f_int1;
53714 DROP TRIGGER trg_3;
53715         
53716 # check trigger-12 success:     1
53717 DELETE FROM t1
53718 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
53719 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
53720 AND f_charbig = '####updated per insert trigger####';
53721 ANALYZE  TABLE t1;
53722 Table   Op      Msg_type        Msg_text
53723 test.t1 analyze status  OK
53724 CHECK    TABLE t1 EXTENDED;
53725 Table   Op      Msg_type        Msg_text
53726 test.t1 check   status  OK
53727 CHECKSUM TABLE t1 EXTENDED;
53728 Table   Checksum
53729 test.t1 <some_value>
53730 OPTIMIZE TABLE t1;
53731 Table   Op      Msg_type        Msg_text
53732 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
53733 test.t1 optimize        status  OK
53734 # check layout success:    1
53735 REPAIR   TABLE t1 EXTENDED;
53736 Table   Op      Msg_type        Msg_text
53737 test.t1 repair  note    The storage engine for the table doesn't support repair
53738 # check layout success:    1
53739 TRUNCATE t1;
53740         
53741 # check TRUNCATE success:       1
53742 # check layout success:    1
53743 # End usability test (inc/partition_check.inc)
53744 DROP TABLE t1;
53745 CREATE TABLE t1 (
53746 f_int1 INTEGER,
53747 f_int2 INTEGER,
53748 f_char1 CHAR(20),
53749 f_char2 CHAR(20),
53750 f_charbig VARCHAR(1000)
53751 , UNIQUE INDEX uidx (f_int2,f_int1)
53753 PARTITION BY RANGE(f_int1)
53754 (PARTITION parta VALUES LESS THAN (0),
53755 PARTITION partb VALUES LESS THAN (5),
53756 PARTITION partc VALUES LESS THAN (10),
53757 PARTITION partd VALUES LESS THAN (10 + 5),
53758 PARTITION parte VALUES LESS THAN (20),
53759 PARTITION partf VALUES LESS THAN (2147483646));
53760 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53761 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
53762 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
53763 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
53764 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53765 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
53766 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
53767 # Start usability test (inc/partition_check.inc)
53768 create_command
53769 SHOW CREATE TABLE t1;
53770 Table   Create Table
53771 t1      CREATE TABLE `t1` (
53772   `f_int1` mediumint(9) DEFAULT NULL,
53773   `f_int2` mediumint(9) DEFAULT NULL,
53774   `f_char1` char(20) DEFAULT NULL,
53775   `f_char2` char(20) DEFAULT NULL,
53776   `f_charbig` varchar(1000) DEFAULT NULL,
53777   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
53778 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
53779 /*!50100 PARTITION BY RANGE (f_int1)
53780 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
53781  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
53782  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
53783  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
53784  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
53785  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
53787 # check prerequisites-1 success:    1
53788 # check COUNT(*) success:    1
53789 # check MIN/MAX(f_int1) success:    1
53790 # check MIN/MAX(f_int2) success:    1
53791 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53792 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
53793 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
53794 WHERE f_int1 IN (2,3);
53795 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
53796 # check prerequisites-3 success:    1
53797 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
53798 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53799 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
53800 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
53801 WHERE f_int1 IN (2,3);
53802 DELETE FROM t1 WHERE f_charbig = 'delete me';
53803 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53804 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
53805 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
53806 WHERE f_int1 IN (2,3);
53807 DELETE FROM t1 WHERE f_charbig = 'delete me';
53808 # check read via f_int1 success: 1
53809 # check read via f_int2 success: 1
53810         
53811 # check multiple-1 success:     1
53812 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
53813         
53814 # check multiple-2 success:     1
53815 INSERT INTO t1 SELECT * FROM t0_template
53816 WHERE MOD(f_int1,3) = 0;
53817         
53818 # check multiple-3 success:     1
53819 UPDATE t1 SET f_int1 = f_int1 + @max_row
53820 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
53821 AND @max_row_div2 + @max_row_div4;
53822         
53823 # check multiple-4 success:     1
53824 DELETE FROM t1
53825 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
53826 AND @max_row_div2 + @max_row_div4 + @max_row;
53827         
53828 # check multiple-5 success:     1
53829 SELECT COUNT(*) INTO @try_count FROM t0_template
53830 WHERE MOD(f_int1,3) = 0
53831 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53832 SELECT COUNT(*) INTO @clash_count
53833 FROM t1 INNER JOIN t0_template USING(f_int1)
53834 WHERE MOD(f_int1,3) = 0
53835 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53836 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
53837 INSERT INTO t1
53838 SET f_int1 = @cur_value , f_int2 = @cur_value,
53839 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
53840 f_charbig = '#SINGLE#';
53841         
53842 # check single-1 success:       1
53843 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
53844 INSERT INTO t1
53845 SET f_int1 = @cur_value , f_int2 = @cur_value,
53846 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
53847 f_charbig = '#SINGLE#';
53848         
53849 # check single-2 success:       1
53850 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
53851 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
53852 UPDATE t1 SET f_int1 = @cur_value2
53853 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
53854         
53855 # check single-3 success:       1
53856 SET @cur_value1= -1;
53857 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
53858 UPDATE t1 SET f_int1 = @cur_value1
53859 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
53860         
53861 # check single-4 success:       1
53862 SELECT MAX(f_int1) INTO @cur_value FROM t1;
53863 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
53864         
53865 # check single-5 success:       1
53866 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
53867         
53868 # check single-6 success:       1
53869 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
53870 Warnings:
53871 Warning 1264    Out of range value for column 'f_int1' at row 1
53872 Warning 1264    Out of range value for column 'f_int2' at row 1
53873         
53874 # check single-7 success:       1
53875 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
53876 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
53877 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
53878 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
53879 f_charbig = '#NULL#';
53880 INSERT INTO t1
53881 SET f_int1 = NULL , f_int2 = -@max_row,
53882 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
53883 f_charbig = '#NULL#';
53884 # check null success:    1
53885         
53886 # check null-1 success:         1
53887 UPDATE t1 SET f_int1 = -@max_row
53888 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53889 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53890         
53891 # check null-2 success:         1
53892 UPDATE t1 SET f_int1 = NULL
53893 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53894 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53895         
53896 # check null-3 success:         1
53897 DELETE FROM t1
53898 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
53899 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
53900         
53901 # check null-4 success:         1
53902 DELETE FROM t1
53903 WHERE f_int1 = 0 AND f_int2 = 0
53904 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
53905 AND f_charbig = '#NULL#';
53906 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53907 SELECT f_int1, f_int1, '', '', 'was inserted'
53908    FROM t0_template source_tab
53909 WHERE MOD(f_int1,3) = 0
53910 AND f_int1 BETWEEN @max_row_div2 AND @max_row
53911 ON DUPLICATE KEY
53912 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
53913 f_int2 = 2 * @max_row + source_tab.f_int1,
53914 f_charbig = 'was updated';
53915         
53916 # check unique-1-a success:     1
53917         
53918 # check unique-1-b success:     1
53919 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53920 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
53921 f_int2 = CAST(f_char1 AS SIGNED INT),
53922 f_charbig = CONCAT('===',f_char1,'===')
53923 WHERE f_charbig = 'was updated';
53924 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53925 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
53926    FROM t0_template source_tab
53927 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
53928         
53929 # check replace success:        1
53930 DELETE FROM t1
53931 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
53932 DELETE FROM t1
53933 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
53934 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
53935 UPDATE t1 SET f_int2 = f_int1,
53936 f_char1 = CAST(f_int1 AS CHAR),
53937 f_char2 = CAST(f_int1 AS CHAR),
53938 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
53939 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
53940 SET AUTOCOMMIT= 0;
53941 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53942 SELECT f_int1, f_int1, '', '', 'was inserted'
53943 FROM t0_template source_tab
53944 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53945         
53946 # check transactions-1 success:         1
53947 COMMIT WORK;
53948         
53949 # check transactions-2 success:         1
53950 ROLLBACK WORK;
53951         
53952 # check transactions-3 success:         1
53953 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53954 COMMIT WORK;
53955 ROLLBACK WORK;
53956         
53957 # check transactions-4 success:         1
53958 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53959 SELECT f_int1, f_int1, '', '', 'was inserted'
53960 FROM t0_template source_tab
53961 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53962         
53963 # check transactions-5 success:         1
53964 ROLLBACK WORK;
53965         
53966 # check transactions-6 success:         1
53967 # INFO: Storage engine used for t1 seems to be transactional.
53968 COMMIT;
53969         
53970 # check transactions-7 success:         1
53971 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53972 COMMIT WORK;
53973 SET @@session.sql_mode = 'traditional';
53974 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
53975 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
53976 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
53977 '', '', 'was inserted' FROM t0_template
53978 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
53979 ERROR 22012: Division by 0
53980 COMMIT;
53981         
53982 # check transactions-8 success:         1
53983 # INFO: Storage engine used for t1 seems to be able to revert
53984 #       changes made by the failing statement.
53985 SET @@session.sql_mode = '';
53986 SET AUTOCOMMIT= 1;
53987 DELETE FROM t1 WHERE f_charbig = 'was inserted';
53988 COMMIT WORK;
53989 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
53990         
53991 # check special-1 success:      1
53992 UPDATE t1 SET f_charbig = '';
53993         
53994 # check special-2 success:      1
53995 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
53996 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
53997 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
53998 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
53999 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54000 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54001 'just inserted' FROM t0_template
54002 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54003 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
54004 BEGIN
54005 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54006 f_charbig = 'updated by trigger'
54007       WHERE f_int1 = new.f_int1;
54008 END|
54009 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54010 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
54011 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54012         
54013 # check trigger-1 success:      1
54014 DROP TRIGGER trg_1;
54015 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54016 f_int2 = CAST(f_char1 AS SIGNED INT),
54017 f_charbig = 'just inserted'
54018    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54019 DELETE FROM t0_aux
54020 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54021 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54022 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54023 'just inserted' FROM t0_template
54024 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54025 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
54026 BEGIN
54027 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54028 f_charbig = 'updated by trigger'
54029       WHERE f_int1 = new.f_int1;
54030 END|
54031 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54032 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
54033 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54034         
54035 # check trigger-2 success:      1
54036 DROP TRIGGER trg_1;
54037 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54038 f_int2 = CAST(f_char1 AS SIGNED INT),
54039 f_charbig = 'just inserted'
54040    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54041 DELETE FROM t0_aux
54042 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54043 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54044 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54045 'just inserted' FROM t0_template
54046 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54047 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
54048 BEGIN
54049 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54050 f_charbig = 'updated by trigger'
54051       WHERE f_int1 = new.f_int1;
54052 END|
54053 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54054 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54055         
54056 # check trigger-3 success:      1
54057 DROP TRIGGER trg_1;
54058 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54059 f_int2 = CAST(f_char1 AS SIGNED INT),
54060 f_charbig = 'just inserted'
54061    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54062 DELETE FROM t0_aux
54063 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54064 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54065 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54066 'just inserted' FROM t0_template
54067 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54068 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
54069 BEGIN
54070 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54071 f_charbig = 'updated by trigger'
54072       WHERE f_int1 = - old.f_int1;
54073 END|
54074 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54075 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54076         
54077 # check trigger-4 success:      1
54078 DROP TRIGGER trg_1;
54079 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54080 f_int2 = CAST(f_char1 AS SIGNED INT),
54081 f_charbig = 'just inserted'
54082    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54083 DELETE FROM t0_aux
54084 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54085 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54086 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54087 'just inserted' FROM t0_template
54088 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54089 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
54090 BEGIN
54091 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54092 f_charbig = 'updated by trigger'
54093       WHERE f_int1 = new.f_int1;
54094 END|
54095 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54096 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54097         
54098 # check trigger-5 success:      1
54099 DROP TRIGGER trg_1;
54100 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54101 f_int2 = CAST(f_char1 AS SIGNED INT),
54102 f_charbig = 'just inserted'
54103    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54104 DELETE FROM t0_aux
54105 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54106 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54107 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54108 'just inserted' FROM t0_template
54109 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54110 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
54111 BEGIN
54112 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54113 f_charbig = 'updated by trigger'
54114       WHERE f_int1 = - old.f_int1;
54115 END|
54116 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54117 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54118         
54119 # check trigger-6 success:      1
54120 DROP TRIGGER trg_1;
54121 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54122 f_int2 = CAST(f_char1 AS SIGNED INT),
54123 f_charbig = 'just inserted'
54124    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54125 DELETE FROM t0_aux
54126 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54127 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54128 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54129 'just inserted' FROM t0_template
54130 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54131 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
54132 BEGIN
54133 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54134 f_charbig = 'updated by trigger'
54135       WHERE f_int1 = - old.f_int1;
54136 END|
54137 DELETE FROM t0_aux
54138 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54139         
54140 # check trigger-7 success:      1
54141 DROP TRIGGER trg_1;
54142 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54143 f_int2 = CAST(f_char1 AS SIGNED INT),
54144 f_charbig = 'just inserted'
54145    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54146 DELETE FROM t0_aux
54147 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54148 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54149 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54150 'just inserted' FROM t0_template
54151 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54152 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
54153 BEGIN
54154 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54155 f_charbig = 'updated by trigger'
54156       WHERE f_int1 = - old.f_int1;
54157 END|
54158 DELETE FROM t0_aux
54159 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54160         
54161 # check trigger-8 success:      1
54162 DROP TRIGGER trg_1;
54163 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54164 f_int2 = CAST(f_char1 AS SIGNED INT),
54165 f_charbig = 'just inserted'
54166    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54167 DELETE FROM t0_aux
54168 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54169 DELETE FROM t1
54170 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54171 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
54172 BEGIN
54173 SET new.f_int1 = old.f_int1 + @max_row,
54174 new.f_int2 = old.f_int2 - @max_row,
54175 new.f_charbig = '####updated per update trigger####';
54176 END|
54177 UPDATE t1
54178 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
54179 f_charbig = '####updated per update statement itself####';
54180         
54181 # check trigger-9 success:      1
54182 DROP TRIGGER trg_2;
54183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54184 f_int2 = CAST(f_char1 AS SIGNED INT),
54185 f_charbig = CONCAT('===',f_char1,'===');
54186 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
54187 BEGIN
54188 SET new.f_int1 = new.f_int1 + @max_row,
54189 new.f_int2 = new.f_int2 - @max_row,
54190 new.f_charbig = '####updated per update trigger####';
54191 END|
54192 UPDATE t1
54193 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
54194 f_charbig = '####updated per update statement itself####';
54195         
54196 # check trigger-10 success:     1
54197 DROP TRIGGER trg_2;
54198 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54199 f_int2 = CAST(f_char1 AS SIGNED INT),
54200 f_charbig = CONCAT('===',f_char1,'===');
54201 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
54202 BEGIN
54203 SET new.f_int1 = @my_max1 + @counter,
54204 new.f_int2 = @my_min2 - @counter,
54205 new.f_charbig = '####updated per insert trigger####';
54206 SET @counter = @counter + 1;
54207 END|
54208 SET @counter = 1;
54209 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
54210 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54211 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
54212 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
54213 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
54214 ORDER BY f_int1;
54215 DROP TRIGGER trg_3;
54216         
54217 # check trigger-11 success:     1
54218 DELETE FROM t1
54219 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
54220 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
54221 AND f_charbig = '####updated per insert trigger####';
54222 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
54223 BEGIN
54224 SET new.f_int1 = @my_max1 + @counter,
54225 new.f_int2 = @my_min2 - @counter,
54226 new.f_charbig = '####updated per insert trigger####';
54227 SET @counter = @counter + 1;
54228 END|
54229 SET @counter = 1;
54230 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
54231 INSERT INTO t1 (f_char1, f_char2, f_charbig)
54232 SELECT CAST(f_int1 AS CHAR),
54233 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
54234 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
54235 ORDER BY f_int1;
54236 DROP TRIGGER trg_3;
54237         
54238 # check trigger-12 success:     1
54239 DELETE FROM t1
54240 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
54241 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
54242 AND f_charbig = '####updated per insert trigger####';
54243 ANALYZE  TABLE t1;
54244 Table   Op      Msg_type        Msg_text
54245 test.t1 analyze status  OK
54246 CHECK    TABLE t1 EXTENDED;
54247 Table   Op      Msg_type        Msg_text
54248 test.t1 check   status  OK
54249 CHECKSUM TABLE t1 EXTENDED;
54250 Table   Checksum
54251 test.t1 <some_value>
54252 OPTIMIZE TABLE t1;
54253 Table   Op      Msg_type        Msg_text
54254 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
54255 test.t1 optimize        status  OK
54256 # check layout success:    1
54257 REPAIR   TABLE t1 EXTENDED;
54258 Table   Op      Msg_type        Msg_text
54259 test.t1 repair  note    The storage engine for the table doesn't support repair
54260 # check layout success:    1
54261 TRUNCATE t1;
54262         
54263 # check TRUNCATE success:       1
54264 # check layout success:    1
54265 # End usability test (inc/partition_check.inc)
54266 DROP TABLE t1;
54267 CREATE TABLE t1 (
54268 f_int1 INTEGER,
54269 f_int2 INTEGER,
54270 f_char1 CHAR(20),
54271 f_char2 CHAR(20),
54272 f_charbig VARCHAR(1000)
54273 , UNIQUE INDEX uidx (f_int2,f_int1)
54275 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
54276 (PARTITION parta VALUES LESS THAN (0),
54277 PARTITION partb VALUES LESS THAN (5),
54278 PARTITION partc VALUES LESS THAN (10),
54279 PARTITION partd VALUES LESS THAN (2147483646));
54280 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
54281 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
54282 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
54283 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
54284 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
54285 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
54286 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
54287 # Start usability test (inc/partition_check.inc)
54288 create_command
54289 SHOW CREATE TABLE t1;
54290 Table   Create Table
54291 t1      CREATE TABLE `t1` (
54292   `f_int1` mediumint(9) DEFAULT NULL,
54293   `f_int2` mediumint(9) DEFAULT NULL,
54294   `f_char1` char(20) DEFAULT NULL,
54295   `f_char2` char(20) DEFAULT NULL,
54296   `f_charbig` varchar(1000) DEFAULT NULL,
54297   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
54298 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
54299 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
54300 SUBPARTITION BY HASH (f_int1)
54301 SUBPARTITIONS 2
54302 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
54303  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
54304  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
54305  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
54307 # check prerequisites-1 success:    1
54308 # check COUNT(*) success:    1
54309 # check MIN/MAX(f_int1) success:    1
54310 # check MIN/MAX(f_int2) success:    1
54311 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54312 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
54313 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
54314 WHERE f_int1 IN (2,3);
54315 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
54316 # check prerequisites-3 success:    1
54317 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
54318 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54319 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
54320 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
54321 WHERE f_int1 IN (2,3);
54322 DELETE FROM t1 WHERE f_charbig = 'delete me';
54323 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54324 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
54325 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
54326 WHERE f_int1 IN (2,3);
54327 DELETE FROM t1 WHERE f_charbig = 'delete me';
54328 # check read via f_int1 success: 1
54329 # check read via f_int2 success: 1
54330         
54331 # check multiple-1 success:     1
54332 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
54333         
54334 # check multiple-2 success:     1
54335 INSERT INTO t1 SELECT * FROM t0_template
54336 WHERE MOD(f_int1,3) = 0;
54337         
54338 # check multiple-3 success:     1
54339 UPDATE t1 SET f_int1 = f_int1 + @max_row
54340 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
54341 AND @max_row_div2 + @max_row_div4;
54342         
54343 # check multiple-4 success:     1
54344 DELETE FROM t1
54345 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
54346 AND @max_row_div2 + @max_row_div4 + @max_row;
54347         
54348 # check multiple-5 success:     1
54349 SELECT COUNT(*) INTO @try_count FROM t0_template
54350 WHERE MOD(f_int1,3) = 0
54351 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54352 SELECT COUNT(*) INTO @clash_count
54353 FROM t1 INNER JOIN t0_template USING(f_int1)
54354 WHERE MOD(f_int1,3) = 0
54355 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54356 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
54357 INSERT INTO t1
54358 SET f_int1 = @cur_value , f_int2 = @cur_value,
54359 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
54360 f_charbig = '#SINGLE#';
54361         
54362 # check single-1 success:       1
54363 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
54364 INSERT INTO t1
54365 SET f_int1 = @cur_value , f_int2 = @cur_value,
54366 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
54367 f_charbig = '#SINGLE#';
54368         
54369 # check single-2 success:       1
54370 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
54371 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
54372 UPDATE t1 SET f_int1 = @cur_value2
54373 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
54374         
54375 # check single-3 success:       1
54376 SET @cur_value1= -1;
54377 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
54378 UPDATE t1 SET f_int1 = @cur_value1
54379 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
54380         
54381 # check single-4 success:       1
54382 SELECT MAX(f_int1) INTO @cur_value FROM t1;
54383 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
54384         
54385 # check single-5 success:       1
54386 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
54387         
54388 # check single-6 success:       1
54389 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
54390 Warnings:
54391 Warning 1264    Out of range value for column 'f_int1' at row 1
54392 Warning 1264    Out of range value for column 'f_int2' at row 1
54393         
54394 # check single-7 success:       1
54395 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
54396 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
54397 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
54398 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
54399 f_charbig = '#NULL#';
54400 INSERT INTO t1
54401 SET f_int1 = NULL , f_int2 = -@max_row,
54402 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
54403 f_charbig = '#NULL#';
54404 # check null success:    1
54405         
54406 # check null-1 success:         1
54407 UPDATE t1 SET f_int1 = -@max_row
54408 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54409 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54410         
54411 # check null-2 success:         1
54412 UPDATE t1 SET f_int1 = NULL
54413 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54414 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54415         
54416 # check null-3 success:         1
54417 DELETE FROM t1
54418 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54419 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54420         
54421 # check null-4 success:         1
54422 DELETE FROM t1
54423 WHERE f_int1 = 0 AND f_int2 = 0
54424 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
54425 AND f_charbig = '#NULL#';
54426 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54427 SELECT f_int1, f_int1, '', '', 'was inserted'
54428    FROM t0_template source_tab
54429 WHERE MOD(f_int1,3) = 0
54430 AND f_int1 BETWEEN @max_row_div2 AND @max_row
54431 ON DUPLICATE KEY
54432 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
54433 f_int2 = 2 * @max_row + source_tab.f_int1,
54434 f_charbig = 'was updated';
54435         
54436 # check unique-1-a success:     1
54437         
54438 # check unique-1-b success:     1
54439 DELETE FROM t1 WHERE f_charbig = 'was inserted';
54440 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54441 f_int2 = CAST(f_char1 AS SIGNED INT),
54442 f_charbig = CONCAT('===',f_char1,'===')
54443 WHERE f_charbig = 'was updated';
54444 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54445 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
54446    FROM t0_template source_tab
54447 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54448         
54449 # check replace success:        1
54450 DELETE FROM t1
54451 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
54452 DELETE FROM t1
54453 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
54454 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
54455 UPDATE t1 SET f_int2 = f_int1,
54456 f_char1 = CAST(f_int1 AS CHAR),
54457 f_char2 = CAST(f_int1 AS CHAR),
54458 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
54459 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
54460 SET AUTOCOMMIT= 0;
54461 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54462 SELECT f_int1, f_int1, '', '', 'was inserted'
54463 FROM t0_template source_tab
54464 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
54465         
54466 # check transactions-1 success:         1
54467 COMMIT WORK;
54468         
54469 # check transactions-2 success:         1
54470 ROLLBACK WORK;
54471         
54472 # check transactions-3 success:         1
54473 DELETE FROM t1 WHERE f_charbig = 'was inserted';
54474 COMMIT WORK;
54475 ROLLBACK WORK;
54476         
54477 # check transactions-4 success:         1
54478 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54479 SELECT f_int1, f_int1, '', '', 'was inserted'
54480 FROM t0_template source_tab
54481 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
54482         
54483 # check transactions-5 success:         1
54484 ROLLBACK WORK;
54485         
54486 # check transactions-6 success:         1
54487 # INFO: Storage engine used for t1 seems to be transactional.
54488 COMMIT;
54489         
54490 # check transactions-7 success:         1
54491 DELETE FROM t1 WHERE f_charbig = 'was inserted';
54492 COMMIT WORK;
54493 SET @@session.sql_mode = 'traditional';
54494 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
54495 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54496 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
54497 '', '', 'was inserted' FROM t0_template
54498 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
54499 ERROR 22012: Division by 0
54500 COMMIT;
54501         
54502 # check transactions-8 success:         1
54503 # INFO: Storage engine used for t1 seems to be able to revert
54504 #       changes made by the failing statement.
54505 SET @@session.sql_mode = '';
54506 SET AUTOCOMMIT= 1;
54507 DELETE FROM t1 WHERE f_charbig = 'was inserted';
54508 COMMIT WORK;
54509 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
54510         
54511 # check special-1 success:      1
54512 UPDATE t1 SET f_charbig = '';
54513         
54514 # check special-2 success:      1
54515 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
54516 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
54517 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
54518 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54519 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54520 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54521 'just inserted' FROM t0_template
54522 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54523 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
54524 BEGIN
54525 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54526 f_charbig = 'updated by trigger'
54527       WHERE f_int1 = new.f_int1;
54528 END|
54529 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54530 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
54531 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54532         
54533 # check trigger-1 success:      1
54534 DROP TRIGGER trg_1;
54535 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54536 f_int2 = CAST(f_char1 AS SIGNED INT),
54537 f_charbig = 'just inserted'
54538    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54539 DELETE FROM t0_aux
54540 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54541 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54542 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54543 'just inserted' FROM t0_template
54544 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54545 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
54546 BEGIN
54547 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54548 f_charbig = 'updated by trigger'
54549       WHERE f_int1 = new.f_int1;
54550 END|
54551 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54552 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
54553 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54554         
54555 # check trigger-2 success:      1
54556 DROP TRIGGER trg_1;
54557 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54558 f_int2 = CAST(f_char1 AS SIGNED INT),
54559 f_charbig = 'just inserted'
54560    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54561 DELETE FROM t0_aux
54562 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54563 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54564 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54565 'just inserted' FROM t0_template
54566 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54567 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
54568 BEGIN
54569 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54570 f_charbig = 'updated by trigger'
54571       WHERE f_int1 = new.f_int1;
54572 END|
54573 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54574 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54575         
54576 # check trigger-3 success:      1
54577 DROP TRIGGER trg_1;
54578 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54579 f_int2 = CAST(f_char1 AS SIGNED INT),
54580 f_charbig = 'just inserted'
54581    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54582 DELETE FROM t0_aux
54583 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54584 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54585 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54586 'just inserted' FROM t0_template
54587 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54588 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
54589 BEGIN
54590 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54591 f_charbig = 'updated by trigger'
54592       WHERE f_int1 = - old.f_int1;
54593 END|
54594 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54595 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54596         
54597 # check trigger-4 success:      1
54598 DROP TRIGGER trg_1;
54599 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54600 f_int2 = CAST(f_char1 AS SIGNED INT),
54601 f_charbig = 'just inserted'
54602    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54603 DELETE FROM t0_aux
54604 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54605 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54606 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54607 'just inserted' FROM t0_template
54608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54609 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
54610 BEGIN
54611 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54612 f_charbig = 'updated by trigger'
54613       WHERE f_int1 = new.f_int1;
54614 END|
54615 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54616 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54617         
54618 # check trigger-5 success:      1
54619 DROP TRIGGER trg_1;
54620 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54621 f_int2 = CAST(f_char1 AS SIGNED INT),
54622 f_charbig = 'just inserted'
54623    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54624 DELETE FROM t0_aux
54625 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54626 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54627 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54628 'just inserted' FROM t0_template
54629 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54630 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
54631 BEGIN
54632 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54633 f_charbig = 'updated by trigger'
54634       WHERE f_int1 = - old.f_int1;
54635 END|
54636 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
54637 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54638         
54639 # check trigger-6 success:      1
54640 DROP TRIGGER trg_1;
54641 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54642 f_int2 = CAST(f_char1 AS SIGNED INT),
54643 f_charbig = 'just inserted'
54644    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54645 DELETE FROM t0_aux
54646 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54647 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54648 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54649 'just inserted' FROM t0_template
54650 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54651 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
54652 BEGIN
54653 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54654 f_charbig = 'updated by trigger'
54655       WHERE f_int1 = - old.f_int1;
54656 END|
54657 DELETE FROM t0_aux
54658 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54659         
54660 # check trigger-7 success:      1
54661 DROP TRIGGER trg_1;
54662 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54663 f_int2 = CAST(f_char1 AS SIGNED INT),
54664 f_charbig = 'just inserted'
54665    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54666 DELETE FROM t0_aux
54667 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54668 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
54669 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
54670 'just inserted' FROM t0_template
54671 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54672 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
54673 BEGIN
54674 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
54675 f_charbig = 'updated by trigger'
54676       WHERE f_int1 = - old.f_int1;
54677 END|
54678 DELETE FROM t0_aux
54679 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
54680         
54681 # check trigger-8 success:      1
54682 DROP TRIGGER trg_1;
54683 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54684 f_int2 = CAST(f_char1 AS SIGNED INT),
54685 f_charbig = 'just inserted'
54686    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
54687 DELETE FROM t0_aux
54688 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54689 DELETE FROM t1
54690 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
54691 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
54692 BEGIN
54693 SET new.f_int1 = old.f_int1 + @max_row,
54694 new.f_int2 = old.f_int2 - @max_row,
54695 new.f_charbig = '####updated per update trigger####';
54696 END|
54697 UPDATE t1
54698 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
54699 f_charbig = '####updated per update statement itself####';
54700         
54701 # check trigger-9 success:      1
54702 DROP TRIGGER trg_2;
54703 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54704 f_int2 = CAST(f_char1 AS SIGNED INT),
54705 f_charbig = CONCAT('===',f_char1,'===');
54706 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
54707 BEGIN
54708 SET new.f_int1 = new.f_int1 + @max_row,
54709 new.f_int2 = new.f_int2 - @max_row,
54710 new.f_charbig = '####updated per update trigger####';
54711 END|
54712 UPDATE t1
54713 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
54714 f_charbig = '####updated per update statement itself####';
54715         
54716 # check trigger-10 success:     1
54717 DROP TRIGGER trg_2;
54718 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54719 f_int2 = CAST(f_char1 AS SIGNED INT),
54720 f_charbig = CONCAT('===',f_char1,'===');
54721 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
54722 BEGIN
54723 SET new.f_int1 = @my_max1 + @counter,
54724 new.f_int2 = @my_min2 - @counter,
54725 new.f_charbig = '####updated per insert trigger####';
54726 SET @counter = @counter + 1;
54727 END|
54728 SET @counter = 1;
54729 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
54730 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54731 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
54732 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
54733 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
54734 ORDER BY f_int1;
54735 DROP TRIGGER trg_3;
54736         
54737 # check trigger-11 success:     1
54738 DELETE FROM t1
54739 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
54740 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
54741 AND f_charbig = '####updated per insert trigger####';
54742 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
54743 BEGIN
54744 SET new.f_int1 = @my_max1 + @counter,
54745 new.f_int2 = @my_min2 - @counter,
54746 new.f_charbig = '####updated per insert trigger####';
54747 SET @counter = @counter + 1;
54748 END|
54749 SET @counter = 1;
54750 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
54751 INSERT INTO t1 (f_char1, f_char2, f_charbig)
54752 SELECT CAST(f_int1 AS CHAR),
54753 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
54754 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
54755 ORDER BY f_int1;
54756 DROP TRIGGER trg_3;
54757         
54758 # check trigger-12 success:     1
54759 DELETE FROM t1
54760 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
54761 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
54762 AND f_charbig = '####updated per insert trigger####';
54763 ANALYZE  TABLE t1;
54764 Table   Op      Msg_type        Msg_text
54765 test.t1 analyze status  OK
54766 CHECK    TABLE t1 EXTENDED;
54767 Table   Op      Msg_type        Msg_text
54768 test.t1 check   status  OK
54769 CHECKSUM TABLE t1 EXTENDED;
54770 Table   Checksum
54771 test.t1 <some_value>
54772 OPTIMIZE TABLE t1;
54773 Table   Op      Msg_type        Msg_text
54774 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
54775 test.t1 optimize        status  OK
54776 # check layout success:    1
54777 REPAIR   TABLE t1 EXTENDED;
54778 Table   Op      Msg_type        Msg_text
54779 test.t1 repair  note    The storage engine for the table doesn't support repair
54780 # check layout success:    1
54781 TRUNCATE t1;
54782         
54783 # check TRUNCATE success:       1
54784 # check layout success:    1
54785 # End usability test (inc/partition_check.inc)
54786 DROP TABLE t1;
54787 CREATE TABLE t1 (
54788 f_int1 INTEGER,
54789 f_int2 INTEGER,
54790 f_char1 CHAR(20),
54791 f_char2 CHAR(20),
54792 f_charbig VARCHAR(1000)
54793 , UNIQUE INDEX uidx (f_int2,f_int1)
54795 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
54796 (PARTITION part1 VALUES LESS THAN (0)
54797 (SUBPARTITION subpart11, SUBPARTITION subpart12),
54798 PARTITION part2 VALUES LESS THAN (5)
54799 (SUBPARTITION subpart21, SUBPARTITION subpart22),
54800 PARTITION part3 VALUES LESS THAN (10)
54801 (SUBPARTITION subpart31, SUBPARTITION subpart32),
54802 PARTITION part4 VALUES LESS THAN (2147483646)
54803 (SUBPARTITION subpart41, SUBPARTITION subpart42));
54804 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
54805 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
54806 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
54807 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
54808 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
54809 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
54810 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
54811 # Start usability test (inc/partition_check.inc)
54812 create_command
54813 SHOW CREATE TABLE t1;
54814 Table   Create Table
54815 t1      CREATE TABLE `t1` (
54816   `f_int1` mediumint(9) DEFAULT NULL,
54817   `f_int2` mediumint(9) DEFAULT NULL,
54818   `f_char1` char(20) DEFAULT NULL,
54819   `f_char2` char(20) DEFAULT NULL,
54820   `f_charbig` varchar(1000) DEFAULT NULL,
54821   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
54822 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
54823 /*!50100 PARTITION BY RANGE (f_int1)
54824 SUBPARTITION BY KEY (f_int1)
54825 (PARTITION part1 VALUES LESS THAN (0)
54826  (SUBPARTITION subpart11 ENGINE = InnoDB,
54827   SUBPARTITION subpart12 ENGINE = InnoDB),
54828  PARTITION part2 VALUES LESS THAN (5)
54829  (SUBPARTITION subpart21 ENGINE = InnoDB,
54830   SUBPARTITION subpart22 ENGINE = InnoDB),
54831  PARTITION part3 VALUES LESS THAN (10)
54832  (SUBPARTITION subpart31 ENGINE = InnoDB,
54833   SUBPARTITION subpart32 ENGINE = InnoDB),
54834  PARTITION part4 VALUES LESS THAN (2147483646)
54835  (SUBPARTITION subpart41 ENGINE = InnoDB,
54836   SUBPARTITION subpart42 ENGINE = InnoDB)) */
54838 # check prerequisites-1 success:    1
54839 # check COUNT(*) success:    1
54840 # check MIN/MAX(f_int1) success:    1
54841 # check MIN/MAX(f_int2) success:    1
54842 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54843 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
54844 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
54845 WHERE f_int1 IN (2,3);
54846 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
54847 # check prerequisites-3 success:    1
54848 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
54849 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54850 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
54851 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
54852 WHERE f_int1 IN (2,3);
54853 DELETE FROM t1 WHERE f_charbig = 'delete me';
54854 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54855 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
54856 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
54857 WHERE f_int1 IN (2,3);
54858 DELETE FROM t1 WHERE f_charbig = 'delete me';
54859 # check read via f_int1 success: 1
54860 # check read via f_int2 success: 1
54861         
54862 # check multiple-1 success:     1
54863 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
54864         
54865 # check multiple-2 success:     1
54866 INSERT INTO t1 SELECT * FROM t0_template
54867 WHERE MOD(f_int1,3) = 0;
54868         
54869 # check multiple-3 success:     1
54870 UPDATE t1 SET f_int1 = f_int1 + @max_row
54871 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
54872 AND @max_row_div2 + @max_row_div4;
54873         
54874 # check multiple-4 success:     1
54875 DELETE FROM t1
54876 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
54877 AND @max_row_div2 + @max_row_div4 + @max_row;
54878         
54879 # check multiple-5 success:     1
54880 SELECT COUNT(*) INTO @try_count FROM t0_template
54881 WHERE MOD(f_int1,3) = 0
54882 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54883 SELECT COUNT(*) INTO @clash_count
54884 FROM t1 INNER JOIN t0_template USING(f_int1)
54885 WHERE MOD(f_int1,3) = 0
54886 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54887 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
54888 INSERT INTO t1
54889 SET f_int1 = @cur_value , f_int2 = @cur_value,
54890 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
54891 f_charbig = '#SINGLE#';
54892         
54893 # check single-1 success:       1
54894 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
54895 INSERT INTO t1
54896 SET f_int1 = @cur_value , f_int2 = @cur_value,
54897 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
54898 f_charbig = '#SINGLE#';
54899         
54900 # check single-2 success:       1
54901 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
54902 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
54903 UPDATE t1 SET f_int1 = @cur_value2
54904 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
54905         
54906 # check single-3 success:       1
54907 SET @cur_value1= -1;
54908 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
54909 UPDATE t1 SET f_int1 = @cur_value1
54910 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
54911         
54912 # check single-4 success:       1
54913 SELECT MAX(f_int1) INTO @cur_value FROM t1;
54914 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
54915         
54916 # check single-5 success:       1
54917 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
54918         
54919 # check single-6 success:       1
54920 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
54921 Warnings:
54922 Warning 1264    Out of range value for column 'f_int1' at row 1
54923 Warning 1264    Out of range value for column 'f_int2' at row 1
54924         
54925 # check single-7 success:       1
54926 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
54927 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
54928 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
54929 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
54930 f_charbig = '#NULL#';
54931 INSERT INTO t1
54932 SET f_int1 = NULL , f_int2 = -@max_row,
54933 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
54934 f_charbig = '#NULL#';
54935 # check null success:    1
54936         
54937 # check null-1 success:         1
54938 UPDATE t1 SET f_int1 = -@max_row
54939 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54940 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54941         
54942 # check null-2 success:         1
54943 UPDATE t1 SET f_int1 = NULL
54944 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54945 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54946         
54947 # check null-3 success:         1
54948 DELETE FROM t1
54949 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
54950 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
54951         
54952 # check null-4 success:         1
54953 DELETE FROM t1
54954 WHERE f_int1 = 0 AND f_int2 = 0
54955 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
54956 AND f_charbig = '#NULL#';
54957 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54958 SELECT f_int1, f_int1, '', '', 'was inserted'
54959    FROM t0_template source_tab
54960 WHERE MOD(f_int1,3) = 0
54961 AND f_int1 BETWEEN @max_row_div2 AND @max_row
54962 ON DUPLICATE KEY
54963 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
54964 f_int2 = 2 * @max_row + source_tab.f_int1,
54965 f_charbig = 'was updated';
54966         
54967 # check unique-1-a success:     1
54968         
54969 # check unique-1-b success:     1
54970 DELETE FROM t1 WHERE f_charbig = 'was inserted';
54971 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
54972 f_int2 = CAST(f_char1 AS SIGNED INT),
54973 f_charbig = CONCAT('===',f_char1,'===')
54974 WHERE f_charbig = 'was updated';
54975 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54976 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
54977    FROM t0_template source_tab
54978 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
54979         
54980 # check replace success:        1
54981 DELETE FROM t1
54982 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
54983 DELETE FROM t1
54984 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
54985 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
54986 UPDATE t1 SET f_int2 = f_int1,
54987 f_char1 = CAST(f_int1 AS CHAR),
54988 f_char2 = CAST(f_int1 AS CHAR),
54989 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
54990 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
54991 SET AUTOCOMMIT= 0;
54992 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
54993 SELECT f_int1, f_int1, '', '', 'was inserted'
54994 FROM t0_template source_tab
54995 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
54996         
54997 # check transactions-1 success:         1
54998 COMMIT WORK;
54999         
55000 # check transactions-2 success:         1
55001 ROLLBACK WORK;
55002         
55003 # check transactions-3 success:         1
55004 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55005 COMMIT WORK;
55006 ROLLBACK WORK;
55007         
55008 # check transactions-4 success:         1
55009 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55010 SELECT f_int1, f_int1, '', '', 'was inserted'
55011 FROM t0_template source_tab
55012 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
55013         
55014 # check transactions-5 success:         1
55015 ROLLBACK WORK;
55016         
55017 # check transactions-6 success:         1
55018 # INFO: Storage engine used for t1 seems to be transactional.
55019 COMMIT;
55020         
55021 # check transactions-7 success:         1
55022 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55023 COMMIT WORK;
55024 SET @@session.sql_mode = 'traditional';
55025 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
55026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55027 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
55028 '', '', 'was inserted' FROM t0_template
55029 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
55030 ERROR 22012: Division by 0
55031 COMMIT;
55032         
55033 # check transactions-8 success:         1
55034 # INFO: Storage engine used for t1 seems to be able to revert
55035 #       changes made by the failing statement.
55036 SET @@session.sql_mode = '';
55037 SET AUTOCOMMIT= 1;
55038 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55039 COMMIT WORK;
55040 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
55041         
55042 # check special-1 success:      1
55043 UPDATE t1 SET f_charbig = '';
55044         
55045 # check special-2 success:      1
55046 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
55047 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55048 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
55049 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55050 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55051 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55052 'just inserted' FROM t0_template
55053 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55054 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
55055 BEGIN
55056 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55057 f_charbig = 'updated by trigger'
55058       WHERE f_int1 = new.f_int1;
55059 END|
55060 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55061 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
55062 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55063         
55064 # check trigger-1 success:      1
55065 DROP TRIGGER trg_1;
55066 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55067 f_int2 = CAST(f_char1 AS SIGNED INT),
55068 f_charbig = 'just inserted'
55069    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55070 DELETE FROM t0_aux
55071 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55072 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55073 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55074 'just inserted' FROM t0_template
55075 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55076 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
55077 BEGIN
55078 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55079 f_charbig = 'updated by trigger'
55080       WHERE f_int1 = new.f_int1;
55081 END|
55082 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55083 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
55084 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55085         
55086 # check trigger-2 success:      1
55087 DROP TRIGGER trg_1;
55088 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55089 f_int2 = CAST(f_char1 AS SIGNED INT),
55090 f_charbig = 'just inserted'
55091    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55092 DELETE FROM t0_aux
55093 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55094 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55095 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55096 'just inserted' FROM t0_template
55097 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55098 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
55099 BEGIN
55100 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55101 f_charbig = 'updated by trigger'
55102       WHERE f_int1 = new.f_int1;
55103 END|
55104 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55105 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55106         
55107 # check trigger-3 success:      1
55108 DROP TRIGGER trg_1;
55109 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55110 f_int2 = CAST(f_char1 AS SIGNED INT),
55111 f_charbig = 'just inserted'
55112    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55113 DELETE FROM t0_aux
55114 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55115 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55116 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55117 'just inserted' FROM t0_template
55118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55119 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
55120 BEGIN
55121 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55122 f_charbig = 'updated by trigger'
55123       WHERE f_int1 = - old.f_int1;
55124 END|
55125 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55126 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55127         
55128 # check trigger-4 success:      1
55129 DROP TRIGGER trg_1;
55130 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55131 f_int2 = CAST(f_char1 AS SIGNED INT),
55132 f_charbig = 'just inserted'
55133    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55134 DELETE FROM t0_aux
55135 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55136 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55137 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55138 'just inserted' FROM t0_template
55139 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55140 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
55141 BEGIN
55142 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55143 f_charbig = 'updated by trigger'
55144       WHERE f_int1 = new.f_int1;
55145 END|
55146 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55147 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55148         
55149 # check trigger-5 success:      1
55150 DROP TRIGGER trg_1;
55151 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55152 f_int2 = CAST(f_char1 AS SIGNED INT),
55153 f_charbig = 'just inserted'
55154    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55155 DELETE FROM t0_aux
55156 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55157 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55158 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55159 'just inserted' FROM t0_template
55160 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55161 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
55162 BEGIN
55163 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55164 f_charbig = 'updated by trigger'
55165       WHERE f_int1 = - old.f_int1;
55166 END|
55167 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55168 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55169         
55170 # check trigger-6 success:      1
55171 DROP TRIGGER trg_1;
55172 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55173 f_int2 = CAST(f_char1 AS SIGNED INT),
55174 f_charbig = 'just inserted'
55175    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55176 DELETE FROM t0_aux
55177 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55178 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55179 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55180 'just inserted' FROM t0_template
55181 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55182 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
55183 BEGIN
55184 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55185 f_charbig = 'updated by trigger'
55186       WHERE f_int1 = - old.f_int1;
55187 END|
55188 DELETE FROM t0_aux
55189 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55190         
55191 # check trigger-7 success:      1
55192 DROP TRIGGER trg_1;
55193 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55194 f_int2 = CAST(f_char1 AS SIGNED INT),
55195 f_charbig = 'just inserted'
55196    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55197 DELETE FROM t0_aux
55198 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55199 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55200 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55201 'just inserted' FROM t0_template
55202 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55203 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
55204 BEGIN
55205 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55206 f_charbig = 'updated by trigger'
55207       WHERE f_int1 = - old.f_int1;
55208 END|
55209 DELETE FROM t0_aux
55210 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55211         
55212 # check trigger-8 success:      1
55213 DROP TRIGGER trg_1;
55214 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55215 f_int2 = CAST(f_char1 AS SIGNED INT),
55216 f_charbig = 'just inserted'
55217    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55218 DELETE FROM t0_aux
55219 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55220 DELETE FROM t1
55221 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55222 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
55223 BEGIN
55224 SET new.f_int1 = old.f_int1 + @max_row,
55225 new.f_int2 = old.f_int2 - @max_row,
55226 new.f_charbig = '####updated per update trigger####';
55227 END|
55228 UPDATE t1
55229 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
55230 f_charbig = '####updated per update statement itself####';
55231         
55232 # check trigger-9 success:      1
55233 DROP TRIGGER trg_2;
55234 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55235 f_int2 = CAST(f_char1 AS SIGNED INT),
55236 f_charbig = CONCAT('===',f_char1,'===');
55237 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
55238 BEGIN
55239 SET new.f_int1 = new.f_int1 + @max_row,
55240 new.f_int2 = new.f_int2 - @max_row,
55241 new.f_charbig = '####updated per update trigger####';
55242 END|
55243 UPDATE t1
55244 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
55245 f_charbig = '####updated per update statement itself####';
55246         
55247 # check trigger-10 success:     1
55248 DROP TRIGGER trg_2;
55249 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55250 f_int2 = CAST(f_char1 AS SIGNED INT),
55251 f_charbig = CONCAT('===',f_char1,'===');
55252 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
55253 BEGIN
55254 SET new.f_int1 = @my_max1 + @counter,
55255 new.f_int2 = @my_min2 - @counter,
55256 new.f_charbig = '####updated per insert trigger####';
55257 SET @counter = @counter + 1;
55258 END|
55259 SET @counter = 1;
55260 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
55261 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55262 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
55263 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
55264 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
55265 ORDER BY f_int1;
55266 DROP TRIGGER trg_3;
55267         
55268 # check trigger-11 success:     1
55269 DELETE FROM t1
55270 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
55271 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
55272 AND f_charbig = '####updated per insert trigger####';
55273 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
55274 BEGIN
55275 SET new.f_int1 = @my_max1 + @counter,
55276 new.f_int2 = @my_min2 - @counter,
55277 new.f_charbig = '####updated per insert trigger####';
55278 SET @counter = @counter + 1;
55279 END|
55280 SET @counter = 1;
55281 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
55282 INSERT INTO t1 (f_char1, f_char2, f_charbig)
55283 SELECT CAST(f_int1 AS CHAR),
55284 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
55285 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
55286 ORDER BY f_int1;
55287 DROP TRIGGER trg_3;
55288         
55289 # check trigger-12 success:     1
55290 DELETE FROM t1
55291 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
55292 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
55293 AND f_charbig = '####updated per insert trigger####';
55294 ANALYZE  TABLE t1;
55295 Table   Op      Msg_type        Msg_text
55296 test.t1 analyze status  OK
55297 CHECK    TABLE t1 EXTENDED;
55298 Table   Op      Msg_type        Msg_text
55299 test.t1 check   status  OK
55300 CHECKSUM TABLE t1 EXTENDED;
55301 Table   Checksum
55302 test.t1 <some_value>
55303 OPTIMIZE TABLE t1;
55304 Table   Op      Msg_type        Msg_text
55305 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
55306 test.t1 optimize        status  OK
55307 # check layout success:    1
55308 REPAIR   TABLE t1 EXTENDED;
55309 Table   Op      Msg_type        Msg_text
55310 test.t1 repair  note    The storage engine for the table doesn't support repair
55311 # check layout success:    1
55312 TRUNCATE t1;
55313         
55314 # check TRUNCATE success:       1
55315 # check layout success:    1
55316 # End usability test (inc/partition_check.inc)
55317 DROP TABLE t1;
55318 CREATE TABLE t1 (
55319 f_int1 INTEGER,
55320 f_int2 INTEGER,
55321 f_char1 CHAR(20),
55322 f_char2 CHAR(20),
55323 f_charbig VARCHAR(1000)
55324 , UNIQUE INDEX uidx (f_int2,f_int1)
55326 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
55327 (PARTITION part1 VALUES IN (0)
55328 (SUBPARTITION sp11, SUBPARTITION sp12),
55329 PARTITION part2 VALUES IN (1)
55330 (SUBPARTITION sp21, SUBPARTITION sp22),
55331 PARTITION part3 VALUES IN (2)
55332 (SUBPARTITION sp31, SUBPARTITION sp32),
55333 PARTITION part4 VALUES IN (NULL)
55334 (SUBPARTITION sp41, SUBPARTITION sp42));
55335 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55336 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
55337 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
55338 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
55339 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55340 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
55341 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
55342 # Start usability test (inc/partition_check.inc)
55343 create_command
55344 SHOW CREATE TABLE t1;
55345 Table   Create Table
55346 t1      CREATE TABLE `t1` (
55347   `f_int1` mediumint(9) DEFAULT NULL,
55348   `f_int2` mediumint(9) DEFAULT NULL,
55349   `f_char1` char(20) DEFAULT NULL,
55350   `f_char2` char(20) DEFAULT NULL,
55351   `f_charbig` varchar(1000) DEFAULT NULL,
55352   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
55353 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
55354 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
55355 SUBPARTITION BY HASH (f_int1 + 1)
55356 (PARTITION part1 VALUES IN (0)
55357  (SUBPARTITION sp11 ENGINE = InnoDB,
55358   SUBPARTITION sp12 ENGINE = InnoDB),
55359  PARTITION part2 VALUES IN (1)
55360  (SUBPARTITION sp21 ENGINE = InnoDB,
55361   SUBPARTITION sp22 ENGINE = InnoDB),
55362  PARTITION part3 VALUES IN (2)
55363  (SUBPARTITION sp31 ENGINE = InnoDB,
55364   SUBPARTITION sp32 ENGINE = InnoDB),
55365  PARTITION part4 VALUES IN (NULL)
55366  (SUBPARTITION sp41 ENGINE = InnoDB,
55367   SUBPARTITION sp42 ENGINE = InnoDB)) */
55369 # check prerequisites-1 success:    1
55370 # check COUNT(*) success:    1
55371 # check MIN/MAX(f_int1) success:    1
55372 # check MIN/MAX(f_int2) success:    1
55373 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55374 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
55375 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
55376 WHERE f_int1 IN (2,3);
55377 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
55378 # check prerequisites-3 success:    1
55379 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
55380 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55381 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
55382 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
55383 WHERE f_int1 IN (2,3);
55384 DELETE FROM t1 WHERE f_charbig = 'delete me';
55385 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55386 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
55387 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
55388 WHERE f_int1 IN (2,3);
55389 DELETE FROM t1 WHERE f_charbig = 'delete me';
55390 # check read via f_int1 success: 1
55391 # check read via f_int2 success: 1
55392         
55393 # check multiple-1 success:     1
55394 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
55395         
55396 # check multiple-2 success:     1
55397 INSERT INTO t1 SELECT * FROM t0_template
55398 WHERE MOD(f_int1,3) = 0;
55399         
55400 # check multiple-3 success:     1
55401 UPDATE t1 SET f_int1 = f_int1 + @max_row
55402 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
55403 AND @max_row_div2 + @max_row_div4;
55404         
55405 # check multiple-4 success:     1
55406 DELETE FROM t1
55407 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
55408 AND @max_row_div2 + @max_row_div4 + @max_row;
55409         
55410 # check multiple-5 success:     1
55411 SELECT COUNT(*) INTO @try_count FROM t0_template
55412 WHERE MOD(f_int1,3) = 0
55413 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
55414 SELECT COUNT(*) INTO @clash_count
55415 FROM t1 INNER JOIN t0_template USING(f_int1)
55416 WHERE MOD(f_int1,3) = 0
55417 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
55418 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
55419 INSERT INTO t1
55420 SET f_int1 = @cur_value , f_int2 = @cur_value,
55421 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
55422 f_charbig = '#SINGLE#';
55423         
55424 # check single-1 success:       1
55425 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
55426 INSERT INTO t1
55427 SET f_int1 = @cur_value , f_int2 = @cur_value,
55428 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
55429 f_charbig = '#SINGLE#';
55430         
55431 # check single-2 success:       1
55432 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
55433 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
55434 UPDATE t1 SET f_int1 = @cur_value2
55435 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
55436         
55437 # check single-3 success:       1
55438 SET @cur_value1= -1;
55439 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
55440 UPDATE t1 SET f_int1 = @cur_value1
55441 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
55442         
55443 # check single-4 success:       1
55444 SELECT MAX(f_int1) INTO @cur_value FROM t1;
55445 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
55446         
55447 # check single-5 success:       1
55448 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
55449         
55450 # check single-6 success:       1
55451 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
55452 Warnings:
55453 Warning 1264    Out of range value for column 'f_int1' at row 1
55454 Warning 1264    Out of range value for column 'f_int2' at row 1
55455         
55456 # check single-7 success:       1
55457 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
55458 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
55459 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
55460 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
55461 f_charbig = '#NULL#';
55462 INSERT INTO t1
55463 SET f_int1 = NULL , f_int2 = -@max_row,
55464 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
55465 f_charbig = '#NULL#';
55466 # check null success:    1
55467         
55468 # check null-1 success:         1
55469 UPDATE t1 SET f_int1 = -@max_row
55470 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
55471 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
55472         
55473 # check null-2 success:         1
55474 UPDATE t1 SET f_int1 = NULL
55475 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
55476 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
55477         
55478 # check null-3 success:         1
55479 DELETE FROM t1
55480 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
55481 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
55482         
55483 # check null-4 success:         1
55484 DELETE FROM t1
55485 WHERE f_int1 = 0 AND f_int2 = 0
55486 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
55487 AND f_charbig = '#NULL#';
55488 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55489 SELECT f_int1, f_int1, '', '', 'was inserted'
55490    FROM t0_template source_tab
55491 WHERE MOD(f_int1,3) = 0
55492 AND f_int1 BETWEEN @max_row_div2 AND @max_row
55493 ON DUPLICATE KEY
55494 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
55495 f_int2 = 2 * @max_row + source_tab.f_int1,
55496 f_charbig = 'was updated';
55497         
55498 # check unique-1-a success:     1
55499         
55500 # check unique-1-b success:     1
55501 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55502 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55503 f_int2 = CAST(f_char1 AS SIGNED INT),
55504 f_charbig = CONCAT('===',f_char1,'===')
55505 WHERE f_charbig = 'was updated';
55506 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55507 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
55508    FROM t0_template source_tab
55509 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
55510         
55511 # check replace success:        1
55512 DELETE FROM t1
55513 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
55514 DELETE FROM t1
55515 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
55516 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
55517 UPDATE t1 SET f_int2 = f_int1,
55518 f_char1 = CAST(f_int1 AS CHAR),
55519 f_char2 = CAST(f_int1 AS CHAR),
55520 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
55521 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
55522 SET AUTOCOMMIT= 0;
55523 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55524 SELECT f_int1, f_int1, '', '', 'was inserted'
55525 FROM t0_template source_tab
55526 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
55527         
55528 # check transactions-1 success:         1
55529 COMMIT WORK;
55530         
55531 # check transactions-2 success:         1
55532 ROLLBACK WORK;
55533         
55534 # check transactions-3 success:         1
55535 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55536 COMMIT WORK;
55537 ROLLBACK WORK;
55538         
55539 # check transactions-4 success:         1
55540 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55541 SELECT f_int1, f_int1, '', '', 'was inserted'
55542 FROM t0_template source_tab
55543 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
55544         
55545 # check transactions-5 success:         1
55546 ROLLBACK WORK;
55547         
55548 # check transactions-6 success:         1
55549 # INFO: Storage engine used for t1 seems to be transactional.
55550 COMMIT;
55551         
55552 # check transactions-7 success:         1
55553 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55554 COMMIT WORK;
55555 SET @@session.sql_mode = 'traditional';
55556 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
55557 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55558 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
55559 '', '', 'was inserted' FROM t0_template
55560 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
55561 ERROR 22012: Division by 0
55562 COMMIT;
55563         
55564 # check transactions-8 success:         1
55565 # INFO: Storage engine used for t1 seems to be able to revert
55566 #       changes made by the failing statement.
55567 SET @@session.sql_mode = '';
55568 SET AUTOCOMMIT= 1;
55569 DELETE FROM t1 WHERE f_charbig = 'was inserted';
55570 COMMIT WORK;
55571 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
55572         
55573 # check special-1 success:      1
55574 UPDATE t1 SET f_charbig = '';
55575         
55576 # check special-2 success:      1
55577 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
55578 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55579 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
55580 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55581 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55582 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55583 'just inserted' FROM t0_template
55584 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55585 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
55586 BEGIN
55587 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55588 f_charbig = 'updated by trigger'
55589       WHERE f_int1 = new.f_int1;
55590 END|
55591 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55592 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
55593 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55594         
55595 # check trigger-1 success:      1
55596 DROP TRIGGER trg_1;
55597 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55598 f_int2 = CAST(f_char1 AS SIGNED INT),
55599 f_charbig = 'just inserted'
55600    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55601 DELETE FROM t0_aux
55602 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55603 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55604 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55605 'just inserted' FROM t0_template
55606 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55607 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
55608 BEGIN
55609 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55610 f_charbig = 'updated by trigger'
55611       WHERE f_int1 = new.f_int1;
55612 END|
55613 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55614 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
55615 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55616         
55617 # check trigger-2 success:      1
55618 DROP TRIGGER trg_1;
55619 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55620 f_int2 = CAST(f_char1 AS SIGNED INT),
55621 f_charbig = 'just inserted'
55622    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55623 DELETE FROM t0_aux
55624 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55625 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55626 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55627 'just inserted' FROM t0_template
55628 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55629 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
55630 BEGIN
55631 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55632 f_charbig = 'updated by trigger'
55633       WHERE f_int1 = new.f_int1;
55634 END|
55635 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55636 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55637         
55638 # check trigger-3 success:      1
55639 DROP TRIGGER trg_1;
55640 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55641 f_int2 = CAST(f_char1 AS SIGNED INT),
55642 f_charbig = 'just inserted'
55643    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55644 DELETE FROM t0_aux
55645 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55646 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55647 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55648 'just inserted' FROM t0_template
55649 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55650 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
55651 BEGIN
55652 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55653 f_charbig = 'updated by trigger'
55654       WHERE f_int1 = - old.f_int1;
55655 END|
55656 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55657 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55658         
55659 # check trigger-4 success:      1
55660 DROP TRIGGER trg_1;
55661 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55662 f_int2 = CAST(f_char1 AS SIGNED INT),
55663 f_charbig = 'just inserted'
55664    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55665 DELETE FROM t0_aux
55666 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55667 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55668 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55669 'just inserted' FROM t0_template
55670 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55671 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
55672 BEGIN
55673 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55674 f_charbig = 'updated by trigger'
55675       WHERE f_int1 = new.f_int1;
55676 END|
55677 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55678 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55679         
55680 # check trigger-5 success:      1
55681 DROP TRIGGER trg_1;
55682 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55683 f_int2 = CAST(f_char1 AS SIGNED INT),
55684 f_charbig = 'just inserted'
55685    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55686 DELETE FROM t0_aux
55687 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55688 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55689 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55690 'just inserted' FROM t0_template
55691 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55692 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
55693 BEGIN
55694 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55695 f_charbig = 'updated by trigger'
55696       WHERE f_int1 = - old.f_int1;
55697 END|
55698 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
55699 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55700         
55701 # check trigger-6 success:      1
55702 DROP TRIGGER trg_1;
55703 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55704 f_int2 = CAST(f_char1 AS SIGNED INT),
55705 f_charbig = 'just inserted'
55706    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55707 DELETE FROM t0_aux
55708 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55709 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55710 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55711 'just inserted' FROM t0_template
55712 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55713 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
55714 BEGIN
55715 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55716 f_charbig = 'updated by trigger'
55717       WHERE f_int1 = - old.f_int1;
55718 END|
55719 DELETE FROM t0_aux
55720 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55721         
55722 # check trigger-7 success:      1
55723 DROP TRIGGER trg_1;
55724 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55725 f_int2 = CAST(f_char1 AS SIGNED INT),
55726 f_charbig = 'just inserted'
55727    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55728 DELETE FROM t0_aux
55729 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55730 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
55731 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
55732 'just inserted' FROM t0_template
55733 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55734 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
55735 BEGIN
55736 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
55737 f_charbig = 'updated by trigger'
55738       WHERE f_int1 = - old.f_int1;
55739 END|
55740 DELETE FROM t0_aux
55741 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
55742         
55743 # check trigger-8 success:      1
55744 DROP TRIGGER trg_1;
55745 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55746 f_int2 = CAST(f_char1 AS SIGNED INT),
55747 f_charbig = 'just inserted'
55748    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
55749 DELETE FROM t0_aux
55750 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55751 DELETE FROM t1
55752 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
55753 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
55754 BEGIN
55755 SET new.f_int1 = old.f_int1 + @max_row,
55756 new.f_int2 = old.f_int2 - @max_row,
55757 new.f_charbig = '####updated per update trigger####';
55758 END|
55759 UPDATE t1
55760 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
55761 f_charbig = '####updated per update statement itself####';
55762         
55763 # check trigger-9 success:      1
55764 DROP TRIGGER trg_2;
55765 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55766 f_int2 = CAST(f_char1 AS SIGNED INT),
55767 f_charbig = CONCAT('===',f_char1,'===');
55768 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
55769 BEGIN
55770 SET new.f_int1 = new.f_int1 + @max_row,
55771 new.f_int2 = new.f_int2 - @max_row,
55772 new.f_charbig = '####updated per update trigger####';
55773 END|
55774 UPDATE t1
55775 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
55776 f_charbig = '####updated per update statement itself####';
55777         
55778 # check trigger-10 success:     1
55779 DROP TRIGGER trg_2;
55780 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
55781 f_int2 = CAST(f_char1 AS SIGNED INT),
55782 f_charbig = CONCAT('===',f_char1,'===');
55783 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
55784 BEGIN
55785 SET new.f_int1 = @my_max1 + @counter,
55786 new.f_int2 = @my_min2 - @counter,
55787 new.f_charbig = '####updated per insert trigger####';
55788 SET @counter = @counter + 1;
55789 END|
55790 SET @counter = 1;
55791 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
55792 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55793 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
55794 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
55795 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
55796 ORDER BY f_int1;
55797 DROP TRIGGER trg_3;
55798         
55799 # check trigger-11 success:     1
55800 DELETE FROM t1
55801 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
55802 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
55803 AND f_charbig = '####updated per insert trigger####';
55804 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
55805 BEGIN
55806 SET new.f_int1 = @my_max1 + @counter,
55807 new.f_int2 = @my_min2 - @counter,
55808 new.f_charbig = '####updated per insert trigger####';
55809 SET @counter = @counter + 1;
55810 END|
55811 SET @counter = 1;
55812 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
55813 INSERT INTO t1 (f_char1, f_char2, f_charbig)
55814 SELECT CAST(f_int1 AS CHAR),
55815 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
55816 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
55817 ORDER BY f_int1;
55818 DROP TRIGGER trg_3;
55819         
55820 # check trigger-12 success:     1
55821 DELETE FROM t1
55822 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
55823 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
55824 AND f_charbig = '####updated per insert trigger####';
55825 ANALYZE  TABLE t1;
55826 Table   Op      Msg_type        Msg_text
55827 test.t1 analyze status  OK
55828 CHECK    TABLE t1 EXTENDED;
55829 Table   Op      Msg_type        Msg_text
55830 test.t1 check   status  OK
55831 CHECKSUM TABLE t1 EXTENDED;
55832 Table   Checksum
55833 test.t1 <some_value>
55834 OPTIMIZE TABLE t1;
55835 Table   Op      Msg_type        Msg_text
55836 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
55837 test.t1 optimize        status  OK
55838 # check layout success:    1
55839 REPAIR   TABLE t1 EXTENDED;
55840 Table   Op      Msg_type        Msg_text
55841 test.t1 repair  note    The storage engine for the table doesn't support repair
55842 # check layout success:    1
55843 TRUNCATE t1;
55844         
55845 # check TRUNCATE success:       1
55846 # check layout success:    1
55847 # End usability test (inc/partition_check.inc)
55848 DROP TABLE t1;
55849 CREATE TABLE t1 (
55850 f_int1 INTEGER,
55851 f_int2 INTEGER,
55852 f_char1 CHAR(20),
55853 f_char2 CHAR(20),
55854 f_charbig VARCHAR(1000)
55855 , UNIQUE INDEX uidx (f_int2,f_int1)
55857 PARTITION BY LIST(ABS(MOD(f_int1,2)))
55858 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
55859 (PARTITION part1 VALUES IN (0),
55860 PARTITION part2 VALUES IN (1),
55861 PARTITION part3 VALUES IN (NULL));
55862 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55863 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
55864 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
55865 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
55866 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
55867 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
55868 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
55869 # Start usability test (inc/partition_check.inc)
55870 create_command
55871 SHOW CREATE TABLE t1;
55872 Table   Create Table
55873 t1      CREATE TABLE `t1` (
55874   `f_int1` mediumint(9) DEFAULT NULL,
55875   `f_int2` mediumint(9) DEFAULT NULL,
55876   `f_char1` char(20) DEFAULT NULL,
55877   `f_char2` char(20) DEFAULT NULL,
55878   `f_charbig` varchar(1000) DEFAULT NULL,
55879   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
55880 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
55881 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
55882 SUBPARTITION BY KEY (f_int1)
55883 SUBPARTITIONS 3
55884 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
55885  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
55886  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
55888 # check prerequisites-1 success:    1
55889 # check COUNT(*) success:    1
55890 # check MIN/MAX(f_int1) success:    1
55891 # check MIN/MAX(f_int2) success:    1
55892 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55893 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
55894 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
55895 WHERE f_int1 IN (2,3);
55896 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
55897 # check prerequisites-3 success:    1
55898 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
55899 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55900 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
55901 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
55902 WHERE f_int1 IN (2,3);
55903 DELETE FROM t1 WHERE f_charbig = 'delete me';
55904 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
55905 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
55906 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
55907 WHERE f_int1 IN (2,3);
55908 DELETE FROM t1 WHERE f_charbig = 'delete me';
55909 # check read via f_int1 success: 1
55910 # check read via f_int2 success: 1
55911         
55912 # check multiple-1 success:     1
55913 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
55914         
55915 # check multiple-2 success:     1
55916 INSERT INTO t1 SELECT * FROM t0_template
55917 WHERE MOD(f_int1,3) = 0;
55918         
55919 # check multiple-3 success:     1
55920 UPDATE t1 SET f_int1 = f_int1 + @max_row
55921 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
55922 AND @max_row_div2 + @max_row_div4;
55923         
55924 # check multiple-4 success:     1
55925 DELETE FROM t1
55926 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
55927 AND @max_row_div2 + @max_row_div4 + @max_row;
55928         
55929 # check multiple-5 success:     1
55930 SELECT COUNT(*) INTO @try_count FROM t0_template
55931 WHERE MOD(f_int1,3) = 0
55932 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
55933 SELECT COUNT(*) INTO @clash_count
55934 FROM t1 INNER JOIN t0_template USING(f_int1)
55935 WHERE MOD(f_int1,3) = 0
55936 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
55937 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
55938 INSERT INTO t1
55939 SET f_int1 = @cur_value , f_int2 = @cur_value,
55940 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
55941 f_charbig = '#SINGLE#';
55942         
55943 # check single-1 success:       1
55944 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
55945 INSERT INTO t1
55946 SET f_int1 = @cur_value , f_int2 = @cur_value,
55947 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
55948 f_charbig = '#SINGLE#';
55949         
55950 # check single-2 success:       1
55951 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
55952 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
55953 UPDATE t1 SET f_int1 = @cur_value2
55954 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
55955         
55956 # check single-3 success:       1
55957 SET @cur_value1= -1;
55958 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
55959 UPDATE t1 SET f_int1 = @cur_value1
55960 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
55961         
55962 # check single-4 success:       1
55963 SELECT MAX(f_int1) INTO @cur_value FROM t1;
55964 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
55965         
55966 # check single-5 success:       1
55967 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
55968         
55969 # check single-6 success:       1
55970 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
55971 Warnings:
55972 Warning 1264    Out of range value for column 'f_int1' at row 1
55973 Warning 1264    Out of range value for column 'f_int2' at row 1
55974         
55975 # check single-7 success:       1
55976 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
55977 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
55978 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
55979 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
55980 f_charbig = '#NULL#';
55981 INSERT INTO t1
55982 SET f_int1 = NULL , f_int2 = -@max_row,
55983 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
55984 f_charbig = '#NULL#';
55985 # check null success:    1
55986         
55987 # check null-1 success:         1
55988 UPDATE t1 SET f_int1 = -@max_row
55989 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
55990 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
55991         
55992 # check null-2 success:         1
55993 UPDATE t1 SET f_int1 = NULL
55994 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
55995 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
55996         
55997 # check null-3 success:         1
55998 DELETE FROM t1
55999 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
56000 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
56001         
56002 # check null-4 success:         1
56003 DELETE FROM t1
56004 WHERE f_int1 = 0 AND f_int2 = 0
56005 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
56006 AND f_charbig = '#NULL#';
56007 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56008 SELECT f_int1, f_int1, '', '', 'was inserted'
56009    FROM t0_template source_tab
56010 WHERE MOD(f_int1,3) = 0
56011 AND f_int1 BETWEEN @max_row_div2 AND @max_row
56012 ON DUPLICATE KEY
56013 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
56014 f_int2 = 2 * @max_row + source_tab.f_int1,
56015 f_charbig = 'was updated';
56016         
56017 # check unique-1-a success:     1
56018         
56019 # check unique-1-b success:     1
56020 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56021 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56022 f_int2 = CAST(f_char1 AS SIGNED INT),
56023 f_charbig = CONCAT('===',f_char1,'===')
56024 WHERE f_charbig = 'was updated';
56025 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56026 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
56027    FROM t0_template source_tab
56028 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56029         
56030 # check replace success:        1
56031 DELETE FROM t1
56032 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
56033 DELETE FROM t1
56034 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
56035 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
56036 UPDATE t1 SET f_int2 = f_int1,
56037 f_char1 = CAST(f_int1 AS CHAR),
56038 f_char2 = CAST(f_int1 AS CHAR),
56039 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
56040 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
56041 SET AUTOCOMMIT= 0;
56042 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56043 SELECT f_int1, f_int1, '', '', 'was inserted'
56044 FROM t0_template source_tab
56045 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56046         
56047 # check transactions-1 success:         1
56048 COMMIT WORK;
56049         
56050 # check transactions-2 success:         1
56051 ROLLBACK WORK;
56052         
56053 # check transactions-3 success:         1
56054 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56055 COMMIT WORK;
56056 ROLLBACK WORK;
56057         
56058 # check transactions-4 success:         1
56059 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56060 SELECT f_int1, f_int1, '', '', 'was inserted'
56061 FROM t0_template source_tab
56062 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56063         
56064 # check transactions-5 success:         1
56065 ROLLBACK WORK;
56066         
56067 # check transactions-6 success:         1
56068 # INFO: Storage engine used for t1 seems to be transactional.
56069 COMMIT;
56070         
56071 # check transactions-7 success:         1
56072 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56073 COMMIT WORK;
56074 SET @@session.sql_mode = 'traditional';
56075 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
56076 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56077 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
56078 '', '', 'was inserted' FROM t0_template
56079 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56080 ERROR 22012: Division by 0
56081 COMMIT;
56082         
56083 # check transactions-8 success:         1
56084 # INFO: Storage engine used for t1 seems to be able to revert
56085 #       changes made by the failing statement.
56086 SET @@session.sql_mode = '';
56087 SET AUTOCOMMIT= 1;
56088 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56089 COMMIT WORK;
56090 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
56091         
56092 # check special-1 success:      1
56093 UPDATE t1 SET f_charbig = '';
56094         
56095 # check special-2 success:      1
56096 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
56097 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56098 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
56099 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56100 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56101 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56102 'just inserted' FROM t0_template
56103 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56104 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
56105 BEGIN
56106 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56107 f_charbig = 'updated by trigger'
56108       WHERE f_int1 = new.f_int1;
56109 END|
56110 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56111 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
56112 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56113         
56114 # check trigger-1 success:      1
56115 DROP TRIGGER trg_1;
56116 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56117 f_int2 = CAST(f_char1 AS SIGNED INT),
56118 f_charbig = 'just inserted'
56119    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56120 DELETE FROM t0_aux
56121 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56122 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56123 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56124 'just inserted' FROM t0_template
56125 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56126 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
56127 BEGIN
56128 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56129 f_charbig = 'updated by trigger'
56130       WHERE f_int1 = new.f_int1;
56131 END|
56132 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56133 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
56134 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56135         
56136 # check trigger-2 success:      1
56137 DROP TRIGGER trg_1;
56138 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56139 f_int2 = CAST(f_char1 AS SIGNED INT),
56140 f_charbig = 'just inserted'
56141    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56142 DELETE FROM t0_aux
56143 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56144 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56145 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56146 'just inserted' FROM t0_template
56147 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56148 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
56149 BEGIN
56150 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56151 f_charbig = 'updated by trigger'
56152       WHERE f_int1 = new.f_int1;
56153 END|
56154 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56155 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56156         
56157 # check trigger-3 success:      1
56158 DROP TRIGGER trg_1;
56159 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56160 f_int2 = CAST(f_char1 AS SIGNED INT),
56161 f_charbig = 'just inserted'
56162    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56163 DELETE FROM t0_aux
56164 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56165 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56166 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56167 'just inserted' FROM t0_template
56168 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56169 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
56170 BEGIN
56171 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56172 f_charbig = 'updated by trigger'
56173       WHERE f_int1 = - old.f_int1;
56174 END|
56175 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56176 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56177         
56178 # check trigger-4 success:      1
56179 DROP TRIGGER trg_1;
56180 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56181 f_int2 = CAST(f_char1 AS SIGNED INT),
56182 f_charbig = 'just inserted'
56183    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56184 DELETE FROM t0_aux
56185 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56186 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56187 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56188 'just inserted' FROM t0_template
56189 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56190 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
56191 BEGIN
56192 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56193 f_charbig = 'updated by trigger'
56194       WHERE f_int1 = new.f_int1;
56195 END|
56196 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56197 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56198         
56199 # check trigger-5 success:      1
56200 DROP TRIGGER trg_1;
56201 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56202 f_int2 = CAST(f_char1 AS SIGNED INT),
56203 f_charbig = 'just inserted'
56204    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56205 DELETE FROM t0_aux
56206 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56207 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56208 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56209 'just inserted' FROM t0_template
56210 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56211 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
56212 BEGIN
56213 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56214 f_charbig = 'updated by trigger'
56215       WHERE f_int1 = - old.f_int1;
56216 END|
56217 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56218 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56219         
56220 # check trigger-6 success:      1
56221 DROP TRIGGER trg_1;
56222 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56223 f_int2 = CAST(f_char1 AS SIGNED INT),
56224 f_charbig = 'just inserted'
56225    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56226 DELETE FROM t0_aux
56227 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56228 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56229 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56230 'just inserted' FROM t0_template
56231 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56232 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
56233 BEGIN
56234 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56235 f_charbig = 'updated by trigger'
56236       WHERE f_int1 = - old.f_int1;
56237 END|
56238 DELETE FROM t0_aux
56239 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56240         
56241 # check trigger-7 success:      1
56242 DROP TRIGGER trg_1;
56243 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56244 f_int2 = CAST(f_char1 AS SIGNED INT),
56245 f_charbig = 'just inserted'
56246    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56247 DELETE FROM t0_aux
56248 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56249 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56250 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56251 'just inserted' FROM t0_template
56252 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56253 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
56254 BEGIN
56255 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56256 f_charbig = 'updated by trigger'
56257       WHERE f_int1 = - old.f_int1;
56258 END|
56259 DELETE FROM t0_aux
56260 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56261         
56262 # check trigger-8 success:      1
56263 DROP TRIGGER trg_1;
56264 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56265 f_int2 = CAST(f_char1 AS SIGNED INT),
56266 f_charbig = 'just inserted'
56267    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56268 DELETE FROM t0_aux
56269 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56270 DELETE FROM t1
56271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56272 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
56273 BEGIN
56274 SET new.f_int1 = old.f_int1 + @max_row,
56275 new.f_int2 = old.f_int2 - @max_row,
56276 new.f_charbig = '####updated per update trigger####';
56277 END|
56278 UPDATE t1
56279 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
56280 f_charbig = '####updated per update statement itself####';
56281         
56282 # check trigger-9 success:      1
56283 DROP TRIGGER trg_2;
56284 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56285 f_int2 = CAST(f_char1 AS SIGNED INT),
56286 f_charbig = CONCAT('===',f_char1,'===');
56287 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
56288 BEGIN
56289 SET new.f_int1 = new.f_int1 + @max_row,
56290 new.f_int2 = new.f_int2 - @max_row,
56291 new.f_charbig = '####updated per update trigger####';
56292 END|
56293 UPDATE t1
56294 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
56295 f_charbig = '####updated per update statement itself####';
56296         
56297 # check trigger-10 success:     1
56298 DROP TRIGGER trg_2;
56299 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56300 f_int2 = CAST(f_char1 AS SIGNED INT),
56301 f_charbig = CONCAT('===',f_char1,'===');
56302 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
56303 BEGIN
56304 SET new.f_int1 = @my_max1 + @counter,
56305 new.f_int2 = @my_min2 - @counter,
56306 new.f_charbig = '####updated per insert trigger####';
56307 SET @counter = @counter + 1;
56308 END|
56309 SET @counter = 1;
56310 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
56311 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56312 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
56313 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
56314 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
56315 ORDER BY f_int1;
56316 DROP TRIGGER trg_3;
56317         
56318 # check trigger-11 success:     1
56319 DELETE FROM t1
56320 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
56321 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
56322 AND f_charbig = '####updated per insert trigger####';
56323 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
56324 BEGIN
56325 SET new.f_int1 = @my_max1 + @counter,
56326 new.f_int2 = @my_min2 - @counter,
56327 new.f_charbig = '####updated per insert trigger####';
56328 SET @counter = @counter + 1;
56329 END|
56330 SET @counter = 1;
56331 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
56332 INSERT INTO t1 (f_char1, f_char2, f_charbig)
56333 SELECT CAST(f_int1 AS CHAR),
56334 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
56335 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
56336 ORDER BY f_int1;
56337 DROP TRIGGER trg_3;
56338         
56339 # check trigger-12 success:     1
56340 DELETE FROM t1
56341 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
56342 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
56343 AND f_charbig = '####updated per insert trigger####';
56344 ANALYZE  TABLE t1;
56345 Table   Op      Msg_type        Msg_text
56346 test.t1 analyze status  OK
56347 CHECK    TABLE t1 EXTENDED;
56348 Table   Op      Msg_type        Msg_text
56349 test.t1 check   status  OK
56350 CHECKSUM TABLE t1 EXTENDED;
56351 Table   Checksum
56352 test.t1 <some_value>
56353 OPTIMIZE TABLE t1;
56354 Table   Op      Msg_type        Msg_text
56355 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
56356 test.t1 optimize        status  OK
56357 # check layout success:    1
56358 REPAIR   TABLE t1 EXTENDED;
56359 Table   Op      Msg_type        Msg_text
56360 test.t1 repair  note    The storage engine for the table doesn't support repair
56361 # check layout success:    1
56362 TRUNCATE t1;
56363         
56364 # check TRUNCATE success:       1
56365 # check layout success:    1
56366 # End usability test (inc/partition_check.inc)
56367 DROP TABLE t1;
56368 DROP TABLE IF EXISTS t1;
56369 CREATE TABLE t1 (
56370 f_int1 INTEGER,
56371 f_int2 INTEGER,
56372 f_char1 CHAR(20),
56373 f_char2 CHAR(20),
56374 f_charbig VARCHAR(1000)
56375 , UNIQUE INDEX uidx (f_int2,f_int1)
56377 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
56378 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56379 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
56380 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
56381 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
56382 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56383 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
56384 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
56385 # Start usability test (inc/partition_check.inc)
56386 create_command
56387 SHOW CREATE TABLE t1;
56388 Table   Create Table
56389 t1      CREATE TABLE `t1` (
56390   `f_int1` mediumint(9) DEFAULT NULL,
56391   `f_int2` mediumint(9) DEFAULT NULL,
56392   `f_char1` char(20) DEFAULT NULL,
56393   `f_char2` char(20) DEFAULT NULL,
56394   `f_charbig` varchar(1000) DEFAULT NULL,
56395   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
56396 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
56397 /*!50100 PARTITION BY HASH (f_int1 + f_int2)
56398 PARTITIONS 2 */
56400 # check prerequisites-1 success:    1
56401 # check COUNT(*) success:    1
56402 # check MIN/MAX(f_int1) success:    1
56403 # check MIN/MAX(f_int2) success:    1
56404 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56405 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
56406 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
56407 WHERE f_int1 IN (2,3);
56408 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
56409 # check prerequisites-3 success:    1
56410 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
56411 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56412 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
56413 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
56414 WHERE f_int1 IN (2,3);
56415 DELETE FROM t1 WHERE f_charbig = 'delete me';
56416 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56417 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
56418 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
56419 WHERE f_int1 IN (2,3);
56420 DELETE FROM t1 WHERE f_charbig = 'delete me';
56421 # check read via f_int1 success: 1
56422 # check read via f_int2 success: 1
56423         
56424 # check multiple-1 success:     1
56425 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
56426         
56427 # check multiple-2 success:     1
56428 INSERT INTO t1 SELECT * FROM t0_template
56429 WHERE MOD(f_int1,3) = 0;
56430         
56431 # check multiple-3 success:     1
56432 UPDATE t1 SET f_int1 = f_int1 + @max_row
56433 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
56434 AND @max_row_div2 + @max_row_div4;
56435         
56436 # check multiple-4 success:     1
56437 DELETE FROM t1
56438 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
56439 AND @max_row_div2 + @max_row_div4 + @max_row;
56440         
56441 # check multiple-5 success:     1
56442 SELECT COUNT(*) INTO @try_count FROM t0_template
56443 WHERE MOD(f_int1,3) = 0
56444 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56445 SELECT COUNT(*) INTO @clash_count
56446 FROM t1 INNER JOIN t0_template USING(f_int1)
56447 WHERE MOD(f_int1,3) = 0
56448 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56449 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
56450 INSERT INTO t1
56451 SET f_int1 = @cur_value , f_int2 = @cur_value,
56452 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
56453 f_charbig = '#SINGLE#';
56454         
56455 # check single-1 success:       1
56456 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
56457 INSERT INTO t1
56458 SET f_int1 = @cur_value , f_int2 = @cur_value,
56459 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
56460 f_charbig = '#SINGLE#';
56461         
56462 # check single-2 success:       1
56463 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
56464 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
56465 UPDATE t1 SET f_int1 = @cur_value2
56466 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
56467         
56468 # check single-3 success:       1
56469 SET @cur_value1= -1;
56470 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
56471 UPDATE t1 SET f_int1 = @cur_value1
56472 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
56473         
56474 # check single-4 success:       1
56475 SELECT MAX(f_int1) INTO @cur_value FROM t1;
56476 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
56477         
56478 # check single-5 success:       1
56479 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
56480         
56481 # check single-6 success:       1
56482 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
56483 Warnings:
56484 Warning 1264    Out of range value for column 'f_int1' at row 1
56485 Warning 1264    Out of range value for column 'f_int2' at row 1
56486         
56487 # check single-7 success:       1
56488 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
56489 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
56490 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
56491 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
56492 f_charbig = '#NULL#';
56493 INSERT INTO t1
56494 SET f_int1 = NULL , f_int2 = -@max_row,
56495 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
56496 f_charbig = '#NULL#';
56497 # check null success:    1
56498         
56499 # check null-1 success:         1
56500 UPDATE t1 SET f_int1 = -@max_row
56501 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
56502 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
56503         
56504 # check null-2 success:         1
56505 UPDATE t1 SET f_int1 = NULL
56506 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
56507 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
56508         
56509 # check null-3 success:         1
56510 DELETE FROM t1
56511 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
56512 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
56513         
56514 # check null-4 success:         1
56515 DELETE FROM t1
56516 WHERE f_int1 = 0 AND f_int2 = 0
56517 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
56518 AND f_charbig = '#NULL#';
56519 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56520 SELECT f_int1, f_int1, '', '', 'was inserted'
56521    FROM t0_template source_tab
56522 WHERE MOD(f_int1,3) = 0
56523 AND f_int1 BETWEEN @max_row_div2 AND @max_row
56524 ON DUPLICATE KEY
56525 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
56526 f_int2 = 2 * @max_row + source_tab.f_int1,
56527 f_charbig = 'was updated';
56528         
56529 # check unique-1-a success:     1
56530         
56531 # check unique-1-b success:     1
56532 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56533 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56534 f_int2 = CAST(f_char1 AS SIGNED INT),
56535 f_charbig = CONCAT('===',f_char1,'===')
56536 WHERE f_charbig = 'was updated';
56537 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56538 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
56539    FROM t0_template source_tab
56540 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56541         
56542 # check replace success:        1
56543 DELETE FROM t1
56544 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
56545 DELETE FROM t1
56546 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
56547 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
56548 UPDATE t1 SET f_int2 = f_int1,
56549 f_char1 = CAST(f_int1 AS CHAR),
56550 f_char2 = CAST(f_int1 AS CHAR),
56551 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
56552 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
56553 SET AUTOCOMMIT= 0;
56554 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56555 SELECT f_int1, f_int1, '', '', 'was inserted'
56556 FROM t0_template source_tab
56557 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56558         
56559 # check transactions-1 success:         1
56560 COMMIT WORK;
56561         
56562 # check transactions-2 success:         1
56563 ROLLBACK WORK;
56564         
56565 # check transactions-3 success:         1
56566 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56567 COMMIT WORK;
56568 ROLLBACK WORK;
56569         
56570 # check transactions-4 success:         1
56571 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56572 SELECT f_int1, f_int1, '', '', 'was inserted'
56573 FROM t0_template source_tab
56574 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56575         
56576 # check transactions-5 success:         1
56577 ROLLBACK WORK;
56578         
56579 # check transactions-6 success:         1
56580 # INFO: Storage engine used for t1 seems to be transactional.
56581 COMMIT;
56582         
56583 # check transactions-7 success:         1
56584 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56585 COMMIT WORK;
56586 SET @@session.sql_mode = 'traditional';
56587 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
56588 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56589 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
56590 '', '', 'was inserted' FROM t0_template
56591 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
56592 ERROR 22012: Division by 0
56593 COMMIT;
56594         
56595 # check transactions-8 success:         1
56596 # INFO: Storage engine used for t1 seems to be able to revert
56597 #       changes made by the failing statement.
56598 SET @@session.sql_mode = '';
56599 SET AUTOCOMMIT= 1;
56600 DELETE FROM t1 WHERE f_charbig = 'was inserted';
56601 COMMIT WORK;
56602 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
56603         
56604 # check special-1 success:      1
56605 UPDATE t1 SET f_charbig = '';
56606         
56607 # check special-2 success:      1
56608 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
56609 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56610 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
56611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56612 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56613 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56614 'just inserted' FROM t0_template
56615 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56616 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
56617 BEGIN
56618 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56619 f_charbig = 'updated by trigger'
56620       WHERE f_int1 = new.f_int1;
56621 END|
56622 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56623 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
56624 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56625         
56626 # check trigger-1 success:      1
56627 DROP TRIGGER trg_1;
56628 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56629 f_int2 = CAST(f_char1 AS SIGNED INT),
56630 f_charbig = 'just inserted'
56631    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56632 DELETE FROM t0_aux
56633 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56634 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56635 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56636 'just inserted' FROM t0_template
56637 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56638 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
56639 BEGIN
56640 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56641 f_charbig = 'updated by trigger'
56642       WHERE f_int1 = new.f_int1;
56643 END|
56644 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56645 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
56646 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56647         
56648 # check trigger-2 success:      1
56649 DROP TRIGGER trg_1;
56650 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56651 f_int2 = CAST(f_char1 AS SIGNED INT),
56652 f_charbig = 'just inserted'
56653    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56654 DELETE FROM t0_aux
56655 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56656 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56657 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56658 'just inserted' FROM t0_template
56659 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56660 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
56661 BEGIN
56662 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56663 f_charbig = 'updated by trigger'
56664       WHERE f_int1 = new.f_int1;
56665 END|
56666 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56667 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56668         
56669 # check trigger-3 success:      1
56670 DROP TRIGGER trg_1;
56671 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56672 f_int2 = CAST(f_char1 AS SIGNED INT),
56673 f_charbig = 'just inserted'
56674    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56675 DELETE FROM t0_aux
56676 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56677 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56678 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56679 'just inserted' FROM t0_template
56680 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56681 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
56682 BEGIN
56683 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56684 f_charbig = 'updated by trigger'
56685       WHERE f_int1 = - old.f_int1;
56686 END|
56687 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56688 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56689         
56690 # check trigger-4 success:      1
56691 DROP TRIGGER trg_1;
56692 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56693 f_int2 = CAST(f_char1 AS SIGNED INT),
56694 f_charbig = 'just inserted'
56695    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56696 DELETE FROM t0_aux
56697 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56698 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56699 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56700 'just inserted' FROM t0_template
56701 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56702 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
56703 BEGIN
56704 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56705 f_charbig = 'updated by trigger'
56706       WHERE f_int1 = new.f_int1;
56707 END|
56708 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56709 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56710         
56711 # check trigger-5 success:      1
56712 DROP TRIGGER trg_1;
56713 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56714 f_int2 = CAST(f_char1 AS SIGNED INT),
56715 f_charbig = 'just inserted'
56716    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56717 DELETE FROM t0_aux
56718 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56719 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56720 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56721 'just inserted' FROM t0_template
56722 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56723 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
56724 BEGIN
56725 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56726 f_charbig = 'updated by trigger'
56727       WHERE f_int1 = - old.f_int1;
56728 END|
56729 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
56730 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56731         
56732 # check trigger-6 success:      1
56733 DROP TRIGGER trg_1;
56734 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56735 f_int2 = CAST(f_char1 AS SIGNED INT),
56736 f_charbig = 'just inserted'
56737    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56738 DELETE FROM t0_aux
56739 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56740 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56741 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56742 'just inserted' FROM t0_template
56743 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56744 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
56745 BEGIN
56746 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56747 f_charbig = 'updated by trigger'
56748       WHERE f_int1 = - old.f_int1;
56749 END|
56750 DELETE FROM t0_aux
56751 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56752         
56753 # check trigger-7 success:      1
56754 DROP TRIGGER trg_1;
56755 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56756 f_int2 = CAST(f_char1 AS SIGNED INT),
56757 f_charbig = 'just inserted'
56758    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56759 DELETE FROM t0_aux
56760 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56761 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
56762 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
56763 'just inserted' FROM t0_template
56764 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56765 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
56766 BEGIN
56767 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
56768 f_charbig = 'updated by trigger'
56769       WHERE f_int1 = - old.f_int1;
56770 END|
56771 DELETE FROM t0_aux
56772 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
56773         
56774 # check trigger-8 success:      1
56775 DROP TRIGGER trg_1;
56776 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56777 f_int2 = CAST(f_char1 AS SIGNED INT),
56778 f_charbig = 'just inserted'
56779    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
56780 DELETE FROM t0_aux
56781 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56782 DELETE FROM t1
56783 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
56784 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
56785 BEGIN
56786 SET new.f_int1 = old.f_int1 + @max_row,
56787 new.f_int2 = old.f_int2 - @max_row,
56788 new.f_charbig = '####updated per update trigger####';
56789 END|
56790 UPDATE t1
56791 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
56792 f_charbig = '####updated per update statement itself####';
56793         
56794 # check trigger-9 success:      1
56795 DROP TRIGGER trg_2;
56796 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56797 f_int2 = CAST(f_char1 AS SIGNED INT),
56798 f_charbig = CONCAT('===',f_char1,'===');
56799 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
56800 BEGIN
56801 SET new.f_int1 = new.f_int1 + @max_row,
56802 new.f_int2 = new.f_int2 - @max_row,
56803 new.f_charbig = '####updated per update trigger####';
56804 END|
56805 UPDATE t1
56806 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
56807 f_charbig = '####updated per update statement itself####';
56808         
56809 # check trigger-10 success:     1
56810 DROP TRIGGER trg_2;
56811 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
56812 f_int2 = CAST(f_char1 AS SIGNED INT),
56813 f_charbig = CONCAT('===',f_char1,'===');
56814 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
56815 BEGIN
56816 SET new.f_int1 = @my_max1 + @counter,
56817 new.f_int2 = @my_min2 - @counter,
56818 new.f_charbig = '####updated per insert trigger####';
56819 SET @counter = @counter + 1;
56820 END|
56821 SET @counter = 1;
56822 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
56823 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56824 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
56825 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
56826 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
56827 ORDER BY f_int1;
56828 DROP TRIGGER trg_3;
56829         
56830 # check trigger-11 success:     1
56831 DELETE FROM t1
56832 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
56833 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
56834 AND f_charbig = '####updated per insert trigger####';
56835 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
56836 BEGIN
56837 SET new.f_int1 = @my_max1 + @counter,
56838 new.f_int2 = @my_min2 - @counter,
56839 new.f_charbig = '####updated per insert trigger####';
56840 SET @counter = @counter + 1;
56841 END|
56842 SET @counter = 1;
56843 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
56844 INSERT INTO t1 (f_char1, f_char2, f_charbig)
56845 SELECT CAST(f_int1 AS CHAR),
56846 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
56847 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
56848 ORDER BY f_int1;
56849 DROP TRIGGER trg_3;
56850         
56851 # check trigger-12 success:     1
56852 DELETE FROM t1
56853 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
56854 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
56855 AND f_charbig = '####updated per insert trigger####';
56856 ANALYZE  TABLE t1;
56857 Table   Op      Msg_type        Msg_text
56858 test.t1 analyze status  OK
56859 CHECK    TABLE t1 EXTENDED;
56860 Table   Op      Msg_type        Msg_text
56861 test.t1 check   status  OK
56862 CHECKSUM TABLE t1 EXTENDED;
56863 Table   Checksum
56864 test.t1 <some_value>
56865 OPTIMIZE TABLE t1;
56866 Table   Op      Msg_type        Msg_text
56867 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
56868 test.t1 optimize        status  OK
56869 # check layout success:    1
56870 REPAIR   TABLE t1 EXTENDED;
56871 Table   Op      Msg_type        Msg_text
56872 test.t1 repair  note    The storage engine for the table doesn't support repair
56873 # check layout success:    1
56874 TRUNCATE t1;
56875         
56876 # check TRUNCATE success:       1
56877 # check layout success:    1
56878 # End usability test (inc/partition_check.inc)
56879 DROP TABLE t1;
56880 CREATE TABLE t1 (
56881 f_int1 INTEGER,
56882 f_int2 INTEGER,
56883 f_char1 CHAR(20),
56884 f_char2 CHAR(20),
56885 f_charbig VARCHAR(1000)
56886 , UNIQUE INDEX uidx (f_int2,f_int1)
56888 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
56889 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56890 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
56891 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
56892 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
56893 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
56894 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
56895 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
56896 # Start usability test (inc/partition_check.inc)
56897 create_command
56898 SHOW CREATE TABLE t1;
56899 Table   Create Table
56900 t1      CREATE TABLE `t1` (
56901   `f_int1` mediumint(9) DEFAULT NULL,
56902   `f_int2` mediumint(9) DEFAULT NULL,
56903   `f_char1` char(20) DEFAULT NULL,
56904   `f_char2` char(20) DEFAULT NULL,
56905   `f_charbig` varchar(1000) DEFAULT NULL,
56906   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
56907 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
56908 /*!50100 PARTITION BY KEY (f_int1,f_int2)
56909 PARTITIONS 5 */
56911 # check prerequisites-1 success:    1
56912 # check COUNT(*) success:    1
56913 # check MIN/MAX(f_int1) success:    1
56914 # check MIN/MAX(f_int2) success:    1
56915 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56916 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
56917 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
56918 WHERE f_int1 IN (2,3);
56919 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
56920 # check prerequisites-3 success:    1
56921 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
56922 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56923 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
56924 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
56925 WHERE f_int1 IN (2,3);
56926 DELETE FROM t1 WHERE f_charbig = 'delete me';
56927 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
56928 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
56929 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
56930 WHERE f_int1 IN (2,3);
56931 DELETE FROM t1 WHERE f_charbig = 'delete me';
56932 # check read via f_int1 success: 1
56933 # check read via f_int2 success: 1
56934         
56935 # check multiple-1 success:     1
56936 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
56937         
56938 # check multiple-2 success:     1
56939 INSERT INTO t1 SELECT * FROM t0_template
56940 WHERE MOD(f_int1,3) = 0;
56941         
56942 # check multiple-3 success:     1
56943 UPDATE t1 SET f_int1 = f_int1 + @max_row
56944 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
56945 AND @max_row_div2 + @max_row_div4;
56946         
56947 # check multiple-4 success:     1
56948 DELETE FROM t1
56949 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
56950 AND @max_row_div2 + @max_row_div4 + @max_row;
56951         
56952 # check multiple-5 success:     1
56953 SELECT COUNT(*) INTO @try_count FROM t0_template
56954 WHERE MOD(f_int1,3) = 0
56955 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56956 SELECT COUNT(*) INTO @clash_count
56957 FROM t1 INNER JOIN t0_template USING(f_int1)
56958 WHERE MOD(f_int1,3) = 0
56959 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
56960 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
56961 INSERT INTO t1
56962 SET f_int1 = @cur_value , f_int2 = @cur_value,
56963 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
56964 f_charbig = '#SINGLE#';
56965         
56966 # check single-1 success:       1
56967 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
56968 INSERT INTO t1
56969 SET f_int1 = @cur_value , f_int2 = @cur_value,
56970 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
56971 f_charbig = '#SINGLE#';
56972         
56973 # check single-2 success:       1
56974 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
56975 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
56976 UPDATE t1 SET f_int1 = @cur_value2
56977 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
56978         
56979 # check single-3 success:       1
56980 SET @cur_value1= -1;
56981 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
56982 UPDATE t1 SET f_int1 = @cur_value1
56983 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
56984         
56985 # check single-4 success:       1
56986 SELECT MAX(f_int1) INTO @cur_value FROM t1;
56987 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
56988         
56989 # check single-5 success:       1
56990 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
56991         
56992 # check single-6 success:       1
56993 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
56994 Warnings:
56995 Warning 1264    Out of range value for column 'f_int1' at row 1
56996 Warning 1264    Out of range value for column 'f_int2' at row 1
56997         
56998 # check single-7 success:       1
56999 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
57000 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
57001 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
57002 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
57003 f_charbig = '#NULL#';
57004 INSERT INTO t1
57005 SET f_int1 = NULL , f_int2 = -@max_row,
57006 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
57007 f_charbig = '#NULL#';
57008 # check null success:    1
57009         
57010 # check null-1 success:         1
57011 UPDATE t1 SET f_int1 = -@max_row
57012 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57013 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57014         
57015 # check null-2 success:         1
57016 UPDATE t1 SET f_int1 = NULL
57017 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57018 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57019         
57020 # check null-3 success:         1
57021 DELETE FROM t1
57022 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57023 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57024         
57025 # check null-4 success:         1
57026 DELETE FROM t1
57027 WHERE f_int1 = 0 AND f_int2 = 0
57028 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
57029 AND f_charbig = '#NULL#';
57030 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57031 SELECT f_int1, f_int1, '', '', 'was inserted'
57032    FROM t0_template source_tab
57033 WHERE MOD(f_int1,3) = 0
57034 AND f_int1 BETWEEN @max_row_div2 AND @max_row
57035 ON DUPLICATE KEY
57036 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
57037 f_int2 = 2 * @max_row + source_tab.f_int1,
57038 f_charbig = 'was updated';
57039         
57040 # check unique-1-a success:     1
57041         
57042 # check unique-1-b success:     1
57043 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57044 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57045 f_int2 = CAST(f_char1 AS SIGNED INT),
57046 f_charbig = CONCAT('===',f_char1,'===')
57047 WHERE f_charbig = 'was updated';
57048 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57049 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
57050    FROM t0_template source_tab
57051 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
57052         
57053 # check replace success:        1
57054 DELETE FROM t1
57055 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
57056 DELETE FROM t1
57057 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
57058 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
57059 UPDATE t1 SET f_int2 = f_int1,
57060 f_char1 = CAST(f_int1 AS CHAR),
57061 f_char2 = CAST(f_int1 AS CHAR),
57062 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
57063 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
57064 SET AUTOCOMMIT= 0;
57065 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57066 SELECT f_int1, f_int1, '', '', 'was inserted'
57067 FROM t0_template source_tab
57068 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57069         
57070 # check transactions-1 success:         1
57071 COMMIT WORK;
57072         
57073 # check transactions-2 success:         1
57074 ROLLBACK WORK;
57075         
57076 # check transactions-3 success:         1
57077 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57078 COMMIT WORK;
57079 ROLLBACK WORK;
57080         
57081 # check transactions-4 success:         1
57082 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57083 SELECT f_int1, f_int1, '', '', 'was inserted'
57084 FROM t0_template source_tab
57085 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57086         
57087 # check transactions-5 success:         1
57088 ROLLBACK WORK;
57089         
57090 # check transactions-6 success:         1
57091 # INFO: Storage engine used for t1 seems to be transactional.
57092 COMMIT;
57093         
57094 # check transactions-7 success:         1
57095 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57096 COMMIT WORK;
57097 SET @@session.sql_mode = 'traditional';
57098 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
57099 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57100 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
57101 '', '', 'was inserted' FROM t0_template
57102 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57103 ERROR 22012: Division by 0
57104 COMMIT;
57105         
57106 # check transactions-8 success:         1
57107 # INFO: Storage engine used for t1 seems to be able to revert
57108 #       changes made by the failing statement.
57109 SET @@session.sql_mode = '';
57110 SET AUTOCOMMIT= 1;
57111 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57112 COMMIT WORK;
57113 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
57114         
57115 # check special-1 success:      1
57116 UPDATE t1 SET f_charbig = '';
57117         
57118 # check special-2 success:      1
57119 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
57120 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57121 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
57122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57123 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57124 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57125 'just inserted' FROM t0_template
57126 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57127 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
57128 BEGIN
57129 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57130 f_charbig = 'updated by trigger'
57131       WHERE f_int1 = new.f_int1;
57132 END|
57133 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57134 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
57135 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57136         
57137 # check trigger-1 success:      1
57138 DROP TRIGGER trg_1;
57139 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57140 f_int2 = CAST(f_char1 AS SIGNED INT),
57141 f_charbig = 'just inserted'
57142    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57143 DELETE FROM t0_aux
57144 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57145 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57146 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57147 'just inserted' FROM t0_template
57148 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57149 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
57150 BEGIN
57151 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57152 f_charbig = 'updated by trigger'
57153       WHERE f_int1 = new.f_int1;
57154 END|
57155 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57156 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
57157 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57158         
57159 # check trigger-2 success:      1
57160 DROP TRIGGER trg_1;
57161 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57162 f_int2 = CAST(f_char1 AS SIGNED INT),
57163 f_charbig = 'just inserted'
57164    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57165 DELETE FROM t0_aux
57166 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57167 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57168 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57169 'just inserted' FROM t0_template
57170 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57171 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
57172 BEGIN
57173 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57174 f_charbig = 'updated by trigger'
57175       WHERE f_int1 = new.f_int1;
57176 END|
57177 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57178 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57179         
57180 # check trigger-3 success:      1
57181 DROP TRIGGER trg_1;
57182 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57183 f_int2 = CAST(f_char1 AS SIGNED INT),
57184 f_charbig = 'just inserted'
57185    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57186 DELETE FROM t0_aux
57187 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57188 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57189 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57190 'just inserted' FROM t0_template
57191 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57192 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
57193 BEGIN
57194 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57195 f_charbig = 'updated by trigger'
57196       WHERE f_int1 = - old.f_int1;
57197 END|
57198 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57199 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57200         
57201 # check trigger-4 success:      1
57202 DROP TRIGGER trg_1;
57203 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57204 f_int2 = CAST(f_char1 AS SIGNED INT),
57205 f_charbig = 'just inserted'
57206    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57207 DELETE FROM t0_aux
57208 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57209 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57210 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57211 'just inserted' FROM t0_template
57212 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57213 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
57214 BEGIN
57215 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57216 f_charbig = 'updated by trigger'
57217       WHERE f_int1 = new.f_int1;
57218 END|
57219 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57220 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57221         
57222 # check trigger-5 success:      1
57223 DROP TRIGGER trg_1;
57224 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57225 f_int2 = CAST(f_char1 AS SIGNED INT),
57226 f_charbig = 'just inserted'
57227    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57228 DELETE FROM t0_aux
57229 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57230 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57231 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57232 'just inserted' FROM t0_template
57233 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57234 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
57235 BEGIN
57236 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57237 f_charbig = 'updated by trigger'
57238       WHERE f_int1 = - old.f_int1;
57239 END|
57240 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57241 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57242         
57243 # check trigger-6 success:      1
57244 DROP TRIGGER trg_1;
57245 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57246 f_int2 = CAST(f_char1 AS SIGNED INT),
57247 f_charbig = 'just inserted'
57248    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57249 DELETE FROM t0_aux
57250 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57251 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57252 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57253 'just inserted' FROM t0_template
57254 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57255 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
57256 BEGIN
57257 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57258 f_charbig = 'updated by trigger'
57259       WHERE f_int1 = - old.f_int1;
57260 END|
57261 DELETE FROM t0_aux
57262 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57263         
57264 # check trigger-7 success:      1
57265 DROP TRIGGER trg_1;
57266 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57267 f_int2 = CAST(f_char1 AS SIGNED INT),
57268 f_charbig = 'just inserted'
57269    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57270 DELETE FROM t0_aux
57271 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57272 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57273 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57274 'just inserted' FROM t0_template
57275 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57276 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
57277 BEGIN
57278 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57279 f_charbig = 'updated by trigger'
57280       WHERE f_int1 = - old.f_int1;
57281 END|
57282 DELETE FROM t0_aux
57283 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57284         
57285 # check trigger-8 success:      1
57286 DROP TRIGGER trg_1;
57287 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57288 f_int2 = CAST(f_char1 AS SIGNED INT),
57289 f_charbig = 'just inserted'
57290    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57291 DELETE FROM t0_aux
57292 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57293 DELETE FROM t1
57294 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57295 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
57296 BEGIN
57297 SET new.f_int1 = old.f_int1 + @max_row,
57298 new.f_int2 = old.f_int2 - @max_row,
57299 new.f_charbig = '####updated per update trigger####';
57300 END|
57301 UPDATE t1
57302 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
57303 f_charbig = '####updated per update statement itself####';
57304         
57305 # check trigger-9 success:      1
57306 DROP TRIGGER trg_2;
57307 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57308 f_int2 = CAST(f_char1 AS SIGNED INT),
57309 f_charbig = CONCAT('===',f_char1,'===');
57310 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
57311 BEGIN
57312 SET new.f_int1 = new.f_int1 + @max_row,
57313 new.f_int2 = new.f_int2 - @max_row,
57314 new.f_charbig = '####updated per update trigger####';
57315 END|
57316 UPDATE t1
57317 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
57318 f_charbig = '####updated per update statement itself####';
57319         
57320 # check trigger-10 success:     1
57321 DROP TRIGGER trg_2;
57322 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57323 f_int2 = CAST(f_char1 AS SIGNED INT),
57324 f_charbig = CONCAT('===',f_char1,'===');
57325 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
57326 BEGIN
57327 SET new.f_int1 = @my_max1 + @counter,
57328 new.f_int2 = @my_min2 - @counter,
57329 new.f_charbig = '####updated per insert trigger####';
57330 SET @counter = @counter + 1;
57331 END|
57332 SET @counter = 1;
57333 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
57334 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57335 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
57336 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
57337 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
57338 ORDER BY f_int1;
57339 DROP TRIGGER trg_3;
57340         
57341 # check trigger-11 success:     1
57342 DELETE FROM t1
57343 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
57344 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
57345 AND f_charbig = '####updated per insert trigger####';
57346 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
57347 BEGIN
57348 SET new.f_int1 = @my_max1 + @counter,
57349 new.f_int2 = @my_min2 - @counter,
57350 new.f_charbig = '####updated per insert trigger####';
57351 SET @counter = @counter + 1;
57352 END|
57353 SET @counter = 1;
57354 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
57355 INSERT INTO t1 (f_char1, f_char2, f_charbig)
57356 SELECT CAST(f_int1 AS CHAR),
57357 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
57358 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
57359 ORDER BY f_int1;
57360 DROP TRIGGER trg_3;
57361         
57362 # check trigger-12 success:     1
57363 DELETE FROM t1
57364 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
57365 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
57366 AND f_charbig = '####updated per insert trigger####';
57367 ANALYZE  TABLE t1;
57368 Table   Op      Msg_type        Msg_text
57369 test.t1 analyze status  OK
57370 CHECK    TABLE t1 EXTENDED;
57371 Table   Op      Msg_type        Msg_text
57372 test.t1 check   status  OK
57373 CHECKSUM TABLE t1 EXTENDED;
57374 Table   Checksum
57375 test.t1 <some_value>
57376 OPTIMIZE TABLE t1;
57377 Table   Op      Msg_type        Msg_text
57378 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
57379 test.t1 optimize        status  OK
57380 # check layout success:    1
57381 REPAIR   TABLE t1 EXTENDED;
57382 Table   Op      Msg_type        Msg_text
57383 test.t1 repair  note    The storage engine for the table doesn't support repair
57384 # check layout success:    1
57385 TRUNCATE t1;
57386         
57387 # check TRUNCATE success:       1
57388 # check layout success:    1
57389 # End usability test (inc/partition_check.inc)
57390 DROP TABLE t1;
57391 CREATE TABLE t1 (
57392 f_int1 INTEGER,
57393 f_int2 INTEGER,
57394 f_char1 CHAR(20),
57395 f_char2 CHAR(20),
57396 f_charbig VARCHAR(1000)
57397 , UNIQUE INDEX uidx (f_int2,f_int1)
57399 PARTITION BY LIST(MOD(f_int1 + f_int2,4))
57400 (PARTITION part_3 VALUES IN (-3),
57401 PARTITION part_2 VALUES IN (-2),
57402 PARTITION part_1 VALUES IN (-1),
57403 PARTITION part_N VALUES IN (NULL),
57404 PARTITION part0 VALUES IN (0),
57405 PARTITION part1 VALUES IN (1),
57406 PARTITION part2 VALUES IN (2),
57407 PARTITION part3 VALUES IN (3));
57408 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57409 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
57410 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
57411 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
57412 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57413 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
57414 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
57415 # Start usability test (inc/partition_check.inc)
57416 create_command
57417 SHOW CREATE TABLE t1;
57418 Table   Create Table
57419 t1      CREATE TABLE `t1` (
57420   `f_int1` mediumint(9) DEFAULT NULL,
57421   `f_int2` mediumint(9) DEFAULT NULL,
57422   `f_char1` char(20) DEFAULT NULL,
57423   `f_char2` char(20) DEFAULT NULL,
57424   `f_charbig` varchar(1000) DEFAULT NULL,
57425   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
57426 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
57427 /*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
57428 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
57429  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
57430  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
57431  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
57432  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
57433  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
57434  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
57435  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
57437 # check prerequisites-1 success:    1
57438 # check COUNT(*) success:    1
57439 # check MIN/MAX(f_int1) success:    1
57440 # check MIN/MAX(f_int2) success:    1
57441 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57442 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
57443 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
57444 WHERE f_int1 IN (2,3);
57445 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
57446 # check prerequisites-3 success:    1
57447 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
57448 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57449 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
57450 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
57451 WHERE f_int1 IN (2,3);
57452 DELETE FROM t1 WHERE f_charbig = 'delete me';
57453 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57454 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
57455 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
57456 WHERE f_int1 IN (2,3);
57457 DELETE FROM t1 WHERE f_charbig = 'delete me';
57458 # check read via f_int1 success: 1
57459 # check read via f_int2 success: 1
57460         
57461 # check multiple-1 success:     1
57462 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
57463         
57464 # check multiple-2 success:     1
57465 INSERT INTO t1 SELECT * FROM t0_template
57466 WHERE MOD(f_int1,3) = 0;
57467         
57468 # check multiple-3 success:     1
57469 UPDATE t1 SET f_int1 = f_int1 + @max_row
57470 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
57471 AND @max_row_div2 + @max_row_div4;
57472         
57473 # check multiple-4 success:     1
57474 DELETE FROM t1
57475 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
57476 AND @max_row_div2 + @max_row_div4 + @max_row;
57477         
57478 # check multiple-5 success:     1
57479 SELECT COUNT(*) INTO @try_count FROM t0_template
57480 WHERE MOD(f_int1,3) = 0
57481 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
57482 SELECT COUNT(*) INTO @clash_count
57483 FROM t1 INNER JOIN t0_template USING(f_int1)
57484 WHERE MOD(f_int1,3) = 0
57485 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
57486 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
57487 INSERT INTO t1
57488 SET f_int1 = @cur_value , f_int2 = @cur_value,
57489 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
57490 f_charbig = '#SINGLE#';
57491         
57492 # check single-1 success:       1
57493 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
57494 INSERT INTO t1
57495 SET f_int1 = @cur_value , f_int2 = @cur_value,
57496 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
57497 f_charbig = '#SINGLE#';
57498         
57499 # check single-2 success:       1
57500 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
57501 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
57502 UPDATE t1 SET f_int1 = @cur_value2
57503 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
57504         
57505 # check single-3 success:       1
57506 SET @cur_value1= -1;
57507 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
57508 UPDATE t1 SET f_int1 = @cur_value1
57509 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
57510         
57511 # check single-4 success:       1
57512 SELECT MAX(f_int1) INTO @cur_value FROM t1;
57513 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
57514         
57515 # check single-5 success:       1
57516 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
57517         
57518 # check single-6 success:       1
57519 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
57520 Warnings:
57521 Warning 1264    Out of range value for column 'f_int1' at row 1
57522 Warning 1264    Out of range value for column 'f_int2' at row 1
57523         
57524 # check single-7 success:       1
57525 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
57526 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
57527 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
57528 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
57529 f_charbig = '#NULL#';
57530 INSERT INTO t1
57531 SET f_int1 = NULL , f_int2 = -@max_row,
57532 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
57533 f_charbig = '#NULL#';
57534 # check null success:    1
57535         
57536 # check null-1 success:         1
57537 UPDATE t1 SET f_int1 = -@max_row
57538 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57539 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57540         
57541 # check null-2 success:         1
57542 UPDATE t1 SET f_int1 = NULL
57543 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57544 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57545         
57546 # check null-3 success:         1
57547 DELETE FROM t1
57548 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
57549 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
57550         
57551 # check null-4 success:         1
57552 DELETE FROM t1
57553 WHERE f_int1 = 0 AND f_int2 = 0
57554 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
57555 AND f_charbig = '#NULL#';
57556 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57557 SELECT f_int1, f_int1, '', '', 'was inserted'
57558    FROM t0_template source_tab
57559 WHERE MOD(f_int1,3) = 0
57560 AND f_int1 BETWEEN @max_row_div2 AND @max_row
57561 ON DUPLICATE KEY
57562 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
57563 f_int2 = 2 * @max_row + source_tab.f_int1,
57564 f_charbig = 'was updated';
57565         
57566 # check unique-1-a success:     1
57567         
57568 # check unique-1-b success:     1
57569 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57570 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57571 f_int2 = CAST(f_char1 AS SIGNED INT),
57572 f_charbig = CONCAT('===',f_char1,'===')
57573 WHERE f_charbig = 'was updated';
57574 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57575 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
57576    FROM t0_template source_tab
57577 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
57578         
57579 # check replace success:        1
57580 DELETE FROM t1
57581 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
57582 DELETE FROM t1
57583 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
57584 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
57585 UPDATE t1 SET f_int2 = f_int1,
57586 f_char1 = CAST(f_int1 AS CHAR),
57587 f_char2 = CAST(f_int1 AS CHAR),
57588 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
57589 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
57590 SET AUTOCOMMIT= 0;
57591 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57592 SELECT f_int1, f_int1, '', '', 'was inserted'
57593 FROM t0_template source_tab
57594 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57595         
57596 # check transactions-1 success:         1
57597 COMMIT WORK;
57598         
57599 # check transactions-2 success:         1
57600 ROLLBACK WORK;
57601         
57602 # check transactions-3 success:         1
57603 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57604 COMMIT WORK;
57605 ROLLBACK WORK;
57606         
57607 # check transactions-4 success:         1
57608 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57609 SELECT f_int1, f_int1, '', '', 'was inserted'
57610 FROM t0_template source_tab
57611 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57612         
57613 # check transactions-5 success:         1
57614 ROLLBACK WORK;
57615         
57616 # check transactions-6 success:         1
57617 # INFO: Storage engine used for t1 seems to be transactional.
57618 COMMIT;
57619         
57620 # check transactions-7 success:         1
57621 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57622 COMMIT WORK;
57623 SET @@session.sql_mode = 'traditional';
57624 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
57625 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57626 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
57627 '', '', 'was inserted' FROM t0_template
57628 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
57629 ERROR 22012: Division by 0
57630 COMMIT;
57631         
57632 # check transactions-8 success:         1
57633 # INFO: Storage engine used for t1 seems to be able to revert
57634 #       changes made by the failing statement.
57635 SET @@session.sql_mode = '';
57636 SET AUTOCOMMIT= 1;
57637 DELETE FROM t1 WHERE f_charbig = 'was inserted';
57638 COMMIT WORK;
57639 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
57640         
57641 # check special-1 success:      1
57642 UPDATE t1 SET f_charbig = '';
57643         
57644 # check special-2 success:      1
57645 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
57646 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57647 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
57648 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57649 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57650 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57651 'just inserted' FROM t0_template
57652 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57653 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
57654 BEGIN
57655 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57656 f_charbig = 'updated by trigger'
57657       WHERE f_int1 = new.f_int1;
57658 END|
57659 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57660 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
57661 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57662         
57663 # check trigger-1 success:      1
57664 DROP TRIGGER trg_1;
57665 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57666 f_int2 = CAST(f_char1 AS SIGNED INT),
57667 f_charbig = 'just inserted'
57668    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57669 DELETE FROM t0_aux
57670 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57671 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57672 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57673 'just inserted' FROM t0_template
57674 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57675 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
57676 BEGIN
57677 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57678 f_charbig = 'updated by trigger'
57679       WHERE f_int1 = new.f_int1;
57680 END|
57681 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57682 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
57683 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57684         
57685 # check trigger-2 success:      1
57686 DROP TRIGGER trg_1;
57687 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57688 f_int2 = CAST(f_char1 AS SIGNED INT),
57689 f_charbig = 'just inserted'
57690    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57691 DELETE FROM t0_aux
57692 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57693 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57694 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57695 'just inserted' FROM t0_template
57696 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57697 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
57698 BEGIN
57699 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57700 f_charbig = 'updated by trigger'
57701       WHERE f_int1 = new.f_int1;
57702 END|
57703 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57704 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57705         
57706 # check trigger-3 success:      1
57707 DROP TRIGGER trg_1;
57708 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57709 f_int2 = CAST(f_char1 AS SIGNED INT),
57710 f_charbig = 'just inserted'
57711    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57712 DELETE FROM t0_aux
57713 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57714 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57715 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57716 'just inserted' FROM t0_template
57717 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57718 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
57719 BEGIN
57720 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57721 f_charbig = 'updated by trigger'
57722       WHERE f_int1 = - old.f_int1;
57723 END|
57724 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57725 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57726         
57727 # check trigger-4 success:      1
57728 DROP TRIGGER trg_1;
57729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57730 f_int2 = CAST(f_char1 AS SIGNED INT),
57731 f_charbig = 'just inserted'
57732    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57733 DELETE FROM t0_aux
57734 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57735 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57736 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57737 'just inserted' FROM t0_template
57738 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57739 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
57740 BEGIN
57741 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57742 f_charbig = 'updated by trigger'
57743       WHERE f_int1 = new.f_int1;
57744 END|
57745 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57746 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57747         
57748 # check trigger-5 success:      1
57749 DROP TRIGGER trg_1;
57750 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57751 f_int2 = CAST(f_char1 AS SIGNED INT),
57752 f_charbig = 'just inserted'
57753    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57754 DELETE FROM t0_aux
57755 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57758 'just inserted' FROM t0_template
57759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57760 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
57761 BEGIN
57762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57763 f_charbig = 'updated by trigger'
57764       WHERE f_int1 = - old.f_int1;
57765 END|
57766 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
57767 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57768         
57769 # check trigger-6 success:      1
57770 DROP TRIGGER trg_1;
57771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57772 f_int2 = CAST(f_char1 AS SIGNED INT),
57773 f_charbig = 'just inserted'
57774    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57775 DELETE FROM t0_aux
57776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57777 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57778 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57779 'just inserted' FROM t0_template
57780 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57781 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
57782 BEGIN
57783 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57784 f_charbig = 'updated by trigger'
57785       WHERE f_int1 = - old.f_int1;
57786 END|
57787 DELETE FROM t0_aux
57788 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57789         
57790 # check trigger-7 success:      1
57791 DROP TRIGGER trg_1;
57792 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57793 f_int2 = CAST(f_char1 AS SIGNED INT),
57794 f_charbig = 'just inserted'
57795    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57796 DELETE FROM t0_aux
57797 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57798 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
57799 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
57800 'just inserted' FROM t0_template
57801 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57802 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
57803 BEGIN
57804 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
57805 f_charbig = 'updated by trigger'
57806       WHERE f_int1 = - old.f_int1;
57807 END|
57808 DELETE FROM t0_aux
57809 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
57810         
57811 # check trigger-8 success:      1
57812 DROP TRIGGER trg_1;
57813 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57814 f_int2 = CAST(f_char1 AS SIGNED INT),
57815 f_charbig = 'just inserted'
57816    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
57817 DELETE FROM t0_aux
57818 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57819 DELETE FROM t1
57820 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
57821 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
57822 BEGIN
57823 SET new.f_int1 = old.f_int1 + @max_row,
57824 new.f_int2 = old.f_int2 - @max_row,
57825 new.f_charbig = '####updated per update trigger####';
57826 END|
57827 UPDATE t1
57828 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
57829 f_charbig = '####updated per update statement itself####';
57830         
57831 # check trigger-9 success:      1
57832 DROP TRIGGER trg_2;
57833 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57834 f_int2 = CAST(f_char1 AS SIGNED INT),
57835 f_charbig = CONCAT('===',f_char1,'===');
57836 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
57837 BEGIN
57838 SET new.f_int1 = new.f_int1 + @max_row,
57839 new.f_int2 = new.f_int2 - @max_row,
57840 new.f_charbig = '####updated per update trigger####';
57841 END|
57842 UPDATE t1
57843 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
57844 f_charbig = '####updated per update statement itself####';
57845         
57846 # check trigger-10 success:     1
57847 DROP TRIGGER trg_2;
57848 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
57849 f_int2 = CAST(f_char1 AS SIGNED INT),
57850 f_charbig = CONCAT('===',f_char1,'===');
57851 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
57852 BEGIN
57853 SET new.f_int1 = @my_max1 + @counter,
57854 new.f_int2 = @my_min2 - @counter,
57855 new.f_charbig = '####updated per insert trigger####';
57856 SET @counter = @counter + 1;
57857 END|
57858 SET @counter = 1;
57859 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
57860 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57861 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
57862 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
57863 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
57864 ORDER BY f_int1;
57865 DROP TRIGGER trg_3;
57866         
57867 # check trigger-11 success:     1
57868 DELETE FROM t1
57869 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
57870 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
57871 AND f_charbig = '####updated per insert trigger####';
57872 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
57873 BEGIN
57874 SET new.f_int1 = @my_max1 + @counter,
57875 new.f_int2 = @my_min2 - @counter,
57876 new.f_charbig = '####updated per insert trigger####';
57877 SET @counter = @counter + 1;
57878 END|
57879 SET @counter = 1;
57880 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
57881 INSERT INTO t1 (f_char1, f_char2, f_charbig)
57882 SELECT CAST(f_int1 AS CHAR),
57883 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
57884 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
57885 ORDER BY f_int1;
57886 DROP TRIGGER trg_3;
57887         
57888 # check trigger-12 success:     1
57889 DELETE FROM t1
57890 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
57891 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
57892 AND f_charbig = '####updated per insert trigger####';
57893 ANALYZE  TABLE t1;
57894 Table   Op      Msg_type        Msg_text
57895 test.t1 analyze status  OK
57896 CHECK    TABLE t1 EXTENDED;
57897 Table   Op      Msg_type        Msg_text
57898 test.t1 check   status  OK
57899 CHECKSUM TABLE t1 EXTENDED;
57900 Table   Checksum
57901 test.t1 <some_value>
57902 OPTIMIZE TABLE t1;
57903 Table   Op      Msg_type        Msg_text
57904 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
57905 test.t1 optimize        status  OK
57906 # check layout success:    1
57907 REPAIR   TABLE t1 EXTENDED;
57908 Table   Op      Msg_type        Msg_text
57909 test.t1 repair  note    The storage engine for the table doesn't support repair
57910 # check layout success:    1
57911 TRUNCATE t1;
57912         
57913 # check TRUNCATE success:       1
57914 # check layout success:    1
57915 # End usability test (inc/partition_check.inc)
57916 DROP TABLE t1;
57917 CREATE TABLE t1 (
57918 f_int1 INTEGER,
57919 f_int2 INTEGER,
57920 f_char1 CHAR(20),
57921 f_char2 CHAR(20),
57922 f_charbig VARCHAR(1000)
57923 , UNIQUE INDEX uidx (f_int2,f_int1)
57925 PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
57926 (PARTITION parta VALUES LESS THAN (0),
57927 PARTITION partb VALUES LESS THAN (5),
57928 PARTITION partc VALUES LESS THAN (10),
57929 PARTITION partd VALUES LESS THAN (10 + 5),
57930 PARTITION parte VALUES LESS THAN (20),
57931 PARTITION partf VALUES LESS THAN (2147483646));
57932 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57933 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
57934 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
57935 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
57936 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
57937 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
57938 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
57939 # Start usability test (inc/partition_check.inc)
57940 create_command
57941 SHOW CREATE TABLE t1;
57942 Table   Create Table
57943 t1      CREATE TABLE `t1` (
57944   `f_int1` mediumint(9) DEFAULT NULL,
57945   `f_int2` mediumint(9) DEFAULT NULL,
57946   `f_char1` char(20) DEFAULT NULL,
57947   `f_char2` char(20) DEFAULT NULL,
57948   `f_charbig` varchar(1000) DEFAULT NULL,
57949   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
57950 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
57951 /*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
57952 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
57953  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
57954  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
57955  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
57956  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
57957  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
57959 # check prerequisites-1 success:    1
57960 # check COUNT(*) success:    1
57961 # check MIN/MAX(f_int1) success:    1
57962 # check MIN/MAX(f_int2) success:    1
57963 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57964 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
57965 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
57966 WHERE f_int1 IN (2,3);
57967 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
57968 # check prerequisites-3 success:    1
57969 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
57970 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57971 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
57972 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
57973 WHERE f_int1 IN (2,3);
57974 DELETE FROM t1 WHERE f_charbig = 'delete me';
57975 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
57976 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
57977 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
57978 WHERE f_int1 IN (2,3);
57979 DELETE FROM t1 WHERE f_charbig = 'delete me';
57980 # check read via f_int1 success: 1
57981 # check read via f_int2 success: 1
57982         
57983 # check multiple-1 success:     1
57984 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
57985         
57986 # check multiple-2 success:     1
57987 INSERT INTO t1 SELECT * FROM t0_template
57988 WHERE MOD(f_int1,3) = 0;
57989         
57990 # check multiple-3 success:     1
57991 UPDATE t1 SET f_int1 = f_int1 + @max_row
57992 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
57993 AND @max_row_div2 + @max_row_div4;
57994         
57995 # check multiple-4 success:     1
57996 DELETE FROM t1
57997 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
57998 AND @max_row_div2 + @max_row_div4 + @max_row;
57999         
58000 # check multiple-5 success:     1
58001 SELECT COUNT(*) INTO @try_count FROM t0_template
58002 WHERE MOD(f_int1,3) = 0
58003 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58004 SELECT COUNT(*) INTO @clash_count
58005 FROM t1 INNER JOIN t0_template USING(f_int1)
58006 WHERE MOD(f_int1,3) = 0
58007 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58008 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
58009 INSERT INTO t1
58010 SET f_int1 = @cur_value , f_int2 = @cur_value,
58011 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
58012 f_charbig = '#SINGLE#';
58013         
58014 # check single-1 success:       1
58015 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
58016 INSERT INTO t1
58017 SET f_int1 = @cur_value , f_int2 = @cur_value,
58018 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
58019 f_charbig = '#SINGLE#';
58020         
58021 # check single-2 success:       1
58022 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
58023 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
58024 UPDATE t1 SET f_int1 = @cur_value2
58025 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
58026         
58027 # check single-3 success:       1
58028 SET @cur_value1= -1;
58029 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
58030 UPDATE t1 SET f_int1 = @cur_value1
58031 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
58032         
58033 # check single-4 success:       1
58034 SELECT MAX(f_int1) INTO @cur_value FROM t1;
58035 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
58036         
58037 # check single-5 success:       1
58038 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
58039         
58040 # check single-6 success:       1
58041 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
58042 Warnings:
58043 Warning 1264    Out of range value for column 'f_int1' at row 1
58044 Warning 1264    Out of range value for column 'f_int2' at row 1
58045         
58046 # check single-7 success:       1
58047 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
58048 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
58049 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
58050 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
58051 f_charbig = '#NULL#';
58052 INSERT INTO t1
58053 SET f_int1 = NULL , f_int2 = -@max_row,
58054 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
58055 f_charbig = '#NULL#';
58056 # check null success:    1
58057         
58058 # check null-1 success:         1
58059 UPDATE t1 SET f_int1 = -@max_row
58060 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58061 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58062         
58063 # check null-2 success:         1
58064 UPDATE t1 SET f_int1 = NULL
58065 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58066 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58067         
58068 # check null-3 success:         1
58069 DELETE FROM t1
58070 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58071 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58072         
58073 # check null-4 success:         1
58074 DELETE FROM t1
58075 WHERE f_int1 = 0 AND f_int2 = 0
58076 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
58077 AND f_charbig = '#NULL#';
58078 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58079 SELECT f_int1, f_int1, '', '', 'was inserted'
58080    FROM t0_template source_tab
58081 WHERE MOD(f_int1,3) = 0
58082 AND f_int1 BETWEEN @max_row_div2 AND @max_row
58083 ON DUPLICATE KEY
58084 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
58085 f_int2 = 2 * @max_row + source_tab.f_int1,
58086 f_charbig = 'was updated';
58087         
58088 # check unique-1-a success:     1
58089         
58090 # check unique-1-b success:     1
58091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58092 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58093 f_int2 = CAST(f_char1 AS SIGNED INT),
58094 f_charbig = CONCAT('===',f_char1,'===')
58095 WHERE f_charbig = 'was updated';
58096 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58097 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
58098    FROM t0_template source_tab
58099 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58100         
58101 # check replace success:        1
58102 DELETE FROM t1
58103 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
58104 DELETE FROM t1
58105 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
58106 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
58107 UPDATE t1 SET f_int2 = f_int1,
58108 f_char1 = CAST(f_int1 AS CHAR),
58109 f_char2 = CAST(f_int1 AS CHAR),
58110 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
58111 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
58112 SET AUTOCOMMIT= 0;
58113 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58114 SELECT f_int1, f_int1, '', '', 'was inserted'
58115 FROM t0_template source_tab
58116 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58117         
58118 # check transactions-1 success:         1
58119 COMMIT WORK;
58120         
58121 # check transactions-2 success:         1
58122 ROLLBACK WORK;
58123         
58124 # check transactions-3 success:         1
58125 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58126 COMMIT WORK;
58127 ROLLBACK WORK;
58128         
58129 # check transactions-4 success:         1
58130 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58131 SELECT f_int1, f_int1, '', '', 'was inserted'
58132 FROM t0_template source_tab
58133 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58134         
58135 # check transactions-5 success:         1
58136 ROLLBACK WORK;
58137         
58138 # check transactions-6 success:         1
58139 # INFO: Storage engine used for t1 seems to be transactional.
58140 COMMIT;
58141         
58142 # check transactions-7 success:         1
58143 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58144 COMMIT WORK;
58145 SET @@session.sql_mode = 'traditional';
58146 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
58147 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58148 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
58149 '', '', 'was inserted' FROM t0_template
58150 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58151 ERROR 22012: Division by 0
58152 COMMIT;
58153         
58154 # check transactions-8 success:         1
58155 # INFO: Storage engine used for t1 seems to be able to revert
58156 #       changes made by the failing statement.
58157 SET @@session.sql_mode = '';
58158 SET AUTOCOMMIT= 1;
58159 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58160 COMMIT WORK;
58161 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
58162         
58163 # check special-1 success:      1
58164 UPDATE t1 SET f_charbig = '';
58165         
58166 # check special-2 success:      1
58167 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
58168 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58169 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
58170 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58171 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58172 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58173 'just inserted' FROM t0_template
58174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58175 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
58176 BEGIN
58177 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58178 f_charbig = 'updated by trigger'
58179       WHERE f_int1 = new.f_int1;
58180 END|
58181 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58182 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
58183 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58184         
58185 # check trigger-1 success:      1
58186 DROP TRIGGER trg_1;
58187 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58188 f_int2 = CAST(f_char1 AS SIGNED INT),
58189 f_charbig = 'just inserted'
58190    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58191 DELETE FROM t0_aux
58192 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58193 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58194 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58195 'just inserted' FROM t0_template
58196 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58197 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
58198 BEGIN
58199 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58200 f_charbig = 'updated by trigger'
58201       WHERE f_int1 = new.f_int1;
58202 END|
58203 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58204 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
58205 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58206         
58207 # check trigger-2 success:      1
58208 DROP TRIGGER trg_1;
58209 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58210 f_int2 = CAST(f_char1 AS SIGNED INT),
58211 f_charbig = 'just inserted'
58212    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58213 DELETE FROM t0_aux
58214 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58215 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58216 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58217 'just inserted' FROM t0_template
58218 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58219 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
58220 BEGIN
58221 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58222 f_charbig = 'updated by trigger'
58223       WHERE f_int1 = new.f_int1;
58224 END|
58225 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58226 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58227         
58228 # check trigger-3 success:      1
58229 DROP TRIGGER trg_1;
58230 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58231 f_int2 = CAST(f_char1 AS SIGNED INT),
58232 f_charbig = 'just inserted'
58233    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58234 DELETE FROM t0_aux
58235 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58236 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58237 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58238 'just inserted' FROM t0_template
58239 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58240 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
58241 BEGIN
58242 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58243 f_charbig = 'updated by trigger'
58244       WHERE f_int1 = - old.f_int1;
58245 END|
58246 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58247 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58248         
58249 # check trigger-4 success:      1
58250 DROP TRIGGER trg_1;
58251 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58252 f_int2 = CAST(f_char1 AS SIGNED INT),
58253 f_charbig = 'just inserted'
58254    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58255 DELETE FROM t0_aux
58256 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58257 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58258 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58259 'just inserted' FROM t0_template
58260 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58261 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
58262 BEGIN
58263 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58264 f_charbig = 'updated by trigger'
58265       WHERE f_int1 = new.f_int1;
58266 END|
58267 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58268 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58269         
58270 # check trigger-5 success:      1
58271 DROP TRIGGER trg_1;
58272 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58273 f_int2 = CAST(f_char1 AS SIGNED INT),
58274 f_charbig = 'just inserted'
58275    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58276 DELETE FROM t0_aux
58277 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58278 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58279 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58280 'just inserted' FROM t0_template
58281 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58282 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
58283 BEGIN
58284 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58285 f_charbig = 'updated by trigger'
58286       WHERE f_int1 = - old.f_int1;
58287 END|
58288 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58289 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58290         
58291 # check trigger-6 success:      1
58292 DROP TRIGGER trg_1;
58293 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58294 f_int2 = CAST(f_char1 AS SIGNED INT),
58295 f_charbig = 'just inserted'
58296    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58297 DELETE FROM t0_aux
58298 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58299 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58300 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58301 'just inserted' FROM t0_template
58302 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58303 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
58304 BEGIN
58305 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58306 f_charbig = 'updated by trigger'
58307       WHERE f_int1 = - old.f_int1;
58308 END|
58309 DELETE FROM t0_aux
58310 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58311         
58312 # check trigger-7 success:      1
58313 DROP TRIGGER trg_1;
58314 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58315 f_int2 = CAST(f_char1 AS SIGNED INT),
58316 f_charbig = 'just inserted'
58317    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58318 DELETE FROM t0_aux
58319 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58320 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58321 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58322 'just inserted' FROM t0_template
58323 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58324 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
58325 BEGIN
58326 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58327 f_charbig = 'updated by trigger'
58328       WHERE f_int1 = - old.f_int1;
58329 END|
58330 DELETE FROM t0_aux
58331 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58332         
58333 # check trigger-8 success:      1
58334 DROP TRIGGER trg_1;
58335 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58336 f_int2 = CAST(f_char1 AS SIGNED INT),
58337 f_charbig = 'just inserted'
58338    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58339 DELETE FROM t0_aux
58340 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58341 DELETE FROM t1
58342 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58343 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
58344 BEGIN
58345 SET new.f_int1 = old.f_int1 + @max_row,
58346 new.f_int2 = old.f_int2 - @max_row,
58347 new.f_charbig = '####updated per update trigger####';
58348 END|
58349 UPDATE t1
58350 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
58351 f_charbig = '####updated per update statement itself####';
58352         
58353 # check trigger-9 success:      1
58354 DROP TRIGGER trg_2;
58355 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58356 f_int2 = CAST(f_char1 AS SIGNED INT),
58357 f_charbig = CONCAT('===',f_char1,'===');
58358 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
58359 BEGIN
58360 SET new.f_int1 = new.f_int1 + @max_row,
58361 new.f_int2 = new.f_int2 - @max_row,
58362 new.f_charbig = '####updated per update trigger####';
58363 END|
58364 UPDATE t1
58365 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
58366 f_charbig = '####updated per update statement itself####';
58367         
58368 # check trigger-10 success:     1
58369 DROP TRIGGER trg_2;
58370 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58371 f_int2 = CAST(f_char1 AS SIGNED INT),
58372 f_charbig = CONCAT('===',f_char1,'===');
58373 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
58374 BEGIN
58375 SET new.f_int1 = @my_max1 + @counter,
58376 new.f_int2 = @my_min2 - @counter,
58377 new.f_charbig = '####updated per insert trigger####';
58378 SET @counter = @counter + 1;
58379 END|
58380 SET @counter = 1;
58381 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
58382 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58383 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
58384 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
58385 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
58386 ORDER BY f_int1;
58387 DROP TRIGGER trg_3;
58388         
58389 # check trigger-11 success:     1
58390 DELETE FROM t1
58391 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
58392 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
58393 AND f_charbig = '####updated per insert trigger####';
58394 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
58395 BEGIN
58396 SET new.f_int1 = @my_max1 + @counter,
58397 new.f_int2 = @my_min2 - @counter,
58398 new.f_charbig = '####updated per insert trigger####';
58399 SET @counter = @counter + 1;
58400 END|
58401 SET @counter = 1;
58402 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
58403 INSERT INTO t1 (f_char1, f_char2, f_charbig)
58404 SELECT CAST(f_int1 AS CHAR),
58405 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
58406 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
58407 ORDER BY f_int1;
58408 DROP TRIGGER trg_3;
58409         
58410 # check trigger-12 success:     1
58411 DELETE FROM t1
58412 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
58413 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
58414 AND f_charbig = '####updated per insert trigger####';
58415 ANALYZE  TABLE t1;
58416 Table   Op      Msg_type        Msg_text
58417 test.t1 analyze status  OK
58418 CHECK    TABLE t1 EXTENDED;
58419 Table   Op      Msg_type        Msg_text
58420 test.t1 check   status  OK
58421 CHECKSUM TABLE t1 EXTENDED;
58422 Table   Checksum
58423 test.t1 <some_value>
58424 OPTIMIZE TABLE t1;
58425 Table   Op      Msg_type        Msg_text
58426 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
58427 test.t1 optimize        status  OK
58428 # check layout success:    1
58429 REPAIR   TABLE t1 EXTENDED;
58430 Table   Op      Msg_type        Msg_text
58431 test.t1 repair  note    The storage engine for the table doesn't support repair
58432 # check layout success:    1
58433 TRUNCATE t1;
58434         
58435 # check TRUNCATE success:       1
58436 # check layout success:    1
58437 # End usability test (inc/partition_check.inc)
58438 DROP TABLE t1;
58439 CREATE TABLE t1 (
58440 f_int1 INTEGER,
58441 f_int2 INTEGER,
58442 f_char1 CHAR(20),
58443 f_char2 CHAR(20),
58444 f_charbig VARCHAR(1000)
58445 , UNIQUE INDEX uidx (f_int2,f_int1)
58447 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
58448 (PARTITION parta VALUES LESS THAN (0),
58449 PARTITION partb VALUES LESS THAN (5),
58450 PARTITION partc VALUES LESS THAN (10),
58451 PARTITION partd VALUES LESS THAN (2147483646));
58452 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58453 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
58454 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
58455 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
58456 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58457 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
58458 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
58459 # Start usability test (inc/partition_check.inc)
58460 create_command
58461 SHOW CREATE TABLE t1;
58462 Table   Create Table
58463 t1      CREATE TABLE `t1` (
58464   `f_int1` mediumint(9) DEFAULT NULL,
58465   `f_int2` mediumint(9) DEFAULT NULL,
58466   `f_char1` char(20) DEFAULT NULL,
58467   `f_char2` char(20) DEFAULT NULL,
58468   `f_charbig` varchar(1000) DEFAULT NULL,
58469   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
58470 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
58471 /*!50100 PARTITION BY RANGE (f_int1)
58472 SUBPARTITION BY HASH (f_int2)
58473 SUBPARTITIONS 2
58474 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
58475  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
58476  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
58477  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
58479 # check prerequisites-1 success:    1
58480 # check COUNT(*) success:    1
58481 # check MIN/MAX(f_int1) success:    1
58482 # check MIN/MAX(f_int2) success:    1
58483 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58484 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
58485 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
58486 WHERE f_int1 IN (2,3);
58487 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
58488 # check prerequisites-3 success:    1
58489 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
58490 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58491 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
58492 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
58493 WHERE f_int1 IN (2,3);
58494 DELETE FROM t1 WHERE f_charbig = 'delete me';
58495 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58496 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
58497 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
58498 WHERE f_int1 IN (2,3);
58499 DELETE FROM t1 WHERE f_charbig = 'delete me';
58500 # check read via f_int1 success: 1
58501 # check read via f_int2 success: 1
58502         
58503 # check multiple-1 success:     1
58504 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
58505         
58506 # check multiple-2 success:     1
58507 INSERT INTO t1 SELECT * FROM t0_template
58508 WHERE MOD(f_int1,3) = 0;
58509         
58510 # check multiple-3 success:     1
58511 UPDATE t1 SET f_int1 = f_int1 + @max_row
58512 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
58513 AND @max_row_div2 + @max_row_div4;
58514         
58515 # check multiple-4 success:     1
58516 DELETE FROM t1
58517 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
58518 AND @max_row_div2 + @max_row_div4 + @max_row;
58519         
58520 # check multiple-5 success:     1
58521 SELECT COUNT(*) INTO @try_count FROM t0_template
58522 WHERE MOD(f_int1,3) = 0
58523 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58524 SELECT COUNT(*) INTO @clash_count
58525 FROM t1 INNER JOIN t0_template USING(f_int1)
58526 WHERE MOD(f_int1,3) = 0
58527 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58528 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
58529 INSERT INTO t1
58530 SET f_int1 = @cur_value , f_int2 = @cur_value,
58531 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
58532 f_charbig = '#SINGLE#';
58533         
58534 # check single-1 success:       1
58535 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
58536 INSERT INTO t1
58537 SET f_int1 = @cur_value , f_int2 = @cur_value,
58538 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
58539 f_charbig = '#SINGLE#';
58540         
58541 # check single-2 success:       1
58542 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
58543 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
58544 UPDATE t1 SET f_int1 = @cur_value2
58545 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
58546         
58547 # check single-3 success:       1
58548 SET @cur_value1= -1;
58549 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
58550 UPDATE t1 SET f_int1 = @cur_value1
58551 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
58552         
58553 # check single-4 success:       1
58554 SELECT MAX(f_int1) INTO @cur_value FROM t1;
58555 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
58556         
58557 # check single-5 success:       1
58558 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
58559         
58560 # check single-6 success:       1
58561 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
58562 Warnings:
58563 Warning 1264    Out of range value for column 'f_int1' at row 1
58564 Warning 1264    Out of range value for column 'f_int2' at row 1
58565         
58566 # check single-7 success:       1
58567 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
58568 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
58569 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
58570 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
58571 f_charbig = '#NULL#';
58572 INSERT INTO t1
58573 SET f_int1 = NULL , f_int2 = -@max_row,
58574 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
58575 f_charbig = '#NULL#';
58576 # check null success:    1
58577         
58578 # check null-1 success:         1
58579 UPDATE t1 SET f_int1 = -@max_row
58580 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58581 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58582         
58583 # check null-2 success:         1
58584 UPDATE t1 SET f_int1 = NULL
58585 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58586 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58587         
58588 # check null-3 success:         1
58589 DELETE FROM t1
58590 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
58591 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
58592         
58593 # check null-4 success:         1
58594 DELETE FROM t1
58595 WHERE f_int1 = 0 AND f_int2 = 0
58596 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
58597 AND f_charbig = '#NULL#';
58598 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58599 SELECT f_int1, f_int1, '', '', 'was inserted'
58600    FROM t0_template source_tab
58601 WHERE MOD(f_int1,3) = 0
58602 AND f_int1 BETWEEN @max_row_div2 AND @max_row
58603 ON DUPLICATE KEY
58604 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
58605 f_int2 = 2 * @max_row + source_tab.f_int1,
58606 f_charbig = 'was updated';
58607         
58608 # check unique-1-a success:     1
58609         
58610 # check unique-1-b success:     1
58611 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58612 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58613 f_int2 = CAST(f_char1 AS SIGNED INT),
58614 f_charbig = CONCAT('===',f_char1,'===')
58615 WHERE f_charbig = 'was updated';
58616 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58617 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
58618    FROM t0_template source_tab
58619 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
58620         
58621 # check replace success:        1
58622 DELETE FROM t1
58623 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
58624 DELETE FROM t1
58625 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
58626 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
58627 UPDATE t1 SET f_int2 = f_int1,
58628 f_char1 = CAST(f_int1 AS CHAR),
58629 f_char2 = CAST(f_int1 AS CHAR),
58630 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
58631 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
58632 SET AUTOCOMMIT= 0;
58633 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58634 SELECT f_int1, f_int1, '', '', 'was inserted'
58635 FROM t0_template source_tab
58636 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58637         
58638 # check transactions-1 success:         1
58639 COMMIT WORK;
58640         
58641 # check transactions-2 success:         1
58642 ROLLBACK WORK;
58643         
58644 # check transactions-3 success:         1
58645 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58646 COMMIT WORK;
58647 ROLLBACK WORK;
58648         
58649 # check transactions-4 success:         1
58650 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58651 SELECT f_int1, f_int1, '', '', 'was inserted'
58652 FROM t0_template source_tab
58653 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58654         
58655 # check transactions-5 success:         1
58656 ROLLBACK WORK;
58657         
58658 # check transactions-6 success:         1
58659 # INFO: Storage engine used for t1 seems to be transactional.
58660 COMMIT;
58661         
58662 # check transactions-7 success:         1
58663 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58664 COMMIT WORK;
58665 SET @@session.sql_mode = 'traditional';
58666 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
58667 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58668 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
58669 '', '', 'was inserted' FROM t0_template
58670 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
58671 ERROR 22012: Division by 0
58672 COMMIT;
58673         
58674 # check transactions-8 success:         1
58675 # INFO: Storage engine used for t1 seems to be able to revert
58676 #       changes made by the failing statement.
58677 SET @@session.sql_mode = '';
58678 SET AUTOCOMMIT= 1;
58679 DELETE FROM t1 WHERE f_charbig = 'was inserted';
58680 COMMIT WORK;
58681 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
58682         
58683 # check special-1 success:      1
58684 UPDATE t1 SET f_charbig = '';
58685         
58686 # check special-2 success:      1
58687 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
58688 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58689 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
58690 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58691 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58692 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58693 'just inserted' FROM t0_template
58694 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58695 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
58696 BEGIN
58697 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58698 f_charbig = 'updated by trigger'
58699       WHERE f_int1 = new.f_int1;
58700 END|
58701 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58702 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
58703 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58704         
58705 # check trigger-1 success:      1
58706 DROP TRIGGER trg_1;
58707 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58708 f_int2 = CAST(f_char1 AS SIGNED INT),
58709 f_charbig = 'just inserted'
58710    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58711 DELETE FROM t0_aux
58712 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58713 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58714 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58715 'just inserted' FROM t0_template
58716 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58717 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
58718 BEGIN
58719 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58720 f_charbig = 'updated by trigger'
58721       WHERE f_int1 = new.f_int1;
58722 END|
58723 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58724 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
58725 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58726         
58727 # check trigger-2 success:      1
58728 DROP TRIGGER trg_1;
58729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58730 f_int2 = CAST(f_char1 AS SIGNED INT),
58731 f_charbig = 'just inserted'
58732    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58733 DELETE FROM t0_aux
58734 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58735 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58736 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58737 'just inserted' FROM t0_template
58738 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58739 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
58740 BEGIN
58741 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58742 f_charbig = 'updated by trigger'
58743       WHERE f_int1 = new.f_int1;
58744 END|
58745 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58746 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58747         
58748 # check trigger-3 success:      1
58749 DROP TRIGGER trg_1;
58750 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58751 f_int2 = CAST(f_char1 AS SIGNED INT),
58752 f_charbig = 'just inserted'
58753    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58754 DELETE FROM t0_aux
58755 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58758 'just inserted' FROM t0_template
58759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58760 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
58761 BEGIN
58762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58763 f_charbig = 'updated by trigger'
58764       WHERE f_int1 = - old.f_int1;
58765 END|
58766 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58767 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58768         
58769 # check trigger-4 success:      1
58770 DROP TRIGGER trg_1;
58771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58772 f_int2 = CAST(f_char1 AS SIGNED INT),
58773 f_charbig = 'just inserted'
58774    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58775 DELETE FROM t0_aux
58776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58777 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58778 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58779 'just inserted' FROM t0_template
58780 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58781 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
58782 BEGIN
58783 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58784 f_charbig = 'updated by trigger'
58785       WHERE f_int1 = new.f_int1;
58786 END|
58787 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58788 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58789         
58790 # check trigger-5 success:      1
58791 DROP TRIGGER trg_1;
58792 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58793 f_int2 = CAST(f_char1 AS SIGNED INT),
58794 f_charbig = 'just inserted'
58795    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58796 DELETE FROM t0_aux
58797 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58798 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58799 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58800 'just inserted' FROM t0_template
58801 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58802 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
58803 BEGIN
58804 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58805 f_charbig = 'updated by trigger'
58806       WHERE f_int1 = - old.f_int1;
58807 END|
58808 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
58809 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58810         
58811 # check trigger-6 success:      1
58812 DROP TRIGGER trg_1;
58813 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58814 f_int2 = CAST(f_char1 AS SIGNED INT),
58815 f_charbig = 'just inserted'
58816    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58817 DELETE FROM t0_aux
58818 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58819 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58820 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58821 'just inserted' FROM t0_template
58822 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58823 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
58824 BEGIN
58825 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58826 f_charbig = 'updated by trigger'
58827       WHERE f_int1 = - old.f_int1;
58828 END|
58829 DELETE FROM t0_aux
58830 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58831         
58832 # check trigger-7 success:      1
58833 DROP TRIGGER trg_1;
58834 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58835 f_int2 = CAST(f_char1 AS SIGNED INT),
58836 f_charbig = 'just inserted'
58837    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58838 DELETE FROM t0_aux
58839 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58840 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
58841 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
58842 'just inserted' FROM t0_template
58843 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58844 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
58845 BEGIN
58846 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
58847 f_charbig = 'updated by trigger'
58848       WHERE f_int1 = - old.f_int1;
58849 END|
58850 DELETE FROM t0_aux
58851 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
58852         
58853 # check trigger-8 success:      1
58854 DROP TRIGGER trg_1;
58855 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58856 f_int2 = CAST(f_char1 AS SIGNED INT),
58857 f_charbig = 'just inserted'
58858    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
58859 DELETE FROM t0_aux
58860 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58861 DELETE FROM t1
58862 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
58863 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
58864 BEGIN
58865 SET new.f_int1 = old.f_int1 + @max_row,
58866 new.f_int2 = old.f_int2 - @max_row,
58867 new.f_charbig = '####updated per update trigger####';
58868 END|
58869 UPDATE t1
58870 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
58871 f_charbig = '####updated per update statement itself####';
58872         
58873 # check trigger-9 success:      1
58874 DROP TRIGGER trg_2;
58875 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58876 f_int2 = CAST(f_char1 AS SIGNED INT),
58877 f_charbig = CONCAT('===',f_char1,'===');
58878 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
58879 BEGIN
58880 SET new.f_int1 = new.f_int1 + @max_row,
58881 new.f_int2 = new.f_int2 - @max_row,
58882 new.f_charbig = '####updated per update trigger####';
58883 END|
58884 UPDATE t1
58885 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
58886 f_charbig = '####updated per update statement itself####';
58887         
58888 # check trigger-10 success:     1
58889 DROP TRIGGER trg_2;
58890 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
58891 f_int2 = CAST(f_char1 AS SIGNED INT),
58892 f_charbig = CONCAT('===',f_char1,'===');
58893 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
58894 BEGIN
58895 SET new.f_int1 = @my_max1 + @counter,
58896 new.f_int2 = @my_min2 - @counter,
58897 new.f_charbig = '####updated per insert trigger####';
58898 SET @counter = @counter + 1;
58899 END|
58900 SET @counter = 1;
58901 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
58902 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
58903 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
58904 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
58905 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
58906 ORDER BY f_int1;
58907 DROP TRIGGER trg_3;
58908         
58909 # check trigger-11 success:     1
58910 DELETE FROM t1
58911 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
58912 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
58913 AND f_charbig = '####updated per insert trigger####';
58914 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
58915 BEGIN
58916 SET new.f_int1 = @my_max1 + @counter,
58917 new.f_int2 = @my_min2 - @counter,
58918 new.f_charbig = '####updated per insert trigger####';
58919 SET @counter = @counter + 1;
58920 END|
58921 SET @counter = 1;
58922 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
58923 INSERT INTO t1 (f_char1, f_char2, f_charbig)
58924 SELECT CAST(f_int1 AS CHAR),
58925 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
58926 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
58927 ORDER BY f_int1;
58928 DROP TRIGGER trg_3;
58929         
58930 # check trigger-12 success:     1
58931 DELETE FROM t1
58932 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
58933 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
58934 AND f_charbig = '####updated per insert trigger####';
58935 ANALYZE  TABLE t1;
58936 Table   Op      Msg_type        Msg_text
58937 test.t1 analyze status  OK
58938 CHECK    TABLE t1 EXTENDED;
58939 Table   Op      Msg_type        Msg_text
58940 test.t1 check   status  OK
58941 CHECKSUM TABLE t1 EXTENDED;
58942 Table   Checksum
58943 test.t1 <some_value>
58944 OPTIMIZE TABLE t1;
58945 Table   Op      Msg_type        Msg_text
58946 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
58947 test.t1 optimize        status  OK
58948 # check layout success:    1
58949 REPAIR   TABLE t1 EXTENDED;
58950 Table   Op      Msg_type        Msg_text
58951 test.t1 repair  note    The storage engine for the table doesn't support repair
58952 # check layout success:    1
58953 TRUNCATE t1;
58954         
58955 # check TRUNCATE success:       1
58956 # check layout success:    1
58957 # End usability test (inc/partition_check.inc)
58958 DROP TABLE t1;
58959 CREATE TABLE t1 (
58960 f_int1 INTEGER,
58961 f_int2 INTEGER,
58962 f_char1 CHAR(20),
58963 f_char2 CHAR(20),
58964 f_charbig VARCHAR(1000)
58965 , UNIQUE INDEX uidx (f_int2,f_int1)
58967 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
58968 (PARTITION part1 VALUES LESS THAN (0)
58969 (SUBPARTITION subpart11, SUBPARTITION subpart12),
58970 PARTITION part2 VALUES LESS THAN (5)
58971 (SUBPARTITION subpart21, SUBPARTITION subpart22),
58972 PARTITION part3 VALUES LESS THAN (10)
58973 (SUBPARTITION subpart31, SUBPARTITION subpart32),
58974 PARTITION part4 VALUES LESS THAN (2147483646)
58975 (SUBPARTITION subpart41, SUBPARTITION subpart42));
58976 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58977 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
58978 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
58979 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
58980 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58981 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
58982 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
58983 # Start usability test (inc/partition_check.inc)
58984 create_command
58985 SHOW CREATE TABLE t1;
58986 Table   Create Table
58987 t1      CREATE TABLE `t1` (
58988   `f_int1` mediumint(9) DEFAULT NULL,
58989   `f_int2` mediumint(9) DEFAULT NULL,
58990   `f_char1` char(20) DEFAULT NULL,
58991   `f_char2` char(20) DEFAULT NULL,
58992   `f_charbig` varchar(1000) DEFAULT NULL,
58993   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
58994 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
58995 /*!50100 PARTITION BY RANGE (f_int1)
58996 SUBPARTITION BY KEY (f_int2)
58997 (PARTITION part1 VALUES LESS THAN (0)
58998  (SUBPARTITION subpart11 ENGINE = InnoDB,
58999   SUBPARTITION subpart12 ENGINE = InnoDB),
59000  PARTITION part2 VALUES LESS THAN (5)
59001  (SUBPARTITION subpart21 ENGINE = InnoDB,
59002   SUBPARTITION subpart22 ENGINE = InnoDB),
59003  PARTITION part3 VALUES LESS THAN (10)
59004  (SUBPARTITION subpart31 ENGINE = InnoDB,
59005   SUBPARTITION subpart32 ENGINE = InnoDB),
59006  PARTITION part4 VALUES LESS THAN (2147483646)
59007  (SUBPARTITION subpart41 ENGINE = InnoDB,
59008   SUBPARTITION subpart42 ENGINE = InnoDB)) */
59010 # check prerequisites-1 success:    1
59011 # check COUNT(*) success:    1
59012 # check MIN/MAX(f_int1) success:    1
59013 # check MIN/MAX(f_int2) success:    1
59014 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59015 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
59016 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
59017 WHERE f_int1 IN (2,3);
59018 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
59019 # check prerequisites-3 success:    1
59020 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
59021 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59022 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
59023 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
59024 WHERE f_int1 IN (2,3);
59025 DELETE FROM t1 WHERE f_charbig = 'delete me';
59026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59027 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
59028 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
59029 WHERE f_int1 IN (2,3);
59030 DELETE FROM t1 WHERE f_charbig = 'delete me';
59031 # check read via f_int1 success: 1
59032 # check read via f_int2 success: 1
59033         
59034 # check multiple-1 success:     1
59035 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
59036         
59037 # check multiple-2 success:     1
59038 INSERT INTO t1 SELECT * FROM t0_template
59039 WHERE MOD(f_int1,3) = 0;
59040         
59041 # check multiple-3 success:     1
59042 UPDATE t1 SET f_int1 = f_int1 + @max_row
59043 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
59044 AND @max_row_div2 + @max_row_div4;
59045         
59046 # check multiple-4 success:     1
59047 DELETE FROM t1
59048 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
59049 AND @max_row_div2 + @max_row_div4 + @max_row;
59050         
59051 # check multiple-5 success:     1
59052 SELECT COUNT(*) INTO @try_count FROM t0_template
59053 WHERE MOD(f_int1,3) = 0
59054 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59055 SELECT COUNT(*) INTO @clash_count
59056 FROM t1 INNER JOIN t0_template USING(f_int1)
59057 WHERE MOD(f_int1,3) = 0
59058 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59059 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
59060 INSERT INTO t1
59061 SET f_int1 = @cur_value , f_int2 = @cur_value,
59062 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
59063 f_charbig = '#SINGLE#';
59064         
59065 # check single-1 success:       1
59066 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
59067 INSERT INTO t1
59068 SET f_int1 = @cur_value , f_int2 = @cur_value,
59069 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
59070 f_charbig = '#SINGLE#';
59071         
59072 # check single-2 success:       1
59073 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
59074 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
59075 UPDATE t1 SET f_int1 = @cur_value2
59076 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
59077         
59078 # check single-3 success:       1
59079 SET @cur_value1= -1;
59080 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
59081 UPDATE t1 SET f_int1 = @cur_value1
59082 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
59083         
59084 # check single-4 success:       1
59085 SELECT MAX(f_int1) INTO @cur_value FROM t1;
59086 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
59087         
59088 # check single-5 success:       1
59089 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
59090         
59091 # check single-6 success:       1
59092 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
59093 Warnings:
59094 Warning 1264    Out of range value for column 'f_int1' at row 1
59095 Warning 1264    Out of range value for column 'f_int2' at row 1
59096         
59097 # check single-7 success:       1
59098 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
59099 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
59100 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
59101 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
59102 f_charbig = '#NULL#';
59103 INSERT INTO t1
59104 SET f_int1 = NULL , f_int2 = -@max_row,
59105 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
59106 f_charbig = '#NULL#';
59107 # check null success:    1
59108         
59109 # check null-1 success:         1
59110 UPDATE t1 SET f_int1 = -@max_row
59111 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59112 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59113         
59114 # check null-2 success:         1
59115 UPDATE t1 SET f_int1 = NULL
59116 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59117 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59118         
59119 # check null-3 success:         1
59120 DELETE FROM t1
59121 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59122 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59123         
59124 # check null-4 success:         1
59125 DELETE FROM t1
59126 WHERE f_int1 = 0 AND f_int2 = 0
59127 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
59128 AND f_charbig = '#NULL#';
59129 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59130 SELECT f_int1, f_int1, '', '', 'was inserted'
59131    FROM t0_template source_tab
59132 WHERE MOD(f_int1,3) = 0
59133 AND f_int1 BETWEEN @max_row_div2 AND @max_row
59134 ON DUPLICATE KEY
59135 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
59136 f_int2 = 2 * @max_row + source_tab.f_int1,
59137 f_charbig = 'was updated';
59138         
59139 # check unique-1-a success:     1
59140         
59141 # check unique-1-b success:     1
59142 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59143 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59144 f_int2 = CAST(f_char1 AS SIGNED INT),
59145 f_charbig = CONCAT('===',f_char1,'===')
59146 WHERE f_charbig = 'was updated';
59147 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59148 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
59149    FROM t0_template source_tab
59150 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59151         
59152 # check replace success:        1
59153 DELETE FROM t1
59154 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
59155 DELETE FROM t1
59156 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
59157 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
59158 UPDATE t1 SET f_int2 = f_int1,
59159 f_char1 = CAST(f_int1 AS CHAR),
59160 f_char2 = CAST(f_int1 AS CHAR),
59161 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
59162 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
59163 SET AUTOCOMMIT= 0;
59164 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59165 SELECT f_int1, f_int1, '', '', 'was inserted'
59166 FROM t0_template source_tab
59167 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59168         
59169 # check transactions-1 success:         1
59170 COMMIT WORK;
59171         
59172 # check transactions-2 success:         1
59173 ROLLBACK WORK;
59174         
59175 # check transactions-3 success:         1
59176 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59177 COMMIT WORK;
59178 ROLLBACK WORK;
59179         
59180 # check transactions-4 success:         1
59181 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59182 SELECT f_int1, f_int1, '', '', 'was inserted'
59183 FROM t0_template source_tab
59184 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59185         
59186 # check transactions-5 success:         1
59187 ROLLBACK WORK;
59188         
59189 # check transactions-6 success:         1
59190 # INFO: Storage engine used for t1 seems to be transactional.
59191 COMMIT;
59192         
59193 # check transactions-7 success:         1
59194 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59195 COMMIT WORK;
59196 SET @@session.sql_mode = 'traditional';
59197 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
59198 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59199 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
59200 '', '', 'was inserted' FROM t0_template
59201 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59202 ERROR 22012: Division by 0
59203 COMMIT;
59204         
59205 # check transactions-8 success:         1
59206 # INFO: Storage engine used for t1 seems to be able to revert
59207 #       changes made by the failing statement.
59208 SET @@session.sql_mode = '';
59209 SET AUTOCOMMIT= 1;
59210 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59211 COMMIT WORK;
59212 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
59213         
59214 # check special-1 success:      1
59215 UPDATE t1 SET f_charbig = '';
59216         
59217 # check special-2 success:      1
59218 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
59219 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59220 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
59221 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59222 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59223 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59224 'just inserted' FROM t0_template
59225 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59226 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
59227 BEGIN
59228 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59229 f_charbig = 'updated by trigger'
59230       WHERE f_int1 = new.f_int1;
59231 END|
59232 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59233 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
59234 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59235         
59236 # check trigger-1 success:      1
59237 DROP TRIGGER trg_1;
59238 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59239 f_int2 = CAST(f_char1 AS SIGNED INT),
59240 f_charbig = 'just inserted'
59241    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59242 DELETE FROM t0_aux
59243 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59244 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59245 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59246 'just inserted' FROM t0_template
59247 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59248 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
59249 BEGIN
59250 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59251 f_charbig = 'updated by trigger'
59252       WHERE f_int1 = new.f_int1;
59253 END|
59254 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59255 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
59256 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59257         
59258 # check trigger-2 success:      1
59259 DROP TRIGGER trg_1;
59260 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59261 f_int2 = CAST(f_char1 AS SIGNED INT),
59262 f_charbig = 'just inserted'
59263    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59264 DELETE FROM t0_aux
59265 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59266 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59267 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59268 'just inserted' FROM t0_template
59269 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59270 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
59271 BEGIN
59272 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59273 f_charbig = 'updated by trigger'
59274       WHERE f_int1 = new.f_int1;
59275 END|
59276 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59277 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59278         
59279 # check trigger-3 success:      1
59280 DROP TRIGGER trg_1;
59281 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59282 f_int2 = CAST(f_char1 AS SIGNED INT),
59283 f_charbig = 'just inserted'
59284    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59285 DELETE FROM t0_aux
59286 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59287 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59288 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59289 'just inserted' FROM t0_template
59290 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59291 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
59292 BEGIN
59293 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59294 f_charbig = 'updated by trigger'
59295       WHERE f_int1 = - old.f_int1;
59296 END|
59297 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59298 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59299         
59300 # check trigger-4 success:      1
59301 DROP TRIGGER trg_1;
59302 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59303 f_int2 = CAST(f_char1 AS SIGNED INT),
59304 f_charbig = 'just inserted'
59305    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59306 DELETE FROM t0_aux
59307 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59308 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59309 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59310 'just inserted' FROM t0_template
59311 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59312 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
59313 BEGIN
59314 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59315 f_charbig = 'updated by trigger'
59316       WHERE f_int1 = new.f_int1;
59317 END|
59318 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59319 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59320         
59321 # check trigger-5 success:      1
59322 DROP TRIGGER trg_1;
59323 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59324 f_int2 = CAST(f_char1 AS SIGNED INT),
59325 f_charbig = 'just inserted'
59326    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59327 DELETE FROM t0_aux
59328 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59329 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59330 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59331 'just inserted' FROM t0_template
59332 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59333 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
59334 BEGIN
59335 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59336 f_charbig = 'updated by trigger'
59337       WHERE f_int1 = - old.f_int1;
59338 END|
59339 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59340 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59341         
59342 # check trigger-6 success:      1
59343 DROP TRIGGER trg_1;
59344 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59345 f_int2 = CAST(f_char1 AS SIGNED INT),
59346 f_charbig = 'just inserted'
59347    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59348 DELETE FROM t0_aux
59349 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59350 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59351 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59352 'just inserted' FROM t0_template
59353 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59354 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
59355 BEGIN
59356 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59357 f_charbig = 'updated by trigger'
59358       WHERE f_int1 = - old.f_int1;
59359 END|
59360 DELETE FROM t0_aux
59361 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59362         
59363 # check trigger-7 success:      1
59364 DROP TRIGGER trg_1;
59365 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59366 f_int2 = CAST(f_char1 AS SIGNED INT),
59367 f_charbig = 'just inserted'
59368    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59369 DELETE FROM t0_aux
59370 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59371 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59372 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59373 'just inserted' FROM t0_template
59374 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59375 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
59376 BEGIN
59377 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59378 f_charbig = 'updated by trigger'
59379       WHERE f_int1 = - old.f_int1;
59380 END|
59381 DELETE FROM t0_aux
59382 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59383         
59384 # check trigger-8 success:      1
59385 DROP TRIGGER trg_1;
59386 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59387 f_int2 = CAST(f_char1 AS SIGNED INT),
59388 f_charbig = 'just inserted'
59389    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59390 DELETE FROM t0_aux
59391 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59392 DELETE FROM t1
59393 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59394 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
59395 BEGIN
59396 SET new.f_int1 = old.f_int1 + @max_row,
59397 new.f_int2 = old.f_int2 - @max_row,
59398 new.f_charbig = '####updated per update trigger####';
59399 END|
59400 UPDATE t1
59401 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
59402 f_charbig = '####updated per update statement itself####';
59403         
59404 # check trigger-9 success:      1
59405 DROP TRIGGER trg_2;
59406 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59407 f_int2 = CAST(f_char1 AS SIGNED INT),
59408 f_charbig = CONCAT('===',f_char1,'===');
59409 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
59410 BEGIN
59411 SET new.f_int1 = new.f_int1 + @max_row,
59412 new.f_int2 = new.f_int2 - @max_row,
59413 new.f_charbig = '####updated per update trigger####';
59414 END|
59415 UPDATE t1
59416 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
59417 f_charbig = '####updated per update statement itself####';
59418         
59419 # check trigger-10 success:     1
59420 DROP TRIGGER trg_2;
59421 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59422 f_int2 = CAST(f_char1 AS SIGNED INT),
59423 f_charbig = CONCAT('===',f_char1,'===');
59424 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
59425 BEGIN
59426 SET new.f_int1 = @my_max1 + @counter,
59427 new.f_int2 = @my_min2 - @counter,
59428 new.f_charbig = '####updated per insert trigger####';
59429 SET @counter = @counter + 1;
59430 END|
59431 SET @counter = 1;
59432 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
59433 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59434 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
59435 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
59436 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
59437 ORDER BY f_int1;
59438 DROP TRIGGER trg_3;
59439         
59440 # check trigger-11 success:     1
59441 DELETE FROM t1
59442 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
59443 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
59444 AND f_charbig = '####updated per insert trigger####';
59445 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
59446 BEGIN
59447 SET new.f_int1 = @my_max1 + @counter,
59448 new.f_int2 = @my_min2 - @counter,
59449 new.f_charbig = '####updated per insert trigger####';
59450 SET @counter = @counter + 1;
59451 END|
59452 SET @counter = 1;
59453 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
59454 INSERT INTO t1 (f_char1, f_char2, f_charbig)
59455 SELECT CAST(f_int1 AS CHAR),
59456 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
59457 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
59458 ORDER BY f_int1;
59459 DROP TRIGGER trg_3;
59460         
59461 # check trigger-12 success:     1
59462 DELETE FROM t1
59463 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
59464 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
59465 AND f_charbig = '####updated per insert trigger####';
59466 ANALYZE  TABLE t1;
59467 Table   Op      Msg_type        Msg_text
59468 test.t1 analyze status  OK
59469 CHECK    TABLE t1 EXTENDED;
59470 Table   Op      Msg_type        Msg_text
59471 test.t1 check   status  OK
59472 CHECKSUM TABLE t1 EXTENDED;
59473 Table   Checksum
59474 test.t1 <some_value>
59475 OPTIMIZE TABLE t1;
59476 Table   Op      Msg_type        Msg_text
59477 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
59478 test.t1 optimize        status  OK
59479 # check layout success:    1
59480 REPAIR   TABLE t1 EXTENDED;
59481 Table   Op      Msg_type        Msg_text
59482 test.t1 repair  note    The storage engine for the table doesn't support repair
59483 # check layout success:    1
59484 TRUNCATE t1;
59485         
59486 # check TRUNCATE success:       1
59487 # check layout success:    1
59488 # End usability test (inc/partition_check.inc)
59489 DROP TABLE t1;
59490 CREATE TABLE t1 (
59491 f_int1 INTEGER,
59492 f_int2 INTEGER,
59493 f_char1 CHAR(20),
59494 f_char2 CHAR(20),
59495 f_charbig VARCHAR(1000)
59496 , UNIQUE INDEX uidx (f_int2,f_int1)
59498 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
59499 (PARTITION part1 VALUES IN (0)
59500 (SUBPARTITION sp11, SUBPARTITION sp12),
59501 PARTITION part2 VALUES IN (1)
59502 (SUBPARTITION sp21, SUBPARTITION sp22),
59503 PARTITION part3 VALUES IN (2)
59504 (SUBPARTITION sp31, SUBPARTITION sp32),
59505 PARTITION part4 VALUES IN (NULL)
59506 (SUBPARTITION sp41, SUBPARTITION sp42));
59507 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59508 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
59509 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
59510 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
59511 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59512 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
59513 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
59514 # Start usability test (inc/partition_check.inc)
59515 create_command
59516 SHOW CREATE TABLE t1;
59517 Table   Create Table
59518 t1      CREATE TABLE `t1` (
59519   `f_int1` mediumint(9) DEFAULT NULL,
59520   `f_int2` mediumint(9) DEFAULT NULL,
59521   `f_char1` char(20) DEFAULT NULL,
59522   `f_char2` char(20) DEFAULT NULL,
59523   `f_charbig` varchar(1000) DEFAULT NULL,
59524   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
59525 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
59526 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
59527 SUBPARTITION BY HASH (f_int2 + 1)
59528 (PARTITION part1 VALUES IN (0)
59529  (SUBPARTITION sp11 ENGINE = InnoDB,
59530   SUBPARTITION sp12 ENGINE = InnoDB),
59531  PARTITION part2 VALUES IN (1)
59532  (SUBPARTITION sp21 ENGINE = InnoDB,
59533   SUBPARTITION sp22 ENGINE = InnoDB),
59534  PARTITION part3 VALUES IN (2)
59535  (SUBPARTITION sp31 ENGINE = InnoDB,
59536   SUBPARTITION sp32 ENGINE = InnoDB),
59537  PARTITION part4 VALUES IN (NULL)
59538  (SUBPARTITION sp41 ENGINE = InnoDB,
59539   SUBPARTITION sp42 ENGINE = InnoDB)) */
59541 # check prerequisites-1 success:    1
59542 # check COUNT(*) success:    1
59543 # check MIN/MAX(f_int1) success:    1
59544 # check MIN/MAX(f_int2) success:    1
59545 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59546 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
59547 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
59548 WHERE f_int1 IN (2,3);
59549 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
59550 # check prerequisites-3 success:    1
59551 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
59552 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59553 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
59554 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
59555 WHERE f_int1 IN (2,3);
59556 DELETE FROM t1 WHERE f_charbig = 'delete me';
59557 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59558 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
59559 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
59560 WHERE f_int1 IN (2,3);
59561 DELETE FROM t1 WHERE f_charbig = 'delete me';
59562 # check read via f_int1 success: 1
59563 # check read via f_int2 success: 1
59564         
59565 # check multiple-1 success:     1
59566 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
59567         
59568 # check multiple-2 success:     1
59569 INSERT INTO t1 SELECT * FROM t0_template
59570 WHERE MOD(f_int1,3) = 0;
59571         
59572 # check multiple-3 success:     1
59573 UPDATE t1 SET f_int1 = f_int1 + @max_row
59574 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
59575 AND @max_row_div2 + @max_row_div4;
59576         
59577 # check multiple-4 success:     1
59578 DELETE FROM t1
59579 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
59580 AND @max_row_div2 + @max_row_div4 + @max_row;
59581         
59582 # check multiple-5 success:     1
59583 SELECT COUNT(*) INTO @try_count FROM t0_template
59584 WHERE MOD(f_int1,3) = 0
59585 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59586 SELECT COUNT(*) INTO @clash_count
59587 FROM t1 INNER JOIN t0_template USING(f_int1)
59588 WHERE MOD(f_int1,3) = 0
59589 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59590 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
59591 INSERT INTO t1
59592 SET f_int1 = @cur_value , f_int2 = @cur_value,
59593 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
59594 f_charbig = '#SINGLE#';
59595         
59596 # check single-1 success:       1
59597 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
59598 INSERT INTO t1
59599 SET f_int1 = @cur_value , f_int2 = @cur_value,
59600 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
59601 f_charbig = '#SINGLE#';
59602         
59603 # check single-2 success:       1
59604 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
59605 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
59606 UPDATE t1 SET f_int1 = @cur_value2
59607 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
59608         
59609 # check single-3 success:       1
59610 SET @cur_value1= -1;
59611 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
59612 UPDATE t1 SET f_int1 = @cur_value1
59613 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
59614         
59615 # check single-4 success:       1
59616 SELECT MAX(f_int1) INTO @cur_value FROM t1;
59617 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
59618         
59619 # check single-5 success:       1
59620 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
59621         
59622 # check single-6 success:       1
59623 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
59624 Warnings:
59625 Warning 1264    Out of range value for column 'f_int1' at row 1
59626 Warning 1264    Out of range value for column 'f_int2' at row 1
59627         
59628 # check single-7 success:       1
59629 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
59630 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
59631 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
59632 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
59633 f_charbig = '#NULL#';
59634 INSERT INTO t1
59635 SET f_int1 = NULL , f_int2 = -@max_row,
59636 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
59637 f_charbig = '#NULL#';
59638 # check null success:    1
59639         
59640 # check null-1 success:         1
59641 UPDATE t1 SET f_int1 = -@max_row
59642 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59643 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59644         
59645 # check null-2 success:         1
59646 UPDATE t1 SET f_int1 = NULL
59647 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59648 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59649         
59650 # check null-3 success:         1
59651 DELETE FROM t1
59652 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
59653 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
59654         
59655 # check null-4 success:         1
59656 DELETE FROM t1
59657 WHERE f_int1 = 0 AND f_int2 = 0
59658 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
59659 AND f_charbig = '#NULL#';
59660 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59661 SELECT f_int1, f_int1, '', '', 'was inserted'
59662    FROM t0_template source_tab
59663 WHERE MOD(f_int1,3) = 0
59664 AND f_int1 BETWEEN @max_row_div2 AND @max_row
59665 ON DUPLICATE KEY
59666 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
59667 f_int2 = 2 * @max_row + source_tab.f_int1,
59668 f_charbig = 'was updated';
59669         
59670 # check unique-1-a success:     1
59671         
59672 # check unique-1-b success:     1
59673 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59674 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59675 f_int2 = CAST(f_char1 AS SIGNED INT),
59676 f_charbig = CONCAT('===',f_char1,'===')
59677 WHERE f_charbig = 'was updated';
59678 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59679 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
59680    FROM t0_template source_tab
59681 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
59682         
59683 # check replace success:        1
59684 DELETE FROM t1
59685 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
59686 DELETE FROM t1
59687 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
59688 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
59689 UPDATE t1 SET f_int2 = f_int1,
59690 f_char1 = CAST(f_int1 AS CHAR),
59691 f_char2 = CAST(f_int1 AS CHAR),
59692 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
59693 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
59694 SET AUTOCOMMIT= 0;
59695 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59696 SELECT f_int1, f_int1, '', '', 'was inserted'
59697 FROM t0_template source_tab
59698 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59699         
59700 # check transactions-1 success:         1
59701 COMMIT WORK;
59702         
59703 # check transactions-2 success:         1
59704 ROLLBACK WORK;
59705         
59706 # check transactions-3 success:         1
59707 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59708 COMMIT WORK;
59709 ROLLBACK WORK;
59710         
59711 # check transactions-4 success:         1
59712 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59713 SELECT f_int1, f_int1, '', '', 'was inserted'
59714 FROM t0_template source_tab
59715 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59716         
59717 # check transactions-5 success:         1
59718 ROLLBACK WORK;
59719         
59720 # check transactions-6 success:         1
59721 # INFO: Storage engine used for t1 seems to be transactional.
59722 COMMIT;
59723         
59724 # check transactions-7 success:         1
59725 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59726 COMMIT WORK;
59727 SET @@session.sql_mode = 'traditional';
59728 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
59729 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59730 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
59731 '', '', 'was inserted' FROM t0_template
59732 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
59733 ERROR 22012: Division by 0
59734 COMMIT;
59735         
59736 # check transactions-8 success:         1
59737 # INFO: Storage engine used for t1 seems to be able to revert
59738 #       changes made by the failing statement.
59739 SET @@session.sql_mode = '';
59740 SET AUTOCOMMIT= 1;
59741 DELETE FROM t1 WHERE f_charbig = 'was inserted';
59742 COMMIT WORK;
59743 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
59744         
59745 # check special-1 success:      1
59746 UPDATE t1 SET f_charbig = '';
59747         
59748 # check special-2 success:      1
59749 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
59750 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59751 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
59752 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59753 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59754 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59755 'just inserted' FROM t0_template
59756 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59757 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
59758 BEGIN
59759 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59760 f_charbig = 'updated by trigger'
59761       WHERE f_int1 = new.f_int1;
59762 END|
59763 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59764 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
59765 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59766         
59767 # check trigger-1 success:      1
59768 DROP TRIGGER trg_1;
59769 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59770 f_int2 = CAST(f_char1 AS SIGNED INT),
59771 f_charbig = 'just inserted'
59772    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59773 DELETE FROM t0_aux
59774 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59775 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59776 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59777 'just inserted' FROM t0_template
59778 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59779 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
59780 BEGIN
59781 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59782 f_charbig = 'updated by trigger'
59783       WHERE f_int1 = new.f_int1;
59784 END|
59785 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59786 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
59787 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59788         
59789 # check trigger-2 success:      1
59790 DROP TRIGGER trg_1;
59791 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59792 f_int2 = CAST(f_char1 AS SIGNED INT),
59793 f_charbig = 'just inserted'
59794    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59795 DELETE FROM t0_aux
59796 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59797 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59798 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59799 'just inserted' FROM t0_template
59800 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59801 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
59802 BEGIN
59803 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59804 f_charbig = 'updated by trigger'
59805       WHERE f_int1 = new.f_int1;
59806 END|
59807 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59808 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59809         
59810 # check trigger-3 success:      1
59811 DROP TRIGGER trg_1;
59812 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59813 f_int2 = CAST(f_char1 AS SIGNED INT),
59814 f_charbig = 'just inserted'
59815    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59816 DELETE FROM t0_aux
59817 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59818 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59819 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59820 'just inserted' FROM t0_template
59821 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59822 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
59823 BEGIN
59824 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59825 f_charbig = 'updated by trigger'
59826       WHERE f_int1 = - old.f_int1;
59827 END|
59828 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59829 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59830         
59831 # check trigger-4 success:      1
59832 DROP TRIGGER trg_1;
59833 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59834 f_int2 = CAST(f_char1 AS SIGNED INT),
59835 f_charbig = 'just inserted'
59836    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59837 DELETE FROM t0_aux
59838 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59839 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59840 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59841 'just inserted' FROM t0_template
59842 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59843 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
59844 BEGIN
59845 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59846 f_charbig = 'updated by trigger'
59847       WHERE f_int1 = new.f_int1;
59848 END|
59849 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59850 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59851         
59852 # check trigger-5 success:      1
59853 DROP TRIGGER trg_1;
59854 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59855 f_int2 = CAST(f_char1 AS SIGNED INT),
59856 f_charbig = 'just inserted'
59857    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59858 DELETE FROM t0_aux
59859 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59860 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59861 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59862 'just inserted' FROM t0_template
59863 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59864 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
59865 BEGIN
59866 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59867 f_charbig = 'updated by trigger'
59868       WHERE f_int1 = - old.f_int1;
59869 END|
59870 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
59871 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59872         
59873 # check trigger-6 success:      1
59874 DROP TRIGGER trg_1;
59875 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59876 f_int2 = CAST(f_char1 AS SIGNED INT),
59877 f_charbig = 'just inserted'
59878    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59879 DELETE FROM t0_aux
59880 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59881 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59882 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59883 'just inserted' FROM t0_template
59884 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59885 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
59886 BEGIN
59887 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59888 f_charbig = 'updated by trigger'
59889       WHERE f_int1 = - old.f_int1;
59890 END|
59891 DELETE FROM t0_aux
59892 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59893         
59894 # check trigger-7 success:      1
59895 DROP TRIGGER trg_1;
59896 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59897 f_int2 = CAST(f_char1 AS SIGNED INT),
59898 f_charbig = 'just inserted'
59899    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59900 DELETE FROM t0_aux
59901 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59902 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
59903 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
59904 'just inserted' FROM t0_template
59905 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59906 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
59907 BEGIN
59908 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
59909 f_charbig = 'updated by trigger'
59910       WHERE f_int1 = - old.f_int1;
59911 END|
59912 DELETE FROM t0_aux
59913 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
59914         
59915 # check trigger-8 success:      1
59916 DROP TRIGGER trg_1;
59917 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59918 f_int2 = CAST(f_char1 AS SIGNED INT),
59919 f_charbig = 'just inserted'
59920    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
59921 DELETE FROM t0_aux
59922 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59923 DELETE FROM t1
59924 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
59925 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
59926 BEGIN
59927 SET new.f_int1 = old.f_int1 + @max_row,
59928 new.f_int2 = old.f_int2 - @max_row,
59929 new.f_charbig = '####updated per update trigger####';
59930 END|
59931 UPDATE t1
59932 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
59933 f_charbig = '####updated per update statement itself####';
59934         
59935 # check trigger-9 success:      1
59936 DROP TRIGGER trg_2;
59937 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59938 f_int2 = CAST(f_char1 AS SIGNED INT),
59939 f_charbig = CONCAT('===',f_char1,'===');
59940 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
59941 BEGIN
59942 SET new.f_int1 = new.f_int1 + @max_row,
59943 new.f_int2 = new.f_int2 - @max_row,
59944 new.f_charbig = '####updated per update trigger####';
59945 END|
59946 UPDATE t1
59947 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
59948 f_charbig = '####updated per update statement itself####';
59949         
59950 # check trigger-10 success:     1
59951 DROP TRIGGER trg_2;
59952 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
59953 f_int2 = CAST(f_char1 AS SIGNED INT),
59954 f_charbig = CONCAT('===',f_char1,'===');
59955 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
59956 BEGIN
59957 SET new.f_int1 = @my_max1 + @counter,
59958 new.f_int2 = @my_min2 - @counter,
59959 new.f_charbig = '####updated per insert trigger####';
59960 SET @counter = @counter + 1;
59961 END|
59962 SET @counter = 1;
59963 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
59964 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
59965 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
59966 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
59967 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
59968 ORDER BY f_int1;
59969 DROP TRIGGER trg_3;
59970         
59971 # check trigger-11 success:     1
59972 DELETE FROM t1
59973 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
59974 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
59975 AND f_charbig = '####updated per insert trigger####';
59976 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
59977 BEGIN
59978 SET new.f_int1 = @my_max1 + @counter,
59979 new.f_int2 = @my_min2 - @counter,
59980 new.f_charbig = '####updated per insert trigger####';
59981 SET @counter = @counter + 1;
59982 END|
59983 SET @counter = 1;
59984 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
59985 INSERT INTO t1 (f_char1, f_char2, f_charbig)
59986 SELECT CAST(f_int1 AS CHAR),
59987 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
59988 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
59989 ORDER BY f_int1;
59990 DROP TRIGGER trg_3;
59991         
59992 # check trigger-12 success:     1
59993 DELETE FROM t1
59994 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
59995 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
59996 AND f_charbig = '####updated per insert trigger####';
59997 ANALYZE  TABLE t1;
59998 Table   Op      Msg_type        Msg_text
59999 test.t1 analyze status  OK
60000 CHECK    TABLE t1 EXTENDED;
60001 Table   Op      Msg_type        Msg_text
60002 test.t1 check   status  OK
60003 CHECKSUM TABLE t1 EXTENDED;
60004 Table   Checksum
60005 test.t1 <some_value>
60006 OPTIMIZE TABLE t1;
60007 Table   Op      Msg_type        Msg_text
60008 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
60009 test.t1 optimize        status  OK
60010 # check layout success:    1
60011 REPAIR   TABLE t1 EXTENDED;
60012 Table   Op      Msg_type        Msg_text
60013 test.t1 repair  note    The storage engine for the table doesn't support repair
60014 # check layout success:    1
60015 TRUNCATE t1;
60016         
60017 # check TRUNCATE success:       1
60018 # check layout success:    1
60019 # End usability test (inc/partition_check.inc)
60020 DROP TABLE t1;
60021 CREATE TABLE t1 (
60022 f_int1 INTEGER,
60023 f_int2 INTEGER,
60024 f_char1 CHAR(20),
60025 f_char2 CHAR(20),
60026 f_charbig VARCHAR(1000)
60027 , UNIQUE INDEX uidx (f_int2,f_int1)
60029 PARTITION BY LIST(ABS(MOD(f_int1,2)))
60030 SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
60031 (PARTITION part1 VALUES IN (0),
60032  PARTITION part2 VALUES IN (1),
60033  PARTITION part3 VALUES IN (NULL));
60034 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
60035 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
60036 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
60037 ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
60038 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
60039 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
60040 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
60041 # Start usability test (inc/partition_check.inc)
60042 create_command
60043 SHOW CREATE TABLE t1;
60044 Table   Create Table
60045 t1      CREATE TABLE `t1` (
60046   `f_int1` mediumint(9) DEFAULT NULL,
60047   `f_int2` mediumint(9) DEFAULT NULL,
60048   `f_char1` char(20) DEFAULT NULL,
60049   `f_char2` char(20) DEFAULT NULL,
60050   `f_charbig` varchar(1000) DEFAULT NULL,
60051   UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
60052 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
60053 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
60054 SUBPARTITION BY KEY (f_int2)
60055 SUBPARTITIONS 3
60056 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
60057  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
60058  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
60060 # check prerequisites-1 success:    1
60061 # check COUNT(*) success:    1
60062 # check MIN/MAX(f_int1) success:    1
60063 # check MIN/MAX(f_int2) success:    1
60064 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60065 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
60066 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
60067 WHERE f_int1 IN (2,3);
60068 ERROR 23000: Duplicate entry '2-2' for key 'uidx'
60069 # check prerequisites-3 success:    1
60070 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
60071 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60072 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
60073 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
60074 WHERE f_int1 IN (2,3);
60075 DELETE FROM t1 WHERE f_charbig = 'delete me';
60076 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60077 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
60078 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
60079 WHERE f_int1 IN (2,3);
60080 DELETE FROM t1 WHERE f_charbig = 'delete me';
60081 # check read via f_int1 success: 1
60082 # check read via f_int2 success: 1
60083         
60084 # check multiple-1 success:     1
60085 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
60086         
60087 # check multiple-2 success:     1
60088 INSERT INTO t1 SELECT * FROM t0_template
60089 WHERE MOD(f_int1,3) = 0;
60090         
60091 # check multiple-3 success:     1
60092 UPDATE t1 SET f_int1 = f_int1 + @max_row
60093 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
60094 AND @max_row_div2 + @max_row_div4;
60095         
60096 # check multiple-4 success:     1
60097 DELETE FROM t1
60098 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
60099 AND @max_row_div2 + @max_row_div4 + @max_row;
60100         
60101 # check multiple-5 success:     1
60102 SELECT COUNT(*) INTO @try_count FROM t0_template
60103 WHERE MOD(f_int1,3) = 0
60104 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
60105 SELECT COUNT(*) INTO @clash_count
60106 FROM t1 INNER JOIN t0_template USING(f_int1)
60107 WHERE MOD(f_int1,3) = 0
60108 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
60109 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
60110 INSERT INTO t1
60111 SET f_int1 = @cur_value , f_int2 = @cur_value,
60112 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
60113 f_charbig = '#SINGLE#';
60114         
60115 # check single-1 success:       1
60116 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
60117 INSERT INTO t1
60118 SET f_int1 = @cur_value , f_int2 = @cur_value,
60119 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
60120 f_charbig = '#SINGLE#';
60121         
60122 # check single-2 success:       1
60123 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
60124 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
60125 UPDATE t1 SET f_int1 = @cur_value2
60126 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
60127         
60128 # check single-3 success:       1
60129 SET @cur_value1= -1;
60130 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
60131 UPDATE t1 SET f_int1 = @cur_value1
60132 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
60133         
60134 # check single-4 success:       1
60135 SELECT MAX(f_int1) INTO @cur_value FROM t1;
60136 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
60137         
60138 # check single-5 success:       1
60139 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
60140         
60141 # check single-6 success:       1
60142 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
60143 Warnings:
60144 Warning 1264    Out of range value for column 'f_int1' at row 1
60145 Warning 1264    Out of range value for column 'f_int2' at row 1
60146         
60147 # check single-7 success:       1
60148 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
60149 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
60150 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
60151 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
60152 f_charbig = '#NULL#';
60153 INSERT INTO t1
60154 SET f_int1 = NULL , f_int2 = -@max_row,
60155 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
60156 f_charbig = '#NULL#';
60157 # check null success:    1
60158         
60159 # check null-1 success:         1
60160 UPDATE t1 SET f_int1 = -@max_row
60161 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
60162 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
60163         
60164 # check null-2 success:         1
60165 UPDATE t1 SET f_int1 = NULL
60166 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
60167 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
60168         
60169 # check null-3 success:         1
60170 DELETE FROM t1
60171 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
60172 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
60173         
60174 # check null-4 success:         1
60175 DELETE FROM t1
60176 WHERE f_int1 = 0 AND f_int2 = 0
60177 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
60178 AND f_charbig = '#NULL#';
60179 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60180 SELECT f_int1, f_int1, '', '', 'was inserted'
60181    FROM t0_template source_tab
60182 WHERE MOD(f_int1,3) = 0
60183 AND f_int1 BETWEEN @max_row_div2 AND @max_row
60184 ON DUPLICATE KEY
60185 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
60186 f_int2 = 2 * @max_row + source_tab.f_int1,
60187 f_charbig = 'was updated';
60188         
60189 # check unique-1-a success:     1
60190         
60191 # check unique-1-b success:     1
60192 DELETE FROM t1 WHERE f_charbig = 'was inserted';
60193 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60194 f_int2 = CAST(f_char1 AS SIGNED INT),
60195 f_charbig = CONCAT('===',f_char1,'===')
60196 WHERE f_charbig = 'was updated';
60197 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60198 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
60199    FROM t0_template source_tab
60200 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
60201         
60202 # check replace success:        1
60203 DELETE FROM t1
60204 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
60205 DELETE FROM t1
60206 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
60207 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
60208 UPDATE t1 SET f_int2 = f_int1,
60209 f_char1 = CAST(f_int1 AS CHAR),
60210 f_char2 = CAST(f_int1 AS CHAR),
60211 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
60212 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
60213 SET AUTOCOMMIT= 0;
60214 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60215 SELECT f_int1, f_int1, '', '', 'was inserted'
60216 FROM t0_template source_tab
60217 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
60218         
60219 # check transactions-1 success:         1
60220 COMMIT WORK;
60221         
60222 # check transactions-2 success:         1
60223 ROLLBACK WORK;
60224         
60225 # check transactions-3 success:         1
60226 DELETE FROM t1 WHERE f_charbig = 'was inserted';
60227 COMMIT WORK;
60228 ROLLBACK WORK;
60229         
60230 # check transactions-4 success:         1
60231 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60232 SELECT f_int1, f_int1, '', '', 'was inserted'
60233 FROM t0_template source_tab
60234 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
60235         
60236 # check transactions-5 success:         1
60237 ROLLBACK WORK;
60238         
60239 # check transactions-6 success:         1
60240 # INFO: Storage engine used for t1 seems to be transactional.
60241 COMMIT;
60242         
60243 # check transactions-7 success:         1
60244 DELETE FROM t1 WHERE f_charbig = 'was inserted';
60245 COMMIT WORK;
60246 SET @@session.sql_mode = 'traditional';
60247 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
60248 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60249 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
60250 '', '', 'was inserted' FROM t0_template
60251 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
60252 ERROR 22012: Division by 0
60253 COMMIT;
60254         
60255 # check transactions-8 success:         1
60256 # INFO: Storage engine used for t1 seems to be able to revert
60257 #       changes made by the failing statement.
60258 SET @@session.sql_mode = '';
60259 SET AUTOCOMMIT= 1;
60260 DELETE FROM t1 WHERE f_charbig = 'was inserted';
60261 COMMIT WORK;
60262 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
60263         
60264 # check special-1 success:      1
60265 UPDATE t1 SET f_charbig = '';
60266         
60267 # check special-2 success:      1
60268 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
60269 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
60270 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
60271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60272 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60273 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60274 'just inserted' FROM t0_template
60275 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60276 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
60277 BEGIN
60278 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60279 f_charbig = 'updated by trigger'
60280       WHERE f_int1 = new.f_int1;
60281 END|
60282 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60283 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
60284 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60285         
60286 # check trigger-1 success:      1
60287 DROP TRIGGER trg_1;
60288 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60289 f_int2 = CAST(f_char1 AS SIGNED INT),
60290 f_charbig = 'just inserted'
60291    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60292 DELETE FROM t0_aux
60293 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60294 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60295 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60296 'just inserted' FROM t0_template
60297 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60298 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
60299 BEGIN
60300 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60301 f_charbig = 'updated by trigger'
60302       WHERE f_int1 = new.f_int1;
60303 END|
60304 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60305 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
60306 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60307         
60308 # check trigger-2 success:      1
60309 DROP TRIGGER trg_1;
60310 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60311 f_int2 = CAST(f_char1 AS SIGNED INT),
60312 f_charbig = 'just inserted'
60313    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60314 DELETE FROM t0_aux
60315 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60316 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60317 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60318 'just inserted' FROM t0_template
60319 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60320 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
60321 BEGIN
60322 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60323 f_charbig = 'updated by trigger'
60324       WHERE f_int1 = new.f_int1;
60325 END|
60326 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
60327 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60328         
60329 # check trigger-3 success:      1
60330 DROP TRIGGER trg_1;
60331 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60332 f_int2 = CAST(f_char1 AS SIGNED INT),
60333 f_charbig = 'just inserted'
60334    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60335 DELETE FROM t0_aux
60336 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60337 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60338 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60339 'just inserted' FROM t0_template
60340 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60341 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
60342 BEGIN
60343 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60344 f_charbig = 'updated by trigger'
60345       WHERE f_int1 = - old.f_int1;
60346 END|
60347 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
60348 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60349         
60350 # check trigger-4 success:      1
60351 DROP TRIGGER trg_1;
60352 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60353 f_int2 = CAST(f_char1 AS SIGNED INT),
60354 f_charbig = 'just inserted'
60355    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60356 DELETE FROM t0_aux
60357 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60358 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60359 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60360 'just inserted' FROM t0_template
60361 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60362 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
60363 BEGIN
60364 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60365 f_charbig = 'updated by trigger'
60366       WHERE f_int1 = new.f_int1;
60367 END|
60368 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
60369 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60370         
60371 # check trigger-5 success:      1
60372 DROP TRIGGER trg_1;
60373 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60374 f_int2 = CAST(f_char1 AS SIGNED INT),
60375 f_charbig = 'just inserted'
60376    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60377 DELETE FROM t0_aux
60378 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60379 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60380 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60381 'just inserted' FROM t0_template
60382 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60383 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
60384 BEGIN
60385 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60386 f_charbig = 'updated by trigger'
60387       WHERE f_int1 = - old.f_int1;
60388 END|
60389 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
60390 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60391         
60392 # check trigger-6 success:      1
60393 DROP TRIGGER trg_1;
60394 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60395 f_int2 = CAST(f_char1 AS SIGNED INT),
60396 f_charbig = 'just inserted'
60397    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60398 DELETE FROM t0_aux
60399 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60400 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60401 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60402 'just inserted' FROM t0_template
60403 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60404 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
60405 BEGIN
60406 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60407 f_charbig = 'updated by trigger'
60408       WHERE f_int1 = - old.f_int1;
60409 END|
60410 DELETE FROM t0_aux
60411 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60412         
60413 # check trigger-7 success:      1
60414 DROP TRIGGER trg_1;
60415 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60416 f_int2 = CAST(f_char1 AS SIGNED INT),
60417 f_charbig = 'just inserted'
60418    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60419 DELETE FROM t0_aux
60420 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60421 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
60422 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
60423 'just inserted' FROM t0_template
60424 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60425 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
60426 BEGIN
60427 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
60428 f_charbig = 'updated by trigger'
60429       WHERE f_int1 = - old.f_int1;
60430 END|
60431 DELETE FROM t0_aux
60432 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
60433         
60434 # check trigger-8 success:      1
60435 DROP TRIGGER trg_1;
60436 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60437 f_int2 = CAST(f_char1 AS SIGNED INT),
60438 f_charbig = 'just inserted'
60439    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
60440 DELETE FROM t0_aux
60441 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60442 DELETE FROM t1
60443 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
60444 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
60445 BEGIN
60446 SET new.f_int1 = old.f_int1 + @max_row,
60447 new.f_int2 = old.f_int2 - @max_row,
60448 new.f_charbig = '####updated per update trigger####';
60449 END|
60450 UPDATE t1
60451 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
60452 f_charbig = '####updated per update statement itself####';
60453         
60454 # check trigger-9 success:      1
60455 DROP TRIGGER trg_2;
60456 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60457 f_int2 = CAST(f_char1 AS SIGNED INT),
60458 f_charbig = CONCAT('===',f_char1,'===');
60459 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
60460 BEGIN
60461 SET new.f_int1 = new.f_int1 + @max_row,
60462 new.f_int2 = new.f_int2 - @max_row,
60463 new.f_charbig = '####updated per update trigger####';
60464 END|
60465 UPDATE t1
60466 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
60467 f_charbig = '####updated per update statement itself####';
60468         
60469 # check trigger-10 success:     1
60470 DROP TRIGGER trg_2;
60471 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
60472 f_int2 = CAST(f_char1 AS SIGNED INT),
60473 f_charbig = CONCAT('===',f_char1,'===');
60474 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
60475 BEGIN
60476 SET new.f_int1 = @my_max1 + @counter,
60477 new.f_int2 = @my_min2 - @counter,
60478 new.f_charbig = '####updated per insert trigger####';
60479 SET @counter = @counter + 1;
60480 END|
60481 SET @counter = 1;
60482 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
60483 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
60484 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
60485 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
60486 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
60487 ORDER BY f_int1;
60488 DROP TRIGGER trg_3;
60489         
60490 # check trigger-11 success:     1
60491 DELETE FROM t1
60492 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
60493 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
60494 AND f_charbig = '####updated per insert trigger####';
60495 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
60496 BEGIN
60497 SET new.f_int1 = @my_max1 + @counter,
60498 new.f_int2 = @my_min2 - @counter,
60499 new.f_charbig = '####updated per insert trigger####';
60500 SET @counter = @counter + 1;
60501 END|
60502 SET @counter = 1;
60503 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
60504 INSERT INTO t1 (f_char1, f_char2, f_charbig)
60505 SELECT CAST(f_int1 AS CHAR),
60506 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
60507 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
60508 ORDER BY f_int1;
60509 DROP TRIGGER trg_3;
60510         
60511 # check trigger-12 success:     1
60512 DELETE FROM t1
60513 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
60514 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
60515 AND f_charbig = '####updated per insert trigger####';
60516 ANALYZE  TABLE t1;
60517 Table   Op      Msg_type        Msg_text
60518 test.t1 analyze status  OK
60519 CHECK    TABLE t1 EXTENDED;
60520 Table   Op      Msg_type        Msg_text
60521 test.t1 check   status  OK
60522 CHECKSUM TABLE t1 EXTENDED;
60523 Table   Checksum
60524 test.t1 <some_value>
60525 OPTIMIZE TABLE t1;
60526 Table   Op      Msg_type        Msg_text
60527 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
60528 test.t1 optimize        status  OK
60529 # check layout success:    1
60530 REPAIR   TABLE t1 EXTENDED;
60531 Table   Op      Msg_type        Msg_text
60532 test.t1 repair  note    The storage engine for the table doesn't support repair
60533 # check layout success:    1
60534 TRUNCATE t1;
60535         
60536 # check TRUNCATE success:       1
60537 # check layout success:    1
60538 # End usability test (inc/partition_check.inc)
60539 DROP TABLE t1;
60540 DROP VIEW  IF EXISTS v1;
60541 DROP TABLE IF EXISTS t1;
60542 DROP TABLE IF EXISTS t0_aux;
60543 DROP TABLE IF EXISTS t0_definition;
60544 DROP TABLE IF EXISTS t0_template;