mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / suite / parts / r / partition_alter1_1_innodb.result
blob075346cfe94473a5a3ec500e3cc866e12cd20c35
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 #  1.    ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
43 #========================================================================
44 #------------------------------------------------------------------------
45 #  1.1   ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1)
46 #        within the partitioning function
47 #------------------------------------------------------------------------
48 DROP TABLE IF EXISTS t1;
49 CREATE TABLE t1 (
50 f_int1 INTEGER,
51 f_int2 INTEGER,
52 f_char1 CHAR(20),
53 f_char2 CHAR(20),
54 f_charbig VARCHAR(1000)
57 PARTITION BY HASH(f_int1) PARTITIONS 2;
58 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
60 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
61 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
62 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
63 DROP TABLE t1;
64 CREATE TABLE t1 (
65 f_int1 INTEGER,
66 f_int2 INTEGER,
67 f_char1 CHAR(20),
68 f_char2 CHAR(20),
69 f_charbig VARCHAR(1000)
72 PARTITION BY KEY(f_int1) PARTITIONS 5;
73 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
74 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
75 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
76 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
77 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
78 DROP TABLE t1;
79 CREATE TABLE t1 (
80 f_int1 INTEGER,
81 f_int2 INTEGER,
82 f_char1 CHAR(20),
83 f_char2 CHAR(20),
84 f_charbig VARCHAR(1000)
87 PARTITION BY LIST(MOD(f_int1,4))
88 (PARTITION part_3 VALUES IN (-3),
89 PARTITION part_2 VALUES IN (-2),
90 PARTITION part_1 VALUES IN (-1),
91 PARTITION part_N VALUES IN (NULL),
92 PARTITION part0 VALUES IN (0),
93 PARTITION part1 VALUES IN (1),
94 PARTITION part2 VALUES IN (2),
95 PARTITION part3 VALUES IN (3));
96 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
97 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
98 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
99 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
100 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
101 DROP TABLE t1;
102 CREATE TABLE t1 (
103 f_int1 INTEGER,
104 f_int2 INTEGER,
105 f_char1 CHAR(20),
106 f_char2 CHAR(20),
107 f_charbig VARCHAR(1000)
110 PARTITION BY RANGE(f_int1)
111 (PARTITION parta VALUES LESS THAN (0),
112 PARTITION partb VALUES LESS THAN (5),
113 PARTITION partc VALUES LESS THAN (10),
114 PARTITION partd VALUES LESS THAN (10 + 5),
115 PARTITION parte VALUES LESS THAN (20),
116 PARTITION partf VALUES LESS THAN (2147483646));
117 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
118 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
119 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
120 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
121 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
122 DROP TABLE t1;
123 CREATE TABLE t1 (
124 f_int1 INTEGER,
125 f_int2 INTEGER,
126 f_char1 CHAR(20),
127 f_char2 CHAR(20),
128 f_charbig VARCHAR(1000)
131 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
132 (PARTITION parta VALUES LESS THAN (0),
133 PARTITION partb VALUES LESS THAN (5),
134 PARTITION partc VALUES LESS THAN (10),
135 PARTITION partd VALUES LESS THAN (2147483646));
136 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
137 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
138 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
139 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
140 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
141 DROP TABLE t1;
142 CREATE TABLE t1 (
143 f_int1 INTEGER,
144 f_int2 INTEGER,
145 f_char1 CHAR(20),
146 f_char2 CHAR(20),
147 f_charbig VARCHAR(1000)
150 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
151 (PARTITION part1 VALUES LESS THAN (0)
152 (SUBPARTITION subpart11, SUBPARTITION subpart12),
153 PARTITION part2 VALUES LESS THAN (5)
154 (SUBPARTITION subpart21, SUBPARTITION subpart22),
155 PARTITION part3 VALUES LESS THAN (10)
156 (SUBPARTITION subpart31, SUBPARTITION subpart32),
157 PARTITION part4 VALUES LESS THAN (2147483646)
158 (SUBPARTITION subpart41, SUBPARTITION subpart42));
159 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
160 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
161 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
162 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
163 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
164 DROP TABLE t1;
165 CREATE TABLE t1 (
166 f_int1 INTEGER,
167 f_int2 INTEGER,
168 f_char1 CHAR(20),
169 f_char2 CHAR(20),
170 f_charbig VARCHAR(1000)
173 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
174 (PARTITION part1 VALUES IN (0)
175 (SUBPARTITION sp11, SUBPARTITION sp12),
176 PARTITION part2 VALUES IN (1)
177 (SUBPARTITION sp21, SUBPARTITION sp22),
178 PARTITION part3 VALUES IN (2)
179 (SUBPARTITION sp31, SUBPARTITION sp32),
180 PARTITION part4 VALUES IN (NULL)
181 (SUBPARTITION sp41, SUBPARTITION sp42));
182 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
183 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
184 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
185 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
186 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
187 DROP TABLE t1;
188 CREATE TABLE t1 (
189 f_int1 INTEGER,
190 f_int2 INTEGER,
191 f_char1 CHAR(20),
192 f_char2 CHAR(20),
193 f_charbig VARCHAR(1000)
196 PARTITION BY LIST(ABS(MOD(f_int1,2)))
197 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
198 (PARTITION part1 VALUES IN (0),
199 PARTITION part2 VALUES IN (1),
200 PARTITION part3 VALUES IN (NULL));
201 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
202 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
203 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
204 ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
205 ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
206 DROP TABLE t1;
207 DROP TABLE IF EXISTS t1;
208 CREATE TABLE t1 (
209 f_int1 INTEGER,
210 f_int2 INTEGER,
211 f_char1 CHAR(20),
212 f_char2 CHAR(20),
213 f_charbig VARCHAR(1000)
216 PARTITION BY HASH(f_int1) PARTITIONS 2;
217 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
218 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
219 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
220 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
221 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
222 DROP TABLE t1;
223 CREATE TABLE t1 (
224 f_int1 INTEGER,
225 f_int2 INTEGER,
226 f_char1 CHAR(20),
227 f_char2 CHAR(20),
228 f_charbig VARCHAR(1000)
231 PARTITION BY KEY(f_int1) PARTITIONS 5;
232 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
233 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
234 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
235 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
236 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
237 DROP TABLE t1;
238 CREATE TABLE t1 (
239 f_int1 INTEGER,
240 f_int2 INTEGER,
241 f_char1 CHAR(20),
242 f_char2 CHAR(20),
243 f_charbig VARCHAR(1000)
246 PARTITION BY LIST(MOD(f_int1,4))
247 (PARTITION part_3 VALUES IN (-3),
248 PARTITION part_2 VALUES IN (-2),
249 PARTITION part_1 VALUES IN (-1),
250 PARTITION part_N VALUES IN (NULL),
251 PARTITION part0 VALUES IN (0),
252 PARTITION part1 VALUES IN (1),
253 PARTITION part2 VALUES IN (2),
254 PARTITION part3 VALUES IN (3));
255 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
256 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
257 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
258 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
259 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
260 DROP TABLE t1;
261 CREATE TABLE t1 (
262 f_int1 INTEGER,
263 f_int2 INTEGER,
264 f_char1 CHAR(20),
265 f_char2 CHAR(20),
266 f_charbig VARCHAR(1000)
269 PARTITION BY RANGE(f_int1)
270 (PARTITION parta VALUES LESS THAN (0),
271 PARTITION partb VALUES LESS THAN (5),
272 PARTITION partc VALUES LESS THAN (10),
273 PARTITION partd VALUES LESS THAN (10 + 5),
274 PARTITION parte VALUES LESS THAN (20),
275 PARTITION partf VALUES LESS THAN (2147483646));
276 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
277 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
278 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
279 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
280 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
281 DROP TABLE t1;
282 CREATE TABLE t1 (
283 f_int1 INTEGER,
284 f_int2 INTEGER,
285 f_char1 CHAR(20),
286 f_char2 CHAR(20),
287 f_charbig VARCHAR(1000)
290 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
291 (PARTITION parta VALUES LESS THAN (0),
292 PARTITION partb VALUES LESS THAN (5),
293 PARTITION partc VALUES LESS THAN (10),
294 PARTITION partd VALUES LESS THAN (2147483646));
295 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
296 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
297 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
298 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
299 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
300 DROP TABLE t1;
301 CREATE TABLE t1 (
302 f_int1 INTEGER,
303 f_int2 INTEGER,
304 f_char1 CHAR(20),
305 f_char2 CHAR(20),
306 f_charbig VARCHAR(1000)
309 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
310 (PARTITION part1 VALUES LESS THAN (0)
311 (SUBPARTITION subpart11, SUBPARTITION subpart12),
312 PARTITION part2 VALUES LESS THAN (5)
313 (SUBPARTITION subpart21, SUBPARTITION subpart22),
314 PARTITION part3 VALUES LESS THAN (10)
315 (SUBPARTITION subpart31, SUBPARTITION subpart32),
316 PARTITION part4 VALUES LESS THAN (2147483646)
317 (SUBPARTITION subpart41, SUBPARTITION subpart42));
318 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
319 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
320 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
321 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
322 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
323 DROP TABLE t1;
324 CREATE TABLE t1 (
325 f_int1 INTEGER,
326 f_int2 INTEGER,
327 f_char1 CHAR(20),
328 f_char2 CHAR(20),
329 f_charbig VARCHAR(1000)
332 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
333 (PARTITION part1 VALUES IN (0)
334 (SUBPARTITION sp11, SUBPARTITION sp12),
335 PARTITION part2 VALUES IN (1)
336 (SUBPARTITION sp21, SUBPARTITION sp22),
337 PARTITION part3 VALUES IN (2)
338 (SUBPARTITION sp31, SUBPARTITION sp32),
339 PARTITION part4 VALUES IN (NULL)
340 (SUBPARTITION sp41, SUBPARTITION sp42));
341 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
342 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
343 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
344 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
345 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
346 DROP TABLE t1;
347 CREATE TABLE t1 (
348 f_int1 INTEGER,
349 f_int2 INTEGER,
350 f_char1 CHAR(20),
351 f_char2 CHAR(20),
352 f_charbig VARCHAR(1000)
355 PARTITION BY LIST(ABS(MOD(f_int1,2)))
356 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
357 (PARTITION part1 VALUES IN (0),
358 PARTITION part2 VALUES IN (1),
359 PARTITION part3 VALUES IN (NULL));
360 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
361 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
362 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
363 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
364 ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
365 DROP TABLE t1;
366 #  1.1.3 PRIMARY KEY consisting of two columns
367 DROP TABLE IF EXISTS t1;
368 CREATE TABLE t1 (
369 f_int1 INTEGER,
370 f_int2 INTEGER,
371 f_char1 CHAR(20),
372 f_char2 CHAR(20),
373 f_charbig VARCHAR(1000)
376 PARTITION BY HASH(f_int1) PARTITIONS 2;
377 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
378 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
379 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
380 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
381 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
382 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
383 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
384 # Start usability test (inc/partition_check.inc)
385 create_command
386 SHOW CREATE TABLE t1;
387 Table   Create Table
388 t1      CREATE TABLE `t1` (
389   `f_int1` int(11) NOT NULL DEFAULT '0',
390   `f_int2` int(11) NOT NULL DEFAULT '0',
391   `f_char1` char(20) DEFAULT NULL,
392   `f_char2` char(20) DEFAULT NULL,
393   `f_charbig` varchar(1000) DEFAULT NULL,
394   PRIMARY KEY (`f_int1`,`f_int2`)
395 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
396 /*!50100 PARTITION BY HASH (f_int1)
397 PARTITIONS 2 */
399 # check prerequisites-1 success:    1
400 # check COUNT(*) success:    1
401 # check MIN/MAX(f_int1) success:    1
402 # check MIN/MAX(f_int2) success:    1
403 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
404 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
405 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
406 WHERE f_int1 IN (2,3);
407 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
408 # check prerequisites-3 success:    1
409 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
410 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
411 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
412 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
413 WHERE f_int1 IN (2,3);
414 DELETE FROM t1 WHERE f_charbig = 'delete me';
415 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
416 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
417 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
418 WHERE f_int1 IN (2,3);
419 DELETE FROM t1 WHERE f_charbig = 'delete me';
420 # check read via f_int1 success: 1
421 # check read via f_int2 success: 1
422         
423 # check multiple-1 success:     1
424 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
425         
426 # check multiple-2 success:     1
427 INSERT INTO t1 SELECT * FROM t0_template
428 WHERE MOD(f_int1,3) = 0;
429         
430 # check multiple-3 success:     1
431 UPDATE t1 SET f_int1 = f_int1 + @max_row
432 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
433 AND @max_row_div2 + @max_row_div4;
434         
435 # check multiple-4 success:     1
436 DELETE FROM t1
437 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
438 AND @max_row_div2 + @max_row_div4 + @max_row;
439         
440 # check multiple-5 success:     1
441 SELECT COUNT(*) INTO @try_count FROM t0_template
442 WHERE MOD(f_int1,3) = 0
443 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
444 SELECT COUNT(*) INTO @clash_count
445 FROM t1 INNER JOIN t0_template USING(f_int1)
446 WHERE MOD(f_int1,3) = 0
447 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
448 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
449 INSERT INTO t1
450 SET f_int1 = @cur_value , f_int2 = @cur_value,
451 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
452 f_charbig = '#SINGLE#';
453         
454 # check single-1 success:       1
455 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
456 INSERT INTO t1
457 SET f_int1 = @cur_value , f_int2 = @cur_value,
458 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
459 f_charbig = '#SINGLE#';
460         
461 # check single-2 success:       1
462 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
463 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
464 UPDATE t1 SET f_int1 = @cur_value2
465 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
466         
467 # check single-3 success:       1
468 SET @cur_value1= -1;
469 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
470 UPDATE t1 SET f_int1 = @cur_value1
471 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
472         
473 # check single-4 success:       1
474 SELECT MAX(f_int1) INTO @cur_value FROM t1;
475 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
476         
477 # check single-5 success:       1
478 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
479         
480 # check single-6 success:       1
481 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
482         
483 # check single-7 success:       1
484 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
485 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
486 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
487 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
488 f_charbig = '#NULL#';
489 INSERT INTO t1
490 SET f_int1 = NULL , f_int2 = -@max_row,
491 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
492 f_charbig = '#NULL#';
493 ERROR 23000: Column 'f_int1' cannot be null
494 # check null success:    1
495 DELETE FROM t1
496 WHERE f_int1 = 0 AND f_int2 = 0
497 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
498 AND f_charbig = '#NULL#';
499 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
500 SELECT f_int1, f_int1, '', '', 'was inserted'
501    FROM t0_template source_tab
502 WHERE MOD(f_int1,3) = 0
503 AND f_int1 BETWEEN @max_row_div2 AND @max_row
504 ON DUPLICATE KEY
505 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
506 f_int2 = 2 * @max_row + source_tab.f_int1,
507 f_charbig = 'was updated';
508         
509 # check unique-1-a success:     1
510         
511 # check unique-1-b success:     1
512 DELETE FROM t1 WHERE f_charbig = 'was inserted';
513 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
514 f_int2 = CAST(f_char1 AS SIGNED INT),
515 f_charbig = CONCAT('===',f_char1,'===')
516 WHERE f_charbig = 'was updated';
517 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
518 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
519    FROM t0_template source_tab
520 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
521         
522 # check replace success:        1
523 DELETE FROM t1
524 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
525 DELETE FROM t1
526 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
527 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
528 UPDATE t1 SET f_int2 = f_int1,
529 f_char1 = CAST(f_int1 AS CHAR),
530 f_char2 = CAST(f_int1 AS CHAR),
531 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
532 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
533 SET AUTOCOMMIT= 0;
534 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
535 SELECT f_int1, f_int1, '', '', 'was inserted'
536 FROM t0_template source_tab
537 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
538         
539 # check transactions-1 success:         1
540 COMMIT WORK;
541         
542 # check transactions-2 success:         1
543 ROLLBACK WORK;
544         
545 # check transactions-3 success:         1
546 DELETE FROM t1 WHERE f_charbig = 'was inserted';
547 COMMIT WORK;
548 ROLLBACK WORK;
549         
550 # check transactions-4 success:         1
551 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
552 SELECT f_int1, f_int1, '', '', 'was inserted'
553 FROM t0_template source_tab
554 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
555         
556 # check transactions-5 success:         1
557 ROLLBACK WORK;
558         
559 # check transactions-6 success:         1
560 # INFO: Storage engine used for t1 seems to be transactional.
561 COMMIT;
562         
563 # check transactions-7 success:         1
564 DELETE FROM t1 WHERE f_charbig = 'was inserted';
565 COMMIT WORK;
566 SET @@session.sql_mode = 'traditional';
567 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
568 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
569 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
570 '', '', 'was inserted' FROM t0_template
571 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
572 ERROR 22012: Division by 0
573 COMMIT;
574         
575 # check transactions-8 success:         1
576 # INFO: Storage engine used for t1 seems to be able to revert
577 #       changes made by the failing statement.
578 SET @@session.sql_mode = '';
579 SET AUTOCOMMIT= 1;
580 DELETE FROM t1 WHERE f_charbig = 'was inserted';
581 COMMIT WORK;
582 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
583         
584 # check special-1 success:      1
585 UPDATE t1 SET f_charbig = '';
586         
587 # check special-2 success:      1
588 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
589 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
590 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
591 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
592 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
593 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
594 'just inserted' FROM t0_template
595 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
596 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
597 BEGIN
598 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
599 f_charbig = 'updated by trigger'
600       WHERE f_int1 = new.f_int1;
601 END|
602 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
603 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
604 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
605         
606 # check trigger-1 success:      1
607 DROP TRIGGER trg_1;
608 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
609 f_int2 = CAST(f_char1 AS SIGNED INT),
610 f_charbig = 'just inserted'
611    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
612 DELETE FROM t0_aux
613 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
614 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
615 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
616 'just inserted' FROM t0_template
617 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
618 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
619 BEGIN
620 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
621 f_charbig = 'updated by trigger'
622       WHERE f_int1 = new.f_int1;
623 END|
624 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
625 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
626 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
627         
628 # check trigger-2 success:      1
629 DROP TRIGGER trg_1;
630 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
631 f_int2 = CAST(f_char1 AS SIGNED INT),
632 f_charbig = 'just inserted'
633    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
634 DELETE FROM t0_aux
635 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
636 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
637 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
638 'just inserted' FROM t0_template
639 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
640 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
641 BEGIN
642 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
643 f_charbig = 'updated by trigger'
644       WHERE f_int1 = new.f_int1;
645 END|
646 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
647 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
648         
649 # check trigger-3 success:      1
650 DROP TRIGGER trg_1;
651 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
652 f_int2 = CAST(f_char1 AS SIGNED INT),
653 f_charbig = 'just inserted'
654    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
655 DELETE FROM t0_aux
656 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
657 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
658 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
659 'just inserted' FROM t0_template
660 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
661 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
662 BEGIN
663 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
664 f_charbig = 'updated by trigger'
665       WHERE f_int1 = - old.f_int1;
666 END|
667 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
668 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
669         
670 # check trigger-4 success:      1
671 DROP TRIGGER trg_1;
672 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
673 f_int2 = CAST(f_char1 AS SIGNED INT),
674 f_charbig = 'just inserted'
675    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
676 DELETE FROM t0_aux
677 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
678 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
679 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
680 'just inserted' FROM t0_template
681 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
682 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
683 BEGIN
684 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
685 f_charbig = 'updated by trigger'
686       WHERE f_int1 = new.f_int1;
687 END|
688 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
689 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
690         
691 # check trigger-5 success:      1
692 DROP TRIGGER trg_1;
693 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
694 f_int2 = CAST(f_char1 AS SIGNED INT),
695 f_charbig = 'just inserted'
696    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
697 DELETE FROM t0_aux
698 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
699 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
700 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
701 'just inserted' FROM t0_template
702 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
703 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
704 BEGIN
705 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
706 f_charbig = 'updated by trigger'
707       WHERE f_int1 = - old.f_int1;
708 END|
709 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
710 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
711         
712 # check trigger-6 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 BEFORE DELETE 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 = - old.f_int1;
729 END|
730 DELETE FROM t0_aux
731 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
732         
733 # check trigger-7 success:      1
734 DROP TRIGGER trg_1;
735 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
736 f_int2 = CAST(f_char1 AS SIGNED INT),
737 f_charbig = 'just inserted'
738    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
739 DELETE FROM t0_aux
740 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
741 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
742 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
743 'just inserted' FROM t0_template
744 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
745 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
746 BEGIN
747 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
748 f_charbig = 'updated by trigger'
749       WHERE f_int1 = - old.f_int1;
750 END|
751 DELETE FROM t0_aux
752 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
753         
754 # check trigger-8 success:      1
755 DROP TRIGGER trg_1;
756 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
757 f_int2 = CAST(f_char1 AS SIGNED INT),
758 f_charbig = 'just inserted'
759    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
760 DELETE FROM t0_aux
761 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
762 DELETE FROM t1
763 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
764 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
765 BEGIN
766 SET new.f_int1 = old.f_int1 + @max_row,
767 new.f_int2 = old.f_int2 - @max_row,
768 new.f_charbig = '####updated per update trigger####';
769 END|
770 UPDATE t1
771 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
772 f_charbig = '####updated per update statement itself####';
773         
774 # check trigger-9 success:      1
775 DROP TRIGGER trg_2;
776 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
777 f_int2 = CAST(f_char1 AS SIGNED INT),
778 f_charbig = CONCAT('===',f_char1,'===');
779 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
780 BEGIN
781 SET new.f_int1 = new.f_int1 + @max_row,
782 new.f_int2 = new.f_int2 - @max_row,
783 new.f_charbig = '####updated per update trigger####';
784 END|
785 UPDATE t1
786 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
787 f_charbig = '####updated per update statement itself####';
788         
789 # check trigger-10 success:     1
790 DROP TRIGGER trg_2;
791 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
792 f_int2 = CAST(f_char1 AS SIGNED INT),
793 f_charbig = CONCAT('===',f_char1,'===');
794 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
795 BEGIN
796 SET new.f_int1 = @my_max1 + @counter,
797 new.f_int2 = @my_min2 - @counter,
798 new.f_charbig = '####updated per insert trigger####';
799 SET @counter = @counter + 1;
800 END|
801 SET @counter = 1;
802 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
803 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
804 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
805 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
806 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
807 ORDER BY f_int1;
808 DROP TRIGGER trg_3;
809         
810 # check trigger-11 success:     1
811 DELETE FROM t1
812 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
813 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
814 AND f_charbig = '####updated per insert trigger####';
815 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
816 BEGIN
817 SET new.f_int1 = @my_max1 + @counter,
818 new.f_int2 = @my_min2 - @counter,
819 new.f_charbig = '####updated per insert trigger####';
820 SET @counter = @counter + 1;
821 END|
822 SET @counter = 1;
823 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
824 INSERT INTO t1 (f_char1, f_char2, f_charbig)
825 SELECT CAST(f_int1 AS CHAR),
826 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
827 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
828 ORDER BY f_int1;
829 DROP TRIGGER trg_3;
830         
831 # check trigger-12 success:     1
832 DELETE FROM t1
833 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
834 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
835 AND f_charbig = '####updated per insert trigger####';
836 ANALYZE  TABLE t1;
837 Table   Op      Msg_type        Msg_text
838 test.t1 analyze status  OK
839 CHECK    TABLE t1 EXTENDED;
840 Table   Op      Msg_type        Msg_text
841 test.t1 check   status  OK
842 CHECKSUM TABLE t1 EXTENDED;
843 Table   Checksum
844 test.t1 <some_value>
845 OPTIMIZE TABLE t1;
846 Table   Op      Msg_type        Msg_text
847 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
848 test.t1 optimize        status  OK
849 # check layout success:    1
850 REPAIR   TABLE t1 EXTENDED;
851 Table   Op      Msg_type        Msg_text
852 test.t1 repair  note    The storage engine for the table doesn't support repair
853 # check layout success:    1
854 TRUNCATE t1;
855         
856 # check TRUNCATE success:       1
857 # check layout success:    1
858 # End usability test (inc/partition_check.inc)
859 DROP TABLE t1;
860 CREATE TABLE t1 (
861 f_int1 INTEGER,
862 f_int2 INTEGER,
863 f_char1 CHAR(20),
864 f_char2 CHAR(20),
865 f_charbig VARCHAR(1000)
868 PARTITION BY KEY(f_int1) PARTITIONS 5;
869 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
870 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
871 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
872 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
873 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
874 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
875 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
876 # Start usability test (inc/partition_check.inc)
877 create_command
878 SHOW CREATE TABLE t1;
879 Table   Create Table
880 t1      CREATE TABLE `t1` (
881   `f_int1` int(11) NOT NULL DEFAULT '0',
882   `f_int2` int(11) NOT NULL DEFAULT '0',
883   `f_char1` char(20) DEFAULT NULL,
884   `f_char2` char(20) DEFAULT NULL,
885   `f_charbig` varchar(1000) DEFAULT NULL,
886   PRIMARY KEY (`f_int1`,`f_int2`)
887 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
888 /*!50100 PARTITION BY KEY (f_int1)
889 PARTITIONS 5 */
891 # check prerequisites-1 success:    1
892 # check COUNT(*) success:    1
893 # check MIN/MAX(f_int1) success:    1
894 # check MIN/MAX(f_int2) success:    1
895 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
896 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
897 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
898 WHERE f_int1 IN (2,3);
899 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
900 # check prerequisites-3 success:    1
901 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
902 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
903 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
904 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
905 WHERE f_int1 IN (2,3);
906 DELETE FROM t1 WHERE f_charbig = 'delete me';
907 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
908 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
909 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
910 WHERE f_int1 IN (2,3);
911 DELETE FROM t1 WHERE f_charbig = 'delete me';
912 # check read via f_int1 success: 1
913 # check read via f_int2 success: 1
914         
915 # check multiple-1 success:     1
916 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
917         
918 # check multiple-2 success:     1
919 INSERT INTO t1 SELECT * FROM t0_template
920 WHERE MOD(f_int1,3) = 0;
921         
922 # check multiple-3 success:     1
923 UPDATE t1 SET f_int1 = f_int1 + @max_row
924 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
925 AND @max_row_div2 + @max_row_div4;
926         
927 # check multiple-4 success:     1
928 DELETE FROM t1
929 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
930 AND @max_row_div2 + @max_row_div4 + @max_row;
931         
932 # check multiple-5 success:     1
933 SELECT COUNT(*) INTO @try_count FROM t0_template
934 WHERE MOD(f_int1,3) = 0
935 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
936 SELECT COUNT(*) INTO @clash_count
937 FROM t1 INNER JOIN t0_template USING(f_int1)
938 WHERE MOD(f_int1,3) = 0
939 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
940 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
941 INSERT INTO t1
942 SET f_int1 = @cur_value , f_int2 = @cur_value,
943 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
944 f_charbig = '#SINGLE#';
945         
946 # check single-1 success:       1
947 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
948 INSERT INTO t1
949 SET f_int1 = @cur_value , f_int2 = @cur_value,
950 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
951 f_charbig = '#SINGLE#';
952         
953 # check single-2 success:       1
954 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
955 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
956 UPDATE t1 SET f_int1 = @cur_value2
957 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
958         
959 # check single-3 success:       1
960 SET @cur_value1= -1;
961 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
962 UPDATE t1 SET f_int1 = @cur_value1
963 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
964         
965 # check single-4 success:       1
966 SELECT MAX(f_int1) INTO @cur_value FROM t1;
967 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
968         
969 # check single-5 success:       1
970 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
971         
972 # check single-6 success:       1
973 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
974         
975 # check single-7 success:       1
976 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
977 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
978 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
979 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
980 f_charbig = '#NULL#';
981 INSERT INTO t1
982 SET f_int1 = NULL , f_int2 = -@max_row,
983 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
984 f_charbig = '#NULL#';
985 ERROR 23000: Column 'f_int1' cannot be null
986 # check null success:    1
987 DELETE FROM t1
988 WHERE f_int1 = 0 AND f_int2 = 0
989 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
990 AND f_charbig = '#NULL#';
991 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
992 SELECT f_int1, f_int1, '', '', 'was inserted'
993    FROM t0_template source_tab
994 WHERE MOD(f_int1,3) = 0
995 AND f_int1 BETWEEN @max_row_div2 AND @max_row
996 ON DUPLICATE KEY
997 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
998 f_int2 = 2 * @max_row + source_tab.f_int1,
999 f_charbig = 'was updated';
1000         
1001 # check unique-1-a success:     1
1002         
1003 # check unique-1-b success:     1
1004 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1005 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1006 f_int2 = CAST(f_char1 AS SIGNED INT),
1007 f_charbig = CONCAT('===',f_char1,'===')
1008 WHERE f_charbig = 'was updated';
1009 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1010 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1011    FROM t0_template source_tab
1012 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1013         
1014 # check replace success:        1
1015 DELETE FROM t1
1016 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1017 DELETE FROM t1
1018 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1019 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1020 UPDATE t1 SET f_int2 = f_int1,
1021 f_char1 = CAST(f_int1 AS CHAR),
1022 f_char2 = CAST(f_int1 AS CHAR),
1023 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1024 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1025 SET AUTOCOMMIT= 0;
1026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1027 SELECT f_int1, f_int1, '', '', 'was inserted'
1028 FROM t0_template source_tab
1029 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1030         
1031 # check transactions-1 success:         1
1032 COMMIT WORK;
1033         
1034 # check transactions-2 success:         1
1035 ROLLBACK WORK;
1036         
1037 # check transactions-3 success:         1
1038 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1039 COMMIT WORK;
1040 ROLLBACK WORK;
1041         
1042 # check transactions-4 success:         1
1043 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1044 SELECT f_int1, f_int1, '', '', 'was inserted'
1045 FROM t0_template source_tab
1046 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1047         
1048 # check transactions-5 success:         1
1049 ROLLBACK WORK;
1050         
1051 # check transactions-6 success:         1
1052 # INFO: Storage engine used for t1 seems to be transactional.
1053 COMMIT;
1054         
1055 # check transactions-7 success:         1
1056 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1057 COMMIT WORK;
1058 SET @@session.sql_mode = 'traditional';
1059 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1060 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1061 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1062 '', '', 'was inserted' FROM t0_template
1063 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1064 ERROR 22012: Division by 0
1065 COMMIT;
1066         
1067 # check transactions-8 success:         1
1068 # INFO: Storage engine used for t1 seems to be able to revert
1069 #       changes made by the failing statement.
1070 SET @@session.sql_mode = '';
1071 SET AUTOCOMMIT= 1;
1072 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1073 COMMIT WORK;
1074 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1075         
1076 # check special-1 success:      1
1077 UPDATE t1 SET f_charbig = '';
1078         
1079 # check special-2 success:      1
1080 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1081 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1082 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1083 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1084 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1085 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1086 'just inserted' FROM t0_template
1087 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1088 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1089 BEGIN
1090 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1091 f_charbig = 'updated by trigger'
1092       WHERE f_int1 = new.f_int1;
1093 END|
1094 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1095 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1096 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1097         
1098 # check trigger-1 success:      1
1099 DROP TRIGGER trg_1;
1100 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1101 f_int2 = CAST(f_char1 AS SIGNED INT),
1102 f_charbig = 'just inserted'
1103    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1104 DELETE FROM t0_aux
1105 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1106 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1107 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1108 'just inserted' FROM t0_template
1109 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1110 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1111 BEGIN
1112 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1113 f_charbig = 'updated by trigger'
1114       WHERE f_int1 = new.f_int1;
1115 END|
1116 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1117 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1119         
1120 # check trigger-2 success:      1
1121 DROP TRIGGER trg_1;
1122 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1123 f_int2 = CAST(f_char1 AS SIGNED INT),
1124 f_charbig = 'just inserted'
1125    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1126 DELETE FROM t0_aux
1127 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1128 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1129 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1130 'just inserted' FROM t0_template
1131 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1132 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1133 BEGIN
1134 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1135 f_charbig = 'updated by trigger'
1136       WHERE f_int1 = new.f_int1;
1137 END|
1138 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1139 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1140         
1141 # check trigger-3 success:      1
1142 DROP TRIGGER trg_1;
1143 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1144 f_int2 = CAST(f_char1 AS SIGNED INT),
1145 f_charbig = 'just inserted'
1146    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1147 DELETE FROM t0_aux
1148 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1149 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1150 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1151 'just inserted' FROM t0_template
1152 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1153 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1154 BEGIN
1155 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1156 f_charbig = 'updated by trigger'
1157       WHERE f_int1 = - old.f_int1;
1158 END|
1159 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1160 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1161         
1162 # check trigger-4 success:      1
1163 DROP TRIGGER trg_1;
1164 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1165 f_int2 = CAST(f_char1 AS SIGNED INT),
1166 f_charbig = 'just inserted'
1167    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1168 DELETE FROM t0_aux
1169 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1170 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1171 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1172 'just inserted' FROM t0_template
1173 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1174 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1175 BEGIN
1176 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1177 f_charbig = 'updated by trigger'
1178       WHERE f_int1 = new.f_int1;
1179 END|
1180 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1181 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1182         
1183 # check trigger-5 success:      1
1184 DROP TRIGGER trg_1;
1185 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1186 f_int2 = CAST(f_char1 AS SIGNED INT),
1187 f_charbig = 'just inserted'
1188    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1189 DELETE FROM t0_aux
1190 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1191 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1192 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1193 'just inserted' FROM t0_template
1194 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1195 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1196 BEGIN
1197 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1198 f_charbig = 'updated by trigger'
1199       WHERE f_int1 = - old.f_int1;
1200 END|
1201 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1202 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1203         
1204 # check trigger-6 success:      1
1205 DROP TRIGGER trg_1;
1206 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1207 f_int2 = CAST(f_char1 AS SIGNED INT),
1208 f_charbig = 'just inserted'
1209    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1210 DELETE FROM t0_aux
1211 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1212 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1213 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1214 'just inserted' FROM t0_template
1215 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1216 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1217 BEGIN
1218 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1219 f_charbig = 'updated by trigger'
1220       WHERE f_int1 = - old.f_int1;
1221 END|
1222 DELETE FROM t0_aux
1223 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1224         
1225 # check trigger-7 success:      1
1226 DROP TRIGGER trg_1;
1227 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1228 f_int2 = CAST(f_char1 AS SIGNED INT),
1229 f_charbig = 'just inserted'
1230    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1231 DELETE FROM t0_aux
1232 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1233 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1234 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1235 'just inserted' FROM t0_template
1236 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1237 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1238 BEGIN
1239 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1240 f_charbig = 'updated by trigger'
1241       WHERE f_int1 = - old.f_int1;
1242 END|
1243 DELETE FROM t0_aux
1244 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1245         
1246 # check trigger-8 success:      1
1247 DROP TRIGGER trg_1;
1248 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1249 f_int2 = CAST(f_char1 AS SIGNED INT),
1250 f_charbig = 'just inserted'
1251    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1252 DELETE FROM t0_aux
1253 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1254 DELETE FROM t1
1255 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1256 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1257 BEGIN
1258 SET new.f_int1 = old.f_int1 + @max_row,
1259 new.f_int2 = old.f_int2 - @max_row,
1260 new.f_charbig = '####updated per update trigger####';
1261 END|
1262 UPDATE t1
1263 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1264 f_charbig = '####updated per update statement itself####';
1265         
1266 # check trigger-9 success:      1
1267 DROP TRIGGER trg_2;
1268 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1269 f_int2 = CAST(f_char1 AS SIGNED INT),
1270 f_charbig = CONCAT('===',f_char1,'===');
1271 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1272 BEGIN
1273 SET new.f_int1 = new.f_int1 + @max_row,
1274 new.f_int2 = new.f_int2 - @max_row,
1275 new.f_charbig = '####updated per update trigger####';
1276 END|
1277 UPDATE t1
1278 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1279 f_charbig = '####updated per update statement itself####';
1280         
1281 # check trigger-10 success:     1
1282 DROP TRIGGER trg_2;
1283 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1284 f_int2 = CAST(f_char1 AS SIGNED INT),
1285 f_charbig = CONCAT('===',f_char1,'===');
1286 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1287 BEGIN
1288 SET new.f_int1 = @my_max1 + @counter,
1289 new.f_int2 = @my_min2 - @counter,
1290 new.f_charbig = '####updated per insert trigger####';
1291 SET @counter = @counter + 1;
1292 END|
1293 SET @counter = 1;
1294 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1295 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1296 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1297 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1298 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1299 ORDER BY f_int1;
1300 DROP TRIGGER trg_3;
1301         
1302 # check trigger-11 success:     1
1303 DELETE FROM t1
1304 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1305 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1306 AND f_charbig = '####updated per insert trigger####';
1307 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1308 BEGIN
1309 SET new.f_int1 = @my_max1 + @counter,
1310 new.f_int2 = @my_min2 - @counter,
1311 new.f_charbig = '####updated per insert trigger####';
1312 SET @counter = @counter + 1;
1313 END|
1314 SET @counter = 1;
1315 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1316 INSERT INTO t1 (f_char1, f_char2, f_charbig)
1317 SELECT CAST(f_int1 AS CHAR),
1318 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1319 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1320 ORDER BY f_int1;
1321 DROP TRIGGER trg_3;
1322         
1323 # check trigger-12 success:     1
1324 DELETE FROM t1
1325 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1326 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1327 AND f_charbig = '####updated per insert trigger####';
1328 ANALYZE  TABLE t1;
1329 Table   Op      Msg_type        Msg_text
1330 test.t1 analyze status  OK
1331 CHECK    TABLE t1 EXTENDED;
1332 Table   Op      Msg_type        Msg_text
1333 test.t1 check   status  OK
1334 CHECKSUM TABLE t1 EXTENDED;
1335 Table   Checksum
1336 test.t1 <some_value>
1337 OPTIMIZE TABLE t1;
1338 Table   Op      Msg_type        Msg_text
1339 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
1340 test.t1 optimize        status  OK
1341 # check layout success:    1
1342 REPAIR   TABLE t1 EXTENDED;
1343 Table   Op      Msg_type        Msg_text
1344 test.t1 repair  note    The storage engine for the table doesn't support repair
1345 # check layout success:    1
1346 TRUNCATE t1;
1347         
1348 # check TRUNCATE success:       1
1349 # check layout success:    1
1350 # End usability test (inc/partition_check.inc)
1351 DROP TABLE t1;
1352 CREATE TABLE t1 (
1353 f_int1 INTEGER,
1354 f_int2 INTEGER,
1355 f_char1 CHAR(20),
1356 f_char2 CHAR(20),
1357 f_charbig VARCHAR(1000)
1360 PARTITION BY LIST(MOD(f_int1,4))
1361 (PARTITION part_3 VALUES IN (-3),
1362 PARTITION part_2 VALUES IN (-2),
1363 PARTITION part_1 VALUES IN (-1),
1364 PARTITION part_N VALUES IN (NULL),
1365 PARTITION part0 VALUES IN (0),
1366 PARTITION part1 VALUES IN (1),
1367 PARTITION part2 VALUES IN (2),
1368 PARTITION part3 VALUES IN (3));
1369 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1370 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1371 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1372 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
1373 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1374 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1375 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1376 # Start usability test (inc/partition_check.inc)
1377 create_command
1378 SHOW CREATE TABLE t1;
1379 Table   Create Table
1380 t1      CREATE TABLE `t1` (
1381   `f_int1` int(11) NOT NULL DEFAULT '0',
1382   `f_int2` int(11) NOT NULL DEFAULT '0',
1383   `f_char1` char(20) DEFAULT NULL,
1384   `f_char2` char(20) DEFAULT NULL,
1385   `f_charbig` varchar(1000) DEFAULT NULL,
1386   PRIMARY KEY (`f_int1`,`f_int2`)
1387 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1388 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
1389 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
1390  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
1391  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
1392  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
1393  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
1394  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
1395  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
1396  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
1398 # check prerequisites-1 success:    1
1399 # check COUNT(*) success:    1
1400 # check MIN/MAX(f_int1) success:    1
1401 # check MIN/MAX(f_int2) success:    1
1402 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1403 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1404 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1405 WHERE f_int1 IN (2,3);
1406 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
1407 # check prerequisites-3 success:    1
1408 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1409 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1410 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1411 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1412 WHERE f_int1 IN (2,3);
1413 DELETE FROM t1 WHERE f_charbig = 'delete me';
1414 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1415 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1416 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1417 WHERE f_int1 IN (2,3);
1418 DELETE FROM t1 WHERE f_charbig = 'delete me';
1419 # check read via f_int1 success: 1
1420 # check read via f_int2 success: 1
1421         
1422 # check multiple-1 success:     1
1423 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1424         
1425 # check multiple-2 success:     1
1426 INSERT INTO t1 SELECT * FROM t0_template
1427 WHERE MOD(f_int1,3) = 0;
1428         
1429 # check multiple-3 success:     1
1430 UPDATE t1 SET f_int1 = f_int1 + @max_row
1431 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1432 AND @max_row_div2 + @max_row_div4;
1433         
1434 # check multiple-4 success:     1
1435 DELETE FROM t1
1436 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1437 AND @max_row_div2 + @max_row_div4 + @max_row;
1438         
1439 # check multiple-5 success:     1
1440 SELECT COUNT(*) INTO @try_count FROM t0_template
1441 WHERE MOD(f_int1,3) = 0
1442 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1443 SELECT COUNT(*) INTO @clash_count
1444 FROM t1 INNER JOIN t0_template USING(f_int1)
1445 WHERE MOD(f_int1,3) = 0
1446 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1447 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1448 INSERT INTO t1
1449 SET f_int1 = @cur_value , f_int2 = @cur_value,
1450 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1451 f_charbig = '#SINGLE#';
1452         
1453 # check single-1 success:       1
1454 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1455 INSERT INTO t1
1456 SET f_int1 = @cur_value , f_int2 = @cur_value,
1457 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1458 f_charbig = '#SINGLE#';
1459         
1460 # check single-2 success:       1
1461 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1462 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1463 UPDATE t1 SET f_int1 = @cur_value2
1464 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1465         
1466 # check single-3 success:       1
1467 SET @cur_value1= -1;
1468 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1469 UPDATE t1 SET f_int1 = @cur_value1
1470 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1471         
1472 # check single-4 success:       1
1473 SELECT MAX(f_int1) INTO @cur_value FROM t1;
1474 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1475         
1476 # check single-5 success:       1
1477 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1478         
1479 # check single-6 success:       1
1480 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1481         
1482 # check single-7 success:       1
1483 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1484 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1485 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1486 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1487 f_charbig = '#NULL#';
1488 INSERT INTO t1
1489 SET f_int1 = NULL , f_int2 = -@max_row,
1490 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1491 f_charbig = '#NULL#';
1492 ERROR 23000: Column 'f_int1' cannot be null
1493 # check null success:    1
1494 DELETE FROM t1
1495 WHERE f_int1 = 0 AND f_int2 = 0
1496 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1497 AND f_charbig = '#NULL#';
1498 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1499 SELECT f_int1, f_int1, '', '', 'was inserted'
1500    FROM t0_template source_tab
1501 WHERE MOD(f_int1,3) = 0
1502 AND f_int1 BETWEEN @max_row_div2 AND @max_row
1503 ON DUPLICATE KEY
1504 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
1505 f_int2 = 2 * @max_row + source_tab.f_int1,
1506 f_charbig = 'was updated';
1507         
1508 # check unique-1-a success:     1
1509         
1510 # check unique-1-b success:     1
1511 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1512 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1513 f_int2 = CAST(f_char1 AS SIGNED INT),
1514 f_charbig = CONCAT('===',f_char1,'===')
1515 WHERE f_charbig = 'was updated';
1516 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1517 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1518    FROM t0_template source_tab
1519 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1520         
1521 # check replace success:        1
1522 DELETE FROM t1
1523 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1524 DELETE FROM t1
1525 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1526 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1527 UPDATE t1 SET f_int2 = f_int1,
1528 f_char1 = CAST(f_int1 AS CHAR),
1529 f_char2 = CAST(f_int1 AS CHAR),
1530 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1531 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1532 SET AUTOCOMMIT= 0;
1533 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1534 SELECT f_int1, f_int1, '', '', 'was inserted'
1535 FROM t0_template source_tab
1536 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1537         
1538 # check transactions-1 success:         1
1539 COMMIT WORK;
1540         
1541 # check transactions-2 success:         1
1542 ROLLBACK WORK;
1543         
1544 # check transactions-3 success:         1
1545 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1546 COMMIT WORK;
1547 ROLLBACK WORK;
1548         
1549 # check transactions-4 success:         1
1550 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1551 SELECT f_int1, f_int1, '', '', 'was inserted'
1552 FROM t0_template source_tab
1553 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1554         
1555 # check transactions-5 success:         1
1556 ROLLBACK WORK;
1557         
1558 # check transactions-6 success:         1
1559 # INFO: Storage engine used for t1 seems to be transactional.
1560 COMMIT;
1561         
1562 # check transactions-7 success:         1
1563 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1564 COMMIT WORK;
1565 SET @@session.sql_mode = 'traditional';
1566 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1567 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1568 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1569 '', '', 'was inserted' FROM t0_template
1570 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1571 ERROR 22012: Division by 0
1572 COMMIT;
1573         
1574 # check transactions-8 success:         1
1575 # INFO: Storage engine used for t1 seems to be able to revert
1576 #       changes made by the failing statement.
1577 SET @@session.sql_mode = '';
1578 SET AUTOCOMMIT= 1;
1579 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1580 COMMIT WORK;
1581 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1582         
1583 # check special-1 success:      1
1584 UPDATE t1 SET f_charbig = '';
1585         
1586 # check special-2 success:      1
1587 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1588 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1589 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1590 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1591 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1592 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1593 'just inserted' FROM t0_template
1594 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1595 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1596 BEGIN
1597 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1598 f_charbig = 'updated by trigger'
1599       WHERE f_int1 = new.f_int1;
1600 END|
1601 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1602 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1603 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1604         
1605 # check trigger-1 success:      1
1606 DROP TRIGGER trg_1;
1607 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1608 f_int2 = CAST(f_char1 AS SIGNED INT),
1609 f_charbig = 'just inserted'
1610    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1611 DELETE FROM t0_aux
1612 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1613 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1614 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1615 'just inserted' FROM t0_template
1616 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1617 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1618 BEGIN
1619 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1620 f_charbig = 'updated by trigger'
1621       WHERE f_int1 = new.f_int1;
1622 END|
1623 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1624 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1625 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1626         
1627 # check trigger-2 success:      1
1628 DROP TRIGGER trg_1;
1629 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1630 f_int2 = CAST(f_char1 AS SIGNED INT),
1631 f_charbig = 'just inserted'
1632    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1633 DELETE FROM t0_aux
1634 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1635 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1636 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1637 'just inserted' FROM t0_template
1638 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1639 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1640 BEGIN
1641 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1642 f_charbig = 'updated by trigger'
1643       WHERE f_int1 = new.f_int1;
1644 END|
1645 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1646 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1647         
1648 # check trigger-3 success:      1
1649 DROP TRIGGER trg_1;
1650 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1651 f_int2 = CAST(f_char1 AS SIGNED INT),
1652 f_charbig = 'just inserted'
1653    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1654 DELETE FROM t0_aux
1655 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1656 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1657 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1658 'just inserted' FROM t0_template
1659 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1660 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1661 BEGIN
1662 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1663 f_charbig = 'updated by trigger'
1664       WHERE f_int1 = - old.f_int1;
1665 END|
1666 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1667 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1668         
1669 # check trigger-4 success:      1
1670 DROP TRIGGER trg_1;
1671 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1672 f_int2 = CAST(f_char1 AS SIGNED INT),
1673 f_charbig = 'just inserted'
1674    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1675 DELETE FROM t0_aux
1676 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1677 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1678 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1679 'just inserted' FROM t0_template
1680 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1681 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1682 BEGIN
1683 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1684 f_charbig = 'updated by trigger'
1685       WHERE f_int1 = new.f_int1;
1686 END|
1687 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1688 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1689         
1690 # check trigger-5 success:      1
1691 DROP TRIGGER trg_1;
1692 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1693 f_int2 = CAST(f_char1 AS SIGNED INT),
1694 f_charbig = 'just inserted'
1695    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1696 DELETE FROM t0_aux
1697 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1698 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1699 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1700 'just inserted' FROM t0_template
1701 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1702 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1703 BEGIN
1704 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1705 f_charbig = 'updated by trigger'
1706       WHERE f_int1 = - old.f_int1;
1707 END|
1708 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1709 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1710         
1711 # check trigger-6 success:      1
1712 DROP TRIGGER trg_1;
1713 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1714 f_int2 = CAST(f_char1 AS SIGNED INT),
1715 f_charbig = 'just inserted'
1716    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1717 DELETE FROM t0_aux
1718 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1719 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1720 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1721 'just inserted' FROM t0_template
1722 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1723 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1724 BEGIN
1725 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1726 f_charbig = 'updated by trigger'
1727       WHERE f_int1 = - old.f_int1;
1728 END|
1729 DELETE FROM t0_aux
1730 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1731         
1732 # check trigger-7 success:      1
1733 DROP TRIGGER trg_1;
1734 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1735 f_int2 = CAST(f_char1 AS SIGNED INT),
1736 f_charbig = 'just inserted'
1737    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1738 DELETE FROM t0_aux
1739 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1740 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1741 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1742 'just inserted' FROM t0_template
1743 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1744 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1745 BEGIN
1746 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1747 f_charbig = 'updated by trigger'
1748       WHERE f_int1 = - old.f_int1;
1749 END|
1750 DELETE FROM t0_aux
1751 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1752         
1753 # check trigger-8 success:      1
1754 DROP TRIGGER trg_1;
1755 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1756 f_int2 = CAST(f_char1 AS SIGNED INT),
1757 f_charbig = 'just inserted'
1758    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1759 DELETE FROM t0_aux
1760 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1761 DELETE FROM t1
1762 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1763 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1764 BEGIN
1765 SET new.f_int1 = old.f_int1 + @max_row,
1766 new.f_int2 = old.f_int2 - @max_row,
1767 new.f_charbig = '####updated per update trigger####';
1768 END|
1769 UPDATE t1
1770 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1771 f_charbig = '####updated per update statement itself####';
1772         
1773 # check trigger-9 success:      1
1774 DROP TRIGGER trg_2;
1775 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1776 f_int2 = CAST(f_char1 AS SIGNED INT),
1777 f_charbig = CONCAT('===',f_char1,'===');
1778 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1779 BEGIN
1780 SET new.f_int1 = new.f_int1 + @max_row,
1781 new.f_int2 = new.f_int2 - @max_row,
1782 new.f_charbig = '####updated per update trigger####';
1783 END|
1784 UPDATE t1
1785 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1786 f_charbig = '####updated per update statement itself####';
1787         
1788 # check trigger-10 success:     1
1789 DROP TRIGGER trg_2;
1790 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1791 f_int2 = CAST(f_char1 AS SIGNED INT),
1792 f_charbig = CONCAT('===',f_char1,'===');
1793 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1794 BEGIN
1795 SET new.f_int1 = @my_max1 + @counter,
1796 new.f_int2 = @my_min2 - @counter,
1797 new.f_charbig = '####updated per insert trigger####';
1798 SET @counter = @counter + 1;
1799 END|
1800 SET @counter = 1;
1801 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1802 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1803 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1804 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1805 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1806 ORDER BY f_int1;
1807 DROP TRIGGER trg_3;
1808         
1809 # check trigger-11 success:     1
1810 DELETE FROM t1
1811 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1812 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1813 AND f_charbig = '####updated per insert trigger####';
1814 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1815 BEGIN
1816 SET new.f_int1 = @my_max1 + @counter,
1817 new.f_int2 = @my_min2 - @counter,
1818 new.f_charbig = '####updated per insert trigger####';
1819 SET @counter = @counter + 1;
1820 END|
1821 SET @counter = 1;
1822 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1823 INSERT INTO t1 (f_char1, f_char2, f_charbig)
1824 SELECT CAST(f_int1 AS CHAR),
1825 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1826 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1827 ORDER BY f_int1;
1828 DROP TRIGGER trg_3;
1829         
1830 # check trigger-12 success:     1
1831 DELETE FROM t1
1832 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1833 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1834 AND f_charbig = '####updated per insert trigger####';
1835 ANALYZE  TABLE t1;
1836 Table   Op      Msg_type        Msg_text
1837 test.t1 analyze status  OK
1838 CHECK    TABLE t1 EXTENDED;
1839 Table   Op      Msg_type        Msg_text
1840 test.t1 check   status  OK
1841 CHECKSUM TABLE t1 EXTENDED;
1842 Table   Checksum
1843 test.t1 <some_value>
1844 OPTIMIZE TABLE t1;
1845 Table   Op      Msg_type        Msg_text
1846 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
1847 test.t1 optimize        status  OK
1848 # check layout success:    1
1849 REPAIR   TABLE t1 EXTENDED;
1850 Table   Op      Msg_type        Msg_text
1851 test.t1 repair  note    The storage engine for the table doesn't support repair
1852 # check layout success:    1
1853 TRUNCATE t1;
1854         
1855 # check TRUNCATE success:       1
1856 # check layout success:    1
1857 # End usability test (inc/partition_check.inc)
1858 DROP TABLE t1;
1859 CREATE TABLE t1 (
1860 f_int1 INTEGER,
1861 f_int2 INTEGER,
1862 f_char1 CHAR(20),
1863 f_char2 CHAR(20),
1864 f_charbig VARCHAR(1000)
1867 PARTITION BY RANGE(f_int1)
1868 (PARTITION parta VALUES LESS THAN (0),
1869 PARTITION partb VALUES LESS THAN (5),
1870 PARTITION partc VALUES LESS THAN (10),
1871 PARTITION partd VALUES LESS THAN (10 + 5),
1872 PARTITION parte VALUES LESS THAN (20),
1873 PARTITION partf VALUES LESS THAN (2147483646));
1874 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1875 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1876 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1877 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
1878 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1879 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1880 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1881 # Start usability test (inc/partition_check.inc)
1882 create_command
1883 SHOW CREATE TABLE t1;
1884 Table   Create Table
1885 t1      CREATE TABLE `t1` (
1886   `f_int1` int(11) NOT NULL DEFAULT '0',
1887   `f_int2` int(11) NOT NULL DEFAULT '0',
1888   `f_char1` char(20) DEFAULT NULL,
1889   `f_char2` char(20) DEFAULT NULL,
1890   `f_charbig` varchar(1000) DEFAULT NULL,
1891   PRIMARY KEY (`f_int1`,`f_int2`)
1892 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1893 /*!50100 PARTITION BY RANGE (f_int1)
1894 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1895  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1896  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1897  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
1898  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
1899  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1901 # check prerequisites-1 success:    1
1902 # check COUNT(*) success:    1
1903 # check MIN/MAX(f_int1) success:    1
1904 # check MIN/MAX(f_int2) success:    1
1905 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1906 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1907 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1908 WHERE f_int1 IN (2,3);
1909 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
1910 # check prerequisites-3 success:    1
1911 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1912 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1913 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1914 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1915 WHERE f_int1 IN (2,3);
1916 DELETE FROM t1 WHERE f_charbig = 'delete me';
1917 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1918 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1919 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1920 WHERE f_int1 IN (2,3);
1921 DELETE FROM t1 WHERE f_charbig = 'delete me';
1922 # check read via f_int1 success: 1
1923 # check read via f_int2 success: 1
1924         
1925 # check multiple-1 success:     1
1926 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1927         
1928 # check multiple-2 success:     1
1929 INSERT INTO t1 SELECT * FROM t0_template
1930 WHERE MOD(f_int1,3) = 0;
1931         
1932 # check multiple-3 success:     1
1933 UPDATE t1 SET f_int1 = f_int1 + @max_row
1934 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1935 AND @max_row_div2 + @max_row_div4;
1936         
1937 # check multiple-4 success:     1
1938 DELETE FROM t1
1939 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1940 AND @max_row_div2 + @max_row_div4 + @max_row;
1941         
1942 # check multiple-5 success:     1
1943 SELECT COUNT(*) INTO @try_count FROM t0_template
1944 WHERE MOD(f_int1,3) = 0
1945 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1946 SELECT COUNT(*) INTO @clash_count
1947 FROM t1 INNER JOIN t0_template USING(f_int1)
1948 WHERE MOD(f_int1,3) = 0
1949 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1950 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1951 INSERT INTO t1
1952 SET f_int1 = @cur_value , f_int2 = @cur_value,
1953 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1954 f_charbig = '#SINGLE#';
1955         
1956 # check single-1 success:       1
1957 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1958 INSERT INTO t1
1959 SET f_int1 = @cur_value , f_int2 = @cur_value,
1960 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1961 f_charbig = '#SINGLE#';
1962         
1963 # check single-2 success:       1
1964 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1965 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1966 UPDATE t1 SET f_int1 = @cur_value2
1967 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1968         
1969 # check single-3 success:       1
1970 SET @cur_value1= -1;
1971 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1972 UPDATE t1 SET f_int1 = @cur_value1
1973 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1974         
1975 # check single-4 success:       1
1976 SELECT MAX(f_int1) INTO @cur_value FROM t1;
1977 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1978         
1979 # check single-5 success:       1
1980 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1981         
1982 # check single-6 success:       1
1983 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1984 ERROR HY000: Table has no partition for value 2147483647
1985 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1986 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1987 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1988 f_charbig = '#NULL#';
1989 INSERT INTO t1
1990 SET f_int1 = NULL , f_int2 = -@max_row,
1991 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1992 f_charbig = '#NULL#';
1993 ERROR 23000: Column 'f_int1' cannot be null
1994 # check null success:    1
1995 DELETE FROM t1
1996 WHERE f_int1 = 0 AND f_int2 = 0
1997 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1998 AND f_charbig = '#NULL#';
1999 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2000 SELECT f_int1, f_int1, '', '', 'was inserted'
2001    FROM t0_template source_tab
2002 WHERE MOD(f_int1,3) = 0
2003 AND f_int1 BETWEEN @max_row_div2 AND @max_row
2004 ON DUPLICATE KEY
2005 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2006 f_int2 = 2 * @max_row + source_tab.f_int1,
2007 f_charbig = 'was updated';
2008         
2009 # check unique-1-a success:     1
2010         
2011 # check unique-1-b success:     1
2012 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2013 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2014 f_int2 = CAST(f_char1 AS SIGNED INT),
2015 f_charbig = CONCAT('===',f_char1,'===')
2016 WHERE f_charbig = 'was updated';
2017 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2018 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2019    FROM t0_template source_tab
2020 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2021         
2022 # check replace success:        1
2023 DELETE FROM t1
2024 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2025 DELETE FROM t1
2026 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2027 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2028 UPDATE t1 SET f_int2 = f_int1,
2029 f_char1 = CAST(f_int1 AS CHAR),
2030 f_char2 = CAST(f_int1 AS CHAR),
2031 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2032 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2033 SET AUTOCOMMIT= 0;
2034 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2035 SELECT f_int1, f_int1, '', '', 'was inserted'
2036 FROM t0_template source_tab
2037 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2038         
2039 # check transactions-1 success:         1
2040 COMMIT WORK;
2041         
2042 # check transactions-2 success:         1
2043 ROLLBACK WORK;
2044         
2045 # check transactions-3 success:         1
2046 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2047 COMMIT WORK;
2048 ROLLBACK WORK;
2049         
2050 # check transactions-4 success:         1
2051 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2052 SELECT f_int1, f_int1, '', '', 'was inserted'
2053 FROM t0_template source_tab
2054 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2055         
2056 # check transactions-5 success:         1
2057 ROLLBACK WORK;
2058         
2059 # check transactions-6 success:         1
2060 # INFO: Storage engine used for t1 seems to be transactional.
2061 COMMIT;
2062         
2063 # check transactions-7 success:         1
2064 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2065 COMMIT WORK;
2066 SET @@session.sql_mode = 'traditional';
2067 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2068 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2069 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2070 '', '', 'was inserted' FROM t0_template
2071 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2072 ERROR 22012: Division by 0
2073 COMMIT;
2074         
2075 # check transactions-8 success:         1
2076 # INFO: Storage engine used for t1 seems to be able to revert
2077 #       changes made by the failing statement.
2078 SET @@session.sql_mode = '';
2079 SET AUTOCOMMIT= 1;
2080 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2081 COMMIT WORK;
2082 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2083         
2084 # check special-1 success:      1
2085 UPDATE t1 SET f_charbig = '';
2086         
2087 # check special-2 success:      1
2088 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2089 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2090 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2091 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2092 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2093 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2094 'just inserted' FROM t0_template
2095 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2096 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2097 BEGIN
2098 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2099 f_charbig = 'updated by trigger'
2100       WHERE f_int1 = new.f_int1;
2101 END|
2102 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2103 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2104 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2105         
2106 # check trigger-1 success:      1
2107 DROP TRIGGER trg_1;
2108 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2109 f_int2 = CAST(f_char1 AS SIGNED INT),
2110 f_charbig = 'just inserted'
2111    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2112 DELETE FROM t0_aux
2113 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2114 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2115 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2116 'just inserted' FROM t0_template
2117 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2118 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2119 BEGIN
2120 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2121 f_charbig = 'updated by trigger'
2122       WHERE f_int1 = new.f_int1;
2123 END|
2124 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2125 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2126 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2127         
2128 # check trigger-2 success:      1
2129 DROP TRIGGER trg_1;
2130 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2131 f_int2 = CAST(f_char1 AS SIGNED INT),
2132 f_charbig = 'just inserted'
2133    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2134 DELETE FROM t0_aux
2135 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2136 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2137 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2138 'just inserted' FROM t0_template
2139 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2140 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2141 BEGIN
2142 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2143 f_charbig = 'updated by trigger'
2144       WHERE f_int1 = new.f_int1;
2145 END|
2146 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2147 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2148         
2149 # check trigger-3 success:      1
2150 DROP TRIGGER trg_1;
2151 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2152 f_int2 = CAST(f_char1 AS SIGNED INT),
2153 f_charbig = 'just inserted'
2154    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2155 DELETE FROM t0_aux
2156 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2157 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2158 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2159 'just inserted' FROM t0_template
2160 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2161 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2162 BEGIN
2163 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2164 f_charbig = 'updated by trigger'
2165       WHERE f_int1 = - old.f_int1;
2166 END|
2167 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2168 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2169         
2170 # check trigger-4 success:      1
2171 DROP TRIGGER trg_1;
2172 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2173 f_int2 = CAST(f_char1 AS SIGNED INT),
2174 f_charbig = 'just inserted'
2175    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2176 DELETE FROM t0_aux
2177 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2178 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2179 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2180 'just inserted' FROM t0_template
2181 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2182 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2183 BEGIN
2184 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2185 f_charbig = 'updated by trigger'
2186       WHERE f_int1 = new.f_int1;
2187 END|
2188 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2189 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2190         
2191 # check trigger-5 success:      1
2192 DROP TRIGGER trg_1;
2193 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2194 f_int2 = CAST(f_char1 AS SIGNED INT),
2195 f_charbig = 'just inserted'
2196    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2197 DELETE FROM t0_aux
2198 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2199 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2200 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2201 'just inserted' FROM t0_template
2202 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2203 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2204 BEGIN
2205 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2206 f_charbig = 'updated by trigger'
2207       WHERE f_int1 = - old.f_int1;
2208 END|
2209 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2210 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2211         
2212 # check trigger-6 success:      1
2213 DROP TRIGGER trg_1;
2214 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2215 f_int2 = CAST(f_char1 AS SIGNED INT),
2216 f_charbig = 'just inserted'
2217    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2218 DELETE FROM t0_aux
2219 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2220 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2221 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2222 'just inserted' FROM t0_template
2223 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2224 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2225 BEGIN
2226 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2227 f_charbig = 'updated by trigger'
2228       WHERE f_int1 = - old.f_int1;
2229 END|
2230 DELETE FROM t0_aux
2231 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2232         
2233 # check trigger-7 success:      1
2234 DROP TRIGGER trg_1;
2235 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2236 f_int2 = CAST(f_char1 AS SIGNED INT),
2237 f_charbig = 'just inserted'
2238    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2239 DELETE FROM t0_aux
2240 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2241 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2242 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2243 'just inserted' FROM t0_template
2244 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2245 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2246 BEGIN
2247 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2248 f_charbig = 'updated by trigger'
2249       WHERE f_int1 = - old.f_int1;
2250 END|
2251 DELETE FROM t0_aux
2252 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2253         
2254 # check trigger-8 success:      1
2255 DROP TRIGGER trg_1;
2256 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2257 f_int2 = CAST(f_char1 AS SIGNED INT),
2258 f_charbig = 'just inserted'
2259    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2260 DELETE FROM t0_aux
2261 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2262 DELETE FROM t1
2263 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2264 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2265 BEGIN
2266 SET new.f_int1 = old.f_int1 + @max_row,
2267 new.f_int2 = old.f_int2 - @max_row,
2268 new.f_charbig = '####updated per update trigger####';
2269 END|
2270 UPDATE t1
2271 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2272 f_charbig = '####updated per update statement itself####';
2273         
2274 # check trigger-9 success:      1
2275 DROP TRIGGER trg_2;
2276 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2277 f_int2 = CAST(f_char1 AS SIGNED INT),
2278 f_charbig = CONCAT('===',f_char1,'===');
2279 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2280 BEGIN
2281 SET new.f_int1 = new.f_int1 + @max_row,
2282 new.f_int2 = new.f_int2 - @max_row,
2283 new.f_charbig = '####updated per update trigger####';
2284 END|
2285 UPDATE t1
2286 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2287 f_charbig = '####updated per update statement itself####';
2288         
2289 # check trigger-10 success:     1
2290 DROP TRIGGER trg_2;
2291 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2292 f_int2 = CAST(f_char1 AS SIGNED INT),
2293 f_charbig = CONCAT('===',f_char1,'===');
2294 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2295 BEGIN
2296 SET new.f_int1 = @my_max1 + @counter,
2297 new.f_int2 = @my_min2 - @counter,
2298 new.f_charbig = '####updated per insert trigger####';
2299 SET @counter = @counter + 1;
2300 END|
2301 SET @counter = 1;
2302 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2303 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2304 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2305 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2306 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2307 ORDER BY f_int1;
2308 DROP TRIGGER trg_3;
2309         
2310 # check trigger-11 success:     1
2311 DELETE FROM t1
2312 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2313 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2314 AND f_charbig = '####updated per insert trigger####';
2315 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2316 BEGIN
2317 SET new.f_int1 = @my_max1 + @counter,
2318 new.f_int2 = @my_min2 - @counter,
2319 new.f_charbig = '####updated per insert trigger####';
2320 SET @counter = @counter + 1;
2321 END|
2322 SET @counter = 1;
2323 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2324 INSERT INTO t1 (f_char1, f_char2, f_charbig)
2325 SELECT CAST(f_int1 AS CHAR),
2326 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2327 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2328 ORDER BY f_int1;
2329 DROP TRIGGER trg_3;
2330         
2331 # check trigger-12 success:     1
2332 DELETE FROM t1
2333 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2334 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2335 AND f_charbig = '####updated per insert trigger####';
2336 ANALYZE  TABLE t1;
2337 Table   Op      Msg_type        Msg_text
2338 test.t1 analyze status  OK
2339 CHECK    TABLE t1 EXTENDED;
2340 Table   Op      Msg_type        Msg_text
2341 test.t1 check   status  OK
2342 CHECKSUM TABLE t1 EXTENDED;
2343 Table   Checksum
2344 test.t1 <some_value>
2345 OPTIMIZE TABLE t1;
2346 Table   Op      Msg_type        Msg_text
2347 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
2348 test.t1 optimize        status  OK
2349 # check layout success:    1
2350 REPAIR   TABLE t1 EXTENDED;
2351 Table   Op      Msg_type        Msg_text
2352 test.t1 repair  note    The storage engine for the table doesn't support repair
2353 # check layout success:    1
2354 TRUNCATE t1;
2355         
2356 # check TRUNCATE success:       1
2357 # check layout success:    1
2358 # End usability test (inc/partition_check.inc)
2359 DROP TABLE t1;
2360 CREATE TABLE t1 (
2361 f_int1 INTEGER,
2362 f_int2 INTEGER,
2363 f_char1 CHAR(20),
2364 f_char2 CHAR(20),
2365 f_charbig VARCHAR(1000)
2368 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
2369 (PARTITION parta VALUES LESS THAN (0),
2370 PARTITION partb VALUES LESS THAN (5),
2371 PARTITION partc VALUES LESS THAN (10),
2372 PARTITION partd VALUES LESS THAN (2147483646));
2373 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2374 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2375 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2376 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
2377 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2378 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2379 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2380 # Start usability test (inc/partition_check.inc)
2381 create_command
2382 SHOW CREATE TABLE t1;
2383 Table   Create Table
2384 t1      CREATE TABLE `t1` (
2385   `f_int1` int(11) NOT NULL DEFAULT '0',
2386   `f_int2` int(11) NOT NULL DEFAULT '0',
2387   `f_char1` char(20) DEFAULT NULL,
2388   `f_char2` char(20) DEFAULT NULL,
2389   `f_charbig` varchar(1000) DEFAULT NULL,
2390   PRIMARY KEY (`f_int1`,`f_int2`)
2391 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
2392 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
2393 SUBPARTITION BY HASH (f_int1)
2394 SUBPARTITIONS 2
2395 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
2396  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
2397  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
2398  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
2400 # check prerequisites-1 success:    1
2401 # check COUNT(*) success:    1
2402 # check MIN/MAX(f_int1) success:    1
2403 # check MIN/MAX(f_int2) success:    1
2404 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2405 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2406 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2407 WHERE f_int1 IN (2,3);
2408 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
2409 # check prerequisites-3 success:    1
2410 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2411 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2412 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2413 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2414 WHERE f_int1 IN (2,3);
2415 DELETE FROM t1 WHERE f_charbig = 'delete me';
2416 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2417 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2418 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2419 WHERE f_int1 IN (2,3);
2420 DELETE FROM t1 WHERE f_charbig = 'delete me';
2421 # check read via f_int1 success: 1
2422 # check read via f_int2 success: 1
2423         
2424 # check multiple-1 success:     1
2425 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2426         
2427 # check multiple-2 success:     1
2428 INSERT INTO t1 SELECT * FROM t0_template
2429 WHERE MOD(f_int1,3) = 0;
2430         
2431 # check multiple-3 success:     1
2432 UPDATE t1 SET f_int1 = f_int1 + @max_row
2433 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2434 AND @max_row_div2 + @max_row_div4;
2435         
2436 # check multiple-4 success:     1
2437 DELETE FROM t1
2438 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2439 AND @max_row_div2 + @max_row_div4 + @max_row;
2440         
2441 # check multiple-5 success:     1
2442 SELECT COUNT(*) INTO @try_count FROM t0_template
2443 WHERE MOD(f_int1,3) = 0
2444 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2445 SELECT COUNT(*) INTO @clash_count
2446 FROM t1 INNER JOIN t0_template USING(f_int1)
2447 WHERE MOD(f_int1,3) = 0
2448 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2449 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2450 INSERT INTO t1
2451 SET f_int1 = @cur_value , f_int2 = @cur_value,
2452 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2453 f_charbig = '#SINGLE#';
2454         
2455 # check single-1 success:       1
2456 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2457 INSERT INTO t1
2458 SET f_int1 = @cur_value , f_int2 = @cur_value,
2459 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2460 f_charbig = '#SINGLE#';
2461         
2462 # check single-2 success:       1
2463 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2464 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2465 UPDATE t1 SET f_int1 = @cur_value2
2466 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2467         
2468 # check single-3 success:       1
2469 SET @cur_value1= -1;
2470 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2471 UPDATE t1 SET f_int1 = @cur_value1
2472 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2473         
2474 # check single-4 success:       1
2475 SELECT MAX(f_int1) INTO @cur_value FROM t1;
2476 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2477         
2478 # check single-5 success:       1
2479 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2480         
2481 # check single-6 success:       1
2482 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2483         
2484 # check single-7 success:       1
2485 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2486 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2487 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2488 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2489 f_charbig = '#NULL#';
2490 INSERT INTO t1
2491 SET f_int1 = NULL , f_int2 = -@max_row,
2492 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2493 f_charbig = '#NULL#';
2494 ERROR 23000: Column 'f_int1' cannot be null
2495 # check null success:    1
2496 DELETE FROM t1
2497 WHERE f_int1 = 0 AND f_int2 = 0
2498 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2499 AND f_charbig = '#NULL#';
2500 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2501 SELECT f_int1, f_int1, '', '', 'was inserted'
2502    FROM t0_template source_tab
2503 WHERE MOD(f_int1,3) = 0
2504 AND f_int1 BETWEEN @max_row_div2 AND @max_row
2505 ON DUPLICATE KEY
2506 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2507 f_int2 = 2 * @max_row + source_tab.f_int1,
2508 f_charbig = 'was updated';
2509         
2510 # check unique-1-a success:     1
2511         
2512 # check unique-1-b success:     1
2513 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2514 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2515 f_int2 = CAST(f_char1 AS SIGNED INT),
2516 f_charbig = CONCAT('===',f_char1,'===')
2517 WHERE f_charbig = 'was updated';
2518 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2519 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2520    FROM t0_template source_tab
2521 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2522         
2523 # check replace success:        1
2524 DELETE FROM t1
2525 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2526 DELETE FROM t1
2527 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2528 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2529 UPDATE t1 SET f_int2 = f_int1,
2530 f_char1 = CAST(f_int1 AS CHAR),
2531 f_char2 = CAST(f_int1 AS CHAR),
2532 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2533 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2534 SET AUTOCOMMIT= 0;
2535 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2536 SELECT f_int1, f_int1, '', '', 'was inserted'
2537 FROM t0_template source_tab
2538 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2539         
2540 # check transactions-1 success:         1
2541 COMMIT WORK;
2542         
2543 # check transactions-2 success:         1
2544 ROLLBACK WORK;
2545         
2546 # check transactions-3 success:         1
2547 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2548 COMMIT WORK;
2549 ROLLBACK WORK;
2550         
2551 # check transactions-4 success:         1
2552 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2553 SELECT f_int1, f_int1, '', '', 'was inserted'
2554 FROM t0_template source_tab
2555 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2556         
2557 # check transactions-5 success:         1
2558 ROLLBACK WORK;
2559         
2560 # check transactions-6 success:         1
2561 # INFO: Storage engine used for t1 seems to be transactional.
2562 COMMIT;
2563         
2564 # check transactions-7 success:         1
2565 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2566 COMMIT WORK;
2567 SET @@session.sql_mode = 'traditional';
2568 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2569 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2570 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2571 '', '', 'was inserted' FROM t0_template
2572 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2573 ERROR 22012: Division by 0
2574 COMMIT;
2575         
2576 # check transactions-8 success:         1
2577 # INFO: Storage engine used for t1 seems to be able to revert
2578 #       changes made by the failing statement.
2579 SET @@session.sql_mode = '';
2580 SET AUTOCOMMIT= 1;
2581 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2582 COMMIT WORK;
2583 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2584         
2585 # check special-1 success:      1
2586 UPDATE t1 SET f_charbig = '';
2587         
2588 # check special-2 success:      1
2589 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2590 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2591 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2592 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2593 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2594 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2595 'just inserted' FROM t0_template
2596 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2597 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2598 BEGIN
2599 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2600 f_charbig = 'updated by trigger'
2601       WHERE f_int1 = new.f_int1;
2602 END|
2603 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2604 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2605 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2606         
2607 # check trigger-1 success:      1
2608 DROP TRIGGER trg_1;
2609 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2610 f_int2 = CAST(f_char1 AS SIGNED INT),
2611 f_charbig = 'just inserted'
2612    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2613 DELETE FROM t0_aux
2614 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2615 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2616 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2617 'just inserted' FROM t0_template
2618 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2619 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2620 BEGIN
2621 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2622 f_charbig = 'updated by trigger'
2623       WHERE f_int1 = new.f_int1;
2624 END|
2625 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2626 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2627 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2628         
2629 # check trigger-2 success:      1
2630 DROP TRIGGER trg_1;
2631 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2632 f_int2 = CAST(f_char1 AS SIGNED INT),
2633 f_charbig = 'just inserted'
2634    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2635 DELETE FROM t0_aux
2636 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2637 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2638 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2639 'just inserted' FROM t0_template
2640 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2641 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2642 BEGIN
2643 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2644 f_charbig = 'updated by trigger'
2645       WHERE f_int1 = new.f_int1;
2646 END|
2647 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2648 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2649         
2650 # check trigger-3 success:      1
2651 DROP TRIGGER trg_1;
2652 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2653 f_int2 = CAST(f_char1 AS SIGNED INT),
2654 f_charbig = 'just inserted'
2655    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2656 DELETE FROM t0_aux
2657 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2658 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2659 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2660 'just inserted' FROM t0_template
2661 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2662 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2663 BEGIN
2664 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2665 f_charbig = 'updated by trigger'
2666       WHERE f_int1 = - old.f_int1;
2667 END|
2668 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2669 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2670         
2671 # check trigger-4 success:      1
2672 DROP TRIGGER trg_1;
2673 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2674 f_int2 = CAST(f_char1 AS SIGNED INT),
2675 f_charbig = 'just inserted'
2676    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2677 DELETE FROM t0_aux
2678 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2679 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2680 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2681 'just inserted' FROM t0_template
2682 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2683 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2684 BEGIN
2685 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2686 f_charbig = 'updated by trigger'
2687       WHERE f_int1 = new.f_int1;
2688 END|
2689 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2690 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2691         
2692 # check trigger-5 success:      1
2693 DROP TRIGGER trg_1;
2694 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2695 f_int2 = CAST(f_char1 AS SIGNED INT),
2696 f_charbig = 'just inserted'
2697    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2698 DELETE FROM t0_aux
2699 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2700 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2701 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2702 'just inserted' FROM t0_template
2703 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2704 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2705 BEGIN
2706 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2707 f_charbig = 'updated by trigger'
2708       WHERE f_int1 = - old.f_int1;
2709 END|
2710 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2711 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2712         
2713 # check trigger-6 success:      1
2714 DROP TRIGGER trg_1;
2715 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2716 f_int2 = CAST(f_char1 AS SIGNED INT),
2717 f_charbig = 'just inserted'
2718    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2719 DELETE FROM t0_aux
2720 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2721 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2722 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2723 'just inserted' FROM t0_template
2724 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2725 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2726 BEGIN
2727 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2728 f_charbig = 'updated by trigger'
2729       WHERE f_int1 = - old.f_int1;
2730 END|
2731 DELETE FROM t0_aux
2732 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2733         
2734 # check trigger-7 success:      1
2735 DROP TRIGGER trg_1;
2736 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2737 f_int2 = CAST(f_char1 AS SIGNED INT),
2738 f_charbig = 'just inserted'
2739    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2740 DELETE FROM t0_aux
2741 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2742 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2743 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2744 'just inserted' FROM t0_template
2745 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2746 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2747 BEGIN
2748 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2749 f_charbig = 'updated by trigger'
2750       WHERE f_int1 = - old.f_int1;
2751 END|
2752 DELETE FROM t0_aux
2753 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2754         
2755 # check trigger-8 success:      1
2756 DROP TRIGGER trg_1;
2757 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2758 f_int2 = CAST(f_char1 AS SIGNED INT),
2759 f_charbig = 'just inserted'
2760    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2761 DELETE FROM t0_aux
2762 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2763 DELETE FROM t1
2764 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2765 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2766 BEGIN
2767 SET new.f_int1 = old.f_int1 + @max_row,
2768 new.f_int2 = old.f_int2 - @max_row,
2769 new.f_charbig = '####updated per update trigger####';
2770 END|
2771 UPDATE t1
2772 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2773 f_charbig = '####updated per update statement itself####';
2774         
2775 # check trigger-9 success:      1
2776 DROP TRIGGER trg_2;
2777 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2778 f_int2 = CAST(f_char1 AS SIGNED INT),
2779 f_charbig = CONCAT('===',f_char1,'===');
2780 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2781 BEGIN
2782 SET new.f_int1 = new.f_int1 + @max_row,
2783 new.f_int2 = new.f_int2 - @max_row,
2784 new.f_charbig = '####updated per update trigger####';
2785 END|
2786 UPDATE t1
2787 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2788 f_charbig = '####updated per update statement itself####';
2789         
2790 # check trigger-10 success:     1
2791 DROP TRIGGER trg_2;
2792 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2793 f_int2 = CAST(f_char1 AS SIGNED INT),
2794 f_charbig = CONCAT('===',f_char1,'===');
2795 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2796 BEGIN
2797 SET new.f_int1 = @my_max1 + @counter,
2798 new.f_int2 = @my_min2 - @counter,
2799 new.f_charbig = '####updated per insert trigger####';
2800 SET @counter = @counter + 1;
2801 END|
2802 SET @counter = 1;
2803 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2804 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2805 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2806 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2807 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2808 ORDER BY f_int1;
2809 DROP TRIGGER trg_3;
2810         
2811 # check trigger-11 success:     1
2812 DELETE FROM t1
2813 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2814 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2815 AND f_charbig = '####updated per insert trigger####';
2816 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2817 BEGIN
2818 SET new.f_int1 = @my_max1 + @counter,
2819 new.f_int2 = @my_min2 - @counter,
2820 new.f_charbig = '####updated per insert trigger####';
2821 SET @counter = @counter + 1;
2822 END|
2823 SET @counter = 1;
2824 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2825 INSERT INTO t1 (f_char1, f_char2, f_charbig)
2826 SELECT CAST(f_int1 AS CHAR),
2827 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2828 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2829 ORDER BY f_int1;
2830 DROP TRIGGER trg_3;
2831         
2832 # check trigger-12 success:     1
2833 DELETE FROM t1
2834 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2835 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2836 AND f_charbig = '####updated per insert trigger####';
2837 ANALYZE  TABLE t1;
2838 Table   Op      Msg_type        Msg_text
2839 test.t1 analyze status  OK
2840 CHECK    TABLE t1 EXTENDED;
2841 Table   Op      Msg_type        Msg_text
2842 test.t1 check   status  OK
2843 CHECKSUM TABLE t1 EXTENDED;
2844 Table   Checksum
2845 test.t1 <some_value>
2846 OPTIMIZE TABLE t1;
2847 Table   Op      Msg_type        Msg_text
2848 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
2849 test.t1 optimize        status  OK
2850 # check layout success:    1
2851 REPAIR   TABLE t1 EXTENDED;
2852 Table   Op      Msg_type        Msg_text
2853 test.t1 repair  note    The storage engine for the table doesn't support repair
2854 # check layout success:    1
2855 TRUNCATE t1;
2856         
2857 # check TRUNCATE success:       1
2858 # check layout success:    1
2859 # End usability test (inc/partition_check.inc)
2860 DROP TABLE t1;
2861 CREATE TABLE t1 (
2862 f_int1 INTEGER,
2863 f_int2 INTEGER,
2864 f_char1 CHAR(20),
2865 f_char2 CHAR(20),
2866 f_charbig VARCHAR(1000)
2869 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
2870 (PARTITION part1 VALUES LESS THAN (0)
2871 (SUBPARTITION subpart11, SUBPARTITION subpart12),
2872 PARTITION part2 VALUES LESS THAN (5)
2873 (SUBPARTITION subpart21, SUBPARTITION subpart22),
2874 PARTITION part3 VALUES LESS THAN (10)
2875 (SUBPARTITION subpart31, SUBPARTITION subpart32),
2876 PARTITION part4 VALUES LESS THAN (2147483646)
2877 (SUBPARTITION subpart41, SUBPARTITION subpart42));
2878 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2879 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2880 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2881 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
2882 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2883 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2884 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2885 # Start usability test (inc/partition_check.inc)
2886 create_command
2887 SHOW CREATE TABLE t1;
2888 Table   Create Table
2889 t1      CREATE TABLE `t1` (
2890   `f_int1` int(11) NOT NULL DEFAULT '0',
2891   `f_int2` int(11) NOT NULL DEFAULT '0',
2892   `f_char1` char(20) DEFAULT NULL,
2893   `f_char2` char(20) DEFAULT NULL,
2894   `f_charbig` varchar(1000) DEFAULT NULL,
2895   PRIMARY KEY (`f_int1`,`f_int2`)
2896 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
2897 /*!50100 PARTITION BY RANGE (f_int1)
2898 SUBPARTITION BY KEY (f_int1)
2899 (PARTITION part1 VALUES LESS THAN (0)
2900  (SUBPARTITION subpart11 ENGINE = InnoDB,
2901   SUBPARTITION subpart12 ENGINE = InnoDB),
2902  PARTITION part2 VALUES LESS THAN (5)
2903  (SUBPARTITION subpart21 ENGINE = InnoDB,
2904   SUBPARTITION subpart22 ENGINE = InnoDB),
2905  PARTITION part3 VALUES LESS THAN (10)
2906  (SUBPARTITION subpart31 ENGINE = InnoDB,
2907   SUBPARTITION subpart32 ENGINE = InnoDB),
2908  PARTITION part4 VALUES LESS THAN (2147483646)
2909  (SUBPARTITION subpart41 ENGINE = InnoDB,
2910   SUBPARTITION subpart42 ENGINE = InnoDB)) */
2912 # check prerequisites-1 success:    1
2913 # check COUNT(*) success:    1
2914 # check MIN/MAX(f_int1) success:    1
2915 # check MIN/MAX(f_int2) success:    1
2916 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2917 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2918 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2919 WHERE f_int1 IN (2,3);
2920 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
2921 # check prerequisites-3 success:    1
2922 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2923 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2924 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2925 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2926 WHERE f_int1 IN (2,3);
2927 DELETE FROM t1 WHERE f_charbig = 'delete me';
2928 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2929 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2930 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2931 WHERE f_int1 IN (2,3);
2932 DELETE FROM t1 WHERE f_charbig = 'delete me';
2933 # check read via f_int1 success: 1
2934 # check read via f_int2 success: 1
2935         
2936 # check multiple-1 success:     1
2937 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2938         
2939 # check multiple-2 success:     1
2940 INSERT INTO t1 SELECT * FROM t0_template
2941 WHERE MOD(f_int1,3) = 0;
2942         
2943 # check multiple-3 success:     1
2944 UPDATE t1 SET f_int1 = f_int1 + @max_row
2945 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2946 AND @max_row_div2 + @max_row_div4;
2947         
2948 # check multiple-4 success:     1
2949 DELETE FROM t1
2950 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2951 AND @max_row_div2 + @max_row_div4 + @max_row;
2952         
2953 # check multiple-5 success:     1
2954 SELECT COUNT(*) INTO @try_count FROM t0_template
2955 WHERE MOD(f_int1,3) = 0
2956 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2957 SELECT COUNT(*) INTO @clash_count
2958 FROM t1 INNER JOIN t0_template USING(f_int1)
2959 WHERE MOD(f_int1,3) = 0
2960 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2961 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2962 INSERT INTO t1
2963 SET f_int1 = @cur_value , f_int2 = @cur_value,
2964 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2965 f_charbig = '#SINGLE#';
2966         
2967 # check single-1 success:       1
2968 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2969 INSERT INTO t1
2970 SET f_int1 = @cur_value , f_int2 = @cur_value,
2971 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2972 f_charbig = '#SINGLE#';
2973         
2974 # check single-2 success:       1
2975 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2976 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2977 UPDATE t1 SET f_int1 = @cur_value2
2978 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2979         
2980 # check single-3 success:       1
2981 SET @cur_value1= -1;
2982 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2983 UPDATE t1 SET f_int1 = @cur_value1
2984 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2985         
2986 # check single-4 success:       1
2987 SELECT MAX(f_int1) INTO @cur_value FROM t1;
2988 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2989         
2990 # check single-5 success:       1
2991 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2992         
2993 # check single-6 success:       1
2994 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2995 ERROR HY000: Table has no partition for value 2147483647
2996 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2997 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2998 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2999 f_charbig = '#NULL#';
3000 INSERT INTO t1
3001 SET f_int1 = NULL , f_int2 = -@max_row,
3002 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3003 f_charbig = '#NULL#';
3004 ERROR 23000: Column 'f_int1' cannot be null
3005 # check null success:    1
3006 DELETE FROM t1
3007 WHERE f_int1 = 0 AND f_int2 = 0
3008 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3009 AND f_charbig = '#NULL#';
3010 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3011 SELECT f_int1, f_int1, '', '', 'was inserted'
3012    FROM t0_template source_tab
3013 WHERE MOD(f_int1,3) = 0
3014 AND f_int1 BETWEEN @max_row_div2 AND @max_row
3015 ON DUPLICATE KEY
3016 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3017 f_int2 = 2 * @max_row + source_tab.f_int1,
3018 f_charbig = 'was updated';
3019         
3020 # check unique-1-a success:     1
3021         
3022 # check unique-1-b success:     1
3023 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3024 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3025 f_int2 = CAST(f_char1 AS SIGNED INT),
3026 f_charbig = CONCAT('===',f_char1,'===')
3027 WHERE f_charbig = 'was updated';
3028 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3029 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3030    FROM t0_template source_tab
3031 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3032         
3033 # check replace success:        1
3034 DELETE FROM t1
3035 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3036 DELETE FROM t1
3037 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3038 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3039 UPDATE t1 SET f_int2 = f_int1,
3040 f_char1 = CAST(f_int1 AS CHAR),
3041 f_char2 = CAST(f_int1 AS CHAR),
3042 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3043 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3044 SET AUTOCOMMIT= 0;
3045 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3046 SELECT f_int1, f_int1, '', '', 'was inserted'
3047 FROM t0_template source_tab
3048 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3049         
3050 # check transactions-1 success:         1
3051 COMMIT WORK;
3052         
3053 # check transactions-2 success:         1
3054 ROLLBACK WORK;
3055         
3056 # check transactions-3 success:         1
3057 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3058 COMMIT WORK;
3059 ROLLBACK WORK;
3060         
3061 # check transactions-4 success:         1
3062 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3063 SELECT f_int1, f_int1, '', '', 'was inserted'
3064 FROM t0_template source_tab
3065 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3066         
3067 # check transactions-5 success:         1
3068 ROLLBACK WORK;
3069         
3070 # check transactions-6 success:         1
3071 # INFO: Storage engine used for t1 seems to be transactional.
3072 COMMIT;
3073         
3074 # check transactions-7 success:         1
3075 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3076 COMMIT WORK;
3077 SET @@session.sql_mode = 'traditional';
3078 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3079 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3080 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3081 '', '', 'was inserted' FROM t0_template
3082 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3083 ERROR 22012: Division by 0
3084 COMMIT;
3085         
3086 # check transactions-8 success:         1
3087 # INFO: Storage engine used for t1 seems to be able to revert
3088 #       changes made by the failing statement.
3089 SET @@session.sql_mode = '';
3090 SET AUTOCOMMIT= 1;
3091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3092 COMMIT WORK;
3093 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3094         
3095 # check special-1 success:      1
3096 UPDATE t1 SET f_charbig = '';
3097         
3098 # check special-2 success:      1
3099 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3100 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3101 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3102 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3103 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3104 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3105 'just inserted' FROM t0_template
3106 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3107 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3108 BEGIN
3109 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3110 f_charbig = 'updated by trigger'
3111       WHERE f_int1 = new.f_int1;
3112 END|
3113 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3114 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3115 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3116         
3117 # check trigger-1 success:      1
3118 DROP TRIGGER trg_1;
3119 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3120 f_int2 = CAST(f_char1 AS SIGNED INT),
3121 f_charbig = 'just inserted'
3122    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3123 DELETE FROM t0_aux
3124 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3125 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3126 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3127 'just inserted' FROM t0_template
3128 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3129 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3130 BEGIN
3131 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3132 f_charbig = 'updated by trigger'
3133       WHERE f_int1 = new.f_int1;
3134 END|
3135 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3136 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3137 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3138         
3139 # check trigger-2 success:      1
3140 DROP TRIGGER trg_1;
3141 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3142 f_int2 = CAST(f_char1 AS SIGNED INT),
3143 f_charbig = 'just inserted'
3144    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3145 DELETE FROM t0_aux
3146 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3147 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3148 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3149 'just inserted' FROM t0_template
3150 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3151 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3152 BEGIN
3153 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3154 f_charbig = 'updated by trigger'
3155       WHERE f_int1 = new.f_int1;
3156 END|
3157 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3158 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3159         
3160 # check trigger-3 success:      1
3161 DROP TRIGGER trg_1;
3162 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3163 f_int2 = CAST(f_char1 AS SIGNED INT),
3164 f_charbig = 'just inserted'
3165    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3166 DELETE FROM t0_aux
3167 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3168 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3169 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3170 'just inserted' FROM t0_template
3171 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3172 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3173 BEGIN
3174 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3175 f_charbig = 'updated by trigger'
3176       WHERE f_int1 = - old.f_int1;
3177 END|
3178 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3179 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3180         
3181 # check trigger-4 success:      1
3182 DROP TRIGGER trg_1;
3183 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3184 f_int2 = CAST(f_char1 AS SIGNED INT),
3185 f_charbig = 'just inserted'
3186    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3187 DELETE FROM t0_aux
3188 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3189 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3190 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3191 'just inserted' FROM t0_template
3192 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3193 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3194 BEGIN
3195 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3196 f_charbig = 'updated by trigger'
3197       WHERE f_int1 = new.f_int1;
3198 END|
3199 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3200 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3201         
3202 # check trigger-5 success:      1
3203 DROP TRIGGER trg_1;
3204 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3205 f_int2 = CAST(f_char1 AS SIGNED INT),
3206 f_charbig = 'just inserted'
3207    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3208 DELETE FROM t0_aux
3209 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3210 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3211 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3212 'just inserted' FROM t0_template
3213 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3214 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3215 BEGIN
3216 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3217 f_charbig = 'updated by trigger'
3218       WHERE f_int1 = - old.f_int1;
3219 END|
3220 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3221 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3222         
3223 # check trigger-6 success:      1
3224 DROP TRIGGER trg_1;
3225 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3226 f_int2 = CAST(f_char1 AS SIGNED INT),
3227 f_charbig = 'just inserted'
3228    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3229 DELETE FROM t0_aux
3230 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3231 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3232 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3233 'just inserted' FROM t0_template
3234 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3235 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3236 BEGIN
3237 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3238 f_charbig = 'updated by trigger'
3239       WHERE f_int1 = - old.f_int1;
3240 END|
3241 DELETE FROM t0_aux
3242 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3243         
3244 # check trigger-7 success:      1
3245 DROP TRIGGER trg_1;
3246 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3247 f_int2 = CAST(f_char1 AS SIGNED INT),
3248 f_charbig = 'just inserted'
3249    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3250 DELETE FROM t0_aux
3251 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3252 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3253 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3254 'just inserted' FROM t0_template
3255 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3256 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3257 BEGIN
3258 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3259 f_charbig = 'updated by trigger'
3260       WHERE f_int1 = - old.f_int1;
3261 END|
3262 DELETE FROM t0_aux
3263 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3264         
3265 # check trigger-8 success:      1
3266 DROP TRIGGER trg_1;
3267 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3268 f_int2 = CAST(f_char1 AS SIGNED INT),
3269 f_charbig = 'just inserted'
3270    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3271 DELETE FROM t0_aux
3272 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3273 DELETE FROM t1
3274 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3275 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3276 BEGIN
3277 SET new.f_int1 = old.f_int1 + @max_row,
3278 new.f_int2 = old.f_int2 - @max_row,
3279 new.f_charbig = '####updated per update trigger####';
3280 END|
3281 UPDATE t1
3282 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3283 f_charbig = '####updated per update statement itself####';
3284         
3285 # check trigger-9 success:      1
3286 DROP TRIGGER trg_2;
3287 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3288 f_int2 = CAST(f_char1 AS SIGNED INT),
3289 f_charbig = CONCAT('===',f_char1,'===');
3290 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3291 BEGIN
3292 SET new.f_int1 = new.f_int1 + @max_row,
3293 new.f_int2 = new.f_int2 - @max_row,
3294 new.f_charbig = '####updated per update trigger####';
3295 END|
3296 UPDATE t1
3297 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3298 f_charbig = '####updated per update statement itself####';
3299         
3300 # check trigger-10 success:     1
3301 DROP TRIGGER trg_2;
3302 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3303 f_int2 = CAST(f_char1 AS SIGNED INT),
3304 f_charbig = CONCAT('===',f_char1,'===');
3305 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3306 BEGIN
3307 SET new.f_int1 = @my_max1 + @counter,
3308 new.f_int2 = @my_min2 - @counter,
3309 new.f_charbig = '####updated per insert trigger####';
3310 SET @counter = @counter + 1;
3311 END|
3312 SET @counter = 1;
3313 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3314 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3315 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3316 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3317 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3318 ORDER BY f_int1;
3319 DROP TRIGGER trg_3;
3320         
3321 # check trigger-11 success:     1
3322 DELETE FROM t1
3323 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3324 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3325 AND f_charbig = '####updated per insert trigger####';
3326 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3327 BEGIN
3328 SET new.f_int1 = @my_max1 + @counter,
3329 new.f_int2 = @my_min2 - @counter,
3330 new.f_charbig = '####updated per insert trigger####';
3331 SET @counter = @counter + 1;
3332 END|
3333 SET @counter = 1;
3334 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3335 INSERT INTO t1 (f_char1, f_char2, f_charbig)
3336 SELECT CAST(f_int1 AS CHAR),
3337 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3338 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3339 ORDER BY f_int1;
3340 DROP TRIGGER trg_3;
3341         
3342 # check trigger-12 success:     1
3343 DELETE FROM t1
3344 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3345 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3346 AND f_charbig = '####updated per insert trigger####';
3347 ANALYZE  TABLE t1;
3348 Table   Op      Msg_type        Msg_text
3349 test.t1 analyze status  OK
3350 CHECK    TABLE t1 EXTENDED;
3351 Table   Op      Msg_type        Msg_text
3352 test.t1 check   status  OK
3353 CHECKSUM TABLE t1 EXTENDED;
3354 Table   Checksum
3355 test.t1 <some_value>
3356 OPTIMIZE TABLE t1;
3357 Table   Op      Msg_type        Msg_text
3358 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
3359 test.t1 optimize        status  OK
3360 # check layout success:    1
3361 REPAIR   TABLE t1 EXTENDED;
3362 Table   Op      Msg_type        Msg_text
3363 test.t1 repair  note    The storage engine for the table doesn't support repair
3364 # check layout success:    1
3365 TRUNCATE t1;
3366         
3367 # check TRUNCATE success:       1
3368 # check layout success:    1
3369 # End usability test (inc/partition_check.inc)
3370 DROP TABLE t1;
3371 CREATE TABLE t1 (
3372 f_int1 INTEGER,
3373 f_int2 INTEGER,
3374 f_char1 CHAR(20),
3375 f_char2 CHAR(20),
3376 f_charbig VARCHAR(1000)
3379 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
3380 (PARTITION part1 VALUES IN (0)
3381 (SUBPARTITION sp11, SUBPARTITION sp12),
3382 PARTITION part2 VALUES IN (1)
3383 (SUBPARTITION sp21, SUBPARTITION sp22),
3384 PARTITION part3 VALUES IN (2)
3385 (SUBPARTITION sp31, SUBPARTITION sp32),
3386 PARTITION part4 VALUES IN (NULL)
3387 (SUBPARTITION sp41, SUBPARTITION sp42));
3388 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3389 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3390 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3391 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
3392 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3393 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3394 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3395 # Start usability test (inc/partition_check.inc)
3396 create_command
3397 SHOW CREATE TABLE t1;
3398 Table   Create Table
3399 t1      CREATE TABLE `t1` (
3400   `f_int1` int(11) NOT NULL DEFAULT '0',
3401   `f_int2` int(11) NOT NULL DEFAULT '0',
3402   `f_char1` char(20) DEFAULT NULL,
3403   `f_char2` char(20) DEFAULT NULL,
3404   `f_charbig` varchar(1000) DEFAULT NULL,
3405   PRIMARY KEY (`f_int1`,`f_int2`)
3406 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
3407 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
3408 SUBPARTITION BY HASH (f_int1 + 1)
3409 (PARTITION part1 VALUES IN (0)
3410  (SUBPARTITION sp11 ENGINE = InnoDB,
3411   SUBPARTITION sp12 ENGINE = InnoDB),
3412  PARTITION part2 VALUES IN (1)
3413  (SUBPARTITION sp21 ENGINE = InnoDB,
3414   SUBPARTITION sp22 ENGINE = InnoDB),
3415  PARTITION part3 VALUES IN (2)
3416  (SUBPARTITION sp31 ENGINE = InnoDB,
3417   SUBPARTITION sp32 ENGINE = InnoDB),
3418  PARTITION part4 VALUES IN (NULL)
3419  (SUBPARTITION sp41 ENGINE = InnoDB,
3420   SUBPARTITION sp42 ENGINE = InnoDB)) */
3422 # check prerequisites-1 success:    1
3423 # check COUNT(*) success:    1
3424 # check MIN/MAX(f_int1) success:    1
3425 # check MIN/MAX(f_int2) success:    1
3426 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3427 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3428 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3429 WHERE f_int1 IN (2,3);
3430 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3431 # check prerequisites-3 success:    1
3432 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3433 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3434 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3435 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3436 WHERE f_int1 IN (2,3);
3437 DELETE FROM t1 WHERE f_charbig = 'delete me';
3438 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3439 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3440 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3441 WHERE f_int1 IN (2,3);
3442 DELETE FROM t1 WHERE f_charbig = 'delete me';
3443 # check read via f_int1 success: 1
3444 # check read via f_int2 success: 1
3445         
3446 # check multiple-1 success:     1
3447 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3448         
3449 # check multiple-2 success:     1
3450 INSERT INTO t1 SELECT * FROM t0_template
3451 WHERE MOD(f_int1,3) = 0;
3452         
3453 # check multiple-3 success:     1
3454 UPDATE t1 SET f_int1 = f_int1 + @max_row
3455 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3456 AND @max_row_div2 + @max_row_div4;
3457         
3458 # check multiple-4 success:     1
3459 DELETE FROM t1
3460 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3461 AND @max_row_div2 + @max_row_div4 + @max_row;
3462         
3463 # check multiple-5 success:     1
3464 SELECT COUNT(*) INTO @try_count FROM t0_template
3465 WHERE MOD(f_int1,3) = 0
3466 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3467 SELECT COUNT(*) INTO @clash_count
3468 FROM t1 INNER JOIN t0_template USING(f_int1)
3469 WHERE MOD(f_int1,3) = 0
3470 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3471 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3472 INSERT INTO t1
3473 SET f_int1 = @cur_value , f_int2 = @cur_value,
3474 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3475 f_charbig = '#SINGLE#';
3476         
3477 # check single-1 success:       1
3478 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3479 INSERT INTO t1
3480 SET f_int1 = @cur_value , f_int2 = @cur_value,
3481 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3482 f_charbig = '#SINGLE#';
3483         
3484 # check single-2 success:       1
3485 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3486 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3487 UPDATE t1 SET f_int1 = @cur_value2
3488 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3489         
3490 # check single-3 success:       1
3491 SET @cur_value1= -1;
3492 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3493 UPDATE t1 SET f_int1 = @cur_value1
3494 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3495         
3496 # check single-4 success:       1
3497 SELECT MAX(f_int1) INTO @cur_value FROM t1;
3498 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3499         
3500 # check single-5 success:       1
3501 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3502         
3503 # check single-6 success:       1
3504 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3505         
3506 # check single-7 success:       1
3507 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3508 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3509 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3510 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3511 f_charbig = '#NULL#';
3512 INSERT INTO t1
3513 SET f_int1 = NULL , f_int2 = -@max_row,
3514 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3515 f_charbig = '#NULL#';
3516 ERROR 23000: Column 'f_int1' cannot be null
3517 # check null success:    1
3518 DELETE FROM t1
3519 WHERE f_int1 = 0 AND f_int2 = 0
3520 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3521 AND f_charbig = '#NULL#';
3522 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3523 SELECT f_int1, f_int1, '', '', 'was inserted'
3524    FROM t0_template source_tab
3525 WHERE MOD(f_int1,3) = 0
3526 AND f_int1 BETWEEN @max_row_div2 AND @max_row
3527 ON DUPLICATE KEY
3528 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3529 f_int2 = 2 * @max_row + source_tab.f_int1,
3530 f_charbig = 'was updated';
3531         
3532 # check unique-1-a success:     1
3533         
3534 # check unique-1-b success:     1
3535 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3536 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3537 f_int2 = CAST(f_char1 AS SIGNED INT),
3538 f_charbig = CONCAT('===',f_char1,'===')
3539 WHERE f_charbig = 'was updated';
3540 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3541 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3542    FROM t0_template source_tab
3543 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3544         
3545 # check replace success:        1
3546 DELETE FROM t1
3547 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3548 DELETE FROM t1
3549 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3550 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3551 UPDATE t1 SET f_int2 = f_int1,
3552 f_char1 = CAST(f_int1 AS CHAR),
3553 f_char2 = CAST(f_int1 AS CHAR),
3554 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3555 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3556 SET AUTOCOMMIT= 0;
3557 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3558 SELECT f_int1, f_int1, '', '', 'was inserted'
3559 FROM t0_template source_tab
3560 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3561         
3562 # check transactions-1 success:         1
3563 COMMIT WORK;
3564         
3565 # check transactions-2 success:         1
3566 ROLLBACK WORK;
3567         
3568 # check transactions-3 success:         1
3569 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3570 COMMIT WORK;
3571 ROLLBACK WORK;
3572         
3573 # check transactions-4 success:         1
3574 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3575 SELECT f_int1, f_int1, '', '', 'was inserted'
3576 FROM t0_template source_tab
3577 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3578         
3579 # check transactions-5 success:         1
3580 ROLLBACK WORK;
3581         
3582 # check transactions-6 success:         1
3583 # INFO: Storage engine used for t1 seems to be transactional.
3584 COMMIT;
3585         
3586 # check transactions-7 success:         1
3587 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3588 COMMIT WORK;
3589 SET @@session.sql_mode = 'traditional';
3590 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3591 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3592 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3593 '', '', 'was inserted' FROM t0_template
3594 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3595 ERROR 22012: Division by 0
3596 COMMIT;
3597         
3598 # check transactions-8 success:         1
3599 # INFO: Storage engine used for t1 seems to be able to revert
3600 #       changes made by the failing statement.
3601 SET @@session.sql_mode = '';
3602 SET AUTOCOMMIT= 1;
3603 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3604 COMMIT WORK;
3605 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3606         
3607 # check special-1 success:      1
3608 UPDATE t1 SET f_charbig = '';
3609         
3610 # check special-2 success:      1
3611 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3612 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3613 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3614 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3615 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3616 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3617 'just inserted' FROM t0_template
3618 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3619 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3620 BEGIN
3621 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3622 f_charbig = 'updated by trigger'
3623       WHERE f_int1 = new.f_int1;
3624 END|
3625 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3626 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3627 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3628         
3629 # check trigger-1 success:      1
3630 DROP TRIGGER trg_1;
3631 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3632 f_int2 = CAST(f_char1 AS SIGNED INT),
3633 f_charbig = 'just inserted'
3634    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3635 DELETE FROM t0_aux
3636 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3637 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3638 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3639 'just inserted' FROM t0_template
3640 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3641 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3642 BEGIN
3643 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3644 f_charbig = 'updated by trigger'
3645       WHERE f_int1 = new.f_int1;
3646 END|
3647 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3648 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3649 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3650         
3651 # check trigger-2 success:      1
3652 DROP TRIGGER trg_1;
3653 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3654 f_int2 = CAST(f_char1 AS SIGNED INT),
3655 f_charbig = 'just inserted'
3656    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3657 DELETE FROM t0_aux
3658 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3659 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3660 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3661 'just inserted' FROM t0_template
3662 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3663 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3664 BEGIN
3665 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3666 f_charbig = 'updated by trigger'
3667       WHERE f_int1 = new.f_int1;
3668 END|
3669 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3670 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3671         
3672 # check trigger-3 success:      1
3673 DROP TRIGGER trg_1;
3674 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3675 f_int2 = CAST(f_char1 AS SIGNED INT),
3676 f_charbig = 'just inserted'
3677    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3678 DELETE FROM t0_aux
3679 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3680 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3681 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3682 'just inserted' FROM t0_template
3683 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3684 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3685 BEGIN
3686 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3687 f_charbig = 'updated by trigger'
3688       WHERE f_int1 = - old.f_int1;
3689 END|
3690 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3691 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3692         
3693 # check trigger-4 success:      1
3694 DROP TRIGGER trg_1;
3695 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3696 f_int2 = CAST(f_char1 AS SIGNED INT),
3697 f_charbig = 'just inserted'
3698    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3699 DELETE FROM t0_aux
3700 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3701 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3702 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3703 'just inserted' FROM t0_template
3704 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3705 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3706 BEGIN
3707 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3708 f_charbig = 'updated by trigger'
3709       WHERE f_int1 = new.f_int1;
3710 END|
3711 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3712 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3713         
3714 # check trigger-5 success:      1
3715 DROP TRIGGER trg_1;
3716 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3717 f_int2 = CAST(f_char1 AS SIGNED INT),
3718 f_charbig = 'just inserted'
3719    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3720 DELETE FROM t0_aux
3721 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3722 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3723 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3724 'just inserted' FROM t0_template
3725 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3726 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3727 BEGIN
3728 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3729 f_charbig = 'updated by trigger'
3730       WHERE f_int1 = - old.f_int1;
3731 END|
3732 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3733 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3734         
3735 # check trigger-6 success:      1
3736 DROP TRIGGER trg_1;
3737 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3738 f_int2 = CAST(f_char1 AS SIGNED INT),
3739 f_charbig = 'just inserted'
3740    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3741 DELETE FROM t0_aux
3742 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3743 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3744 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3745 'just inserted' FROM t0_template
3746 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3747 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3748 BEGIN
3749 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3750 f_charbig = 'updated by trigger'
3751       WHERE f_int1 = - old.f_int1;
3752 END|
3753 DELETE FROM t0_aux
3754 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3755         
3756 # check trigger-7 success:      1
3757 DROP TRIGGER trg_1;
3758 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3759 f_int2 = CAST(f_char1 AS SIGNED INT),
3760 f_charbig = 'just inserted'
3761    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3762 DELETE FROM t0_aux
3763 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3764 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3765 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3766 'just inserted' FROM t0_template
3767 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3768 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3769 BEGIN
3770 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3771 f_charbig = 'updated by trigger'
3772       WHERE f_int1 = - old.f_int1;
3773 END|
3774 DELETE FROM t0_aux
3775 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3776         
3777 # check trigger-8 success:      1
3778 DROP TRIGGER trg_1;
3779 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3780 f_int2 = CAST(f_char1 AS SIGNED INT),
3781 f_charbig = 'just inserted'
3782    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3783 DELETE FROM t0_aux
3784 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3785 DELETE FROM t1
3786 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3787 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3788 BEGIN
3789 SET new.f_int1 = old.f_int1 + @max_row,
3790 new.f_int2 = old.f_int2 - @max_row,
3791 new.f_charbig = '####updated per update trigger####';
3792 END|
3793 UPDATE t1
3794 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3795 f_charbig = '####updated per update statement itself####';
3796         
3797 # check trigger-9 success:      1
3798 DROP TRIGGER trg_2;
3799 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3800 f_int2 = CAST(f_char1 AS SIGNED INT),
3801 f_charbig = CONCAT('===',f_char1,'===');
3802 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3803 BEGIN
3804 SET new.f_int1 = new.f_int1 + @max_row,
3805 new.f_int2 = new.f_int2 - @max_row,
3806 new.f_charbig = '####updated per update trigger####';
3807 END|
3808 UPDATE t1
3809 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3810 f_charbig = '####updated per update statement itself####';
3811         
3812 # check trigger-10 success:     1
3813 DROP TRIGGER trg_2;
3814 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3815 f_int2 = CAST(f_char1 AS SIGNED INT),
3816 f_charbig = CONCAT('===',f_char1,'===');
3817 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3818 BEGIN
3819 SET new.f_int1 = @my_max1 + @counter,
3820 new.f_int2 = @my_min2 - @counter,
3821 new.f_charbig = '####updated per insert trigger####';
3822 SET @counter = @counter + 1;
3823 END|
3824 SET @counter = 1;
3825 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3826 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3827 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3828 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3829 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3830 ORDER BY f_int1;
3831 DROP TRIGGER trg_3;
3832         
3833 # check trigger-11 success:     1
3834 DELETE FROM t1
3835 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3836 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3837 AND f_charbig = '####updated per insert trigger####';
3838 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3839 BEGIN
3840 SET new.f_int1 = @my_max1 + @counter,
3841 new.f_int2 = @my_min2 - @counter,
3842 new.f_charbig = '####updated per insert trigger####';
3843 SET @counter = @counter + 1;
3844 END|
3845 SET @counter = 1;
3846 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3847 INSERT INTO t1 (f_char1, f_char2, f_charbig)
3848 SELECT CAST(f_int1 AS CHAR),
3849 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3850 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3851 ORDER BY f_int1;
3852 DROP TRIGGER trg_3;
3853         
3854 # check trigger-12 success:     1
3855 DELETE FROM t1
3856 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3857 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3858 AND f_charbig = '####updated per insert trigger####';
3859 ANALYZE  TABLE t1;
3860 Table   Op      Msg_type        Msg_text
3861 test.t1 analyze status  OK
3862 CHECK    TABLE t1 EXTENDED;
3863 Table   Op      Msg_type        Msg_text
3864 test.t1 check   status  OK
3865 CHECKSUM TABLE t1 EXTENDED;
3866 Table   Checksum
3867 test.t1 <some_value>
3868 OPTIMIZE TABLE t1;
3869 Table   Op      Msg_type        Msg_text
3870 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
3871 test.t1 optimize        status  OK
3872 # check layout success:    1
3873 REPAIR   TABLE t1 EXTENDED;
3874 Table   Op      Msg_type        Msg_text
3875 test.t1 repair  note    The storage engine for the table doesn't support repair
3876 # check layout success:    1
3877 TRUNCATE t1;
3878         
3879 # check TRUNCATE success:       1
3880 # check layout success:    1
3881 # End usability test (inc/partition_check.inc)
3882 DROP TABLE t1;
3883 CREATE TABLE t1 (
3884 f_int1 INTEGER,
3885 f_int2 INTEGER,
3886 f_char1 CHAR(20),
3887 f_char2 CHAR(20),
3888 f_charbig VARCHAR(1000)
3891 PARTITION BY LIST(ABS(MOD(f_int1,2)))
3892 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
3893 (PARTITION part1 VALUES IN (0),
3894 PARTITION part2 VALUES IN (1),
3895 PARTITION part3 VALUES IN (NULL));
3896 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3897 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3898 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3899 ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
3900 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3901 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3902 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3903 # Start usability test (inc/partition_check.inc)
3904 create_command
3905 SHOW CREATE TABLE t1;
3906 Table   Create Table
3907 t1      CREATE TABLE `t1` (
3908   `f_int1` int(11) NOT NULL DEFAULT '0',
3909   `f_int2` int(11) NOT NULL DEFAULT '0',
3910   `f_char1` char(20) DEFAULT NULL,
3911   `f_char2` char(20) DEFAULT NULL,
3912   `f_charbig` varchar(1000) DEFAULT NULL,
3913   PRIMARY KEY (`f_int1`,`f_int2`)
3914 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
3915 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3916 SUBPARTITION BY KEY (f_int1)
3917 SUBPARTITIONS 3
3918 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
3919  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
3920  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
3922 # check prerequisites-1 success:    1
3923 # check COUNT(*) success:    1
3924 # check MIN/MAX(f_int1) success:    1
3925 # check MIN/MAX(f_int2) success:    1
3926 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3927 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3928 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3929 WHERE f_int1 IN (2,3);
3930 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3931 # check prerequisites-3 success:    1
3932 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3933 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3934 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3935 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3936 WHERE f_int1 IN (2,3);
3937 DELETE FROM t1 WHERE f_charbig = 'delete me';
3938 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3939 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3940 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3941 WHERE f_int1 IN (2,3);
3942 DELETE FROM t1 WHERE f_charbig = 'delete me';
3943 # check read via f_int1 success: 1
3944 # check read via f_int2 success: 1
3945         
3946 # check multiple-1 success:     1
3947 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3948         
3949 # check multiple-2 success:     1
3950 INSERT INTO t1 SELECT * FROM t0_template
3951 WHERE MOD(f_int1,3) = 0;
3952         
3953 # check multiple-3 success:     1
3954 UPDATE t1 SET f_int1 = f_int1 + @max_row
3955 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3956 AND @max_row_div2 + @max_row_div4;
3957         
3958 # check multiple-4 success:     1
3959 DELETE FROM t1
3960 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3961 AND @max_row_div2 + @max_row_div4 + @max_row;
3962         
3963 # check multiple-5 success:     1
3964 SELECT COUNT(*) INTO @try_count FROM t0_template
3965 WHERE MOD(f_int1,3) = 0
3966 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3967 SELECT COUNT(*) INTO @clash_count
3968 FROM t1 INNER JOIN t0_template USING(f_int1)
3969 WHERE MOD(f_int1,3) = 0
3970 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3971 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3972 INSERT INTO t1
3973 SET f_int1 = @cur_value , f_int2 = @cur_value,
3974 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3975 f_charbig = '#SINGLE#';
3976         
3977 # check single-1 success:       1
3978 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3979 INSERT INTO t1
3980 SET f_int1 = @cur_value , f_int2 = @cur_value,
3981 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3982 f_charbig = '#SINGLE#';
3983         
3984 # check single-2 success:       1
3985 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3986 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3987 UPDATE t1 SET f_int1 = @cur_value2
3988 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3989         
3990 # check single-3 success:       1
3991 SET @cur_value1= -1;
3992 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3993 UPDATE t1 SET f_int1 = @cur_value1
3994 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3995         
3996 # check single-4 success:       1
3997 SELECT MAX(f_int1) INTO @cur_value FROM t1;
3998 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3999         
4000 # check single-5 success:       1
4001 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4002         
4003 # check single-6 success:       1
4004 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4005         
4006 # check single-7 success:       1
4007 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4008 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4009 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4010 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4011 f_charbig = '#NULL#';
4012 INSERT INTO t1
4013 SET f_int1 = NULL , f_int2 = -@max_row,
4014 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4015 f_charbig = '#NULL#';
4016 ERROR 23000: Column 'f_int1' cannot be null
4017 # check null success:    1
4018 DELETE FROM t1
4019 WHERE f_int1 = 0 AND f_int2 = 0
4020 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4021 AND f_charbig = '#NULL#';
4022 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4023 SELECT f_int1, f_int1, '', '', 'was inserted'
4024    FROM t0_template source_tab
4025 WHERE MOD(f_int1,3) = 0
4026 AND f_int1 BETWEEN @max_row_div2 AND @max_row
4027 ON DUPLICATE KEY
4028 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4029 f_int2 = 2 * @max_row + source_tab.f_int1,
4030 f_charbig = 'was updated';
4031         
4032 # check unique-1-a success:     1
4033         
4034 # check unique-1-b success:     1
4035 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4036 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4037 f_int2 = CAST(f_char1 AS SIGNED INT),
4038 f_charbig = CONCAT('===',f_char1,'===')
4039 WHERE f_charbig = 'was updated';
4040 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4041 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4042    FROM t0_template source_tab
4043 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4044         
4045 # check replace success:        1
4046 DELETE FROM t1
4047 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4048 DELETE FROM t1
4049 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4050 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4051 UPDATE t1 SET f_int2 = f_int1,
4052 f_char1 = CAST(f_int1 AS CHAR),
4053 f_char2 = CAST(f_int1 AS CHAR),
4054 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4055 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4056 SET AUTOCOMMIT= 0;
4057 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4058 SELECT f_int1, f_int1, '', '', 'was inserted'
4059 FROM t0_template source_tab
4060 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4061         
4062 # check transactions-1 success:         1
4063 COMMIT WORK;
4064         
4065 # check transactions-2 success:         1
4066 ROLLBACK WORK;
4067         
4068 # check transactions-3 success:         1
4069 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4070 COMMIT WORK;
4071 ROLLBACK WORK;
4072         
4073 # check transactions-4 success:         1
4074 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4075 SELECT f_int1, f_int1, '', '', 'was inserted'
4076 FROM t0_template source_tab
4077 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4078         
4079 # check transactions-5 success:         1
4080 ROLLBACK WORK;
4081         
4082 # check transactions-6 success:         1
4083 # INFO: Storage engine used for t1 seems to be transactional.
4084 COMMIT;
4085         
4086 # check transactions-7 success:         1
4087 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4088 COMMIT WORK;
4089 SET @@session.sql_mode = 'traditional';
4090 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4091 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4092 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4093 '', '', 'was inserted' FROM t0_template
4094 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4095 ERROR 22012: Division by 0
4096 COMMIT;
4097         
4098 # check transactions-8 success:         1
4099 # INFO: Storage engine used for t1 seems to be able to revert
4100 #       changes made by the failing statement.
4101 SET @@session.sql_mode = '';
4102 SET AUTOCOMMIT= 1;
4103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4104 COMMIT WORK;
4105 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4106         
4107 # check special-1 success:      1
4108 UPDATE t1 SET f_charbig = '';
4109         
4110 # check special-2 success:      1
4111 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4112 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4113 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4114 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4115 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4116 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4117 'just inserted' FROM t0_template
4118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4119 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4120 BEGIN
4121 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4122 f_charbig = 'updated by trigger'
4123       WHERE f_int1 = new.f_int1;
4124 END|
4125 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4126 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4127 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4128         
4129 # check trigger-1 success:      1
4130 DROP TRIGGER trg_1;
4131 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4132 f_int2 = CAST(f_char1 AS SIGNED INT),
4133 f_charbig = 'just inserted'
4134    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4135 DELETE FROM t0_aux
4136 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4137 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4138 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4139 'just inserted' FROM t0_template
4140 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4141 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4142 BEGIN
4143 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4144 f_charbig = 'updated by trigger'
4145       WHERE f_int1 = new.f_int1;
4146 END|
4147 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4148 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4149 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4150         
4151 # check trigger-2 success:      1
4152 DROP TRIGGER trg_1;
4153 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4154 f_int2 = CAST(f_char1 AS SIGNED INT),
4155 f_charbig = 'just inserted'
4156    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4157 DELETE FROM t0_aux
4158 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4159 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4160 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4161 'just inserted' FROM t0_template
4162 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4163 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4164 BEGIN
4165 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4166 f_charbig = 'updated by trigger'
4167       WHERE f_int1 = new.f_int1;
4168 END|
4169 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4170 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4171         
4172 # check trigger-3 success:      1
4173 DROP TRIGGER trg_1;
4174 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4175 f_int2 = CAST(f_char1 AS SIGNED INT),
4176 f_charbig = 'just inserted'
4177    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4178 DELETE FROM t0_aux
4179 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4180 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4181 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4182 'just inserted' FROM t0_template
4183 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4184 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4185 BEGIN
4186 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4187 f_charbig = 'updated by trigger'
4188       WHERE f_int1 = - old.f_int1;
4189 END|
4190 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4191 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4192         
4193 # check trigger-4 success:      1
4194 DROP TRIGGER trg_1;
4195 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4196 f_int2 = CAST(f_char1 AS SIGNED INT),
4197 f_charbig = 'just inserted'
4198    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4199 DELETE FROM t0_aux
4200 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4201 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4202 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4203 'just inserted' FROM t0_template
4204 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4205 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4206 BEGIN
4207 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4208 f_charbig = 'updated by trigger'
4209       WHERE f_int1 = new.f_int1;
4210 END|
4211 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4212 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4213         
4214 # check trigger-5 success:      1
4215 DROP TRIGGER trg_1;
4216 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4217 f_int2 = CAST(f_char1 AS SIGNED INT),
4218 f_charbig = 'just inserted'
4219    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4220 DELETE FROM t0_aux
4221 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4222 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4223 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4224 'just inserted' FROM t0_template
4225 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4226 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4227 BEGIN
4228 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4229 f_charbig = 'updated by trigger'
4230       WHERE f_int1 = - old.f_int1;
4231 END|
4232 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4233 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4234         
4235 # check trigger-6 success:      1
4236 DROP TRIGGER trg_1;
4237 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4238 f_int2 = CAST(f_char1 AS SIGNED INT),
4239 f_charbig = 'just inserted'
4240    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4241 DELETE FROM t0_aux
4242 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4243 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4244 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4245 'just inserted' FROM t0_template
4246 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4247 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4248 BEGIN
4249 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4250 f_charbig = 'updated by trigger'
4251       WHERE f_int1 = - old.f_int1;
4252 END|
4253 DELETE FROM t0_aux
4254 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4255         
4256 # check trigger-7 success:      1
4257 DROP TRIGGER trg_1;
4258 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4259 f_int2 = CAST(f_char1 AS SIGNED INT),
4260 f_charbig = 'just inserted'
4261    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4262 DELETE FROM t0_aux
4263 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4264 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4265 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4266 'just inserted' FROM t0_template
4267 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4268 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4269 BEGIN
4270 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4271 f_charbig = 'updated by trigger'
4272       WHERE f_int1 = - old.f_int1;
4273 END|
4274 DELETE FROM t0_aux
4275 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4276         
4277 # check trigger-8 success:      1
4278 DROP TRIGGER trg_1;
4279 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4280 f_int2 = CAST(f_char1 AS SIGNED INT),
4281 f_charbig = 'just inserted'
4282    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4283 DELETE FROM t0_aux
4284 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4285 DELETE FROM t1
4286 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4287 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4288 BEGIN
4289 SET new.f_int1 = old.f_int1 + @max_row,
4290 new.f_int2 = old.f_int2 - @max_row,
4291 new.f_charbig = '####updated per update trigger####';
4292 END|
4293 UPDATE t1
4294 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4295 f_charbig = '####updated per update statement itself####';
4296         
4297 # check trigger-9 success:      1
4298 DROP TRIGGER trg_2;
4299 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4300 f_int2 = CAST(f_char1 AS SIGNED INT),
4301 f_charbig = CONCAT('===',f_char1,'===');
4302 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4303 BEGIN
4304 SET new.f_int1 = new.f_int1 + @max_row,
4305 new.f_int2 = new.f_int2 - @max_row,
4306 new.f_charbig = '####updated per update trigger####';
4307 END|
4308 UPDATE t1
4309 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4310 f_charbig = '####updated per update statement itself####';
4311         
4312 # check trigger-10 success:     1
4313 DROP TRIGGER trg_2;
4314 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4315 f_int2 = CAST(f_char1 AS SIGNED INT),
4316 f_charbig = CONCAT('===',f_char1,'===');
4317 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4318 BEGIN
4319 SET new.f_int1 = @my_max1 + @counter,
4320 new.f_int2 = @my_min2 - @counter,
4321 new.f_charbig = '####updated per insert trigger####';
4322 SET @counter = @counter + 1;
4323 END|
4324 SET @counter = 1;
4325 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4326 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4327 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4328 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4329 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4330 ORDER BY f_int1;
4331 DROP TRIGGER trg_3;
4332         
4333 # check trigger-11 success:     1
4334 DELETE FROM t1
4335 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4336 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4337 AND f_charbig = '####updated per insert trigger####';
4338 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4339 BEGIN
4340 SET new.f_int1 = @my_max1 + @counter,
4341 new.f_int2 = @my_min2 - @counter,
4342 new.f_charbig = '####updated per insert trigger####';
4343 SET @counter = @counter + 1;
4344 END|
4345 SET @counter = 1;
4346 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4347 INSERT INTO t1 (f_char1, f_char2, f_charbig)
4348 SELECT CAST(f_int1 AS CHAR),
4349 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4350 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4351 ORDER BY f_int1;
4352 DROP TRIGGER trg_3;
4353         
4354 # check trigger-12 success:     1
4355 DELETE FROM t1
4356 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4357 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4358 AND f_charbig = '####updated per insert trigger####';
4359 ANALYZE  TABLE t1;
4360 Table   Op      Msg_type        Msg_text
4361 test.t1 analyze status  OK
4362 CHECK    TABLE t1 EXTENDED;
4363 Table   Op      Msg_type        Msg_text
4364 test.t1 check   status  OK
4365 CHECKSUM TABLE t1 EXTENDED;
4366 Table   Checksum
4367 test.t1 <some_value>
4368 OPTIMIZE TABLE t1;
4369 Table   Op      Msg_type        Msg_text
4370 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
4371 test.t1 optimize        status  OK
4372 # check layout success:    1
4373 REPAIR   TABLE t1 EXTENDED;
4374 Table   Op      Msg_type        Msg_text
4375 test.t1 repair  note    The storage engine for the table doesn't support repair
4376 # check layout success:    1
4377 TRUNCATE t1;
4378         
4379 # check TRUNCATE success:       1
4380 # check layout success:    1
4381 # End usability test (inc/partition_check.inc)
4382 DROP TABLE t1;
4383 DROP TABLE IF EXISTS t1;
4384 CREATE TABLE t1 (
4385 f_int1 INTEGER,
4386 f_int2 INTEGER,
4387 f_char1 CHAR(20),
4388 f_char2 CHAR(20),
4389 f_charbig VARCHAR(1000)
4392 PARTITION BY HASH(f_int1) PARTITIONS 2;
4393 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4394 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4395 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4396 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
4397 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4398 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4399 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4400 # Start usability test (inc/partition_check.inc)
4401 create_command
4402 SHOW CREATE TABLE t1;
4403 Table   Create Table
4404 t1      CREATE TABLE `t1` (
4405   `f_int1` int(11) NOT NULL DEFAULT '0',
4406   `f_int2` int(11) NOT NULL DEFAULT '0',
4407   `f_char1` char(20) DEFAULT NULL,
4408   `f_char2` char(20) DEFAULT NULL,
4409   `f_charbig` varchar(1000) DEFAULT NULL,
4410   PRIMARY KEY (`f_int2`,`f_int1`)
4411 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
4412 /*!50100 PARTITION BY HASH (f_int1)
4413 PARTITIONS 2 */
4415 # check prerequisites-1 success:    1
4416 # check COUNT(*) success:    1
4417 # check MIN/MAX(f_int1) success:    1
4418 # check MIN/MAX(f_int2) success:    1
4419 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4420 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4421 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4422 WHERE f_int1 IN (2,3);
4423 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4424 # check prerequisites-3 success:    1
4425 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4426 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4427 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4428 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4429 WHERE f_int1 IN (2,3);
4430 DELETE FROM t1 WHERE f_charbig = 'delete me';
4431 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4432 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4433 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4434 WHERE f_int1 IN (2,3);
4435 DELETE FROM t1 WHERE f_charbig = 'delete me';
4436 # check read via f_int1 success: 1
4437 # check read via f_int2 success: 1
4438         
4439 # check multiple-1 success:     1
4440 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4441         
4442 # check multiple-2 success:     1
4443 INSERT INTO t1 SELECT * FROM t0_template
4444 WHERE MOD(f_int1,3) = 0;
4445         
4446 # check multiple-3 success:     1
4447 UPDATE t1 SET f_int1 = f_int1 + @max_row
4448 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4449 AND @max_row_div2 + @max_row_div4;
4450         
4451 # check multiple-4 success:     1
4452 DELETE FROM t1
4453 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4454 AND @max_row_div2 + @max_row_div4 + @max_row;
4455         
4456 # check multiple-5 success:     1
4457 SELECT COUNT(*) INTO @try_count FROM t0_template
4458 WHERE MOD(f_int1,3) = 0
4459 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4460 SELECT COUNT(*) INTO @clash_count
4461 FROM t1 INNER JOIN t0_template USING(f_int1)
4462 WHERE MOD(f_int1,3) = 0
4463 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4464 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4465 INSERT INTO t1
4466 SET f_int1 = @cur_value , f_int2 = @cur_value,
4467 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4468 f_charbig = '#SINGLE#';
4469         
4470 # check single-1 success:       1
4471 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4472 INSERT INTO t1
4473 SET f_int1 = @cur_value , f_int2 = @cur_value,
4474 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4475 f_charbig = '#SINGLE#';
4476         
4477 # check single-2 success:       1
4478 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4479 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4480 UPDATE t1 SET f_int1 = @cur_value2
4481 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4482         
4483 # check single-3 success:       1
4484 SET @cur_value1= -1;
4485 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4486 UPDATE t1 SET f_int1 = @cur_value1
4487 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4488         
4489 # check single-4 success:       1
4490 SELECT MAX(f_int1) INTO @cur_value FROM t1;
4491 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4492         
4493 # check single-5 success:       1
4494 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4495         
4496 # check single-6 success:       1
4497 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4498         
4499 # check single-7 success:       1
4500 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4501 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4502 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4503 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4504 f_charbig = '#NULL#';
4505 INSERT INTO t1
4506 SET f_int1 = NULL , f_int2 = -@max_row,
4507 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4508 f_charbig = '#NULL#';
4509 ERROR 23000: Column 'f_int1' cannot be null
4510 # check null success:    1
4511 DELETE FROM t1
4512 WHERE f_int1 = 0 AND f_int2 = 0
4513 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4514 AND f_charbig = '#NULL#';
4515 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4516 SELECT f_int1, f_int1, '', '', 'was inserted'
4517    FROM t0_template source_tab
4518 WHERE MOD(f_int1,3) = 0
4519 AND f_int1 BETWEEN @max_row_div2 AND @max_row
4520 ON DUPLICATE KEY
4521 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4522 f_int2 = 2 * @max_row + source_tab.f_int1,
4523 f_charbig = 'was updated';
4524         
4525 # check unique-1-a success:     1
4526         
4527 # check unique-1-b success:     1
4528 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4529 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4530 f_int2 = CAST(f_char1 AS SIGNED INT),
4531 f_charbig = CONCAT('===',f_char1,'===')
4532 WHERE f_charbig = 'was updated';
4533 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4534 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4535    FROM t0_template source_tab
4536 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4537         
4538 # check replace success:        1
4539 DELETE FROM t1
4540 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4541 DELETE FROM t1
4542 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4543 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4544 UPDATE t1 SET f_int2 = f_int1,
4545 f_char1 = CAST(f_int1 AS CHAR),
4546 f_char2 = CAST(f_int1 AS CHAR),
4547 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4548 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4549 SET AUTOCOMMIT= 0;
4550 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4551 SELECT f_int1, f_int1, '', '', 'was inserted'
4552 FROM t0_template source_tab
4553 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4554         
4555 # check transactions-1 success:         1
4556 COMMIT WORK;
4557         
4558 # check transactions-2 success:         1
4559 ROLLBACK WORK;
4560         
4561 # check transactions-3 success:         1
4562 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4563 COMMIT WORK;
4564 ROLLBACK WORK;
4565         
4566 # check transactions-4 success:         1
4567 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4568 SELECT f_int1, f_int1, '', '', 'was inserted'
4569 FROM t0_template source_tab
4570 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4571         
4572 # check transactions-5 success:         1
4573 ROLLBACK WORK;
4574         
4575 # check transactions-6 success:         1
4576 # INFO: Storage engine used for t1 seems to be transactional.
4577 COMMIT;
4578         
4579 # check transactions-7 success:         1
4580 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4581 COMMIT WORK;
4582 SET @@session.sql_mode = 'traditional';
4583 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4584 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4585 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4586 '', '', 'was inserted' FROM t0_template
4587 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4588 ERROR 22012: Division by 0
4589 COMMIT;
4590         
4591 # check transactions-8 success:         1
4592 # INFO: Storage engine used for t1 seems to be able to revert
4593 #       changes made by the failing statement.
4594 SET @@session.sql_mode = '';
4595 SET AUTOCOMMIT= 1;
4596 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4597 COMMIT WORK;
4598 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4599         
4600 # check special-1 success:      1
4601 UPDATE t1 SET f_charbig = '';
4602         
4603 # check special-2 success:      1
4604 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4605 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4606 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4607 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4608 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4609 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4610 'just inserted' FROM t0_template
4611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4612 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4613 BEGIN
4614 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4615 f_charbig = 'updated by trigger'
4616       WHERE f_int1 = new.f_int1;
4617 END|
4618 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4619 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4620 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4621         
4622 # check trigger-1 success:      1
4623 DROP TRIGGER trg_1;
4624 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4625 f_int2 = CAST(f_char1 AS SIGNED INT),
4626 f_charbig = 'just inserted'
4627    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4628 DELETE FROM t0_aux
4629 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4630 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4631 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4632 'just inserted' FROM t0_template
4633 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4634 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4635 BEGIN
4636 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4637 f_charbig = 'updated by trigger'
4638       WHERE f_int1 = new.f_int1;
4639 END|
4640 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4641 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4642 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4643         
4644 # check trigger-2 success:      1
4645 DROP TRIGGER trg_1;
4646 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4647 f_int2 = CAST(f_char1 AS SIGNED INT),
4648 f_charbig = 'just inserted'
4649    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4650 DELETE FROM t0_aux
4651 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4652 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4653 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4654 'just inserted' FROM t0_template
4655 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4656 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4657 BEGIN
4658 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4659 f_charbig = 'updated by trigger'
4660       WHERE f_int1 = new.f_int1;
4661 END|
4662 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4663 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4664         
4665 # check trigger-3 success:      1
4666 DROP TRIGGER trg_1;
4667 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4668 f_int2 = CAST(f_char1 AS SIGNED INT),
4669 f_charbig = 'just inserted'
4670    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4671 DELETE FROM t0_aux
4672 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4673 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4674 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4675 'just inserted' FROM t0_template
4676 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4677 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4678 BEGIN
4679 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4680 f_charbig = 'updated by trigger'
4681       WHERE f_int1 = - old.f_int1;
4682 END|
4683 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4684 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4685         
4686 # check trigger-4 success:      1
4687 DROP TRIGGER trg_1;
4688 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4689 f_int2 = CAST(f_char1 AS SIGNED INT),
4690 f_charbig = 'just inserted'
4691    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4692 DELETE FROM t0_aux
4693 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4694 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4695 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4696 'just inserted' FROM t0_template
4697 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4698 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4699 BEGIN
4700 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4701 f_charbig = 'updated by trigger'
4702       WHERE f_int1 = new.f_int1;
4703 END|
4704 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4705 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4706         
4707 # check trigger-5 success:      1
4708 DROP TRIGGER trg_1;
4709 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4710 f_int2 = CAST(f_char1 AS SIGNED INT),
4711 f_charbig = 'just inserted'
4712    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4713 DELETE FROM t0_aux
4714 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4715 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4716 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4717 'just inserted' FROM t0_template
4718 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4719 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4720 BEGIN
4721 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4722 f_charbig = 'updated by trigger'
4723       WHERE f_int1 = - old.f_int1;
4724 END|
4725 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4726 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4727         
4728 # check trigger-6 success:      1
4729 DROP TRIGGER trg_1;
4730 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4731 f_int2 = CAST(f_char1 AS SIGNED INT),
4732 f_charbig = 'just inserted'
4733    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4734 DELETE FROM t0_aux
4735 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4736 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4737 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4738 'just inserted' FROM t0_template
4739 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4740 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4741 BEGIN
4742 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4743 f_charbig = 'updated by trigger'
4744       WHERE f_int1 = - old.f_int1;
4745 END|
4746 DELETE FROM t0_aux
4747 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4748         
4749 # check trigger-7 success:      1
4750 DROP TRIGGER trg_1;
4751 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4752 f_int2 = CAST(f_char1 AS SIGNED INT),
4753 f_charbig = 'just inserted'
4754    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4755 DELETE FROM t0_aux
4756 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4757 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4758 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4759 'just inserted' FROM t0_template
4760 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4761 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4762 BEGIN
4763 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4764 f_charbig = 'updated by trigger'
4765       WHERE f_int1 = - old.f_int1;
4766 END|
4767 DELETE FROM t0_aux
4768 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4769         
4770 # check trigger-8 success:      1
4771 DROP TRIGGER trg_1;
4772 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4773 f_int2 = CAST(f_char1 AS SIGNED INT),
4774 f_charbig = 'just inserted'
4775    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4776 DELETE FROM t0_aux
4777 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4778 DELETE FROM t1
4779 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4780 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4781 BEGIN
4782 SET new.f_int1 = old.f_int1 + @max_row,
4783 new.f_int2 = old.f_int2 - @max_row,
4784 new.f_charbig = '####updated per update trigger####';
4785 END|
4786 UPDATE t1
4787 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4788 f_charbig = '####updated per update statement itself####';
4789         
4790 # check trigger-9 success:      1
4791 DROP TRIGGER trg_2;
4792 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4793 f_int2 = CAST(f_char1 AS SIGNED INT),
4794 f_charbig = CONCAT('===',f_char1,'===');
4795 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4796 BEGIN
4797 SET new.f_int1 = new.f_int1 + @max_row,
4798 new.f_int2 = new.f_int2 - @max_row,
4799 new.f_charbig = '####updated per update trigger####';
4800 END|
4801 UPDATE t1
4802 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4803 f_charbig = '####updated per update statement itself####';
4804         
4805 # check trigger-10 success:     1
4806 DROP TRIGGER trg_2;
4807 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4808 f_int2 = CAST(f_char1 AS SIGNED INT),
4809 f_charbig = CONCAT('===',f_char1,'===');
4810 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4811 BEGIN
4812 SET new.f_int1 = @my_max1 + @counter,
4813 new.f_int2 = @my_min2 - @counter,
4814 new.f_charbig = '####updated per insert trigger####';
4815 SET @counter = @counter + 1;
4816 END|
4817 SET @counter = 1;
4818 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4819 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4820 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4821 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4822 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4823 ORDER BY f_int1;
4824 DROP TRIGGER trg_3;
4825         
4826 # check trigger-11 success:     1
4827 DELETE FROM t1
4828 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4829 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4830 AND f_charbig = '####updated per insert trigger####';
4831 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4832 BEGIN
4833 SET new.f_int1 = @my_max1 + @counter,
4834 new.f_int2 = @my_min2 - @counter,
4835 new.f_charbig = '####updated per insert trigger####';
4836 SET @counter = @counter + 1;
4837 END|
4838 SET @counter = 1;
4839 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4840 INSERT INTO t1 (f_char1, f_char2, f_charbig)
4841 SELECT CAST(f_int1 AS CHAR),
4842 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4843 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4844 ORDER BY f_int1;
4845 DROP TRIGGER trg_3;
4846         
4847 # check trigger-12 success:     1
4848 DELETE FROM t1
4849 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4850 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4851 AND f_charbig = '####updated per insert trigger####';
4852 ANALYZE  TABLE t1;
4853 Table   Op      Msg_type        Msg_text
4854 test.t1 analyze status  OK
4855 CHECK    TABLE t1 EXTENDED;
4856 Table   Op      Msg_type        Msg_text
4857 test.t1 check   status  OK
4858 CHECKSUM TABLE t1 EXTENDED;
4859 Table   Checksum
4860 test.t1 <some_value>
4861 OPTIMIZE TABLE t1;
4862 Table   Op      Msg_type        Msg_text
4863 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
4864 test.t1 optimize        status  OK
4865 # check layout success:    1
4866 REPAIR   TABLE t1 EXTENDED;
4867 Table   Op      Msg_type        Msg_text
4868 test.t1 repair  note    The storage engine for the table doesn't support repair
4869 # check layout success:    1
4870 TRUNCATE t1;
4871         
4872 # check TRUNCATE success:       1
4873 # check layout success:    1
4874 # End usability test (inc/partition_check.inc)
4875 DROP TABLE t1;
4876 CREATE TABLE t1 (
4877 f_int1 INTEGER,
4878 f_int2 INTEGER,
4879 f_char1 CHAR(20),
4880 f_char2 CHAR(20),
4881 f_charbig VARCHAR(1000)
4884 PARTITION BY KEY(f_int1) PARTITIONS 5;
4885 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4886 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4887 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4888 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
4889 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4890 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4891 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4892 # Start usability test (inc/partition_check.inc)
4893 create_command
4894 SHOW CREATE TABLE t1;
4895 Table   Create Table
4896 t1      CREATE TABLE `t1` (
4897   `f_int1` int(11) NOT NULL DEFAULT '0',
4898   `f_int2` int(11) NOT NULL DEFAULT '0',
4899   `f_char1` char(20) DEFAULT NULL,
4900   `f_char2` char(20) DEFAULT NULL,
4901   `f_charbig` varchar(1000) DEFAULT NULL,
4902   PRIMARY KEY (`f_int2`,`f_int1`)
4903 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
4904 /*!50100 PARTITION BY KEY (f_int1)
4905 PARTITIONS 5 */
4907 # check prerequisites-1 success:    1
4908 # check COUNT(*) success:    1
4909 # check MIN/MAX(f_int1) success:    1
4910 # check MIN/MAX(f_int2) success:    1
4911 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4912 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4913 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4914 WHERE f_int1 IN (2,3);
4915 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4916 # check prerequisites-3 success:    1
4917 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4918 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4919 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4920 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4921 WHERE f_int1 IN (2,3);
4922 DELETE FROM t1 WHERE f_charbig = 'delete me';
4923 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4924 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4925 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4926 WHERE f_int1 IN (2,3);
4927 DELETE FROM t1 WHERE f_charbig = 'delete me';
4928 # check read via f_int1 success: 1
4929 # check read via f_int2 success: 1
4930         
4931 # check multiple-1 success:     1
4932 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4933         
4934 # check multiple-2 success:     1
4935 INSERT INTO t1 SELECT * FROM t0_template
4936 WHERE MOD(f_int1,3) = 0;
4937         
4938 # check multiple-3 success:     1
4939 UPDATE t1 SET f_int1 = f_int1 + @max_row
4940 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4941 AND @max_row_div2 + @max_row_div4;
4942         
4943 # check multiple-4 success:     1
4944 DELETE FROM t1
4945 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4946 AND @max_row_div2 + @max_row_div4 + @max_row;
4947         
4948 # check multiple-5 success:     1
4949 SELECT COUNT(*) INTO @try_count FROM t0_template
4950 WHERE MOD(f_int1,3) = 0
4951 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4952 SELECT COUNT(*) INTO @clash_count
4953 FROM t1 INNER JOIN t0_template USING(f_int1)
4954 WHERE MOD(f_int1,3) = 0
4955 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4956 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4957 INSERT INTO t1
4958 SET f_int1 = @cur_value , f_int2 = @cur_value,
4959 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4960 f_charbig = '#SINGLE#';
4961         
4962 # check single-1 success:       1
4963 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4964 INSERT INTO t1
4965 SET f_int1 = @cur_value , f_int2 = @cur_value,
4966 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4967 f_charbig = '#SINGLE#';
4968         
4969 # check single-2 success:       1
4970 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4971 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4972 UPDATE t1 SET f_int1 = @cur_value2
4973 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4974         
4975 # check single-3 success:       1
4976 SET @cur_value1= -1;
4977 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4978 UPDATE t1 SET f_int1 = @cur_value1
4979 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4980         
4981 # check single-4 success:       1
4982 SELECT MAX(f_int1) INTO @cur_value FROM t1;
4983 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4984         
4985 # check single-5 success:       1
4986 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4987         
4988 # check single-6 success:       1
4989 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4990         
4991 # check single-7 success:       1
4992 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4993 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4994 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4995 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4996 f_charbig = '#NULL#';
4997 INSERT INTO t1
4998 SET f_int1 = NULL , f_int2 = -@max_row,
4999 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5000 f_charbig = '#NULL#';
5001 ERROR 23000: Column 'f_int1' cannot be null
5002 # check null success:    1
5003 DELETE FROM t1
5004 WHERE f_int1 = 0 AND f_int2 = 0
5005 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5006 AND f_charbig = '#NULL#';
5007 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5008 SELECT f_int1, f_int1, '', '', 'was inserted'
5009    FROM t0_template source_tab
5010 WHERE MOD(f_int1,3) = 0
5011 AND f_int1 BETWEEN @max_row_div2 AND @max_row
5012 ON DUPLICATE KEY
5013 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5014 f_int2 = 2 * @max_row + source_tab.f_int1,
5015 f_charbig = 'was updated';
5016         
5017 # check unique-1-a success:     1
5018         
5019 # check unique-1-b success:     1
5020 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5021 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5022 f_int2 = CAST(f_char1 AS SIGNED INT),
5023 f_charbig = CONCAT('===',f_char1,'===')
5024 WHERE f_charbig = 'was updated';
5025 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5026 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5027    FROM t0_template source_tab
5028 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5029         
5030 # check replace success:        1
5031 DELETE FROM t1
5032 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5033 DELETE FROM t1
5034 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5035 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5036 UPDATE t1 SET f_int2 = f_int1,
5037 f_char1 = CAST(f_int1 AS CHAR),
5038 f_char2 = CAST(f_int1 AS CHAR),
5039 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5040 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5041 SET AUTOCOMMIT= 0;
5042 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5043 SELECT f_int1, f_int1, '', '', 'was inserted'
5044 FROM t0_template source_tab
5045 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5046         
5047 # check transactions-1 success:         1
5048 COMMIT WORK;
5049         
5050 # check transactions-2 success:         1
5051 ROLLBACK WORK;
5052         
5053 # check transactions-3 success:         1
5054 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5055 COMMIT WORK;
5056 ROLLBACK WORK;
5057         
5058 # check transactions-4 success:         1
5059 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5060 SELECT f_int1, f_int1, '', '', 'was inserted'
5061 FROM t0_template source_tab
5062 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5063         
5064 # check transactions-5 success:         1
5065 ROLLBACK WORK;
5066         
5067 # check transactions-6 success:         1
5068 # INFO: Storage engine used for t1 seems to be transactional.
5069 COMMIT;
5070         
5071 # check transactions-7 success:         1
5072 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5073 COMMIT WORK;
5074 SET @@session.sql_mode = 'traditional';
5075 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5076 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5077 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5078 '', '', 'was inserted' FROM t0_template
5079 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5080 ERROR 22012: Division by 0
5081 COMMIT;
5082         
5083 # check transactions-8 success:         1
5084 # INFO: Storage engine used for t1 seems to be able to revert
5085 #       changes made by the failing statement.
5086 SET @@session.sql_mode = '';
5087 SET AUTOCOMMIT= 1;
5088 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5089 COMMIT WORK;
5090 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5091         
5092 # check special-1 success:      1
5093 UPDATE t1 SET f_charbig = '';
5094         
5095 # check special-2 success:      1
5096 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5097 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5098 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5099 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5100 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5101 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5102 'just inserted' FROM t0_template
5103 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5104 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5105 BEGIN
5106 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5107 f_charbig = 'updated by trigger'
5108       WHERE f_int1 = new.f_int1;
5109 END|
5110 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5111 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5112 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5113         
5114 # check trigger-1 success:      1
5115 DROP TRIGGER trg_1;
5116 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5117 f_int2 = CAST(f_char1 AS SIGNED INT),
5118 f_charbig = 'just inserted'
5119    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5120 DELETE FROM t0_aux
5121 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5122 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5123 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5124 'just inserted' FROM t0_template
5125 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5126 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5127 BEGIN
5128 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5129 f_charbig = 'updated by trigger'
5130       WHERE f_int1 = new.f_int1;
5131 END|
5132 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5133 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5134 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5135         
5136 # check trigger-2 success:      1
5137 DROP TRIGGER trg_1;
5138 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5139 f_int2 = CAST(f_char1 AS SIGNED INT),
5140 f_charbig = 'just inserted'
5141    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5142 DELETE FROM t0_aux
5143 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5144 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5145 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5146 'just inserted' FROM t0_template
5147 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5148 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5149 BEGIN
5150 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5151 f_charbig = 'updated by trigger'
5152       WHERE f_int1 = new.f_int1;
5153 END|
5154 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5155 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5156         
5157 # check trigger-3 success:      1
5158 DROP TRIGGER trg_1;
5159 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5160 f_int2 = CAST(f_char1 AS SIGNED INT),
5161 f_charbig = 'just inserted'
5162    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5163 DELETE FROM t0_aux
5164 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5165 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5166 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5167 'just inserted' FROM t0_template
5168 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5169 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5170 BEGIN
5171 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5172 f_charbig = 'updated by trigger'
5173       WHERE f_int1 = - old.f_int1;
5174 END|
5175 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5176 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5177         
5178 # check trigger-4 success:      1
5179 DROP TRIGGER trg_1;
5180 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5181 f_int2 = CAST(f_char1 AS SIGNED INT),
5182 f_charbig = 'just inserted'
5183    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5184 DELETE FROM t0_aux
5185 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5186 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5187 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5188 'just inserted' FROM t0_template
5189 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5190 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5191 BEGIN
5192 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5193 f_charbig = 'updated by trigger'
5194       WHERE f_int1 = new.f_int1;
5195 END|
5196 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5197 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5198         
5199 # check trigger-5 success:      1
5200 DROP TRIGGER trg_1;
5201 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5202 f_int2 = CAST(f_char1 AS SIGNED INT),
5203 f_charbig = 'just inserted'
5204    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5205 DELETE FROM t0_aux
5206 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5207 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5208 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5209 'just inserted' FROM t0_template
5210 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5211 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5212 BEGIN
5213 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5214 f_charbig = 'updated by trigger'
5215       WHERE f_int1 = - old.f_int1;
5216 END|
5217 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5218 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5219         
5220 # check trigger-6 success:      1
5221 DROP TRIGGER trg_1;
5222 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5223 f_int2 = CAST(f_char1 AS SIGNED INT),
5224 f_charbig = 'just inserted'
5225    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5226 DELETE FROM t0_aux
5227 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5228 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5229 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5230 'just inserted' FROM t0_template
5231 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5232 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5233 BEGIN
5234 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5235 f_charbig = 'updated by trigger'
5236       WHERE f_int1 = - old.f_int1;
5237 END|
5238 DELETE FROM t0_aux
5239 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5240         
5241 # check trigger-7 success:      1
5242 DROP TRIGGER trg_1;
5243 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5244 f_int2 = CAST(f_char1 AS SIGNED INT),
5245 f_charbig = 'just inserted'
5246    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5247 DELETE FROM t0_aux
5248 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5249 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5250 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5251 'just inserted' FROM t0_template
5252 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5253 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5254 BEGIN
5255 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5256 f_charbig = 'updated by trigger'
5257       WHERE f_int1 = - old.f_int1;
5258 END|
5259 DELETE FROM t0_aux
5260 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5261         
5262 # check trigger-8 success:      1
5263 DROP TRIGGER trg_1;
5264 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5265 f_int2 = CAST(f_char1 AS SIGNED INT),
5266 f_charbig = 'just inserted'
5267    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5268 DELETE FROM t0_aux
5269 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5270 DELETE FROM t1
5271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5272 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5273 BEGIN
5274 SET new.f_int1 = old.f_int1 + @max_row,
5275 new.f_int2 = old.f_int2 - @max_row,
5276 new.f_charbig = '####updated per update trigger####';
5277 END|
5278 UPDATE t1
5279 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5280 f_charbig = '####updated per update statement itself####';
5281         
5282 # check trigger-9 success:      1
5283 DROP TRIGGER trg_2;
5284 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5285 f_int2 = CAST(f_char1 AS SIGNED INT),
5286 f_charbig = CONCAT('===',f_char1,'===');
5287 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5288 BEGIN
5289 SET new.f_int1 = new.f_int1 + @max_row,
5290 new.f_int2 = new.f_int2 - @max_row,
5291 new.f_charbig = '####updated per update trigger####';
5292 END|
5293 UPDATE t1
5294 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5295 f_charbig = '####updated per update statement itself####';
5296         
5297 # check trigger-10 success:     1
5298 DROP TRIGGER trg_2;
5299 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5300 f_int2 = CAST(f_char1 AS SIGNED INT),
5301 f_charbig = CONCAT('===',f_char1,'===');
5302 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5303 BEGIN
5304 SET new.f_int1 = @my_max1 + @counter,
5305 new.f_int2 = @my_min2 - @counter,
5306 new.f_charbig = '####updated per insert trigger####';
5307 SET @counter = @counter + 1;
5308 END|
5309 SET @counter = 1;
5310 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5311 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5312 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5313 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5314 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5315 ORDER BY f_int1;
5316 DROP TRIGGER trg_3;
5317         
5318 # check trigger-11 success:     1
5319 DELETE FROM t1
5320 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5321 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5322 AND f_charbig = '####updated per insert trigger####';
5323 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5324 BEGIN
5325 SET new.f_int1 = @my_max1 + @counter,
5326 new.f_int2 = @my_min2 - @counter,
5327 new.f_charbig = '####updated per insert trigger####';
5328 SET @counter = @counter + 1;
5329 END|
5330 SET @counter = 1;
5331 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5332 INSERT INTO t1 (f_char1, f_char2, f_charbig)
5333 SELECT CAST(f_int1 AS CHAR),
5334 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5335 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5336 ORDER BY f_int1;
5337 DROP TRIGGER trg_3;
5338         
5339 # check trigger-12 success:     1
5340 DELETE FROM t1
5341 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5342 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5343 AND f_charbig = '####updated per insert trigger####';
5344 ANALYZE  TABLE t1;
5345 Table   Op      Msg_type        Msg_text
5346 test.t1 analyze status  OK
5347 CHECK    TABLE t1 EXTENDED;
5348 Table   Op      Msg_type        Msg_text
5349 test.t1 check   status  OK
5350 CHECKSUM TABLE t1 EXTENDED;
5351 Table   Checksum
5352 test.t1 <some_value>
5353 OPTIMIZE TABLE t1;
5354 Table   Op      Msg_type        Msg_text
5355 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
5356 test.t1 optimize        status  OK
5357 # check layout success:    1
5358 REPAIR   TABLE t1 EXTENDED;
5359 Table   Op      Msg_type        Msg_text
5360 test.t1 repair  note    The storage engine for the table doesn't support repair
5361 # check layout success:    1
5362 TRUNCATE t1;
5363         
5364 # check TRUNCATE success:       1
5365 # check layout success:    1
5366 # End usability test (inc/partition_check.inc)
5367 DROP TABLE t1;
5368 CREATE TABLE t1 (
5369 f_int1 INTEGER,
5370 f_int2 INTEGER,
5371 f_char1 CHAR(20),
5372 f_char2 CHAR(20),
5373 f_charbig VARCHAR(1000)
5376 PARTITION BY LIST(MOD(f_int1,4))
5377 (PARTITION part_3 VALUES IN (-3),
5378 PARTITION part_2 VALUES IN (-2),
5379 PARTITION part_1 VALUES IN (-1),
5380 PARTITION part_N VALUES IN (NULL),
5381 PARTITION part0 VALUES IN (0),
5382 PARTITION part1 VALUES IN (1),
5383 PARTITION part2 VALUES IN (2),
5384 PARTITION part3 VALUES IN (3));
5385 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5386 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5387 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5388 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
5389 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5390 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5391 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5392 # Start usability test (inc/partition_check.inc)
5393 create_command
5394 SHOW CREATE TABLE t1;
5395 Table   Create Table
5396 t1      CREATE TABLE `t1` (
5397   `f_int1` int(11) NOT NULL DEFAULT '0',
5398   `f_int2` int(11) NOT NULL DEFAULT '0',
5399   `f_char1` char(20) DEFAULT NULL,
5400   `f_char2` char(20) DEFAULT NULL,
5401   `f_charbig` varchar(1000) DEFAULT NULL,
5402   PRIMARY KEY (`f_int2`,`f_int1`)
5403 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
5404 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
5405 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
5406  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
5407  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
5408  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
5409  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
5410  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
5411  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
5412  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
5414 # check prerequisites-1 success:    1
5415 # check COUNT(*) success:    1
5416 # check MIN/MAX(f_int1) success:    1
5417 # check MIN/MAX(f_int2) success:    1
5418 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5419 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5420 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5421 WHERE f_int1 IN (2,3);
5422 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5423 # check prerequisites-3 success:    1
5424 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5425 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5426 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5427 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5428 WHERE f_int1 IN (2,3);
5429 DELETE FROM t1 WHERE f_charbig = 'delete me';
5430 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5431 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5432 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5433 WHERE f_int1 IN (2,3);
5434 DELETE FROM t1 WHERE f_charbig = 'delete me';
5435 # check read via f_int1 success: 1
5436 # check read via f_int2 success: 1
5437         
5438 # check multiple-1 success:     1
5439 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5440         
5441 # check multiple-2 success:     1
5442 INSERT INTO t1 SELECT * FROM t0_template
5443 WHERE MOD(f_int1,3) = 0;
5444         
5445 # check multiple-3 success:     1
5446 UPDATE t1 SET f_int1 = f_int1 + @max_row
5447 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5448 AND @max_row_div2 + @max_row_div4;
5449         
5450 # check multiple-4 success:     1
5451 DELETE FROM t1
5452 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5453 AND @max_row_div2 + @max_row_div4 + @max_row;
5454         
5455 # check multiple-5 success:     1
5456 SELECT COUNT(*) INTO @try_count FROM t0_template
5457 WHERE MOD(f_int1,3) = 0
5458 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5459 SELECT COUNT(*) INTO @clash_count
5460 FROM t1 INNER JOIN t0_template USING(f_int1)
5461 WHERE MOD(f_int1,3) = 0
5462 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5463 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5464 INSERT INTO t1
5465 SET f_int1 = @cur_value , f_int2 = @cur_value,
5466 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5467 f_charbig = '#SINGLE#';
5468         
5469 # check single-1 success:       1
5470 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5471 INSERT INTO t1
5472 SET f_int1 = @cur_value , f_int2 = @cur_value,
5473 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5474 f_charbig = '#SINGLE#';
5475         
5476 # check single-2 success:       1
5477 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5478 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5479 UPDATE t1 SET f_int1 = @cur_value2
5480 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5481         
5482 # check single-3 success:       1
5483 SET @cur_value1= -1;
5484 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5485 UPDATE t1 SET f_int1 = @cur_value1
5486 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5487         
5488 # check single-4 success:       1
5489 SELECT MAX(f_int1) INTO @cur_value FROM t1;
5490 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5491         
5492 # check single-5 success:       1
5493 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5494         
5495 # check single-6 success:       1
5496 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5497         
5498 # check single-7 success:       1
5499 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
5500 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5501 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5502 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5503 f_charbig = '#NULL#';
5504 INSERT INTO t1
5505 SET f_int1 = NULL , f_int2 = -@max_row,
5506 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5507 f_charbig = '#NULL#';
5508 ERROR 23000: Column 'f_int1' cannot be null
5509 # check null success:    1
5510 DELETE FROM t1
5511 WHERE f_int1 = 0 AND f_int2 = 0
5512 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5513 AND f_charbig = '#NULL#';
5514 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5515 SELECT f_int1, f_int1, '', '', 'was inserted'
5516    FROM t0_template source_tab
5517 WHERE MOD(f_int1,3) = 0
5518 AND f_int1 BETWEEN @max_row_div2 AND @max_row
5519 ON DUPLICATE KEY
5520 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5521 f_int2 = 2 * @max_row + source_tab.f_int1,
5522 f_charbig = 'was updated';
5523         
5524 # check unique-1-a success:     1
5525         
5526 # check unique-1-b success:     1
5527 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5528 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5529 f_int2 = CAST(f_char1 AS SIGNED INT),
5530 f_charbig = CONCAT('===',f_char1,'===')
5531 WHERE f_charbig = 'was updated';
5532 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5533 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5534    FROM t0_template source_tab
5535 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5536         
5537 # check replace success:        1
5538 DELETE FROM t1
5539 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5540 DELETE FROM t1
5541 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5542 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5543 UPDATE t1 SET f_int2 = f_int1,
5544 f_char1 = CAST(f_int1 AS CHAR),
5545 f_char2 = CAST(f_int1 AS CHAR),
5546 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5547 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5548 SET AUTOCOMMIT= 0;
5549 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5550 SELECT f_int1, f_int1, '', '', 'was inserted'
5551 FROM t0_template source_tab
5552 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5553         
5554 # check transactions-1 success:         1
5555 COMMIT WORK;
5556         
5557 # check transactions-2 success:         1
5558 ROLLBACK WORK;
5559         
5560 # check transactions-3 success:         1
5561 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5562 COMMIT WORK;
5563 ROLLBACK WORK;
5564         
5565 # check transactions-4 success:         1
5566 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5567 SELECT f_int1, f_int1, '', '', 'was inserted'
5568 FROM t0_template source_tab
5569 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5570         
5571 # check transactions-5 success:         1
5572 ROLLBACK WORK;
5573         
5574 # check transactions-6 success:         1
5575 # INFO: Storage engine used for t1 seems to be transactional.
5576 COMMIT;
5577         
5578 # check transactions-7 success:         1
5579 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5580 COMMIT WORK;
5581 SET @@session.sql_mode = 'traditional';
5582 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5584 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5585 '', '', 'was inserted' FROM t0_template
5586 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5587 ERROR 22012: Division by 0
5588 COMMIT;
5589         
5590 # check transactions-8 success:         1
5591 # INFO: Storage engine used for t1 seems to be able to revert
5592 #       changes made by the failing statement.
5593 SET @@session.sql_mode = '';
5594 SET AUTOCOMMIT= 1;
5595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5596 COMMIT WORK;
5597 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5598         
5599 # check special-1 success:      1
5600 UPDATE t1 SET f_charbig = '';
5601         
5602 # check special-2 success:      1
5603 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5604 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5605 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5606 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5607 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5608 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5609 'just inserted' FROM t0_template
5610 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5611 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5612 BEGIN
5613 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5614 f_charbig = 'updated by trigger'
5615       WHERE f_int1 = new.f_int1;
5616 END|
5617 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5618 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5619 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5620         
5621 # check trigger-1 success:      1
5622 DROP TRIGGER trg_1;
5623 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5624 f_int2 = CAST(f_char1 AS SIGNED INT),
5625 f_charbig = 'just inserted'
5626    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5627 DELETE FROM t0_aux
5628 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5629 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5630 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5631 'just inserted' FROM t0_template
5632 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5633 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5634 BEGIN
5635 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5636 f_charbig = 'updated by trigger'
5637       WHERE f_int1 = new.f_int1;
5638 END|
5639 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5640 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5641 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5642         
5643 # check trigger-2 success:      1
5644 DROP TRIGGER trg_1;
5645 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5646 f_int2 = CAST(f_char1 AS SIGNED INT),
5647 f_charbig = 'just inserted'
5648    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5649 DELETE FROM t0_aux
5650 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5652 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5653 'just inserted' FROM t0_template
5654 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5655 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5656 BEGIN
5657 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5658 f_charbig = 'updated by trigger'
5659       WHERE f_int1 = new.f_int1;
5660 END|
5661 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5662 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5663         
5664 # check trigger-3 success:      1
5665 DROP TRIGGER trg_1;
5666 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5667 f_int2 = CAST(f_char1 AS SIGNED INT),
5668 f_charbig = 'just inserted'
5669    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5670 DELETE FROM t0_aux
5671 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5672 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5673 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5674 'just inserted' FROM t0_template
5675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5676 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5677 BEGIN
5678 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5679 f_charbig = 'updated by trigger'
5680       WHERE f_int1 = - old.f_int1;
5681 END|
5682 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5683 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5684         
5685 # check trigger-4 success:      1
5686 DROP TRIGGER trg_1;
5687 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5688 f_int2 = CAST(f_char1 AS SIGNED INT),
5689 f_charbig = 'just inserted'
5690    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5691 DELETE FROM t0_aux
5692 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5693 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5694 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5695 'just inserted' FROM t0_template
5696 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5697 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5698 BEGIN
5699 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5700 f_charbig = 'updated by trigger'
5701       WHERE f_int1 = new.f_int1;
5702 END|
5703 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5704 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5705         
5706 # check trigger-5 success:      1
5707 DROP TRIGGER trg_1;
5708 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5709 f_int2 = CAST(f_char1 AS SIGNED INT),
5710 f_charbig = 'just inserted'
5711    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5712 DELETE FROM t0_aux
5713 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5714 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5715 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5716 'just inserted' FROM t0_template
5717 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5718 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5719 BEGIN
5720 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5721 f_charbig = 'updated by trigger'
5722       WHERE f_int1 = - old.f_int1;
5723 END|
5724 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5725 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5726         
5727 # check trigger-6 success:      1
5728 DROP TRIGGER trg_1;
5729 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5730 f_int2 = CAST(f_char1 AS SIGNED INT),
5731 f_charbig = 'just inserted'
5732    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5733 DELETE FROM t0_aux
5734 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5735 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5736 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5737 'just inserted' FROM t0_template
5738 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5739 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5740 BEGIN
5741 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5742 f_charbig = 'updated by trigger'
5743       WHERE f_int1 = - old.f_int1;
5744 END|
5745 DELETE FROM t0_aux
5746 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5747         
5748 # check trigger-7 success:      1
5749 DROP TRIGGER trg_1;
5750 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5751 f_int2 = CAST(f_char1 AS SIGNED INT),
5752 f_charbig = 'just inserted'
5753    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5754 DELETE FROM t0_aux
5755 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5756 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5757 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5758 'just inserted' FROM t0_template
5759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5760 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5761 BEGIN
5762 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5763 f_charbig = 'updated by trigger'
5764       WHERE f_int1 = - old.f_int1;
5765 END|
5766 DELETE FROM t0_aux
5767 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5768         
5769 # check trigger-8 success:      1
5770 DROP TRIGGER trg_1;
5771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5772 f_int2 = CAST(f_char1 AS SIGNED INT),
5773 f_charbig = 'just inserted'
5774    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5775 DELETE FROM t0_aux
5776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5777 DELETE FROM t1
5778 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5779 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5780 BEGIN
5781 SET new.f_int1 = old.f_int1 + @max_row,
5782 new.f_int2 = old.f_int2 - @max_row,
5783 new.f_charbig = '####updated per update trigger####';
5784 END|
5785 UPDATE t1
5786 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5787 f_charbig = '####updated per update statement itself####';
5788         
5789 # check trigger-9 success:      1
5790 DROP TRIGGER trg_2;
5791 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5792 f_int2 = CAST(f_char1 AS SIGNED INT),
5793 f_charbig = CONCAT('===',f_char1,'===');
5794 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5795 BEGIN
5796 SET new.f_int1 = new.f_int1 + @max_row,
5797 new.f_int2 = new.f_int2 - @max_row,
5798 new.f_charbig = '####updated per update trigger####';
5799 END|
5800 UPDATE t1
5801 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5802 f_charbig = '####updated per update statement itself####';
5803         
5804 # check trigger-10 success:     1
5805 DROP TRIGGER trg_2;
5806 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5807 f_int2 = CAST(f_char1 AS SIGNED INT),
5808 f_charbig = CONCAT('===',f_char1,'===');
5809 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5810 BEGIN
5811 SET new.f_int1 = @my_max1 + @counter,
5812 new.f_int2 = @my_min2 - @counter,
5813 new.f_charbig = '####updated per insert trigger####';
5814 SET @counter = @counter + 1;
5815 END|
5816 SET @counter = 1;
5817 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5818 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5819 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5820 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5821 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5822 ORDER BY f_int1;
5823 DROP TRIGGER trg_3;
5824         
5825 # check trigger-11 success:     1
5826 DELETE FROM t1
5827 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5828 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5829 AND f_charbig = '####updated per insert trigger####';
5830 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5831 BEGIN
5832 SET new.f_int1 = @my_max1 + @counter,
5833 new.f_int2 = @my_min2 - @counter,
5834 new.f_charbig = '####updated per insert trigger####';
5835 SET @counter = @counter + 1;
5836 END|
5837 SET @counter = 1;
5838 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5839 INSERT INTO t1 (f_char1, f_char2, f_charbig)
5840 SELECT CAST(f_int1 AS CHAR),
5841 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5842 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5843 ORDER BY f_int1;
5844 DROP TRIGGER trg_3;
5845         
5846 # check trigger-12 success:     1
5847 DELETE FROM t1
5848 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5849 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5850 AND f_charbig = '####updated per insert trigger####';
5851 ANALYZE  TABLE t1;
5852 Table   Op      Msg_type        Msg_text
5853 test.t1 analyze status  OK
5854 CHECK    TABLE t1 EXTENDED;
5855 Table   Op      Msg_type        Msg_text
5856 test.t1 check   status  OK
5857 CHECKSUM TABLE t1 EXTENDED;
5858 Table   Checksum
5859 test.t1 <some_value>
5860 OPTIMIZE TABLE t1;
5861 Table   Op      Msg_type        Msg_text
5862 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
5863 test.t1 optimize        status  OK
5864 # check layout success:    1
5865 REPAIR   TABLE t1 EXTENDED;
5866 Table   Op      Msg_type        Msg_text
5867 test.t1 repair  note    The storage engine for the table doesn't support repair
5868 # check layout success:    1
5869 TRUNCATE t1;
5870         
5871 # check TRUNCATE success:       1
5872 # check layout success:    1
5873 # End usability test (inc/partition_check.inc)
5874 DROP TABLE t1;
5875 CREATE TABLE t1 (
5876 f_int1 INTEGER,
5877 f_int2 INTEGER,
5878 f_char1 CHAR(20),
5879 f_char2 CHAR(20),
5880 f_charbig VARCHAR(1000)
5883 PARTITION BY RANGE(f_int1)
5884 (PARTITION parta VALUES LESS THAN (0),
5885 PARTITION partb VALUES LESS THAN (5),
5886 PARTITION partc VALUES LESS THAN (10),
5887 PARTITION partd VALUES LESS THAN (10 + 5),
5888 PARTITION parte VALUES LESS THAN (20),
5889 PARTITION partf VALUES LESS THAN (2147483646));
5890 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5891 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5892 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5893 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
5894 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5895 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5896 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5897 # Start usability test (inc/partition_check.inc)
5898 create_command
5899 SHOW CREATE TABLE t1;
5900 Table   Create Table
5901 t1      CREATE TABLE `t1` (
5902   `f_int1` int(11) NOT NULL DEFAULT '0',
5903   `f_int2` int(11) NOT NULL DEFAULT '0',
5904   `f_char1` char(20) DEFAULT NULL,
5905   `f_char2` char(20) DEFAULT NULL,
5906   `f_charbig` varchar(1000) DEFAULT NULL,
5907   PRIMARY KEY (`f_int2`,`f_int1`)
5908 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
5909 /*!50100 PARTITION BY RANGE (f_int1)
5910 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5911  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5912  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5913  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
5914  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
5915  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5917 # check prerequisites-1 success:    1
5918 # check COUNT(*) success:    1
5919 # check MIN/MAX(f_int1) success:    1
5920 # check MIN/MAX(f_int2) success:    1
5921 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5922 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5923 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5924 WHERE f_int1 IN (2,3);
5925 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5926 # check prerequisites-3 success:    1
5927 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5928 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5929 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5930 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5931 WHERE f_int1 IN (2,3);
5932 DELETE FROM t1 WHERE f_charbig = 'delete me';
5933 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5934 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5935 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5936 WHERE f_int1 IN (2,3);
5937 DELETE FROM t1 WHERE f_charbig = 'delete me';
5938 # check read via f_int1 success: 1
5939 # check read via f_int2 success: 1
5940         
5941 # check multiple-1 success:     1
5942 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5943         
5944 # check multiple-2 success:     1
5945 INSERT INTO t1 SELECT * FROM t0_template
5946 WHERE MOD(f_int1,3) = 0;
5947         
5948 # check multiple-3 success:     1
5949 UPDATE t1 SET f_int1 = f_int1 + @max_row
5950 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5951 AND @max_row_div2 + @max_row_div4;
5952         
5953 # check multiple-4 success:     1
5954 DELETE FROM t1
5955 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5956 AND @max_row_div2 + @max_row_div4 + @max_row;
5957         
5958 # check multiple-5 success:     1
5959 SELECT COUNT(*) INTO @try_count FROM t0_template
5960 WHERE MOD(f_int1,3) = 0
5961 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5962 SELECT COUNT(*) INTO @clash_count
5963 FROM t1 INNER JOIN t0_template USING(f_int1)
5964 WHERE MOD(f_int1,3) = 0
5965 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5966 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5967 INSERT INTO t1
5968 SET f_int1 = @cur_value , f_int2 = @cur_value,
5969 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5970 f_charbig = '#SINGLE#';
5971         
5972 # check single-1 success:       1
5973 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5974 INSERT INTO t1
5975 SET f_int1 = @cur_value , f_int2 = @cur_value,
5976 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5977 f_charbig = '#SINGLE#';
5978         
5979 # check single-2 success:       1
5980 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5981 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5982 UPDATE t1 SET f_int1 = @cur_value2
5983 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5984         
5985 # check single-3 success:       1
5986 SET @cur_value1= -1;
5987 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5988 UPDATE t1 SET f_int1 = @cur_value1
5989 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5990         
5991 # check single-4 success:       1
5992 SELECT MAX(f_int1) INTO @cur_value FROM t1;
5993 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5994         
5995 # check single-5 success:       1
5996 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5997         
5998 # check single-6 success:       1
5999 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6000 ERROR HY000: Table has no partition for value 2147483647
6001 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6002 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6003 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6004 f_charbig = '#NULL#';
6005 INSERT INTO t1
6006 SET f_int1 = NULL , f_int2 = -@max_row,
6007 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6008 f_charbig = '#NULL#';
6009 ERROR 23000: Column 'f_int1' cannot be null
6010 # check null success:    1
6011 DELETE FROM t1
6012 WHERE f_int1 = 0 AND f_int2 = 0
6013 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6014 AND f_charbig = '#NULL#';
6015 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6016 SELECT f_int1, f_int1, '', '', 'was inserted'
6017    FROM t0_template source_tab
6018 WHERE MOD(f_int1,3) = 0
6019 AND f_int1 BETWEEN @max_row_div2 AND @max_row
6020 ON DUPLICATE KEY
6021 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6022 f_int2 = 2 * @max_row + source_tab.f_int1,
6023 f_charbig = 'was updated';
6024         
6025 # check unique-1-a success:     1
6026         
6027 # check unique-1-b success:     1
6028 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6029 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6030 f_int2 = CAST(f_char1 AS SIGNED INT),
6031 f_charbig = CONCAT('===',f_char1,'===')
6032 WHERE f_charbig = 'was updated';
6033 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6034 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6035    FROM t0_template source_tab
6036 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6037         
6038 # check replace success:        1
6039 DELETE FROM t1
6040 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6041 DELETE FROM t1
6042 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6043 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6044 UPDATE t1 SET f_int2 = f_int1,
6045 f_char1 = CAST(f_int1 AS CHAR),
6046 f_char2 = CAST(f_int1 AS CHAR),
6047 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6048 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6049 SET AUTOCOMMIT= 0;
6050 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6051 SELECT f_int1, f_int1, '', '', 'was inserted'
6052 FROM t0_template source_tab
6053 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6054         
6055 # check transactions-1 success:         1
6056 COMMIT WORK;
6057         
6058 # check transactions-2 success:         1
6059 ROLLBACK WORK;
6060         
6061 # check transactions-3 success:         1
6062 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6063 COMMIT WORK;
6064 ROLLBACK WORK;
6065         
6066 # check transactions-4 success:         1
6067 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6068 SELECT f_int1, f_int1, '', '', 'was inserted'
6069 FROM t0_template source_tab
6070 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6071         
6072 # check transactions-5 success:         1
6073 ROLLBACK WORK;
6074         
6075 # check transactions-6 success:         1
6076 # INFO: Storage engine used for t1 seems to be transactional.
6077 COMMIT;
6078         
6079 # check transactions-7 success:         1
6080 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6081 COMMIT WORK;
6082 SET @@session.sql_mode = 'traditional';
6083 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6084 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6085 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6086 '', '', 'was inserted' FROM t0_template
6087 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6088 ERROR 22012: Division by 0
6089 COMMIT;
6090         
6091 # check transactions-8 success:         1
6092 # INFO: Storage engine used for t1 seems to be able to revert
6093 #       changes made by the failing statement.
6094 SET @@session.sql_mode = '';
6095 SET AUTOCOMMIT= 1;
6096 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6097 COMMIT WORK;
6098 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6099         
6100 # check special-1 success:      1
6101 UPDATE t1 SET f_charbig = '';
6102         
6103 # check special-2 success:      1
6104 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6105 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6106 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6107 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6108 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6109 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6110 'just inserted' FROM t0_template
6111 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6112 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6113 BEGIN
6114 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6115 f_charbig = 'updated by trigger'
6116       WHERE f_int1 = new.f_int1;
6117 END|
6118 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6119 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6120 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6121         
6122 # check trigger-1 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 INSERT 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 = new.f_int1;
6139 END|
6140 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6141 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6142 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6143         
6144 # check trigger-2 success:      1
6145 DROP TRIGGER trg_1;
6146 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6147 f_int2 = CAST(f_char1 AS SIGNED INT),
6148 f_charbig = 'just inserted'
6149    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6150 DELETE FROM t0_aux
6151 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6152 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6153 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6154 'just inserted' FROM t0_template
6155 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6156 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6157 BEGIN
6158 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6159 f_charbig = 'updated by trigger'
6160       WHERE f_int1 = new.f_int1;
6161 END|
6162 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6163 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6164         
6165 # check trigger-3 success:      1
6166 DROP TRIGGER trg_1;
6167 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6168 f_int2 = CAST(f_char1 AS SIGNED INT),
6169 f_charbig = 'just inserted'
6170    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6171 DELETE FROM t0_aux
6172 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6173 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6174 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6175 'just inserted' FROM t0_template
6176 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6177 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6178 BEGIN
6179 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6180 f_charbig = 'updated by trigger'
6181       WHERE f_int1 = - old.f_int1;
6182 END|
6183 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6184 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6185         
6186 # check trigger-4 success:      1
6187 DROP TRIGGER trg_1;
6188 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6189 f_int2 = CAST(f_char1 AS SIGNED INT),
6190 f_charbig = 'just inserted'
6191    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6192 DELETE FROM t0_aux
6193 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6194 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6195 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6196 'just inserted' FROM t0_template
6197 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6198 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6199 BEGIN
6200 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6201 f_charbig = 'updated by trigger'
6202       WHERE f_int1 = new.f_int1;
6203 END|
6204 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6205 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6206         
6207 # check trigger-5 success:      1
6208 DROP TRIGGER trg_1;
6209 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6210 f_int2 = CAST(f_char1 AS SIGNED INT),
6211 f_charbig = 'just inserted'
6212    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6213 DELETE FROM t0_aux
6214 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6215 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6216 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6217 'just inserted' FROM t0_template
6218 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6219 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6220 BEGIN
6221 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6222 f_charbig = 'updated by trigger'
6223       WHERE f_int1 = - old.f_int1;
6224 END|
6225 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6226 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6227         
6228 # check trigger-6 success:      1
6229 DROP TRIGGER trg_1;
6230 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6231 f_int2 = CAST(f_char1 AS SIGNED INT),
6232 f_charbig = 'just inserted'
6233    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6234 DELETE FROM t0_aux
6235 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6236 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6237 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6238 'just inserted' FROM t0_template
6239 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6240 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6241 BEGIN
6242 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6243 f_charbig = 'updated by trigger'
6244       WHERE f_int1 = - old.f_int1;
6245 END|
6246 DELETE FROM t0_aux
6247 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6248         
6249 # check trigger-7 success:      1
6250 DROP TRIGGER trg_1;
6251 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6252 f_int2 = CAST(f_char1 AS SIGNED INT),
6253 f_charbig = 'just inserted'
6254    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6255 DELETE FROM t0_aux
6256 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6257 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6258 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6259 'just inserted' FROM t0_template
6260 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6261 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6262 BEGIN
6263 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6264 f_charbig = 'updated by trigger'
6265       WHERE f_int1 = - old.f_int1;
6266 END|
6267 DELETE FROM t0_aux
6268 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6269         
6270 # check trigger-8 success:      1
6271 DROP TRIGGER trg_1;
6272 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6273 f_int2 = CAST(f_char1 AS SIGNED INT),
6274 f_charbig = 'just inserted'
6275    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6276 DELETE FROM t0_aux
6277 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6278 DELETE FROM t1
6279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6280 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6281 BEGIN
6282 SET new.f_int1 = old.f_int1 + @max_row,
6283 new.f_int2 = old.f_int2 - @max_row,
6284 new.f_charbig = '####updated per update trigger####';
6285 END|
6286 UPDATE t1
6287 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6288 f_charbig = '####updated per update statement itself####';
6289         
6290 # check trigger-9 success:      1
6291 DROP TRIGGER trg_2;
6292 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6293 f_int2 = CAST(f_char1 AS SIGNED INT),
6294 f_charbig = CONCAT('===',f_char1,'===');
6295 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6296 BEGIN
6297 SET new.f_int1 = new.f_int1 + @max_row,
6298 new.f_int2 = new.f_int2 - @max_row,
6299 new.f_charbig = '####updated per update trigger####';
6300 END|
6301 UPDATE t1
6302 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6303 f_charbig = '####updated per update statement itself####';
6304         
6305 # check trigger-10 success:     1
6306 DROP TRIGGER trg_2;
6307 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6308 f_int2 = CAST(f_char1 AS SIGNED INT),
6309 f_charbig = CONCAT('===',f_char1,'===');
6310 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6311 BEGIN
6312 SET new.f_int1 = @my_max1 + @counter,
6313 new.f_int2 = @my_min2 - @counter,
6314 new.f_charbig = '####updated per insert trigger####';
6315 SET @counter = @counter + 1;
6316 END|
6317 SET @counter = 1;
6318 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6319 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6320 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6321 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6322 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6323 ORDER BY f_int1;
6324 DROP TRIGGER trg_3;
6325         
6326 # check trigger-11 success:     1
6327 DELETE FROM t1
6328 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6329 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6330 AND f_charbig = '####updated per insert trigger####';
6331 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6332 BEGIN
6333 SET new.f_int1 = @my_max1 + @counter,
6334 new.f_int2 = @my_min2 - @counter,
6335 new.f_charbig = '####updated per insert trigger####';
6336 SET @counter = @counter + 1;
6337 END|
6338 SET @counter = 1;
6339 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6340 INSERT INTO t1 (f_char1, f_char2, f_charbig)
6341 SELECT CAST(f_int1 AS CHAR),
6342 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6343 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6344 ORDER BY f_int1;
6345 DROP TRIGGER trg_3;
6346         
6347 # check trigger-12 success:     1
6348 DELETE FROM t1
6349 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6350 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6351 AND f_charbig = '####updated per insert trigger####';
6352 ANALYZE  TABLE t1;
6353 Table   Op      Msg_type        Msg_text
6354 test.t1 analyze status  OK
6355 CHECK    TABLE t1 EXTENDED;
6356 Table   Op      Msg_type        Msg_text
6357 test.t1 check   status  OK
6358 CHECKSUM TABLE t1 EXTENDED;
6359 Table   Checksum
6360 test.t1 <some_value>
6361 OPTIMIZE TABLE t1;
6362 Table   Op      Msg_type        Msg_text
6363 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
6364 test.t1 optimize        status  OK
6365 # check layout success:    1
6366 REPAIR   TABLE t1 EXTENDED;
6367 Table   Op      Msg_type        Msg_text
6368 test.t1 repair  note    The storage engine for the table doesn't support repair
6369 # check layout success:    1
6370 TRUNCATE t1;
6371         
6372 # check TRUNCATE success:       1
6373 # check layout success:    1
6374 # End usability test (inc/partition_check.inc)
6375 DROP TABLE t1;
6376 CREATE TABLE t1 (
6377 f_int1 INTEGER,
6378 f_int2 INTEGER,
6379 f_char1 CHAR(20),
6380 f_char2 CHAR(20),
6381 f_charbig VARCHAR(1000)
6384 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
6385 (PARTITION parta VALUES LESS THAN (0),
6386 PARTITION partb VALUES LESS THAN (5),
6387 PARTITION partc VALUES LESS THAN (10),
6388 PARTITION partd VALUES LESS THAN (2147483646));
6389 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6390 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6391 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6392 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
6393 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6394 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6395 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6396 # Start usability test (inc/partition_check.inc)
6397 create_command
6398 SHOW CREATE TABLE t1;
6399 Table   Create Table
6400 t1      CREATE TABLE `t1` (
6401   `f_int1` int(11) NOT NULL DEFAULT '0',
6402   `f_int2` int(11) NOT NULL DEFAULT '0',
6403   `f_char1` char(20) DEFAULT NULL,
6404   `f_char2` char(20) DEFAULT NULL,
6405   `f_charbig` varchar(1000) DEFAULT NULL,
6406   PRIMARY KEY (`f_int2`,`f_int1`)
6407 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
6408 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
6409 SUBPARTITION BY HASH (f_int1)
6410 SUBPARTITIONS 2
6411 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
6412  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
6413  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
6414  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
6416 # check prerequisites-1 success:    1
6417 # check COUNT(*) success:    1
6418 # check MIN/MAX(f_int1) success:    1
6419 # check MIN/MAX(f_int2) success:    1
6420 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6421 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6422 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6423 WHERE f_int1 IN (2,3);
6424 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6425 # check prerequisites-3 success:    1
6426 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6427 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6428 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6429 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6430 WHERE f_int1 IN (2,3);
6431 DELETE FROM t1 WHERE f_charbig = 'delete me';
6432 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6433 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6434 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6435 WHERE f_int1 IN (2,3);
6436 DELETE FROM t1 WHERE f_charbig = 'delete me';
6437 # check read via f_int1 success: 1
6438 # check read via f_int2 success: 1
6439         
6440 # check multiple-1 success:     1
6441 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6442         
6443 # check multiple-2 success:     1
6444 INSERT INTO t1 SELECT * FROM t0_template
6445 WHERE MOD(f_int1,3) = 0;
6446         
6447 # check multiple-3 success:     1
6448 UPDATE t1 SET f_int1 = f_int1 + @max_row
6449 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6450 AND @max_row_div2 + @max_row_div4;
6451         
6452 # check multiple-4 success:     1
6453 DELETE FROM t1
6454 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6455 AND @max_row_div2 + @max_row_div4 + @max_row;
6456         
6457 # check multiple-5 success:     1
6458 SELECT COUNT(*) INTO @try_count FROM t0_template
6459 WHERE MOD(f_int1,3) = 0
6460 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6461 SELECT COUNT(*) INTO @clash_count
6462 FROM t1 INNER JOIN t0_template USING(f_int1)
6463 WHERE MOD(f_int1,3) = 0
6464 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6465 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6466 INSERT INTO t1
6467 SET f_int1 = @cur_value , f_int2 = @cur_value,
6468 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6469 f_charbig = '#SINGLE#';
6470         
6471 # check single-1 success:       1
6472 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6473 INSERT INTO t1
6474 SET f_int1 = @cur_value , f_int2 = @cur_value,
6475 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6476 f_charbig = '#SINGLE#';
6477         
6478 # check single-2 success:       1
6479 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6480 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6481 UPDATE t1 SET f_int1 = @cur_value2
6482 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6483         
6484 # check single-3 success:       1
6485 SET @cur_value1= -1;
6486 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6487 UPDATE t1 SET f_int1 = @cur_value1
6488 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6489         
6490 # check single-4 success:       1
6491 SELECT MAX(f_int1) INTO @cur_value FROM t1;
6492 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6493         
6494 # check single-5 success:       1
6495 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6496         
6497 # check single-6 success:       1
6498 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6499         
6500 # check single-7 success:       1
6501 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6502 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6503 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6504 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6505 f_charbig = '#NULL#';
6506 INSERT INTO t1
6507 SET f_int1 = NULL , f_int2 = -@max_row,
6508 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6509 f_charbig = '#NULL#';
6510 ERROR 23000: Column 'f_int1' cannot be null
6511 # check null success:    1
6512 DELETE FROM t1
6513 WHERE f_int1 = 0 AND f_int2 = 0
6514 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6515 AND f_charbig = '#NULL#';
6516 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6517 SELECT f_int1, f_int1, '', '', 'was inserted'
6518    FROM t0_template source_tab
6519 WHERE MOD(f_int1,3) = 0
6520 AND f_int1 BETWEEN @max_row_div2 AND @max_row
6521 ON DUPLICATE KEY
6522 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6523 f_int2 = 2 * @max_row + source_tab.f_int1,
6524 f_charbig = 'was updated';
6525         
6526 # check unique-1-a success:     1
6527         
6528 # check unique-1-b success:     1
6529 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6530 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6531 f_int2 = CAST(f_char1 AS SIGNED INT),
6532 f_charbig = CONCAT('===',f_char1,'===')
6533 WHERE f_charbig = 'was updated';
6534 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6535 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6536    FROM t0_template source_tab
6537 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6538         
6539 # check replace success:        1
6540 DELETE FROM t1
6541 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6542 DELETE FROM t1
6543 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6544 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6545 UPDATE t1 SET f_int2 = f_int1,
6546 f_char1 = CAST(f_int1 AS CHAR),
6547 f_char2 = CAST(f_int1 AS CHAR),
6548 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6549 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6550 SET AUTOCOMMIT= 0;
6551 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6552 SELECT f_int1, f_int1, '', '', 'was inserted'
6553 FROM t0_template source_tab
6554 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6555         
6556 # check transactions-1 success:         1
6557 COMMIT WORK;
6558         
6559 # check transactions-2 success:         1
6560 ROLLBACK WORK;
6561         
6562 # check transactions-3 success:         1
6563 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6564 COMMIT WORK;
6565 ROLLBACK WORK;
6566         
6567 # check transactions-4 success:         1
6568 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6569 SELECT f_int1, f_int1, '', '', 'was inserted'
6570 FROM t0_template source_tab
6571 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6572         
6573 # check transactions-5 success:         1
6574 ROLLBACK WORK;
6575         
6576 # check transactions-6 success:         1
6577 # INFO: Storage engine used for t1 seems to be transactional.
6578 COMMIT;
6579         
6580 # check transactions-7 success:         1
6581 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6582 COMMIT WORK;
6583 SET @@session.sql_mode = 'traditional';
6584 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6585 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6586 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6587 '', '', 'was inserted' FROM t0_template
6588 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6589 ERROR 22012: Division by 0
6590 COMMIT;
6591         
6592 # check transactions-8 success:         1
6593 # INFO: Storage engine used for t1 seems to be able to revert
6594 #       changes made by the failing statement.
6595 SET @@session.sql_mode = '';
6596 SET AUTOCOMMIT= 1;
6597 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6598 COMMIT WORK;
6599 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6600         
6601 # check special-1 success:      1
6602 UPDATE t1 SET f_charbig = '';
6603         
6604 # check special-2 success:      1
6605 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6606 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6607 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6608 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6609 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6610 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6611 'just inserted' FROM t0_template
6612 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6613 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6614 BEGIN
6615 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6616 f_charbig = 'updated by trigger'
6617       WHERE f_int1 = new.f_int1;
6618 END|
6619 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6620 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6621 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6622         
6623 # check trigger-1 success:      1
6624 DROP TRIGGER trg_1;
6625 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6626 f_int2 = CAST(f_char1 AS SIGNED INT),
6627 f_charbig = 'just inserted'
6628    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6629 DELETE FROM t0_aux
6630 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6631 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6632 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6633 'just inserted' FROM t0_template
6634 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6635 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6636 BEGIN
6637 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6638 f_charbig = 'updated by trigger'
6639       WHERE f_int1 = new.f_int1;
6640 END|
6641 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6642 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6643 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6644         
6645 # check trigger-2 success:      1
6646 DROP TRIGGER trg_1;
6647 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6648 f_int2 = CAST(f_char1 AS SIGNED INT),
6649 f_charbig = 'just inserted'
6650    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6651 DELETE FROM t0_aux
6652 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6653 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6654 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6655 'just inserted' FROM t0_template
6656 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6657 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6658 BEGIN
6659 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6660 f_charbig = 'updated by trigger'
6661       WHERE f_int1 = new.f_int1;
6662 END|
6663 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6664 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6665         
6666 # check trigger-3 success:      1
6667 DROP TRIGGER trg_1;
6668 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6669 f_int2 = CAST(f_char1 AS SIGNED INT),
6670 f_charbig = 'just inserted'
6671    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6672 DELETE FROM t0_aux
6673 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6674 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6675 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6676 'just inserted' FROM t0_template
6677 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6678 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6679 BEGIN
6680 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6681 f_charbig = 'updated by trigger'
6682       WHERE f_int1 = - old.f_int1;
6683 END|
6684 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6685 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6686         
6687 # check trigger-4 success:      1
6688 DROP TRIGGER trg_1;
6689 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6690 f_int2 = CAST(f_char1 AS SIGNED INT),
6691 f_charbig = 'just inserted'
6692    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6693 DELETE FROM t0_aux
6694 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6695 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6696 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6697 'just inserted' FROM t0_template
6698 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6699 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6700 BEGIN
6701 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6702 f_charbig = 'updated by trigger'
6703       WHERE f_int1 = new.f_int1;
6704 END|
6705 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6706 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6707         
6708 # check trigger-5 success:      1
6709 DROP TRIGGER trg_1;
6710 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6711 f_int2 = CAST(f_char1 AS SIGNED INT),
6712 f_charbig = 'just inserted'
6713    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6714 DELETE FROM t0_aux
6715 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6716 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6717 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6718 'just inserted' FROM t0_template
6719 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6720 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6721 BEGIN
6722 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6723 f_charbig = 'updated by trigger'
6724       WHERE f_int1 = - old.f_int1;
6725 END|
6726 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6727 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6728         
6729 # check trigger-6 success:      1
6730 DROP TRIGGER trg_1;
6731 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6732 f_int2 = CAST(f_char1 AS SIGNED INT),
6733 f_charbig = 'just inserted'
6734    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6735 DELETE FROM t0_aux
6736 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6737 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6738 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6739 'just inserted' FROM t0_template
6740 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6741 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6742 BEGIN
6743 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6744 f_charbig = 'updated by trigger'
6745       WHERE f_int1 = - old.f_int1;
6746 END|
6747 DELETE FROM t0_aux
6748 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6749         
6750 # check trigger-7 success:      1
6751 DROP TRIGGER trg_1;
6752 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6753 f_int2 = CAST(f_char1 AS SIGNED INT),
6754 f_charbig = 'just inserted'
6755    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6756 DELETE FROM t0_aux
6757 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6758 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6759 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6760 'just inserted' FROM t0_template
6761 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6762 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6763 BEGIN
6764 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6765 f_charbig = 'updated by trigger'
6766       WHERE f_int1 = - old.f_int1;
6767 END|
6768 DELETE FROM t0_aux
6769 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6770         
6771 # check trigger-8 success:      1
6772 DROP TRIGGER trg_1;
6773 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6774 f_int2 = CAST(f_char1 AS SIGNED INT),
6775 f_charbig = 'just inserted'
6776    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6777 DELETE FROM t0_aux
6778 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6779 DELETE FROM t1
6780 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6781 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6782 BEGIN
6783 SET new.f_int1 = old.f_int1 + @max_row,
6784 new.f_int2 = old.f_int2 - @max_row,
6785 new.f_charbig = '####updated per update trigger####';
6786 END|
6787 UPDATE t1
6788 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6789 f_charbig = '####updated per update statement itself####';
6790         
6791 # check trigger-9 success:      1
6792 DROP TRIGGER trg_2;
6793 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6794 f_int2 = CAST(f_char1 AS SIGNED INT),
6795 f_charbig = CONCAT('===',f_char1,'===');
6796 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6797 BEGIN
6798 SET new.f_int1 = new.f_int1 + @max_row,
6799 new.f_int2 = new.f_int2 - @max_row,
6800 new.f_charbig = '####updated per update trigger####';
6801 END|
6802 UPDATE t1
6803 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6804 f_charbig = '####updated per update statement itself####';
6805         
6806 # check trigger-10 success:     1
6807 DROP TRIGGER trg_2;
6808 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6809 f_int2 = CAST(f_char1 AS SIGNED INT),
6810 f_charbig = CONCAT('===',f_char1,'===');
6811 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6812 BEGIN
6813 SET new.f_int1 = @my_max1 + @counter,
6814 new.f_int2 = @my_min2 - @counter,
6815 new.f_charbig = '####updated per insert trigger####';
6816 SET @counter = @counter + 1;
6817 END|
6818 SET @counter = 1;
6819 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6820 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6821 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6822 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6823 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6824 ORDER BY f_int1;
6825 DROP TRIGGER trg_3;
6826         
6827 # check trigger-11 success:     1
6828 DELETE FROM t1
6829 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6830 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6831 AND f_charbig = '####updated per insert trigger####';
6832 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6833 BEGIN
6834 SET new.f_int1 = @my_max1 + @counter,
6835 new.f_int2 = @my_min2 - @counter,
6836 new.f_charbig = '####updated per insert trigger####';
6837 SET @counter = @counter + 1;
6838 END|
6839 SET @counter = 1;
6840 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6841 INSERT INTO t1 (f_char1, f_char2, f_charbig)
6842 SELECT CAST(f_int1 AS CHAR),
6843 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6844 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6845 ORDER BY f_int1;
6846 DROP TRIGGER trg_3;
6847         
6848 # check trigger-12 success:     1
6849 DELETE FROM t1
6850 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6851 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6852 AND f_charbig = '####updated per insert trigger####';
6853 ANALYZE  TABLE t1;
6854 Table   Op      Msg_type        Msg_text
6855 test.t1 analyze status  OK
6856 CHECK    TABLE t1 EXTENDED;
6857 Table   Op      Msg_type        Msg_text
6858 test.t1 check   status  OK
6859 CHECKSUM TABLE t1 EXTENDED;
6860 Table   Checksum
6861 test.t1 <some_value>
6862 OPTIMIZE TABLE t1;
6863 Table   Op      Msg_type        Msg_text
6864 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
6865 test.t1 optimize        status  OK
6866 # check layout success:    1
6867 REPAIR   TABLE t1 EXTENDED;
6868 Table   Op      Msg_type        Msg_text
6869 test.t1 repair  note    The storage engine for the table doesn't support repair
6870 # check layout success:    1
6871 TRUNCATE t1;
6872         
6873 # check TRUNCATE success:       1
6874 # check layout success:    1
6875 # End usability test (inc/partition_check.inc)
6876 DROP TABLE t1;
6877 CREATE TABLE t1 (
6878 f_int1 INTEGER,
6879 f_int2 INTEGER,
6880 f_char1 CHAR(20),
6881 f_char2 CHAR(20),
6882 f_charbig VARCHAR(1000)
6885 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
6886 (PARTITION part1 VALUES LESS THAN (0)
6887 (SUBPARTITION subpart11, SUBPARTITION subpart12),
6888 PARTITION part2 VALUES LESS THAN (5)
6889 (SUBPARTITION subpart21, SUBPARTITION subpart22),
6890 PARTITION part3 VALUES LESS THAN (10)
6891 (SUBPARTITION subpart31, SUBPARTITION subpart32),
6892 PARTITION part4 VALUES LESS THAN (2147483646)
6893 (SUBPARTITION subpart41, SUBPARTITION subpart42));
6894 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6895 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6896 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6897 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
6898 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6899 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6900 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6901 # Start usability test (inc/partition_check.inc)
6902 create_command
6903 SHOW CREATE TABLE t1;
6904 Table   Create Table
6905 t1      CREATE TABLE `t1` (
6906   `f_int1` int(11) NOT NULL DEFAULT '0',
6907   `f_int2` int(11) NOT NULL DEFAULT '0',
6908   `f_char1` char(20) DEFAULT NULL,
6909   `f_char2` char(20) DEFAULT NULL,
6910   `f_charbig` varchar(1000) DEFAULT NULL,
6911   PRIMARY KEY (`f_int2`,`f_int1`)
6912 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
6913 /*!50100 PARTITION BY RANGE (f_int1)
6914 SUBPARTITION BY KEY (f_int1)
6915 (PARTITION part1 VALUES LESS THAN (0)
6916  (SUBPARTITION subpart11 ENGINE = InnoDB,
6917   SUBPARTITION subpart12 ENGINE = InnoDB),
6918  PARTITION part2 VALUES LESS THAN (5)
6919  (SUBPARTITION subpart21 ENGINE = InnoDB,
6920   SUBPARTITION subpart22 ENGINE = InnoDB),
6921  PARTITION part3 VALUES LESS THAN (10)
6922  (SUBPARTITION subpart31 ENGINE = InnoDB,
6923   SUBPARTITION subpart32 ENGINE = InnoDB),
6924  PARTITION part4 VALUES LESS THAN (2147483646)
6925  (SUBPARTITION subpart41 ENGINE = InnoDB,
6926   SUBPARTITION subpart42 ENGINE = InnoDB)) */
6928 # check prerequisites-1 success:    1
6929 # check COUNT(*) success:    1
6930 # check MIN/MAX(f_int1) success:    1
6931 # check MIN/MAX(f_int2) success:    1
6932 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6933 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6934 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6935 WHERE f_int1 IN (2,3);
6936 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6937 # check prerequisites-3 success:    1
6938 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6939 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6940 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6941 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6942 WHERE f_int1 IN (2,3);
6943 DELETE FROM t1 WHERE f_charbig = 'delete me';
6944 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6945 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6946 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6947 WHERE f_int1 IN (2,3);
6948 DELETE FROM t1 WHERE f_charbig = 'delete me';
6949 # check read via f_int1 success: 1
6950 # check read via f_int2 success: 1
6951         
6952 # check multiple-1 success:     1
6953 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6954         
6955 # check multiple-2 success:     1
6956 INSERT INTO t1 SELECT * FROM t0_template
6957 WHERE MOD(f_int1,3) = 0;
6958         
6959 # check multiple-3 success:     1
6960 UPDATE t1 SET f_int1 = f_int1 + @max_row
6961 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6962 AND @max_row_div2 + @max_row_div4;
6963         
6964 # check multiple-4 success:     1
6965 DELETE FROM t1
6966 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6967 AND @max_row_div2 + @max_row_div4 + @max_row;
6968         
6969 # check multiple-5 success:     1
6970 SELECT COUNT(*) INTO @try_count FROM t0_template
6971 WHERE MOD(f_int1,3) = 0
6972 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6973 SELECT COUNT(*) INTO @clash_count
6974 FROM t1 INNER JOIN t0_template USING(f_int1)
6975 WHERE MOD(f_int1,3) = 0
6976 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6977 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6978 INSERT INTO t1
6979 SET f_int1 = @cur_value , f_int2 = @cur_value,
6980 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6981 f_charbig = '#SINGLE#';
6982         
6983 # check single-1 success:       1
6984 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6985 INSERT INTO t1
6986 SET f_int1 = @cur_value , f_int2 = @cur_value,
6987 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6988 f_charbig = '#SINGLE#';
6989         
6990 # check single-2 success:       1
6991 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6992 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6993 UPDATE t1 SET f_int1 = @cur_value2
6994 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6995         
6996 # check single-3 success:       1
6997 SET @cur_value1= -1;
6998 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6999 UPDATE t1 SET f_int1 = @cur_value1
7000 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7001         
7002 # check single-4 success:       1
7003 SELECT MAX(f_int1) INTO @cur_value FROM t1;
7004 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7005         
7006 # check single-5 success:       1
7007 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7008         
7009 # check single-6 success:       1
7010 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7011 ERROR HY000: Table has no partition for value 2147483647
7012 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7013 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7014 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7015 f_charbig = '#NULL#';
7016 INSERT INTO t1
7017 SET f_int1 = NULL , f_int2 = -@max_row,
7018 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7019 f_charbig = '#NULL#';
7020 ERROR 23000: Column 'f_int1' cannot be null
7021 # check null success:    1
7022 DELETE FROM t1
7023 WHERE f_int1 = 0 AND f_int2 = 0
7024 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7025 AND f_charbig = '#NULL#';
7026 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7027 SELECT f_int1, f_int1, '', '', 'was inserted'
7028    FROM t0_template source_tab
7029 WHERE MOD(f_int1,3) = 0
7030 AND f_int1 BETWEEN @max_row_div2 AND @max_row
7031 ON DUPLICATE KEY
7032 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7033 f_int2 = 2 * @max_row + source_tab.f_int1,
7034 f_charbig = 'was updated';
7035         
7036 # check unique-1-a success:     1
7037         
7038 # check unique-1-b success:     1
7039 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7040 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7041 f_int2 = CAST(f_char1 AS SIGNED INT),
7042 f_charbig = CONCAT('===',f_char1,'===')
7043 WHERE f_charbig = 'was updated';
7044 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7045 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7046    FROM t0_template source_tab
7047 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7048         
7049 # check replace success:        1
7050 DELETE FROM t1
7051 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7052 DELETE FROM t1
7053 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7054 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7055 UPDATE t1 SET f_int2 = f_int1,
7056 f_char1 = CAST(f_int1 AS CHAR),
7057 f_char2 = CAST(f_int1 AS CHAR),
7058 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7059 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7060 SET AUTOCOMMIT= 0;
7061 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7062 SELECT f_int1, f_int1, '', '', 'was inserted'
7063 FROM t0_template source_tab
7064 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7065         
7066 # check transactions-1 success:         1
7067 COMMIT WORK;
7068         
7069 # check transactions-2 success:         1
7070 ROLLBACK WORK;
7071         
7072 # check transactions-3 success:         1
7073 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7074 COMMIT WORK;
7075 ROLLBACK WORK;
7076         
7077 # check transactions-4 success:         1
7078 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7079 SELECT f_int1, f_int1, '', '', 'was inserted'
7080 FROM t0_template source_tab
7081 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7082         
7083 # check transactions-5 success:         1
7084 ROLLBACK WORK;
7085         
7086 # check transactions-6 success:         1
7087 # INFO: Storage engine used for t1 seems to be transactional.
7088 COMMIT;
7089         
7090 # check transactions-7 success:         1
7091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7092 COMMIT WORK;
7093 SET @@session.sql_mode = 'traditional';
7094 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7095 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7096 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7097 '', '', 'was inserted' FROM t0_template
7098 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7099 ERROR 22012: Division by 0
7100 COMMIT;
7101         
7102 # check transactions-8 success:         1
7103 # INFO: Storage engine used for t1 seems to be able to revert
7104 #       changes made by the failing statement.
7105 SET @@session.sql_mode = '';
7106 SET AUTOCOMMIT= 1;
7107 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7108 COMMIT WORK;
7109 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7110         
7111 # check special-1 success:      1
7112 UPDATE t1 SET f_charbig = '';
7113         
7114 # check special-2 success:      1
7115 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7116 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7117 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7119 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7120 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7121 'just inserted' FROM t0_template
7122 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7123 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7124 BEGIN
7125 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7126 f_charbig = 'updated by trigger'
7127       WHERE f_int1 = new.f_int1;
7128 END|
7129 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7130 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7131 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7132         
7133 # check trigger-1 success:      1
7134 DROP TRIGGER trg_1;
7135 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7136 f_int2 = CAST(f_char1 AS SIGNED INT),
7137 f_charbig = 'just inserted'
7138    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7139 DELETE FROM t0_aux
7140 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7141 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7142 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7143 'just inserted' FROM t0_template
7144 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7145 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7146 BEGIN
7147 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7148 f_charbig = 'updated by trigger'
7149       WHERE f_int1 = new.f_int1;
7150 END|
7151 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7152 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7153 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7154         
7155 # check trigger-2 success:      1
7156 DROP TRIGGER trg_1;
7157 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7158 f_int2 = CAST(f_char1 AS SIGNED INT),
7159 f_charbig = 'just inserted'
7160    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7161 DELETE FROM t0_aux
7162 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7163 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7164 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7165 'just inserted' FROM t0_template
7166 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7167 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7168 BEGIN
7169 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7170 f_charbig = 'updated by trigger'
7171       WHERE f_int1 = new.f_int1;
7172 END|
7173 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7174 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7175         
7176 # check trigger-3 success:      1
7177 DROP TRIGGER trg_1;
7178 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7179 f_int2 = CAST(f_char1 AS SIGNED INT),
7180 f_charbig = 'just inserted'
7181    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7182 DELETE FROM t0_aux
7183 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7184 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7185 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7186 'just inserted' FROM t0_template
7187 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7188 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7189 BEGIN
7190 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7191 f_charbig = 'updated by trigger'
7192       WHERE f_int1 = - old.f_int1;
7193 END|
7194 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7195 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7196         
7197 # check trigger-4 success:      1
7198 DROP TRIGGER trg_1;
7199 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7200 f_int2 = CAST(f_char1 AS SIGNED INT),
7201 f_charbig = 'just inserted'
7202    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7203 DELETE FROM t0_aux
7204 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7205 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7206 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7207 'just inserted' FROM t0_template
7208 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7209 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7210 BEGIN
7211 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7212 f_charbig = 'updated by trigger'
7213       WHERE f_int1 = new.f_int1;
7214 END|
7215 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7216 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7217         
7218 # check trigger-5 success:      1
7219 DROP TRIGGER trg_1;
7220 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7221 f_int2 = CAST(f_char1 AS SIGNED INT),
7222 f_charbig = 'just inserted'
7223    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7224 DELETE FROM t0_aux
7225 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7226 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7227 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7228 'just inserted' FROM t0_template
7229 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7230 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7231 BEGIN
7232 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7233 f_charbig = 'updated by trigger'
7234       WHERE f_int1 = - old.f_int1;
7235 END|
7236 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7237 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7238         
7239 # check trigger-6 success:      1
7240 DROP TRIGGER trg_1;
7241 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7242 f_int2 = CAST(f_char1 AS SIGNED INT),
7243 f_charbig = 'just inserted'
7244    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7245 DELETE FROM t0_aux
7246 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7247 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7248 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7249 'just inserted' FROM t0_template
7250 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7251 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7252 BEGIN
7253 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7254 f_charbig = 'updated by trigger'
7255       WHERE f_int1 = - old.f_int1;
7256 END|
7257 DELETE FROM t0_aux
7258 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7259         
7260 # check trigger-7 success:      1
7261 DROP TRIGGER trg_1;
7262 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7263 f_int2 = CAST(f_char1 AS SIGNED INT),
7264 f_charbig = 'just inserted'
7265    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7266 DELETE FROM t0_aux
7267 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7268 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7269 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7270 'just inserted' FROM t0_template
7271 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7272 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7273 BEGIN
7274 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7275 f_charbig = 'updated by trigger'
7276       WHERE f_int1 = - old.f_int1;
7277 END|
7278 DELETE FROM t0_aux
7279 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7280         
7281 # check trigger-8 success:      1
7282 DROP TRIGGER trg_1;
7283 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7284 f_int2 = CAST(f_char1 AS SIGNED INT),
7285 f_charbig = 'just inserted'
7286    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7287 DELETE FROM t0_aux
7288 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7289 DELETE FROM t1
7290 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7291 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7292 BEGIN
7293 SET new.f_int1 = old.f_int1 + @max_row,
7294 new.f_int2 = old.f_int2 - @max_row,
7295 new.f_charbig = '####updated per update trigger####';
7296 END|
7297 UPDATE t1
7298 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7299 f_charbig = '####updated per update statement itself####';
7300         
7301 # check trigger-9 success:      1
7302 DROP TRIGGER trg_2;
7303 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7304 f_int2 = CAST(f_char1 AS SIGNED INT),
7305 f_charbig = CONCAT('===',f_char1,'===');
7306 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7307 BEGIN
7308 SET new.f_int1 = new.f_int1 + @max_row,
7309 new.f_int2 = new.f_int2 - @max_row,
7310 new.f_charbig = '####updated per update trigger####';
7311 END|
7312 UPDATE t1
7313 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7314 f_charbig = '####updated per update statement itself####';
7315         
7316 # check trigger-10 success:     1
7317 DROP TRIGGER trg_2;
7318 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7319 f_int2 = CAST(f_char1 AS SIGNED INT),
7320 f_charbig = CONCAT('===',f_char1,'===');
7321 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7322 BEGIN
7323 SET new.f_int1 = @my_max1 + @counter,
7324 new.f_int2 = @my_min2 - @counter,
7325 new.f_charbig = '####updated per insert trigger####';
7326 SET @counter = @counter + 1;
7327 END|
7328 SET @counter = 1;
7329 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7330 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7331 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7332 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7333 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7334 ORDER BY f_int1;
7335 DROP TRIGGER trg_3;
7336         
7337 # check trigger-11 success:     1
7338 DELETE FROM t1
7339 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7340 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7341 AND f_charbig = '####updated per insert trigger####';
7342 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7343 BEGIN
7344 SET new.f_int1 = @my_max1 + @counter,
7345 new.f_int2 = @my_min2 - @counter,
7346 new.f_charbig = '####updated per insert trigger####';
7347 SET @counter = @counter + 1;
7348 END|
7349 SET @counter = 1;
7350 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7351 INSERT INTO t1 (f_char1, f_char2, f_charbig)
7352 SELECT CAST(f_int1 AS CHAR),
7353 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7354 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7355 ORDER BY f_int1;
7356 DROP TRIGGER trg_3;
7357         
7358 # check trigger-12 success:     1
7359 DELETE FROM t1
7360 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7361 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7362 AND f_charbig = '####updated per insert trigger####';
7363 ANALYZE  TABLE t1;
7364 Table   Op      Msg_type        Msg_text
7365 test.t1 analyze status  OK
7366 CHECK    TABLE t1 EXTENDED;
7367 Table   Op      Msg_type        Msg_text
7368 test.t1 check   status  OK
7369 CHECKSUM TABLE t1 EXTENDED;
7370 Table   Checksum
7371 test.t1 <some_value>
7372 OPTIMIZE TABLE t1;
7373 Table   Op      Msg_type        Msg_text
7374 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
7375 test.t1 optimize        status  OK
7376 # check layout success:    1
7377 REPAIR   TABLE t1 EXTENDED;
7378 Table   Op      Msg_type        Msg_text
7379 test.t1 repair  note    The storage engine for the table doesn't support repair
7380 # check layout success:    1
7381 TRUNCATE t1;
7382         
7383 # check TRUNCATE success:       1
7384 # check layout success:    1
7385 # End usability test (inc/partition_check.inc)
7386 DROP TABLE t1;
7387 CREATE TABLE t1 (
7388 f_int1 INTEGER,
7389 f_int2 INTEGER,
7390 f_char1 CHAR(20),
7391 f_char2 CHAR(20),
7392 f_charbig VARCHAR(1000)
7395 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
7396 (PARTITION part1 VALUES IN (0)
7397 (SUBPARTITION sp11, SUBPARTITION sp12),
7398 PARTITION part2 VALUES IN (1)
7399 (SUBPARTITION sp21, SUBPARTITION sp22),
7400 PARTITION part3 VALUES IN (2)
7401 (SUBPARTITION sp31, SUBPARTITION sp32),
7402 PARTITION part4 VALUES IN (NULL)
7403 (SUBPARTITION sp41, SUBPARTITION sp42));
7404 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7405 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7406 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7407 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
7408 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7409 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7410 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7411 # Start usability test (inc/partition_check.inc)
7412 create_command
7413 SHOW CREATE TABLE t1;
7414 Table   Create Table
7415 t1      CREATE TABLE `t1` (
7416   `f_int1` int(11) NOT NULL DEFAULT '0',
7417   `f_int2` int(11) NOT NULL DEFAULT '0',
7418   `f_char1` char(20) DEFAULT NULL,
7419   `f_char2` char(20) DEFAULT NULL,
7420   `f_charbig` varchar(1000) DEFAULT NULL,
7421   PRIMARY KEY (`f_int2`,`f_int1`)
7422 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
7423 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
7424 SUBPARTITION BY HASH (f_int1 + 1)
7425 (PARTITION part1 VALUES IN (0)
7426  (SUBPARTITION sp11 ENGINE = InnoDB,
7427   SUBPARTITION sp12 ENGINE = InnoDB),
7428  PARTITION part2 VALUES IN (1)
7429  (SUBPARTITION sp21 ENGINE = InnoDB,
7430   SUBPARTITION sp22 ENGINE = InnoDB),
7431  PARTITION part3 VALUES IN (2)
7432  (SUBPARTITION sp31 ENGINE = InnoDB,
7433   SUBPARTITION sp32 ENGINE = InnoDB),
7434  PARTITION part4 VALUES IN (NULL)
7435  (SUBPARTITION sp41 ENGINE = InnoDB,
7436   SUBPARTITION sp42 ENGINE = InnoDB)) */
7438 # check prerequisites-1 success:    1
7439 # check COUNT(*) success:    1
7440 # check MIN/MAX(f_int1) success:    1
7441 # check MIN/MAX(f_int2) success:    1
7442 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7443 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7444 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7445 WHERE f_int1 IN (2,3);
7446 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7447 # check prerequisites-3 success:    1
7448 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7449 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7450 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7451 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7452 WHERE f_int1 IN (2,3);
7453 DELETE FROM t1 WHERE f_charbig = 'delete me';
7454 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7455 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7456 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7457 WHERE f_int1 IN (2,3);
7458 DELETE FROM t1 WHERE f_charbig = 'delete me';
7459 # check read via f_int1 success: 1
7460 # check read via f_int2 success: 1
7461         
7462 # check multiple-1 success:     1
7463 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7464         
7465 # check multiple-2 success:     1
7466 INSERT INTO t1 SELECT * FROM t0_template
7467 WHERE MOD(f_int1,3) = 0;
7468         
7469 # check multiple-3 success:     1
7470 UPDATE t1 SET f_int1 = f_int1 + @max_row
7471 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7472 AND @max_row_div2 + @max_row_div4;
7473         
7474 # check multiple-4 success:     1
7475 DELETE FROM t1
7476 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7477 AND @max_row_div2 + @max_row_div4 + @max_row;
7478         
7479 # check multiple-5 success:     1
7480 SELECT COUNT(*) INTO @try_count FROM t0_template
7481 WHERE MOD(f_int1,3) = 0
7482 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7483 SELECT COUNT(*) INTO @clash_count
7484 FROM t1 INNER JOIN t0_template USING(f_int1)
7485 WHERE MOD(f_int1,3) = 0
7486 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7487 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7488 INSERT INTO t1
7489 SET f_int1 = @cur_value , f_int2 = @cur_value,
7490 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7491 f_charbig = '#SINGLE#';
7492         
7493 # check single-1 success:       1
7494 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7495 INSERT INTO t1
7496 SET f_int1 = @cur_value , f_int2 = @cur_value,
7497 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7498 f_charbig = '#SINGLE#';
7499         
7500 # check single-2 success:       1
7501 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7502 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7503 UPDATE t1 SET f_int1 = @cur_value2
7504 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7505         
7506 # check single-3 success:       1
7507 SET @cur_value1= -1;
7508 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7509 UPDATE t1 SET f_int1 = @cur_value1
7510 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7511         
7512 # check single-4 success:       1
7513 SELECT MAX(f_int1) INTO @cur_value FROM t1;
7514 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7515         
7516 # check single-5 success:       1
7517 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7518         
7519 # check single-6 success:       1
7520 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7521         
7522 # check single-7 success:       1
7523 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7524 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7525 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7526 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7527 f_charbig = '#NULL#';
7528 INSERT INTO t1
7529 SET f_int1 = NULL , f_int2 = -@max_row,
7530 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7531 f_charbig = '#NULL#';
7532 ERROR 23000: Column 'f_int1' cannot be null
7533 # check null success:    1
7534 DELETE FROM t1
7535 WHERE f_int1 = 0 AND f_int2 = 0
7536 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7537 AND f_charbig = '#NULL#';
7538 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7539 SELECT f_int1, f_int1, '', '', 'was inserted'
7540    FROM t0_template source_tab
7541 WHERE MOD(f_int1,3) = 0
7542 AND f_int1 BETWEEN @max_row_div2 AND @max_row
7543 ON DUPLICATE KEY
7544 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7545 f_int2 = 2 * @max_row + source_tab.f_int1,
7546 f_charbig = 'was updated';
7547         
7548 # check unique-1-a success:     1
7549         
7550 # check unique-1-b success:     1
7551 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7552 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7553 f_int2 = CAST(f_char1 AS SIGNED INT),
7554 f_charbig = CONCAT('===',f_char1,'===')
7555 WHERE f_charbig = 'was updated';
7556 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7557 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7558    FROM t0_template source_tab
7559 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7560         
7561 # check replace success:        1
7562 DELETE FROM t1
7563 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7564 DELETE FROM t1
7565 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7566 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7567 UPDATE t1 SET f_int2 = f_int1,
7568 f_char1 = CAST(f_int1 AS CHAR),
7569 f_char2 = CAST(f_int1 AS CHAR),
7570 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7571 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7572 SET AUTOCOMMIT= 0;
7573 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7574 SELECT f_int1, f_int1, '', '', 'was inserted'
7575 FROM t0_template source_tab
7576 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7577         
7578 # check transactions-1 success:         1
7579 COMMIT WORK;
7580         
7581 # check transactions-2 success:         1
7582 ROLLBACK WORK;
7583         
7584 # check transactions-3 success:         1
7585 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7586 COMMIT WORK;
7587 ROLLBACK WORK;
7588         
7589 # check transactions-4 success:         1
7590 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7591 SELECT f_int1, f_int1, '', '', 'was inserted'
7592 FROM t0_template source_tab
7593 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7594         
7595 # check transactions-5 success:         1
7596 ROLLBACK WORK;
7597         
7598 # check transactions-6 success:         1
7599 # INFO: Storage engine used for t1 seems to be transactional.
7600 COMMIT;
7601         
7602 # check transactions-7 success:         1
7603 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7604 COMMIT WORK;
7605 SET @@session.sql_mode = 'traditional';
7606 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7607 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7608 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7609 '', '', 'was inserted' FROM t0_template
7610 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7611 ERROR 22012: Division by 0
7612 COMMIT;
7613         
7614 # check transactions-8 success:         1
7615 # INFO: Storage engine used for t1 seems to be able to revert
7616 #       changes made by the failing statement.
7617 SET @@session.sql_mode = '';
7618 SET AUTOCOMMIT= 1;
7619 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7620 COMMIT WORK;
7621 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7622         
7623 # check special-1 success:      1
7624 UPDATE t1 SET f_charbig = '';
7625         
7626 # check special-2 success:      1
7627 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7628 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7629 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7630 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7631 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7632 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7633 'just inserted' FROM t0_template
7634 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7635 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7636 BEGIN
7637 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7638 f_charbig = 'updated by trigger'
7639       WHERE f_int1 = new.f_int1;
7640 END|
7641 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7642 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7643 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7644         
7645 # check trigger-1 success:      1
7646 DROP TRIGGER trg_1;
7647 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7648 f_int2 = CAST(f_char1 AS SIGNED INT),
7649 f_charbig = 'just inserted'
7650    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7651 DELETE FROM t0_aux
7652 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7653 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7654 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7655 'just inserted' FROM t0_template
7656 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7657 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7658 BEGIN
7659 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7660 f_charbig = 'updated by trigger'
7661       WHERE f_int1 = new.f_int1;
7662 END|
7663 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7664 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7665 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7666         
7667 # check trigger-2 success:      1
7668 DROP TRIGGER trg_1;
7669 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7670 f_int2 = CAST(f_char1 AS SIGNED INT),
7671 f_charbig = 'just inserted'
7672    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7673 DELETE FROM t0_aux
7674 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7675 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7676 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7677 'just inserted' FROM t0_template
7678 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7679 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7680 BEGIN
7681 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7682 f_charbig = 'updated by trigger'
7683       WHERE f_int1 = new.f_int1;
7684 END|
7685 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7686 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7687         
7688 # check trigger-3 success:      1
7689 DROP TRIGGER trg_1;
7690 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7691 f_int2 = CAST(f_char1 AS SIGNED INT),
7692 f_charbig = 'just inserted'
7693    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7694 DELETE FROM t0_aux
7695 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7696 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7697 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7698 'just inserted' FROM t0_template
7699 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7700 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7701 BEGIN
7702 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7703 f_charbig = 'updated by trigger'
7704       WHERE f_int1 = - old.f_int1;
7705 END|
7706 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7707 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7708         
7709 # check trigger-4 success:      1
7710 DROP TRIGGER trg_1;
7711 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7712 f_int2 = CAST(f_char1 AS SIGNED INT),
7713 f_charbig = 'just inserted'
7714    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7715 DELETE FROM t0_aux
7716 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7717 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7718 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7719 'just inserted' FROM t0_template
7720 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7721 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7722 BEGIN
7723 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7724 f_charbig = 'updated by trigger'
7725       WHERE f_int1 = new.f_int1;
7726 END|
7727 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7728 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7729         
7730 # check trigger-5 success:      1
7731 DROP TRIGGER trg_1;
7732 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7733 f_int2 = CAST(f_char1 AS SIGNED INT),
7734 f_charbig = 'just inserted'
7735    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7736 DELETE FROM t0_aux
7737 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7738 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7739 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7740 'just inserted' FROM t0_template
7741 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7742 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7743 BEGIN
7744 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7745 f_charbig = 'updated by trigger'
7746       WHERE f_int1 = - old.f_int1;
7747 END|
7748 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7749 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7750         
7751 # check trigger-6 success:      1
7752 DROP TRIGGER trg_1;
7753 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7754 f_int2 = CAST(f_char1 AS SIGNED INT),
7755 f_charbig = 'just inserted'
7756    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7757 DELETE FROM t0_aux
7758 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7759 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7760 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7761 'just inserted' FROM t0_template
7762 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7763 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7764 BEGIN
7765 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7766 f_charbig = 'updated by trigger'
7767       WHERE f_int1 = - old.f_int1;
7768 END|
7769 DELETE FROM t0_aux
7770 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7771         
7772 # check trigger-7 success:      1
7773 DROP TRIGGER trg_1;
7774 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7775 f_int2 = CAST(f_char1 AS SIGNED INT),
7776 f_charbig = 'just inserted'
7777    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7778 DELETE FROM t0_aux
7779 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7780 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7781 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7782 'just inserted' FROM t0_template
7783 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7784 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7785 BEGIN
7786 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7787 f_charbig = 'updated by trigger'
7788       WHERE f_int1 = - old.f_int1;
7789 END|
7790 DELETE FROM t0_aux
7791 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7792         
7793 # check trigger-8 success:      1
7794 DROP TRIGGER trg_1;
7795 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7796 f_int2 = CAST(f_char1 AS SIGNED INT),
7797 f_charbig = 'just inserted'
7798    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7799 DELETE FROM t0_aux
7800 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7801 DELETE FROM t1
7802 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7803 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7804 BEGIN
7805 SET new.f_int1 = old.f_int1 + @max_row,
7806 new.f_int2 = old.f_int2 - @max_row,
7807 new.f_charbig = '####updated per update trigger####';
7808 END|
7809 UPDATE t1
7810 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7811 f_charbig = '####updated per update statement itself####';
7812         
7813 # check trigger-9 success:      1
7814 DROP TRIGGER trg_2;
7815 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7816 f_int2 = CAST(f_char1 AS SIGNED INT),
7817 f_charbig = CONCAT('===',f_char1,'===');
7818 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7819 BEGIN
7820 SET new.f_int1 = new.f_int1 + @max_row,
7821 new.f_int2 = new.f_int2 - @max_row,
7822 new.f_charbig = '####updated per update trigger####';
7823 END|
7824 UPDATE t1
7825 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7826 f_charbig = '####updated per update statement itself####';
7827         
7828 # check trigger-10 success:     1
7829 DROP TRIGGER trg_2;
7830 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7831 f_int2 = CAST(f_char1 AS SIGNED INT),
7832 f_charbig = CONCAT('===',f_char1,'===');
7833 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7834 BEGIN
7835 SET new.f_int1 = @my_max1 + @counter,
7836 new.f_int2 = @my_min2 - @counter,
7837 new.f_charbig = '####updated per insert trigger####';
7838 SET @counter = @counter + 1;
7839 END|
7840 SET @counter = 1;
7841 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7842 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7843 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7844 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7845 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7846 ORDER BY f_int1;
7847 DROP TRIGGER trg_3;
7848         
7849 # check trigger-11 success:     1
7850 DELETE FROM t1
7851 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7852 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7853 AND f_charbig = '####updated per insert trigger####';
7854 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7855 BEGIN
7856 SET new.f_int1 = @my_max1 + @counter,
7857 new.f_int2 = @my_min2 - @counter,
7858 new.f_charbig = '####updated per insert trigger####';
7859 SET @counter = @counter + 1;
7860 END|
7861 SET @counter = 1;
7862 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7863 INSERT INTO t1 (f_char1, f_char2, f_charbig)
7864 SELECT CAST(f_int1 AS CHAR),
7865 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7866 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7867 ORDER BY f_int1;
7868 DROP TRIGGER trg_3;
7869         
7870 # check trigger-12 success:     1
7871 DELETE FROM t1
7872 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7873 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7874 AND f_charbig = '####updated per insert trigger####';
7875 ANALYZE  TABLE t1;
7876 Table   Op      Msg_type        Msg_text
7877 test.t1 analyze status  OK
7878 CHECK    TABLE t1 EXTENDED;
7879 Table   Op      Msg_type        Msg_text
7880 test.t1 check   status  OK
7881 CHECKSUM TABLE t1 EXTENDED;
7882 Table   Checksum
7883 test.t1 <some_value>
7884 OPTIMIZE TABLE t1;
7885 Table   Op      Msg_type        Msg_text
7886 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
7887 test.t1 optimize        status  OK
7888 # check layout success:    1
7889 REPAIR   TABLE t1 EXTENDED;
7890 Table   Op      Msg_type        Msg_text
7891 test.t1 repair  note    The storage engine for the table doesn't support repair
7892 # check layout success:    1
7893 TRUNCATE t1;
7894         
7895 # check TRUNCATE success:       1
7896 # check layout success:    1
7897 # End usability test (inc/partition_check.inc)
7898 DROP TABLE t1;
7899 CREATE TABLE t1 (
7900 f_int1 INTEGER,
7901 f_int2 INTEGER,
7902 f_char1 CHAR(20),
7903 f_char2 CHAR(20),
7904 f_charbig VARCHAR(1000)
7907 PARTITION BY LIST(ABS(MOD(f_int1,2)))
7908 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
7909 (PARTITION part1 VALUES IN (0),
7910 PARTITION part2 VALUES IN (1),
7911 PARTITION part3 VALUES IN (NULL));
7912 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7913 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7914 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7915 ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
7916 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7917 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7918 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7919 # Start usability test (inc/partition_check.inc)
7920 create_command
7921 SHOW CREATE TABLE t1;
7922 Table   Create Table
7923 t1      CREATE TABLE `t1` (
7924   `f_int1` int(11) NOT NULL DEFAULT '0',
7925   `f_int2` int(11) NOT NULL DEFAULT '0',
7926   `f_char1` char(20) DEFAULT NULL,
7927   `f_char2` char(20) DEFAULT NULL,
7928   `f_charbig` varchar(1000) DEFAULT NULL,
7929   PRIMARY KEY (`f_int2`,`f_int1`)
7930 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
7931 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
7932 SUBPARTITION BY KEY (f_int1)
7933 SUBPARTITIONS 3
7934 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
7935  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
7936  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
7938 # check prerequisites-1 success:    1
7939 # check COUNT(*) success:    1
7940 # check MIN/MAX(f_int1) success:    1
7941 # check MIN/MAX(f_int2) success:    1
7942 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7943 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7944 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7945 WHERE f_int1 IN (2,3);
7946 ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7947 # check prerequisites-3 success:    1
7948 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7949 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7950 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7951 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7952 WHERE f_int1 IN (2,3);
7953 DELETE FROM t1 WHERE f_charbig = 'delete me';
7954 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7955 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7956 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7957 WHERE f_int1 IN (2,3);
7958 DELETE FROM t1 WHERE f_charbig = 'delete me';
7959 # check read via f_int1 success: 1
7960 # check read via f_int2 success: 1
7961         
7962 # check multiple-1 success:     1
7963 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7964         
7965 # check multiple-2 success:     1
7966 INSERT INTO t1 SELECT * FROM t0_template
7967 WHERE MOD(f_int1,3) = 0;
7968         
7969 # check multiple-3 success:     1
7970 UPDATE t1 SET f_int1 = f_int1 + @max_row
7971 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7972 AND @max_row_div2 + @max_row_div4;
7973         
7974 # check multiple-4 success:     1
7975 DELETE FROM t1
7976 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7977 AND @max_row_div2 + @max_row_div4 + @max_row;
7978         
7979 # check multiple-5 success:     1
7980 SELECT COUNT(*) INTO @try_count FROM t0_template
7981 WHERE MOD(f_int1,3) = 0
7982 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7983 SELECT COUNT(*) INTO @clash_count
7984 FROM t1 INNER JOIN t0_template USING(f_int1)
7985 WHERE MOD(f_int1,3) = 0
7986 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7987 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7988 INSERT INTO t1
7989 SET f_int1 = @cur_value , f_int2 = @cur_value,
7990 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7991 f_charbig = '#SINGLE#';
7992         
7993 # check single-1 success:       1
7994 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7995 INSERT INTO t1
7996 SET f_int1 = @cur_value , f_int2 = @cur_value,
7997 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7998 f_charbig = '#SINGLE#';
7999         
8000 # check single-2 success:       1
8001 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8002 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8003 UPDATE t1 SET f_int1 = @cur_value2
8004 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8005         
8006 # check single-3 success:       1
8007 SET @cur_value1= -1;
8008 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8009 UPDATE t1 SET f_int1 = @cur_value1
8010 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8011         
8012 # check single-4 success:       1
8013 SELECT MAX(f_int1) INTO @cur_value FROM t1;
8014 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8015         
8016 # check single-5 success:       1
8017 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8018         
8019 # check single-6 success:       1
8020 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8021         
8022 # check single-7 success:       1
8023 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8024 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8025 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8026 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8027 f_charbig = '#NULL#';
8028 INSERT INTO t1
8029 SET f_int1 = NULL , f_int2 = -@max_row,
8030 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8031 f_charbig = '#NULL#';
8032 ERROR 23000: Column 'f_int1' cannot be null
8033 # check null success:    1
8034 DELETE FROM t1
8035 WHERE f_int1 = 0 AND f_int2 = 0
8036 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8037 AND f_charbig = '#NULL#';
8038 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8039 SELECT f_int1, f_int1, '', '', 'was inserted'
8040    FROM t0_template source_tab
8041 WHERE MOD(f_int1,3) = 0
8042 AND f_int1 BETWEEN @max_row_div2 AND @max_row
8043 ON DUPLICATE KEY
8044 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8045 f_int2 = 2 * @max_row + source_tab.f_int1,
8046 f_charbig = 'was updated';
8047         
8048 # check unique-1-a success:     1
8049         
8050 # check unique-1-b success:     1
8051 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8052 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8053 f_int2 = CAST(f_char1 AS SIGNED INT),
8054 f_charbig = CONCAT('===',f_char1,'===')
8055 WHERE f_charbig = 'was updated';
8056 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8057 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8058    FROM t0_template source_tab
8059 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8060         
8061 # check replace success:        1
8062 DELETE FROM t1
8063 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8064 DELETE FROM t1
8065 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8066 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8067 UPDATE t1 SET f_int2 = f_int1,
8068 f_char1 = CAST(f_int1 AS CHAR),
8069 f_char2 = CAST(f_int1 AS CHAR),
8070 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8071 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8072 SET AUTOCOMMIT= 0;
8073 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8074 SELECT f_int1, f_int1, '', '', 'was inserted'
8075 FROM t0_template source_tab
8076 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8077         
8078 # check transactions-1 success:         1
8079 COMMIT WORK;
8080         
8081 # check transactions-2 success:         1
8082 ROLLBACK WORK;
8083         
8084 # check transactions-3 success:         1
8085 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8086 COMMIT WORK;
8087 ROLLBACK WORK;
8088         
8089 # check transactions-4 success:         1
8090 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8091 SELECT f_int1, f_int1, '', '', 'was inserted'
8092 FROM t0_template source_tab
8093 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8094         
8095 # check transactions-5 success:         1
8096 ROLLBACK WORK;
8097         
8098 # check transactions-6 success:         1
8099 # INFO: Storage engine used for t1 seems to be transactional.
8100 COMMIT;
8101         
8102 # check transactions-7 success:         1
8103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8104 COMMIT WORK;
8105 SET @@session.sql_mode = 'traditional';
8106 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8107 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8108 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8109 '', '', 'was inserted' FROM t0_template
8110 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8111 ERROR 22012: Division by 0
8112 COMMIT;
8113         
8114 # check transactions-8 success:         1
8115 # INFO: Storage engine used for t1 seems to be able to revert
8116 #       changes made by the failing statement.
8117 SET @@session.sql_mode = '';
8118 SET AUTOCOMMIT= 1;
8119 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8120 COMMIT WORK;
8121 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8122         
8123 # check special-1 success:      1
8124 UPDATE t1 SET f_charbig = '';
8125         
8126 # check special-2 success:      1
8127 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8128 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8129 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8130 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8131 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8132 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8133 'just inserted' FROM t0_template
8134 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8135 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8136 BEGIN
8137 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8138 f_charbig = 'updated by trigger'
8139       WHERE f_int1 = new.f_int1;
8140 END|
8141 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8142 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8143 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8144         
8145 # check trigger-1 success:      1
8146 DROP TRIGGER trg_1;
8147 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8148 f_int2 = CAST(f_char1 AS SIGNED INT),
8149 f_charbig = 'just inserted'
8150    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8151 DELETE FROM t0_aux
8152 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8153 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8154 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8155 'just inserted' FROM t0_template
8156 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8157 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8158 BEGIN
8159 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8160 f_charbig = 'updated by trigger'
8161       WHERE f_int1 = new.f_int1;
8162 END|
8163 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8164 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8165 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8166         
8167 # check trigger-2 success:      1
8168 DROP TRIGGER trg_1;
8169 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8170 f_int2 = CAST(f_char1 AS SIGNED INT),
8171 f_charbig = 'just inserted'
8172    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8173 DELETE FROM t0_aux
8174 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8175 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8176 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8177 'just inserted' FROM t0_template
8178 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8179 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8180 BEGIN
8181 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8182 f_charbig = 'updated by trigger'
8183       WHERE f_int1 = new.f_int1;
8184 END|
8185 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8186 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8187         
8188 # check trigger-3 success:      1
8189 DROP TRIGGER trg_1;
8190 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8191 f_int2 = CAST(f_char1 AS SIGNED INT),
8192 f_charbig = 'just inserted'
8193    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8194 DELETE FROM t0_aux
8195 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8196 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8197 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8198 'just inserted' FROM t0_template
8199 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8200 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8201 BEGIN
8202 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8203 f_charbig = 'updated by trigger'
8204       WHERE f_int1 = - old.f_int1;
8205 END|
8206 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8207 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8208         
8209 # check trigger-4 success:      1
8210 DROP TRIGGER trg_1;
8211 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8212 f_int2 = CAST(f_char1 AS SIGNED INT),
8213 f_charbig = 'just inserted'
8214    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8215 DELETE FROM t0_aux
8216 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8217 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8218 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8219 'just inserted' FROM t0_template
8220 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8221 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8222 BEGIN
8223 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8224 f_charbig = 'updated by trigger'
8225       WHERE f_int1 = new.f_int1;
8226 END|
8227 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8228 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8229         
8230 # check trigger-5 success:      1
8231 DROP TRIGGER trg_1;
8232 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8233 f_int2 = CAST(f_char1 AS SIGNED INT),
8234 f_charbig = 'just inserted'
8235    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8236 DELETE FROM t0_aux
8237 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8238 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8239 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8240 'just inserted' FROM t0_template
8241 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8242 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8243 BEGIN
8244 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8245 f_charbig = 'updated by trigger'
8246       WHERE f_int1 = - old.f_int1;
8247 END|
8248 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8249 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8250         
8251 # check trigger-6 success:      1
8252 DROP TRIGGER trg_1;
8253 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8254 f_int2 = CAST(f_char1 AS SIGNED INT),
8255 f_charbig = 'just inserted'
8256    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8257 DELETE FROM t0_aux
8258 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8259 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8260 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8261 'just inserted' FROM t0_template
8262 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8263 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8264 BEGIN
8265 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8266 f_charbig = 'updated by trigger'
8267       WHERE f_int1 = - old.f_int1;
8268 END|
8269 DELETE FROM t0_aux
8270 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8271         
8272 # check trigger-7 success:      1
8273 DROP TRIGGER trg_1;
8274 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8275 f_int2 = CAST(f_char1 AS SIGNED INT),
8276 f_charbig = 'just inserted'
8277    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8278 DELETE FROM t0_aux
8279 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8280 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8281 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8282 'just inserted' FROM t0_template
8283 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8284 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8285 BEGIN
8286 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8287 f_charbig = 'updated by trigger'
8288       WHERE f_int1 = - old.f_int1;
8289 END|
8290 DELETE FROM t0_aux
8291 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8292         
8293 # check trigger-8 success:      1
8294 DROP TRIGGER trg_1;
8295 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8296 f_int2 = CAST(f_char1 AS SIGNED INT),
8297 f_charbig = 'just inserted'
8298    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8299 DELETE FROM t0_aux
8300 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8301 DELETE FROM t1
8302 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8303 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8304 BEGIN
8305 SET new.f_int1 = old.f_int1 + @max_row,
8306 new.f_int2 = old.f_int2 - @max_row,
8307 new.f_charbig = '####updated per update trigger####';
8308 END|
8309 UPDATE t1
8310 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8311 f_charbig = '####updated per update statement itself####';
8312         
8313 # check trigger-9 success:      1
8314 DROP TRIGGER trg_2;
8315 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8316 f_int2 = CAST(f_char1 AS SIGNED INT),
8317 f_charbig = CONCAT('===',f_char1,'===');
8318 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8319 BEGIN
8320 SET new.f_int1 = new.f_int1 + @max_row,
8321 new.f_int2 = new.f_int2 - @max_row,
8322 new.f_charbig = '####updated per update trigger####';
8323 END|
8324 UPDATE t1
8325 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8326 f_charbig = '####updated per update statement itself####';
8327         
8328 # check trigger-10 success:     1
8329 DROP TRIGGER trg_2;
8330 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8331 f_int2 = CAST(f_char1 AS SIGNED INT),
8332 f_charbig = CONCAT('===',f_char1,'===');
8333 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8334 BEGIN
8335 SET new.f_int1 = @my_max1 + @counter,
8336 new.f_int2 = @my_min2 - @counter,
8337 new.f_charbig = '####updated per insert trigger####';
8338 SET @counter = @counter + 1;
8339 END|
8340 SET @counter = 1;
8341 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8342 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8343 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8344 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8345 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8346 ORDER BY f_int1;
8347 DROP TRIGGER trg_3;
8348         
8349 # check trigger-11 success:     1
8350 DELETE FROM t1
8351 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8352 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8353 AND f_charbig = '####updated per insert trigger####';
8354 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8355 BEGIN
8356 SET new.f_int1 = @my_max1 + @counter,
8357 new.f_int2 = @my_min2 - @counter,
8358 new.f_charbig = '####updated per insert trigger####';
8359 SET @counter = @counter + 1;
8360 END|
8361 SET @counter = 1;
8362 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8363 INSERT INTO t1 (f_char1, f_char2, f_charbig)
8364 SELECT CAST(f_int1 AS CHAR),
8365 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8366 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8367 ORDER BY f_int1;
8368 DROP TRIGGER trg_3;
8369         
8370 # check trigger-12 success:     1
8371 DELETE FROM t1
8372 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8373 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8374 AND f_charbig = '####updated per insert trigger####';
8375 ANALYZE  TABLE t1;
8376 Table   Op      Msg_type        Msg_text
8377 test.t1 analyze status  OK
8378 CHECK    TABLE t1 EXTENDED;
8379 Table   Op      Msg_type        Msg_text
8380 test.t1 check   status  OK
8381 CHECKSUM TABLE t1 EXTENDED;
8382 Table   Checksum
8383 test.t1 <some_value>
8384 OPTIMIZE TABLE t1;
8385 Table   Op      Msg_type        Msg_text
8386 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8387 test.t1 optimize        status  OK
8388 # check layout success:    1
8389 REPAIR   TABLE t1 EXTENDED;
8390 Table   Op      Msg_type        Msg_text
8391 test.t1 repair  note    The storage engine for the table doesn't support repair
8392 # check layout success:    1
8393 TRUNCATE t1;
8394         
8395 # check TRUNCATE success:       1
8396 # check layout success:    1
8397 # End usability test (inc/partition_check.inc)
8398 DROP TABLE t1;
8399 #  1.1.4 UNIQUE INDEX consisting of two columns
8400 DROP TABLE IF EXISTS t1;
8401 CREATE TABLE t1 (
8402 f_int1 INTEGER,
8403 f_int2 INTEGER,
8404 f_char1 CHAR(20),
8405 f_char2 CHAR(20),
8406 f_charbig VARCHAR(1000)
8409 PARTITION BY HASH(f_int1) PARTITIONS 2;
8410 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8411 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8412 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8413 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
8414 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8415 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8416 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8417 # Start usability test (inc/partition_check.inc)
8418 create_command
8419 SHOW CREATE TABLE t1;
8420 Table   Create Table
8421 t1      CREATE TABLE `t1` (
8422   `f_int1` int(11) DEFAULT NULL,
8423   `f_int2` int(11) DEFAULT NULL,
8424   `f_char1` char(20) DEFAULT NULL,
8425   `f_char2` char(20) DEFAULT NULL,
8426   `f_charbig` varchar(1000) DEFAULT NULL,
8427   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8428 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
8429 /*!50100 PARTITION BY HASH (f_int1)
8430 PARTITIONS 2 */
8432 # check prerequisites-1 success:    1
8433 # check COUNT(*) success:    1
8434 # check MIN/MAX(f_int1) success:    1
8435 # check MIN/MAX(f_int2) success:    1
8436 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8437 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8438 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8439 WHERE f_int1 IN (2,3);
8440 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
8441 # check prerequisites-3 success:    1
8442 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8443 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8444 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8445 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8446 WHERE f_int1 IN (2,3);
8447 DELETE FROM t1 WHERE f_charbig = 'delete me';
8448 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8449 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8450 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8451 WHERE f_int1 IN (2,3);
8452 DELETE FROM t1 WHERE f_charbig = 'delete me';
8453 # check read via f_int1 success: 1
8454 # check read via f_int2 success: 1
8455         
8456 # check multiple-1 success:     1
8457 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8458         
8459 # check multiple-2 success:     1
8460 INSERT INTO t1 SELECT * FROM t0_template
8461 WHERE MOD(f_int1,3) = 0;
8462         
8463 # check multiple-3 success:     1
8464 UPDATE t1 SET f_int1 = f_int1 + @max_row
8465 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8466 AND @max_row_div2 + @max_row_div4;
8467         
8468 # check multiple-4 success:     1
8469 DELETE FROM t1
8470 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8471 AND @max_row_div2 + @max_row_div4 + @max_row;
8472         
8473 # check multiple-5 success:     1
8474 SELECT COUNT(*) INTO @try_count FROM t0_template
8475 WHERE MOD(f_int1,3) = 0
8476 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8477 SELECT COUNT(*) INTO @clash_count
8478 FROM t1 INNER JOIN t0_template USING(f_int1)
8479 WHERE MOD(f_int1,3) = 0
8480 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8481 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8482 INSERT INTO t1
8483 SET f_int1 = @cur_value , f_int2 = @cur_value,
8484 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8485 f_charbig = '#SINGLE#';
8486         
8487 # check single-1 success:       1
8488 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8489 INSERT INTO t1
8490 SET f_int1 = @cur_value , f_int2 = @cur_value,
8491 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8492 f_charbig = '#SINGLE#';
8493         
8494 # check single-2 success:       1
8495 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8496 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8497 UPDATE t1 SET f_int1 = @cur_value2
8498 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8499         
8500 # check single-3 success:       1
8501 SET @cur_value1= -1;
8502 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8503 UPDATE t1 SET f_int1 = @cur_value1
8504 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8505         
8506 # check single-4 success:       1
8507 SELECT MAX(f_int1) INTO @cur_value FROM t1;
8508 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8509         
8510 # check single-5 success:       1
8511 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8512         
8513 # check single-6 success:       1
8514 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8515         
8516 # check single-7 success:       1
8517 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8518 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8519 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8520 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8521 f_charbig = '#NULL#';
8522 INSERT INTO t1
8523 SET f_int1 = NULL , f_int2 = -@max_row,
8524 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8525 f_charbig = '#NULL#';
8526 # check null success:    1
8527         
8528 # check null-1 success:         1
8529 UPDATE t1 SET f_int1 = -@max_row
8530 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8531 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8532         
8533 # check null-2 success:         1
8534 UPDATE t1 SET f_int1 = NULL
8535 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8536 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8537         
8538 # check null-3 success:         1
8539 DELETE FROM t1
8540 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8541 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8542         
8543 # check null-4 success:         1
8544 DELETE FROM t1
8545 WHERE f_int1 = 0 AND f_int2 = 0
8546 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8547 AND f_charbig = '#NULL#';
8548 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8549 SELECT f_int1, f_int1, '', '', 'was inserted'
8550    FROM t0_template source_tab
8551 WHERE MOD(f_int1,3) = 0
8552 AND f_int1 BETWEEN @max_row_div2 AND @max_row
8553 ON DUPLICATE KEY
8554 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8555 f_int2 = 2 * @max_row + source_tab.f_int1,
8556 f_charbig = 'was updated';
8557         
8558 # check unique-1-a success:     1
8559         
8560 # check unique-1-b success:     1
8561 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8562 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8563 f_int2 = CAST(f_char1 AS SIGNED INT),
8564 f_charbig = CONCAT('===',f_char1,'===')
8565 WHERE f_charbig = 'was updated';
8566 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8567 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8568    FROM t0_template source_tab
8569 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8570         
8571 # check replace success:        1
8572 DELETE FROM t1
8573 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8574 DELETE FROM t1
8575 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8576 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8577 UPDATE t1 SET f_int2 = f_int1,
8578 f_char1 = CAST(f_int1 AS CHAR),
8579 f_char2 = CAST(f_int1 AS CHAR),
8580 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8581 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8582 SET AUTOCOMMIT= 0;
8583 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8584 SELECT f_int1, f_int1, '', '', 'was inserted'
8585 FROM t0_template source_tab
8586 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8587         
8588 # check transactions-1 success:         1
8589 COMMIT WORK;
8590         
8591 # check transactions-2 success:         1
8592 ROLLBACK WORK;
8593         
8594 # check transactions-3 success:         1
8595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8596 COMMIT WORK;
8597 ROLLBACK WORK;
8598         
8599 # check transactions-4 success:         1
8600 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8601 SELECT f_int1, f_int1, '', '', 'was inserted'
8602 FROM t0_template source_tab
8603 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8604         
8605 # check transactions-5 success:         1
8606 ROLLBACK WORK;
8607         
8608 # check transactions-6 success:         1
8609 # INFO: Storage engine used for t1 seems to be transactional.
8610 COMMIT;
8611         
8612 # check transactions-7 success:         1
8613 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8614 COMMIT WORK;
8615 SET @@session.sql_mode = 'traditional';
8616 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8617 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8618 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8619 '', '', 'was inserted' FROM t0_template
8620 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8621 ERROR 22012: Division by 0
8622 COMMIT;
8623         
8624 # check transactions-8 success:         1
8625 # INFO: Storage engine used for t1 seems to be able to revert
8626 #       changes made by the failing statement.
8627 SET @@session.sql_mode = '';
8628 SET AUTOCOMMIT= 1;
8629 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8630 COMMIT WORK;
8631 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8632         
8633 # check special-1 success:      1
8634 UPDATE t1 SET f_charbig = '';
8635         
8636 # check special-2 success:      1
8637 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8638 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8639 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8640 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8641 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8642 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8643 'just inserted' FROM t0_template
8644 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8645 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8646 BEGIN
8647 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8648 f_charbig = 'updated by trigger'
8649       WHERE f_int1 = new.f_int1;
8650 END|
8651 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8652 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8653 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8654         
8655 # check trigger-1 success:      1
8656 DROP TRIGGER trg_1;
8657 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8658 f_int2 = CAST(f_char1 AS SIGNED INT),
8659 f_charbig = 'just inserted'
8660    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8661 DELETE FROM t0_aux
8662 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8663 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8664 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8665 'just inserted' FROM t0_template
8666 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8667 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8668 BEGIN
8669 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8670 f_charbig = 'updated by trigger'
8671       WHERE f_int1 = new.f_int1;
8672 END|
8673 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8674 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8676         
8677 # check trigger-2 success:      1
8678 DROP TRIGGER trg_1;
8679 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8680 f_int2 = CAST(f_char1 AS SIGNED INT),
8681 f_charbig = 'just inserted'
8682    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8683 DELETE FROM t0_aux
8684 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8685 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8686 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8687 'just inserted' FROM t0_template
8688 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8689 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8690 BEGIN
8691 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8692 f_charbig = 'updated by trigger'
8693       WHERE f_int1 = new.f_int1;
8694 END|
8695 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8696 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8697         
8698 # check trigger-3 success:      1
8699 DROP TRIGGER trg_1;
8700 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8701 f_int2 = CAST(f_char1 AS SIGNED INT),
8702 f_charbig = 'just inserted'
8703    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8704 DELETE FROM t0_aux
8705 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8706 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8707 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8708 'just inserted' FROM t0_template
8709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8710 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8711 BEGIN
8712 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8713 f_charbig = 'updated by trigger'
8714       WHERE f_int1 = - old.f_int1;
8715 END|
8716 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8717 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8718         
8719 # check trigger-4 success:      1
8720 DROP TRIGGER trg_1;
8721 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8722 f_int2 = CAST(f_char1 AS SIGNED INT),
8723 f_charbig = 'just inserted'
8724    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8725 DELETE FROM t0_aux
8726 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8727 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8728 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8729 'just inserted' FROM t0_template
8730 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8731 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8732 BEGIN
8733 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8734 f_charbig = 'updated by trigger'
8735       WHERE f_int1 = new.f_int1;
8736 END|
8737 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8738 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8739         
8740 # check trigger-5 success:      1
8741 DROP TRIGGER trg_1;
8742 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8743 f_int2 = CAST(f_char1 AS SIGNED INT),
8744 f_charbig = 'just inserted'
8745    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8746 DELETE FROM t0_aux
8747 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8748 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8749 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8750 'just inserted' FROM t0_template
8751 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8752 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8753 BEGIN
8754 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8755 f_charbig = 'updated by trigger'
8756       WHERE f_int1 = - old.f_int1;
8757 END|
8758 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8759 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8760         
8761 # check trigger-6 success:      1
8762 DROP TRIGGER trg_1;
8763 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8764 f_int2 = CAST(f_char1 AS SIGNED INT),
8765 f_charbig = 'just inserted'
8766    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8767 DELETE FROM t0_aux
8768 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8769 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8770 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8771 'just inserted' FROM t0_template
8772 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8773 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8774 BEGIN
8775 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8776 f_charbig = 'updated by trigger'
8777       WHERE f_int1 = - old.f_int1;
8778 END|
8779 DELETE FROM t0_aux
8780 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8781         
8782 # check trigger-7 success:      1
8783 DROP TRIGGER trg_1;
8784 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8785 f_int2 = CAST(f_char1 AS SIGNED INT),
8786 f_charbig = 'just inserted'
8787    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8788 DELETE FROM t0_aux
8789 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8790 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8791 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8792 'just inserted' FROM t0_template
8793 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8794 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8795 BEGIN
8796 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8797 f_charbig = 'updated by trigger'
8798       WHERE f_int1 = - old.f_int1;
8799 END|
8800 DELETE FROM t0_aux
8801 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8802         
8803 # check trigger-8 success:      1
8804 DROP TRIGGER trg_1;
8805 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8806 f_int2 = CAST(f_char1 AS SIGNED INT),
8807 f_charbig = 'just inserted'
8808    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8809 DELETE FROM t0_aux
8810 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8811 DELETE FROM t1
8812 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8813 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8814 BEGIN
8815 SET new.f_int1 = old.f_int1 + @max_row,
8816 new.f_int2 = old.f_int2 - @max_row,
8817 new.f_charbig = '####updated per update trigger####';
8818 END|
8819 UPDATE t1
8820 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8821 f_charbig = '####updated per update statement itself####';
8822         
8823 # check trigger-9 success:      1
8824 DROP TRIGGER trg_2;
8825 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8826 f_int2 = CAST(f_char1 AS SIGNED INT),
8827 f_charbig = CONCAT('===',f_char1,'===');
8828 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8829 BEGIN
8830 SET new.f_int1 = new.f_int1 + @max_row,
8831 new.f_int2 = new.f_int2 - @max_row,
8832 new.f_charbig = '####updated per update trigger####';
8833 END|
8834 UPDATE t1
8835 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8836 f_charbig = '####updated per update statement itself####';
8837         
8838 # check trigger-10 success:     1
8839 DROP TRIGGER trg_2;
8840 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8841 f_int2 = CAST(f_char1 AS SIGNED INT),
8842 f_charbig = CONCAT('===',f_char1,'===');
8843 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8844 BEGIN
8845 SET new.f_int1 = @my_max1 + @counter,
8846 new.f_int2 = @my_min2 - @counter,
8847 new.f_charbig = '####updated per insert trigger####';
8848 SET @counter = @counter + 1;
8849 END|
8850 SET @counter = 1;
8851 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8852 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8853 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8854 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8855 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8856 ORDER BY f_int1;
8857 DROP TRIGGER trg_3;
8858         
8859 # check trigger-11 success:     1
8860 DELETE FROM t1
8861 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8862 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8863 AND f_charbig = '####updated per insert trigger####';
8864 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8865 BEGIN
8866 SET new.f_int1 = @my_max1 + @counter,
8867 new.f_int2 = @my_min2 - @counter,
8868 new.f_charbig = '####updated per insert trigger####';
8869 SET @counter = @counter + 1;
8870 END|
8871 SET @counter = 1;
8872 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8873 INSERT INTO t1 (f_char1, f_char2, f_charbig)
8874 SELECT CAST(f_int1 AS CHAR),
8875 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8876 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8877 ORDER BY f_int1;
8878 DROP TRIGGER trg_3;
8879         
8880 # check trigger-12 success:     1
8881 DELETE FROM t1
8882 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8883 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8884 AND f_charbig = '####updated per insert trigger####';
8885 ANALYZE  TABLE t1;
8886 Table   Op      Msg_type        Msg_text
8887 test.t1 analyze status  OK
8888 CHECK    TABLE t1 EXTENDED;
8889 Table   Op      Msg_type        Msg_text
8890 test.t1 check   status  OK
8891 CHECKSUM TABLE t1 EXTENDED;
8892 Table   Checksum
8893 test.t1 <some_value>
8894 OPTIMIZE TABLE t1;
8895 Table   Op      Msg_type        Msg_text
8896 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
8897 test.t1 optimize        status  OK
8898 # check layout success:    1
8899 REPAIR   TABLE t1 EXTENDED;
8900 Table   Op      Msg_type        Msg_text
8901 test.t1 repair  note    The storage engine for the table doesn't support repair
8902 # check layout success:    1
8903 TRUNCATE t1;
8904         
8905 # check TRUNCATE success:       1
8906 # check layout success:    1
8907 # End usability test (inc/partition_check.inc)
8908 DROP TABLE t1;
8909 CREATE TABLE t1 (
8910 f_int1 INTEGER,
8911 f_int2 INTEGER,
8912 f_char1 CHAR(20),
8913 f_char2 CHAR(20),
8914 f_charbig VARCHAR(1000)
8917 PARTITION BY KEY(f_int1) PARTITIONS 5;
8918 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8919 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8920 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8921 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
8922 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8923 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8924 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8925 # Start usability test (inc/partition_check.inc)
8926 create_command
8927 SHOW CREATE TABLE t1;
8928 Table   Create Table
8929 t1      CREATE TABLE `t1` (
8930   `f_int1` int(11) DEFAULT NULL,
8931   `f_int2` int(11) DEFAULT NULL,
8932   `f_char1` char(20) DEFAULT NULL,
8933   `f_char2` char(20) DEFAULT NULL,
8934   `f_charbig` varchar(1000) DEFAULT NULL,
8935   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8936 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
8937 /*!50100 PARTITION BY KEY (f_int1)
8938 PARTITIONS 5 */
8940 # check prerequisites-1 success:    1
8941 # check COUNT(*) success:    1
8942 # check MIN/MAX(f_int1) success:    1
8943 # check MIN/MAX(f_int2) success:    1
8944 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8945 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8946 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8947 WHERE f_int1 IN (2,3);
8948 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
8949 # check prerequisites-3 success:    1
8950 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8951 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8952 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8953 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8954 WHERE f_int1 IN (2,3);
8955 DELETE FROM t1 WHERE f_charbig = 'delete me';
8956 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8957 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8958 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8959 WHERE f_int1 IN (2,3);
8960 DELETE FROM t1 WHERE f_charbig = 'delete me';
8961 # check read via f_int1 success: 1
8962 # check read via f_int2 success: 1
8963         
8964 # check multiple-1 success:     1
8965 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8966         
8967 # check multiple-2 success:     1
8968 INSERT INTO t1 SELECT * FROM t0_template
8969 WHERE MOD(f_int1,3) = 0;
8970         
8971 # check multiple-3 success:     1
8972 UPDATE t1 SET f_int1 = f_int1 + @max_row
8973 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8974 AND @max_row_div2 + @max_row_div4;
8975         
8976 # check multiple-4 success:     1
8977 DELETE FROM t1
8978 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8979 AND @max_row_div2 + @max_row_div4 + @max_row;
8980         
8981 # check multiple-5 success:     1
8982 SELECT COUNT(*) INTO @try_count FROM t0_template
8983 WHERE MOD(f_int1,3) = 0
8984 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8985 SELECT COUNT(*) INTO @clash_count
8986 FROM t1 INNER JOIN t0_template USING(f_int1)
8987 WHERE MOD(f_int1,3) = 0
8988 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8989 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8990 INSERT INTO t1
8991 SET f_int1 = @cur_value , f_int2 = @cur_value,
8992 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8993 f_charbig = '#SINGLE#';
8994         
8995 # check single-1 success:       1
8996 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8997 INSERT INTO t1
8998 SET f_int1 = @cur_value , f_int2 = @cur_value,
8999 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9000 f_charbig = '#SINGLE#';
9001         
9002 # check single-2 success:       1
9003 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9004 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9005 UPDATE t1 SET f_int1 = @cur_value2
9006 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9007         
9008 # check single-3 success:       1
9009 SET @cur_value1= -1;
9010 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9011 UPDATE t1 SET f_int1 = @cur_value1
9012 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9013         
9014 # check single-4 success:       1
9015 SELECT MAX(f_int1) INTO @cur_value FROM t1;
9016 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9017         
9018 # check single-5 success:       1
9019 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9020         
9021 # check single-6 success:       1
9022 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9023         
9024 # check single-7 success:       1
9025 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9026 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9027 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9028 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9029 f_charbig = '#NULL#';
9030 INSERT INTO t1
9031 SET f_int1 = NULL , f_int2 = -@max_row,
9032 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9033 f_charbig = '#NULL#';
9034 # check null success:    1
9035         
9036 # check null-1 success:         1
9037 UPDATE t1 SET f_int1 = -@max_row
9038 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9039 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9040         
9041 # check null-2 success:         1
9042 UPDATE t1 SET f_int1 = NULL
9043 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9044 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9045         
9046 # check null-3 success:         1
9047 DELETE FROM t1
9048 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9049 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9050         
9051 # check null-4 success:         1
9052 DELETE FROM t1
9053 WHERE f_int1 = 0 AND f_int2 = 0
9054 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9055 AND f_charbig = '#NULL#';
9056 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9057 SELECT f_int1, f_int1, '', '', 'was inserted'
9058    FROM t0_template source_tab
9059 WHERE MOD(f_int1,3) = 0
9060 AND f_int1 BETWEEN @max_row_div2 AND @max_row
9061 ON DUPLICATE KEY
9062 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9063 f_int2 = 2 * @max_row + source_tab.f_int1,
9064 f_charbig = 'was updated';
9065         
9066 # check unique-1-a success:     1
9067         
9068 # check unique-1-b success:     1
9069 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9070 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9071 f_int2 = CAST(f_char1 AS SIGNED INT),
9072 f_charbig = CONCAT('===',f_char1,'===')
9073 WHERE f_charbig = 'was updated';
9074 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9075 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9076    FROM t0_template source_tab
9077 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9078         
9079 # check replace success:        1
9080 DELETE FROM t1
9081 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9082 DELETE FROM t1
9083 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9084 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9085 UPDATE t1 SET f_int2 = f_int1,
9086 f_char1 = CAST(f_int1 AS CHAR),
9087 f_char2 = CAST(f_int1 AS CHAR),
9088 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9089 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9090 SET AUTOCOMMIT= 0;
9091 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9092 SELECT f_int1, f_int1, '', '', 'was inserted'
9093 FROM t0_template source_tab
9094 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9095         
9096 # check transactions-1 success:         1
9097 COMMIT WORK;
9098         
9099 # check transactions-2 success:         1
9100 ROLLBACK WORK;
9101         
9102 # check transactions-3 success:         1
9103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9104 COMMIT WORK;
9105 ROLLBACK WORK;
9106         
9107 # check transactions-4 success:         1
9108 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9109 SELECT f_int1, f_int1, '', '', 'was inserted'
9110 FROM t0_template source_tab
9111 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9112         
9113 # check transactions-5 success:         1
9114 ROLLBACK WORK;
9115         
9116 # check transactions-6 success:         1
9117 # INFO: Storage engine used for t1 seems to be transactional.
9118 COMMIT;
9119         
9120 # check transactions-7 success:         1
9121 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9122 COMMIT WORK;
9123 SET @@session.sql_mode = 'traditional';
9124 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9125 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9126 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9127 '', '', 'was inserted' FROM t0_template
9128 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9129 ERROR 22012: Division by 0
9130 COMMIT;
9131         
9132 # check transactions-8 success:         1
9133 # INFO: Storage engine used for t1 seems to be able to revert
9134 #       changes made by the failing statement.
9135 SET @@session.sql_mode = '';
9136 SET AUTOCOMMIT= 1;
9137 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9138 COMMIT WORK;
9139 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9140         
9141 # check special-1 success:      1
9142 UPDATE t1 SET f_charbig = '';
9143         
9144 # check special-2 success:      1
9145 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9146 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9147 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9148 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9149 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9150 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9151 'just inserted' FROM t0_template
9152 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9153 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9154 BEGIN
9155 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9156 f_charbig = 'updated by trigger'
9157       WHERE f_int1 = new.f_int1;
9158 END|
9159 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9160 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9161 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9162         
9163 # check trigger-1 success:      1
9164 DROP TRIGGER trg_1;
9165 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9166 f_int2 = CAST(f_char1 AS SIGNED INT),
9167 f_charbig = 'just inserted'
9168    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9169 DELETE FROM t0_aux
9170 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9171 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9172 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9173 'just inserted' FROM t0_template
9174 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9175 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9176 BEGIN
9177 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9178 f_charbig = 'updated by trigger'
9179       WHERE f_int1 = new.f_int1;
9180 END|
9181 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9182 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9183 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9184         
9185 # check trigger-2 success:      1
9186 DROP TRIGGER trg_1;
9187 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9188 f_int2 = CAST(f_char1 AS SIGNED INT),
9189 f_charbig = 'just inserted'
9190    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9191 DELETE FROM t0_aux
9192 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9193 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9194 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9195 'just inserted' FROM t0_template
9196 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9197 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9198 BEGIN
9199 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9200 f_charbig = 'updated by trigger'
9201       WHERE f_int1 = new.f_int1;
9202 END|
9203 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9204 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9205         
9206 # check trigger-3 success:      1
9207 DROP TRIGGER trg_1;
9208 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9209 f_int2 = CAST(f_char1 AS SIGNED INT),
9210 f_charbig = 'just inserted'
9211    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9212 DELETE FROM t0_aux
9213 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9214 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9215 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9216 'just inserted' FROM t0_template
9217 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9218 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9219 BEGIN
9220 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9221 f_charbig = 'updated by trigger'
9222       WHERE f_int1 = - old.f_int1;
9223 END|
9224 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9225 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9226         
9227 # check trigger-4 success:      1
9228 DROP TRIGGER trg_1;
9229 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9230 f_int2 = CAST(f_char1 AS SIGNED INT),
9231 f_charbig = 'just inserted'
9232    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9233 DELETE FROM t0_aux
9234 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9235 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9236 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9237 'just inserted' FROM t0_template
9238 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9239 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9240 BEGIN
9241 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9242 f_charbig = 'updated by trigger'
9243       WHERE f_int1 = new.f_int1;
9244 END|
9245 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9246 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9247         
9248 # check trigger-5 success:      1
9249 DROP TRIGGER trg_1;
9250 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9251 f_int2 = CAST(f_char1 AS SIGNED INT),
9252 f_charbig = 'just inserted'
9253    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9254 DELETE FROM t0_aux
9255 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9256 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9257 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9258 'just inserted' FROM t0_template
9259 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9260 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9261 BEGIN
9262 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9263 f_charbig = 'updated by trigger'
9264       WHERE f_int1 = - old.f_int1;
9265 END|
9266 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9267 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9268         
9269 # check trigger-6 success:      1
9270 DROP TRIGGER trg_1;
9271 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9272 f_int2 = CAST(f_char1 AS SIGNED INT),
9273 f_charbig = 'just inserted'
9274    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9275 DELETE FROM t0_aux
9276 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9277 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9278 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9279 'just inserted' FROM t0_template
9280 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9281 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9282 BEGIN
9283 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9284 f_charbig = 'updated by trigger'
9285       WHERE f_int1 = - old.f_int1;
9286 END|
9287 DELETE FROM t0_aux
9288 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9289         
9290 # check trigger-7 success:      1
9291 DROP TRIGGER trg_1;
9292 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9293 f_int2 = CAST(f_char1 AS SIGNED INT),
9294 f_charbig = 'just inserted'
9295    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9296 DELETE FROM t0_aux
9297 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9298 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9299 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9300 'just inserted' FROM t0_template
9301 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9302 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9303 BEGIN
9304 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9305 f_charbig = 'updated by trigger'
9306       WHERE f_int1 = - old.f_int1;
9307 END|
9308 DELETE FROM t0_aux
9309 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9310         
9311 # check trigger-8 success:      1
9312 DROP TRIGGER trg_1;
9313 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9314 f_int2 = CAST(f_char1 AS SIGNED INT),
9315 f_charbig = 'just inserted'
9316    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9317 DELETE FROM t0_aux
9318 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9319 DELETE FROM t1
9320 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9321 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9322 BEGIN
9323 SET new.f_int1 = old.f_int1 + @max_row,
9324 new.f_int2 = old.f_int2 - @max_row,
9325 new.f_charbig = '####updated per update trigger####';
9326 END|
9327 UPDATE t1
9328 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9329 f_charbig = '####updated per update statement itself####';
9330         
9331 # check trigger-9 success:      1
9332 DROP TRIGGER trg_2;
9333 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9334 f_int2 = CAST(f_char1 AS SIGNED INT),
9335 f_charbig = CONCAT('===',f_char1,'===');
9336 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9337 BEGIN
9338 SET new.f_int1 = new.f_int1 + @max_row,
9339 new.f_int2 = new.f_int2 - @max_row,
9340 new.f_charbig = '####updated per update trigger####';
9341 END|
9342 UPDATE t1
9343 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9344 f_charbig = '####updated per update statement itself####';
9345         
9346 # check trigger-10 success:     1
9347 DROP TRIGGER trg_2;
9348 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9349 f_int2 = CAST(f_char1 AS SIGNED INT),
9350 f_charbig = CONCAT('===',f_char1,'===');
9351 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9352 BEGIN
9353 SET new.f_int1 = @my_max1 + @counter,
9354 new.f_int2 = @my_min2 - @counter,
9355 new.f_charbig = '####updated per insert trigger####';
9356 SET @counter = @counter + 1;
9357 END|
9358 SET @counter = 1;
9359 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9360 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9361 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9362 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9363 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9364 ORDER BY f_int1;
9365 DROP TRIGGER trg_3;
9366         
9367 # check trigger-11 success:     1
9368 DELETE FROM t1
9369 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9370 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9371 AND f_charbig = '####updated per insert trigger####';
9372 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9373 BEGIN
9374 SET new.f_int1 = @my_max1 + @counter,
9375 new.f_int2 = @my_min2 - @counter,
9376 new.f_charbig = '####updated per insert trigger####';
9377 SET @counter = @counter + 1;
9378 END|
9379 SET @counter = 1;
9380 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9381 INSERT INTO t1 (f_char1, f_char2, f_charbig)
9382 SELECT CAST(f_int1 AS CHAR),
9383 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9384 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9385 ORDER BY f_int1;
9386 DROP TRIGGER trg_3;
9387         
9388 # check trigger-12 success:     1
9389 DELETE FROM t1
9390 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9391 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9392 AND f_charbig = '####updated per insert trigger####';
9393 ANALYZE  TABLE t1;
9394 Table   Op      Msg_type        Msg_text
9395 test.t1 analyze status  OK
9396 CHECK    TABLE t1 EXTENDED;
9397 Table   Op      Msg_type        Msg_text
9398 test.t1 check   status  OK
9399 CHECKSUM TABLE t1 EXTENDED;
9400 Table   Checksum
9401 test.t1 <some_value>
9402 OPTIMIZE TABLE t1;
9403 Table   Op      Msg_type        Msg_text
9404 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9405 test.t1 optimize        status  OK
9406 # check layout success:    1
9407 REPAIR   TABLE t1 EXTENDED;
9408 Table   Op      Msg_type        Msg_text
9409 test.t1 repair  note    The storage engine for the table doesn't support repair
9410 # check layout success:    1
9411 TRUNCATE t1;
9412         
9413 # check TRUNCATE success:       1
9414 # check layout success:    1
9415 # End usability test (inc/partition_check.inc)
9416 DROP TABLE t1;
9417 CREATE TABLE t1 (
9418 f_int1 INTEGER,
9419 f_int2 INTEGER,
9420 f_char1 CHAR(20),
9421 f_char2 CHAR(20),
9422 f_charbig VARCHAR(1000)
9425 PARTITION BY LIST(MOD(f_int1,4))
9426 (PARTITION part_3 VALUES IN (-3),
9427 PARTITION part_2 VALUES IN (-2),
9428 PARTITION part_1 VALUES IN (-1),
9429 PARTITION part_N VALUES IN (NULL),
9430 PARTITION part0 VALUES IN (0),
9431 PARTITION part1 VALUES IN (1),
9432 PARTITION part2 VALUES IN (2),
9433 PARTITION part3 VALUES IN (3));
9434 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9435 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9436 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9437 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
9438 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9439 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9440 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9441 # Start usability test (inc/partition_check.inc)
9442 create_command
9443 SHOW CREATE TABLE t1;
9444 Table   Create Table
9445 t1      CREATE TABLE `t1` (
9446   `f_int1` int(11) DEFAULT NULL,
9447   `f_int2` int(11) DEFAULT NULL,
9448   `f_char1` char(20) DEFAULT NULL,
9449   `f_char2` char(20) DEFAULT NULL,
9450   `f_charbig` varchar(1000) DEFAULT NULL,
9451   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9452 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
9453 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
9454 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
9455  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
9456  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
9457  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
9458  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
9459  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
9460  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
9461  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
9463 # check prerequisites-1 success:    1
9464 # check COUNT(*) success:    1
9465 # check MIN/MAX(f_int1) success:    1
9466 # check MIN/MAX(f_int2) success:    1
9467 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9468 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9469 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9470 WHERE f_int1 IN (2,3);
9471 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
9472 # check prerequisites-3 success:    1
9473 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9474 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9475 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9476 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9477 WHERE f_int1 IN (2,3);
9478 DELETE FROM t1 WHERE f_charbig = 'delete me';
9479 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9480 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9481 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9482 WHERE f_int1 IN (2,3);
9483 DELETE FROM t1 WHERE f_charbig = 'delete me';
9484 # check read via f_int1 success: 1
9485 # check read via f_int2 success: 1
9486         
9487 # check multiple-1 success:     1
9488 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9489         
9490 # check multiple-2 success:     1
9491 INSERT INTO t1 SELECT * FROM t0_template
9492 WHERE MOD(f_int1,3) = 0;
9493         
9494 # check multiple-3 success:     1
9495 UPDATE t1 SET f_int1 = f_int1 + @max_row
9496 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9497 AND @max_row_div2 + @max_row_div4;
9498         
9499 # check multiple-4 success:     1
9500 DELETE FROM t1
9501 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9502 AND @max_row_div2 + @max_row_div4 + @max_row;
9503         
9504 # check multiple-5 success:     1
9505 SELECT COUNT(*) INTO @try_count FROM t0_template
9506 WHERE MOD(f_int1,3) = 0
9507 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9508 SELECT COUNT(*) INTO @clash_count
9509 FROM t1 INNER JOIN t0_template USING(f_int1)
9510 WHERE MOD(f_int1,3) = 0
9511 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9512 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9513 INSERT INTO t1
9514 SET f_int1 = @cur_value , f_int2 = @cur_value,
9515 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9516 f_charbig = '#SINGLE#';
9517         
9518 # check single-1 success:       1
9519 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9520 INSERT INTO t1
9521 SET f_int1 = @cur_value , f_int2 = @cur_value,
9522 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9523 f_charbig = '#SINGLE#';
9524         
9525 # check single-2 success:       1
9526 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9527 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9528 UPDATE t1 SET f_int1 = @cur_value2
9529 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9530         
9531 # check single-3 success:       1
9532 SET @cur_value1= -1;
9533 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9534 UPDATE t1 SET f_int1 = @cur_value1
9535 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9536         
9537 # check single-4 success:       1
9538 SELECT MAX(f_int1) INTO @cur_value FROM t1;
9539 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9540         
9541 # check single-5 success:       1
9542 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9543         
9544 # check single-6 success:       1
9545 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9546         
9547 # check single-7 success:       1
9548 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9549 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9550 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9551 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9552 f_charbig = '#NULL#';
9553 INSERT INTO t1
9554 SET f_int1 = NULL , f_int2 = -@max_row,
9555 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9556 f_charbig = '#NULL#';
9557 # check null success:    1
9558         
9559 # check null-1 success:         1
9560 UPDATE t1 SET f_int1 = -@max_row
9561 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9562 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9563         
9564 # check null-2 success:         1
9565 UPDATE t1 SET f_int1 = NULL
9566 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9567 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9568         
9569 # check null-3 success:         1
9570 DELETE FROM t1
9571 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9572 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9573         
9574 # check null-4 success:         1
9575 DELETE FROM t1
9576 WHERE f_int1 = 0 AND f_int2 = 0
9577 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9578 AND f_charbig = '#NULL#';
9579 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9580 SELECT f_int1, f_int1, '', '', 'was inserted'
9581    FROM t0_template source_tab
9582 WHERE MOD(f_int1,3) = 0
9583 AND f_int1 BETWEEN @max_row_div2 AND @max_row
9584 ON DUPLICATE KEY
9585 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9586 f_int2 = 2 * @max_row + source_tab.f_int1,
9587 f_charbig = 'was updated';
9588         
9589 # check unique-1-a success:     1
9590         
9591 # check unique-1-b success:     1
9592 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9593 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9594 f_int2 = CAST(f_char1 AS SIGNED INT),
9595 f_charbig = CONCAT('===',f_char1,'===')
9596 WHERE f_charbig = 'was updated';
9597 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9598 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9599    FROM t0_template source_tab
9600 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9601         
9602 # check replace success:        1
9603 DELETE FROM t1
9604 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9605 DELETE FROM t1
9606 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9607 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9608 UPDATE t1 SET f_int2 = f_int1,
9609 f_char1 = CAST(f_int1 AS CHAR),
9610 f_char2 = CAST(f_int1 AS CHAR),
9611 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9612 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9613 SET AUTOCOMMIT= 0;
9614 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9615 SELECT f_int1, f_int1, '', '', 'was inserted'
9616 FROM t0_template source_tab
9617 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9618         
9619 # check transactions-1 success:         1
9620 COMMIT WORK;
9621         
9622 # check transactions-2 success:         1
9623 ROLLBACK WORK;
9624         
9625 # check transactions-3 success:         1
9626 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9627 COMMIT WORK;
9628 ROLLBACK WORK;
9629         
9630 # check transactions-4 success:         1
9631 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9632 SELECT f_int1, f_int1, '', '', 'was inserted'
9633 FROM t0_template source_tab
9634 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9635         
9636 # check transactions-5 success:         1
9637 ROLLBACK WORK;
9638         
9639 # check transactions-6 success:         1
9640 # INFO: Storage engine used for t1 seems to be transactional.
9641 COMMIT;
9642         
9643 # check transactions-7 success:         1
9644 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9645 COMMIT WORK;
9646 SET @@session.sql_mode = 'traditional';
9647 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9648 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9649 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9650 '', '', 'was inserted' FROM t0_template
9651 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9652 ERROR 22012: Division by 0
9653 COMMIT;
9654         
9655 # check transactions-8 success:         1
9656 # INFO: Storage engine used for t1 seems to be able to revert
9657 #       changes made by the failing statement.
9658 SET @@session.sql_mode = '';
9659 SET AUTOCOMMIT= 1;
9660 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9661 COMMIT WORK;
9662 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9663         
9664 # check special-1 success:      1
9665 UPDATE t1 SET f_charbig = '';
9666         
9667 # check special-2 success:      1
9668 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9669 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9670 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9671 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9672 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9673 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9674 'just inserted' FROM t0_template
9675 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9676 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9677 BEGIN
9678 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9679 f_charbig = 'updated by trigger'
9680       WHERE f_int1 = new.f_int1;
9681 END|
9682 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9683 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9684 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9685         
9686 # check trigger-1 success:      1
9687 DROP TRIGGER trg_1;
9688 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9689 f_int2 = CAST(f_char1 AS SIGNED INT),
9690 f_charbig = 'just inserted'
9691    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9692 DELETE FROM t0_aux
9693 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9694 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9695 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9696 'just inserted' FROM t0_template
9697 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9698 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9699 BEGIN
9700 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9701 f_charbig = 'updated by trigger'
9702       WHERE f_int1 = new.f_int1;
9703 END|
9704 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9705 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9706 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9707         
9708 # check trigger-2 success:      1
9709 DROP TRIGGER trg_1;
9710 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9711 f_int2 = CAST(f_char1 AS SIGNED INT),
9712 f_charbig = 'just inserted'
9713    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9714 DELETE FROM t0_aux
9715 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9716 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9717 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9718 'just inserted' FROM t0_template
9719 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9720 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9721 BEGIN
9722 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9723 f_charbig = 'updated by trigger'
9724       WHERE f_int1 = new.f_int1;
9725 END|
9726 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9727 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9728         
9729 # check trigger-3 success:      1
9730 DROP TRIGGER trg_1;
9731 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9732 f_int2 = CAST(f_char1 AS SIGNED INT),
9733 f_charbig = 'just inserted'
9734    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9735 DELETE FROM t0_aux
9736 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9737 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9738 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9739 'just inserted' FROM t0_template
9740 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9741 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9742 BEGIN
9743 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9744 f_charbig = 'updated by trigger'
9745       WHERE f_int1 = - old.f_int1;
9746 END|
9747 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9748 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9749         
9750 # check trigger-4 success:      1
9751 DROP TRIGGER trg_1;
9752 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9753 f_int2 = CAST(f_char1 AS SIGNED INT),
9754 f_charbig = 'just inserted'
9755    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9756 DELETE FROM t0_aux
9757 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9758 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9759 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9760 'just inserted' FROM t0_template
9761 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9762 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9763 BEGIN
9764 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9765 f_charbig = 'updated by trigger'
9766       WHERE f_int1 = new.f_int1;
9767 END|
9768 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9769 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9770         
9771 # check trigger-5 success:      1
9772 DROP TRIGGER trg_1;
9773 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9774 f_int2 = CAST(f_char1 AS SIGNED INT),
9775 f_charbig = 'just inserted'
9776    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9777 DELETE FROM t0_aux
9778 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9779 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9780 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9781 'just inserted' FROM t0_template
9782 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9783 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9784 BEGIN
9785 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9786 f_charbig = 'updated by trigger'
9787       WHERE f_int1 = - old.f_int1;
9788 END|
9789 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9790 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9791         
9792 # check trigger-6 success:      1
9793 DROP TRIGGER trg_1;
9794 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9795 f_int2 = CAST(f_char1 AS SIGNED INT),
9796 f_charbig = 'just inserted'
9797    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9798 DELETE FROM t0_aux
9799 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9800 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9801 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9802 'just inserted' FROM t0_template
9803 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9804 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9805 BEGIN
9806 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9807 f_charbig = 'updated by trigger'
9808       WHERE f_int1 = - old.f_int1;
9809 END|
9810 DELETE FROM t0_aux
9811 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9812         
9813 # check trigger-7 success:      1
9814 DROP TRIGGER trg_1;
9815 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9816 f_int2 = CAST(f_char1 AS SIGNED INT),
9817 f_charbig = 'just inserted'
9818    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9819 DELETE FROM t0_aux
9820 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9821 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9822 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9823 'just inserted' FROM t0_template
9824 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9825 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9826 BEGIN
9827 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9828 f_charbig = 'updated by trigger'
9829       WHERE f_int1 = - old.f_int1;
9830 END|
9831 DELETE FROM t0_aux
9832 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9833         
9834 # check trigger-8 success:      1
9835 DROP TRIGGER trg_1;
9836 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9837 f_int2 = CAST(f_char1 AS SIGNED INT),
9838 f_charbig = 'just inserted'
9839    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9840 DELETE FROM t0_aux
9841 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9842 DELETE FROM t1
9843 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9844 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9845 BEGIN
9846 SET new.f_int1 = old.f_int1 + @max_row,
9847 new.f_int2 = old.f_int2 - @max_row,
9848 new.f_charbig = '####updated per update trigger####';
9849 END|
9850 UPDATE t1
9851 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9852 f_charbig = '####updated per update statement itself####';
9853         
9854 # check trigger-9 success:      1
9855 DROP TRIGGER trg_2;
9856 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9857 f_int2 = CAST(f_char1 AS SIGNED INT),
9858 f_charbig = CONCAT('===',f_char1,'===');
9859 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9860 BEGIN
9861 SET new.f_int1 = new.f_int1 + @max_row,
9862 new.f_int2 = new.f_int2 - @max_row,
9863 new.f_charbig = '####updated per update trigger####';
9864 END|
9865 UPDATE t1
9866 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9867 f_charbig = '####updated per update statement itself####';
9868         
9869 # check trigger-10 success:     1
9870 DROP TRIGGER trg_2;
9871 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9872 f_int2 = CAST(f_char1 AS SIGNED INT),
9873 f_charbig = CONCAT('===',f_char1,'===');
9874 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9875 BEGIN
9876 SET new.f_int1 = @my_max1 + @counter,
9877 new.f_int2 = @my_min2 - @counter,
9878 new.f_charbig = '####updated per insert trigger####';
9879 SET @counter = @counter + 1;
9880 END|
9881 SET @counter = 1;
9882 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9883 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9884 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9885 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9886 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9887 ORDER BY f_int1;
9888 DROP TRIGGER trg_3;
9889         
9890 # check trigger-11 success:     1
9891 DELETE FROM t1
9892 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9893 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9894 AND f_charbig = '####updated per insert trigger####';
9895 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9896 BEGIN
9897 SET new.f_int1 = @my_max1 + @counter,
9898 new.f_int2 = @my_min2 - @counter,
9899 new.f_charbig = '####updated per insert trigger####';
9900 SET @counter = @counter + 1;
9901 END|
9902 SET @counter = 1;
9903 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9904 INSERT INTO t1 (f_char1, f_char2, f_charbig)
9905 SELECT CAST(f_int1 AS CHAR),
9906 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9907 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9908 ORDER BY f_int1;
9909 DROP TRIGGER trg_3;
9910         
9911 # check trigger-12 success:     1
9912 DELETE FROM t1
9913 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9914 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9915 AND f_charbig = '####updated per insert trigger####';
9916 ANALYZE  TABLE t1;
9917 Table   Op      Msg_type        Msg_text
9918 test.t1 analyze status  OK
9919 CHECK    TABLE t1 EXTENDED;
9920 Table   Op      Msg_type        Msg_text
9921 test.t1 check   status  OK
9922 CHECKSUM TABLE t1 EXTENDED;
9923 Table   Checksum
9924 test.t1 <some_value>
9925 OPTIMIZE TABLE t1;
9926 Table   Op      Msg_type        Msg_text
9927 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
9928 test.t1 optimize        status  OK
9929 # check layout success:    1
9930 REPAIR   TABLE t1 EXTENDED;
9931 Table   Op      Msg_type        Msg_text
9932 test.t1 repair  note    The storage engine for the table doesn't support repair
9933 # check layout success:    1
9934 TRUNCATE t1;
9935         
9936 # check TRUNCATE success:       1
9937 # check layout success:    1
9938 # End usability test (inc/partition_check.inc)
9939 DROP TABLE t1;
9940 CREATE TABLE t1 (
9941 f_int1 INTEGER,
9942 f_int2 INTEGER,
9943 f_char1 CHAR(20),
9944 f_char2 CHAR(20),
9945 f_charbig VARCHAR(1000)
9948 PARTITION BY RANGE(f_int1)
9949 (PARTITION parta VALUES LESS THAN (0),
9950 PARTITION partb VALUES LESS THAN (5),
9951 PARTITION partc VALUES LESS THAN (10),
9952 PARTITION partd VALUES LESS THAN (10 + 5),
9953 PARTITION parte VALUES LESS THAN (20),
9954 PARTITION partf VALUES LESS THAN (2147483646));
9955 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9956 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9957 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9958 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
9959 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9960 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9961 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9962 # Start usability test (inc/partition_check.inc)
9963 create_command
9964 SHOW CREATE TABLE t1;
9965 Table   Create Table
9966 t1      CREATE TABLE `t1` (
9967   `f_int1` int(11) DEFAULT NULL,
9968   `f_int2` int(11) DEFAULT NULL,
9969   `f_char1` char(20) DEFAULT NULL,
9970   `f_char2` char(20) DEFAULT NULL,
9971   `f_charbig` varchar(1000) DEFAULT NULL,
9972   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9973 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
9974 /*!50100 PARTITION BY RANGE (f_int1)
9975 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9976  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9977  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9978  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
9979  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
9980  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9982 # check prerequisites-1 success:    1
9983 # check COUNT(*) success:    1
9984 # check MIN/MAX(f_int1) success:    1
9985 # check MIN/MAX(f_int2) success:    1
9986 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9987 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9988 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9989 WHERE f_int1 IN (2,3);
9990 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
9991 # check prerequisites-3 success:    1
9992 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9993 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9994 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9995 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9996 WHERE f_int1 IN (2,3);
9997 DELETE FROM t1 WHERE f_charbig = 'delete me';
9998 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9999 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10000 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10001 WHERE f_int1 IN (2,3);
10002 DELETE FROM t1 WHERE f_charbig = 'delete me';
10003 # check read via f_int1 success: 1
10004 # check read via f_int2 success: 1
10005         
10006 # check multiple-1 success:     1
10007 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10008         
10009 # check multiple-2 success:     1
10010 INSERT INTO t1 SELECT * FROM t0_template
10011 WHERE MOD(f_int1,3) = 0;
10012         
10013 # check multiple-3 success:     1
10014 UPDATE t1 SET f_int1 = f_int1 + @max_row
10015 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10016 AND @max_row_div2 + @max_row_div4;
10017         
10018 # check multiple-4 success:     1
10019 DELETE FROM t1
10020 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10021 AND @max_row_div2 + @max_row_div4 + @max_row;
10022         
10023 # check multiple-5 success:     1
10024 SELECT COUNT(*) INTO @try_count FROM t0_template
10025 WHERE MOD(f_int1,3) = 0
10026 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10027 SELECT COUNT(*) INTO @clash_count
10028 FROM t1 INNER JOIN t0_template USING(f_int1)
10029 WHERE MOD(f_int1,3) = 0
10030 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10031 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10032 INSERT INTO t1
10033 SET f_int1 = @cur_value , f_int2 = @cur_value,
10034 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10035 f_charbig = '#SINGLE#';
10036         
10037 # check single-1 success:       1
10038 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10039 INSERT INTO t1
10040 SET f_int1 = @cur_value , f_int2 = @cur_value,
10041 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10042 f_charbig = '#SINGLE#';
10043         
10044 # check single-2 success:       1
10045 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10046 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10047 UPDATE t1 SET f_int1 = @cur_value2
10048 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10049         
10050 # check single-3 success:       1
10051 SET @cur_value1= -1;
10052 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10053 UPDATE t1 SET f_int1 = @cur_value1
10054 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10055         
10056 # check single-4 success:       1
10057 SELECT MAX(f_int1) INTO @cur_value FROM t1;
10058 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10059         
10060 # check single-5 success:       1
10061 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10062         
10063 # check single-6 success:       1
10064 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10065 ERROR HY000: Table has no partition for value 2147483647
10066 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10067 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10068 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10069 f_charbig = '#NULL#';
10070 INSERT INTO t1
10071 SET f_int1 = NULL , f_int2 = -@max_row,
10072 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10073 f_charbig = '#NULL#';
10074 # check null success:    1
10075         
10076 # check null-1 success:         1
10077 UPDATE t1 SET f_int1 = -@max_row
10078 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10079 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10080         
10081 # check null-2 success:         1
10082 UPDATE t1 SET f_int1 = NULL
10083 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10084 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10085         
10086 # check null-3 success:         1
10087 DELETE FROM t1
10088 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10089 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10090         
10091 # check null-4 success:         1
10092 DELETE FROM t1
10093 WHERE f_int1 = 0 AND f_int2 = 0
10094 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10095 AND f_charbig = '#NULL#';
10096 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10097 SELECT f_int1, f_int1, '', '', 'was inserted'
10098    FROM t0_template source_tab
10099 WHERE MOD(f_int1,3) = 0
10100 AND f_int1 BETWEEN @max_row_div2 AND @max_row
10101 ON DUPLICATE KEY
10102 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10103 f_int2 = 2 * @max_row + source_tab.f_int1,
10104 f_charbig = 'was updated';
10105         
10106 # check unique-1-a success:     1
10107         
10108 # check unique-1-b success:     1
10109 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10110 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10111 f_int2 = CAST(f_char1 AS SIGNED INT),
10112 f_charbig = CONCAT('===',f_char1,'===')
10113 WHERE f_charbig = 'was updated';
10114 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10115 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10116    FROM t0_template source_tab
10117 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10118         
10119 # check replace success:        1
10120 DELETE FROM t1
10121 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10122 DELETE FROM t1
10123 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10124 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10125 UPDATE t1 SET f_int2 = f_int1,
10126 f_char1 = CAST(f_int1 AS CHAR),
10127 f_char2 = CAST(f_int1 AS CHAR),
10128 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10129 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10130 SET AUTOCOMMIT= 0;
10131 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10132 SELECT f_int1, f_int1, '', '', 'was inserted'
10133 FROM t0_template source_tab
10134 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10135         
10136 # check transactions-1 success:         1
10137 COMMIT WORK;
10138         
10139 # check transactions-2 success:         1
10140 ROLLBACK WORK;
10141         
10142 # check transactions-3 success:         1
10143 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10144 COMMIT WORK;
10145 ROLLBACK WORK;
10146         
10147 # check transactions-4 success:         1
10148 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10149 SELECT f_int1, f_int1, '', '', 'was inserted'
10150 FROM t0_template source_tab
10151 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10152         
10153 # check transactions-5 success:         1
10154 ROLLBACK WORK;
10155         
10156 # check transactions-6 success:         1
10157 # INFO: Storage engine used for t1 seems to be transactional.
10158 COMMIT;
10159         
10160 # check transactions-7 success:         1
10161 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10162 COMMIT WORK;
10163 SET @@session.sql_mode = 'traditional';
10164 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10165 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10166 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10167 '', '', 'was inserted' FROM t0_template
10168 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10169 ERROR 22012: Division by 0
10170 COMMIT;
10171         
10172 # check transactions-8 success:         1
10173 # INFO: Storage engine used for t1 seems to be able to revert
10174 #       changes made by the failing statement.
10175 SET @@session.sql_mode = '';
10176 SET AUTOCOMMIT= 1;
10177 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10178 COMMIT WORK;
10179 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10180         
10181 # check special-1 success:      1
10182 UPDATE t1 SET f_charbig = '';
10183         
10184 # check special-2 success:      1
10185 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10186 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10187 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10188 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10189 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10190 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10191 'just inserted' FROM t0_template
10192 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10193 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10194 BEGIN
10195 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10196 f_charbig = 'updated by trigger'
10197       WHERE f_int1 = new.f_int1;
10198 END|
10199 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10200 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10201 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10202         
10203 # check trigger-1 success:      1
10204 DROP TRIGGER trg_1;
10205 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10206 f_int2 = CAST(f_char1 AS SIGNED INT),
10207 f_charbig = 'just inserted'
10208    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10209 DELETE FROM t0_aux
10210 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10211 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10212 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10213 'just inserted' FROM t0_template
10214 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10215 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10216 BEGIN
10217 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10218 f_charbig = 'updated by trigger'
10219       WHERE f_int1 = new.f_int1;
10220 END|
10221 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10222 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10223 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10224         
10225 # check trigger-2 success:      1
10226 DROP TRIGGER trg_1;
10227 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10228 f_int2 = CAST(f_char1 AS SIGNED INT),
10229 f_charbig = 'just inserted'
10230    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10231 DELETE FROM t0_aux
10232 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10233 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10234 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10235 'just inserted' FROM t0_template
10236 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10237 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10238 BEGIN
10239 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10240 f_charbig = 'updated by trigger'
10241       WHERE f_int1 = new.f_int1;
10242 END|
10243 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10244 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10245         
10246 # check trigger-3 success:      1
10247 DROP TRIGGER trg_1;
10248 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10249 f_int2 = CAST(f_char1 AS SIGNED INT),
10250 f_charbig = 'just inserted'
10251    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10252 DELETE FROM t0_aux
10253 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10254 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10255 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10256 'just inserted' FROM t0_template
10257 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10258 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10259 BEGIN
10260 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10261 f_charbig = 'updated by trigger'
10262       WHERE f_int1 = - old.f_int1;
10263 END|
10264 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10265 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10266         
10267 # check trigger-4 success:      1
10268 DROP TRIGGER trg_1;
10269 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10270 f_int2 = CAST(f_char1 AS SIGNED INT),
10271 f_charbig = 'just inserted'
10272    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10273 DELETE FROM t0_aux
10274 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10275 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10276 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10277 'just inserted' FROM t0_template
10278 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10279 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10280 BEGIN
10281 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10282 f_charbig = 'updated by trigger'
10283       WHERE f_int1 = new.f_int1;
10284 END|
10285 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10286 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10287         
10288 # check trigger-5 success:      1
10289 DROP TRIGGER trg_1;
10290 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10291 f_int2 = CAST(f_char1 AS SIGNED INT),
10292 f_charbig = 'just inserted'
10293    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10294 DELETE FROM t0_aux
10295 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10296 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10297 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10298 'just inserted' FROM t0_template
10299 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10300 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10301 BEGIN
10302 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10303 f_charbig = 'updated by trigger'
10304       WHERE f_int1 = - old.f_int1;
10305 END|
10306 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10307 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10308         
10309 # check trigger-6 success:      1
10310 DROP TRIGGER trg_1;
10311 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10312 f_int2 = CAST(f_char1 AS SIGNED INT),
10313 f_charbig = 'just inserted'
10314    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10315 DELETE FROM t0_aux
10316 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10317 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10318 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10319 'just inserted' FROM t0_template
10320 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10321 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10322 BEGIN
10323 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10324 f_charbig = 'updated by trigger'
10325       WHERE f_int1 = - old.f_int1;
10326 END|
10327 DELETE FROM t0_aux
10328 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10329         
10330 # check trigger-7 success:      1
10331 DROP TRIGGER trg_1;
10332 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10333 f_int2 = CAST(f_char1 AS SIGNED INT),
10334 f_charbig = 'just inserted'
10335    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10336 DELETE FROM t0_aux
10337 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10338 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10339 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10340 'just inserted' FROM t0_template
10341 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10342 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10343 BEGIN
10344 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10345 f_charbig = 'updated by trigger'
10346       WHERE f_int1 = - old.f_int1;
10347 END|
10348 DELETE FROM t0_aux
10349 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10350         
10351 # check trigger-8 success:      1
10352 DROP TRIGGER trg_1;
10353 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10354 f_int2 = CAST(f_char1 AS SIGNED INT),
10355 f_charbig = 'just inserted'
10356    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10357 DELETE FROM t0_aux
10358 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10359 DELETE FROM t1
10360 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10361 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10362 BEGIN
10363 SET new.f_int1 = old.f_int1 + @max_row,
10364 new.f_int2 = old.f_int2 - @max_row,
10365 new.f_charbig = '####updated per update trigger####';
10366 END|
10367 UPDATE t1
10368 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10369 f_charbig = '####updated per update statement itself####';
10370         
10371 # check trigger-9 success:      1
10372 DROP TRIGGER trg_2;
10373 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10374 f_int2 = CAST(f_char1 AS SIGNED INT),
10375 f_charbig = CONCAT('===',f_char1,'===');
10376 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10377 BEGIN
10378 SET new.f_int1 = new.f_int1 + @max_row,
10379 new.f_int2 = new.f_int2 - @max_row,
10380 new.f_charbig = '####updated per update trigger####';
10381 END|
10382 UPDATE t1
10383 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10384 f_charbig = '####updated per update statement itself####';
10385         
10386 # check trigger-10 success:     1
10387 DROP TRIGGER trg_2;
10388 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10389 f_int2 = CAST(f_char1 AS SIGNED INT),
10390 f_charbig = CONCAT('===',f_char1,'===');
10391 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10392 BEGIN
10393 SET new.f_int1 = @my_max1 + @counter,
10394 new.f_int2 = @my_min2 - @counter,
10395 new.f_charbig = '####updated per insert trigger####';
10396 SET @counter = @counter + 1;
10397 END|
10398 SET @counter = 1;
10399 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10400 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10401 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10402 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10403 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10404 ORDER BY f_int1;
10405 DROP TRIGGER trg_3;
10406         
10407 # check trigger-11 success:     1
10408 DELETE FROM t1
10409 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10410 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10411 AND f_charbig = '####updated per insert trigger####';
10412 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10413 BEGIN
10414 SET new.f_int1 = @my_max1 + @counter,
10415 new.f_int2 = @my_min2 - @counter,
10416 new.f_charbig = '####updated per insert trigger####';
10417 SET @counter = @counter + 1;
10418 END|
10419 SET @counter = 1;
10420 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10421 INSERT INTO t1 (f_char1, f_char2, f_charbig)
10422 SELECT CAST(f_int1 AS CHAR),
10423 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10424 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10425 ORDER BY f_int1;
10426 DROP TRIGGER trg_3;
10427         
10428 # check trigger-12 success:     1
10429 DELETE FROM t1
10430 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10431 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10432 AND f_charbig = '####updated per insert trigger####';
10433 ANALYZE  TABLE t1;
10434 Table   Op      Msg_type        Msg_text
10435 test.t1 analyze status  OK
10436 CHECK    TABLE t1 EXTENDED;
10437 Table   Op      Msg_type        Msg_text
10438 test.t1 check   status  OK
10439 CHECKSUM TABLE t1 EXTENDED;
10440 Table   Checksum
10441 test.t1 <some_value>
10442 OPTIMIZE TABLE t1;
10443 Table   Op      Msg_type        Msg_text
10444 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10445 test.t1 optimize        status  OK
10446 # check layout success:    1
10447 REPAIR   TABLE t1 EXTENDED;
10448 Table   Op      Msg_type        Msg_text
10449 test.t1 repair  note    The storage engine for the table doesn't support repair
10450 # check layout success:    1
10451 TRUNCATE t1;
10452         
10453 # check TRUNCATE success:       1
10454 # check layout success:    1
10455 # End usability test (inc/partition_check.inc)
10456 DROP TABLE t1;
10457 CREATE TABLE t1 (
10458 f_int1 INTEGER,
10459 f_int2 INTEGER,
10460 f_char1 CHAR(20),
10461 f_char2 CHAR(20),
10462 f_charbig VARCHAR(1000)
10465 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
10466 (PARTITION parta VALUES LESS THAN (0),
10467 PARTITION partb VALUES LESS THAN (5),
10468 PARTITION partc VALUES LESS THAN (10),
10469 PARTITION partd VALUES LESS THAN (2147483646));
10470 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10471 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10472 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10473 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
10474 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10475 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10476 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10477 # Start usability test (inc/partition_check.inc)
10478 create_command
10479 SHOW CREATE TABLE t1;
10480 Table   Create Table
10481 t1      CREATE TABLE `t1` (
10482   `f_int1` int(11) DEFAULT NULL,
10483   `f_int2` int(11) DEFAULT NULL,
10484   `f_char1` char(20) DEFAULT NULL,
10485   `f_char2` char(20) DEFAULT NULL,
10486   `f_charbig` varchar(1000) DEFAULT NULL,
10487   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10488 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
10489 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
10490 SUBPARTITION BY HASH (f_int1)
10491 SUBPARTITIONS 2
10492 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
10493  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
10494  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
10495  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
10497 # check prerequisites-1 success:    1
10498 # check COUNT(*) success:    1
10499 # check MIN/MAX(f_int1) success:    1
10500 # check MIN/MAX(f_int2) success:    1
10501 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10502 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10503 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10504 WHERE f_int1 IN (2,3);
10505 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
10506 # check prerequisites-3 success:    1
10507 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10508 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10509 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10510 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10511 WHERE f_int1 IN (2,3);
10512 DELETE FROM t1 WHERE f_charbig = 'delete me';
10513 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10514 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10515 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10516 WHERE f_int1 IN (2,3);
10517 DELETE FROM t1 WHERE f_charbig = 'delete me';
10518 # check read via f_int1 success: 1
10519 # check read via f_int2 success: 1
10520         
10521 # check multiple-1 success:     1
10522 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10523         
10524 # check multiple-2 success:     1
10525 INSERT INTO t1 SELECT * FROM t0_template
10526 WHERE MOD(f_int1,3) = 0;
10527         
10528 # check multiple-3 success:     1
10529 UPDATE t1 SET f_int1 = f_int1 + @max_row
10530 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10531 AND @max_row_div2 + @max_row_div4;
10532         
10533 # check multiple-4 success:     1
10534 DELETE FROM t1
10535 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10536 AND @max_row_div2 + @max_row_div4 + @max_row;
10537         
10538 # check multiple-5 success:     1
10539 SELECT COUNT(*) INTO @try_count FROM t0_template
10540 WHERE MOD(f_int1,3) = 0
10541 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10542 SELECT COUNT(*) INTO @clash_count
10543 FROM t1 INNER JOIN t0_template USING(f_int1)
10544 WHERE MOD(f_int1,3) = 0
10545 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10546 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10547 INSERT INTO t1
10548 SET f_int1 = @cur_value , f_int2 = @cur_value,
10549 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10550 f_charbig = '#SINGLE#';
10551         
10552 # check single-1 success:       1
10553 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10554 INSERT INTO t1
10555 SET f_int1 = @cur_value , f_int2 = @cur_value,
10556 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10557 f_charbig = '#SINGLE#';
10558         
10559 # check single-2 success:       1
10560 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10561 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10562 UPDATE t1 SET f_int1 = @cur_value2
10563 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10564         
10565 # check single-3 success:       1
10566 SET @cur_value1= -1;
10567 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10568 UPDATE t1 SET f_int1 = @cur_value1
10569 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10570         
10571 # check single-4 success:       1
10572 SELECT MAX(f_int1) INTO @cur_value FROM t1;
10573 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10574         
10575 # check single-5 success:       1
10576 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10577         
10578 # check single-6 success:       1
10579 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10580         
10581 # check single-7 success:       1
10582 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10583 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10584 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10585 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10586 f_charbig = '#NULL#';
10587 INSERT INTO t1
10588 SET f_int1 = NULL , f_int2 = -@max_row,
10589 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10590 f_charbig = '#NULL#';
10591 # check null success:    1
10592         
10593 # check null-1 success:         1
10594 UPDATE t1 SET f_int1 = -@max_row
10595 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10596 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10597         
10598 # check null-2 success:         1
10599 UPDATE t1 SET f_int1 = NULL
10600 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10601 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10602         
10603 # check null-3 success:         1
10604 DELETE FROM t1
10605 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10606 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10607         
10608 # check null-4 success:         1
10609 DELETE FROM t1
10610 WHERE f_int1 = 0 AND f_int2 = 0
10611 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10612 AND f_charbig = '#NULL#';
10613 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10614 SELECT f_int1, f_int1, '', '', 'was inserted'
10615    FROM t0_template source_tab
10616 WHERE MOD(f_int1,3) = 0
10617 AND f_int1 BETWEEN @max_row_div2 AND @max_row
10618 ON DUPLICATE KEY
10619 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10620 f_int2 = 2 * @max_row + source_tab.f_int1,
10621 f_charbig = 'was updated';
10622         
10623 # check unique-1-a success:     1
10624         
10625 # check unique-1-b success:     1
10626 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10627 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10628 f_int2 = CAST(f_char1 AS SIGNED INT),
10629 f_charbig = CONCAT('===',f_char1,'===')
10630 WHERE f_charbig = 'was updated';
10631 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10632 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10633    FROM t0_template source_tab
10634 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10635         
10636 # check replace success:        1
10637 DELETE FROM t1
10638 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10639 DELETE FROM t1
10640 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10641 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10642 UPDATE t1 SET f_int2 = f_int1,
10643 f_char1 = CAST(f_int1 AS CHAR),
10644 f_char2 = CAST(f_int1 AS CHAR),
10645 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10646 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10647 SET AUTOCOMMIT= 0;
10648 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10649 SELECT f_int1, f_int1, '', '', 'was inserted'
10650 FROM t0_template source_tab
10651 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10652         
10653 # check transactions-1 success:         1
10654 COMMIT WORK;
10655         
10656 # check transactions-2 success:         1
10657 ROLLBACK WORK;
10658         
10659 # check transactions-3 success:         1
10660 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10661 COMMIT WORK;
10662 ROLLBACK WORK;
10663         
10664 # check transactions-4 success:         1
10665 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10666 SELECT f_int1, f_int1, '', '', 'was inserted'
10667 FROM t0_template source_tab
10668 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10669         
10670 # check transactions-5 success:         1
10671 ROLLBACK WORK;
10672         
10673 # check transactions-6 success:         1
10674 # INFO: Storage engine used for t1 seems to be transactional.
10675 COMMIT;
10676         
10677 # check transactions-7 success:         1
10678 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10679 COMMIT WORK;
10680 SET @@session.sql_mode = 'traditional';
10681 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10682 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10683 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10684 '', '', 'was inserted' FROM t0_template
10685 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10686 ERROR 22012: Division by 0
10687 COMMIT;
10688         
10689 # check transactions-8 success:         1
10690 # INFO: Storage engine used for t1 seems to be able to revert
10691 #       changes made by the failing statement.
10692 SET @@session.sql_mode = '';
10693 SET AUTOCOMMIT= 1;
10694 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10695 COMMIT WORK;
10696 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10697         
10698 # check special-1 success:      1
10699 UPDATE t1 SET f_charbig = '';
10700         
10701 # check special-2 success:      1
10702 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10703 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10704 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10705 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10706 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10707 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10708 'just inserted' FROM t0_template
10709 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10710 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10711 BEGIN
10712 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10713 f_charbig = 'updated by trigger'
10714       WHERE f_int1 = new.f_int1;
10715 END|
10716 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10717 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10718 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10719         
10720 # check trigger-1 success:      1
10721 DROP TRIGGER trg_1;
10722 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10723 f_int2 = CAST(f_char1 AS SIGNED INT),
10724 f_charbig = 'just inserted'
10725    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10726 DELETE FROM t0_aux
10727 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10728 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10729 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10730 'just inserted' FROM t0_template
10731 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10732 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10733 BEGIN
10734 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10735 f_charbig = 'updated by trigger'
10736       WHERE f_int1 = new.f_int1;
10737 END|
10738 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10739 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10740 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10741         
10742 # check trigger-2 success:      1
10743 DROP TRIGGER trg_1;
10744 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10745 f_int2 = CAST(f_char1 AS SIGNED INT),
10746 f_charbig = 'just inserted'
10747    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10748 DELETE FROM t0_aux
10749 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10750 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10751 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10752 'just inserted' FROM t0_template
10753 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10754 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10755 BEGIN
10756 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10757 f_charbig = 'updated by trigger'
10758       WHERE f_int1 = new.f_int1;
10759 END|
10760 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10761 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10762         
10763 # check trigger-3 success:      1
10764 DROP TRIGGER trg_1;
10765 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10766 f_int2 = CAST(f_char1 AS SIGNED INT),
10767 f_charbig = 'just inserted'
10768    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10769 DELETE FROM t0_aux
10770 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10771 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10772 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10773 'just inserted' FROM t0_template
10774 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10775 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10776 BEGIN
10777 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10778 f_charbig = 'updated by trigger'
10779       WHERE f_int1 = - old.f_int1;
10780 END|
10781 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10782 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10783         
10784 # check trigger-4 success:      1
10785 DROP TRIGGER trg_1;
10786 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10787 f_int2 = CAST(f_char1 AS SIGNED INT),
10788 f_charbig = 'just inserted'
10789    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10790 DELETE FROM t0_aux
10791 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10792 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10793 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10794 'just inserted' FROM t0_template
10795 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10796 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10797 BEGIN
10798 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10799 f_charbig = 'updated by trigger'
10800       WHERE f_int1 = new.f_int1;
10801 END|
10802 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10803 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10804         
10805 # check trigger-5 success:      1
10806 DROP TRIGGER trg_1;
10807 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10808 f_int2 = CAST(f_char1 AS SIGNED INT),
10809 f_charbig = 'just inserted'
10810    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10811 DELETE FROM t0_aux
10812 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10813 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10814 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10815 'just inserted' FROM t0_template
10816 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10817 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10818 BEGIN
10819 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10820 f_charbig = 'updated by trigger'
10821       WHERE f_int1 = - old.f_int1;
10822 END|
10823 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10824 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10825         
10826 # check trigger-6 success:      1
10827 DROP TRIGGER trg_1;
10828 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10829 f_int2 = CAST(f_char1 AS SIGNED INT),
10830 f_charbig = 'just inserted'
10831    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10832 DELETE FROM t0_aux
10833 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10834 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10835 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10836 'just inserted' FROM t0_template
10837 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10838 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10839 BEGIN
10840 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10841 f_charbig = 'updated by trigger'
10842       WHERE f_int1 = - old.f_int1;
10843 END|
10844 DELETE FROM t0_aux
10845 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10846         
10847 # check trigger-7 success:      1
10848 DROP TRIGGER trg_1;
10849 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10850 f_int2 = CAST(f_char1 AS SIGNED INT),
10851 f_charbig = 'just inserted'
10852    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10853 DELETE FROM t0_aux
10854 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10855 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10856 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10857 'just inserted' FROM t0_template
10858 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10859 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10860 BEGIN
10861 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10862 f_charbig = 'updated by trigger'
10863       WHERE f_int1 = - old.f_int1;
10864 END|
10865 DELETE FROM t0_aux
10866 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10867         
10868 # check trigger-8 success:      1
10869 DROP TRIGGER trg_1;
10870 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10871 f_int2 = CAST(f_char1 AS SIGNED INT),
10872 f_charbig = 'just inserted'
10873    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10874 DELETE FROM t0_aux
10875 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10876 DELETE FROM t1
10877 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10878 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10879 BEGIN
10880 SET new.f_int1 = old.f_int1 + @max_row,
10881 new.f_int2 = old.f_int2 - @max_row,
10882 new.f_charbig = '####updated per update trigger####';
10883 END|
10884 UPDATE t1
10885 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10886 f_charbig = '####updated per update statement itself####';
10887         
10888 # check trigger-9 success:      1
10889 DROP TRIGGER trg_2;
10890 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10891 f_int2 = CAST(f_char1 AS SIGNED INT),
10892 f_charbig = CONCAT('===',f_char1,'===');
10893 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10894 BEGIN
10895 SET new.f_int1 = new.f_int1 + @max_row,
10896 new.f_int2 = new.f_int2 - @max_row,
10897 new.f_charbig = '####updated per update trigger####';
10898 END|
10899 UPDATE t1
10900 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10901 f_charbig = '####updated per update statement itself####';
10902         
10903 # check trigger-10 success:     1
10904 DROP TRIGGER trg_2;
10905 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10906 f_int2 = CAST(f_char1 AS SIGNED INT),
10907 f_charbig = CONCAT('===',f_char1,'===');
10908 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10909 BEGIN
10910 SET new.f_int1 = @my_max1 + @counter,
10911 new.f_int2 = @my_min2 - @counter,
10912 new.f_charbig = '####updated per insert trigger####';
10913 SET @counter = @counter + 1;
10914 END|
10915 SET @counter = 1;
10916 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10917 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10918 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10919 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10920 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10921 ORDER BY f_int1;
10922 DROP TRIGGER trg_3;
10923         
10924 # check trigger-11 success:     1
10925 DELETE FROM t1
10926 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10927 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10928 AND f_charbig = '####updated per insert trigger####';
10929 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10930 BEGIN
10931 SET new.f_int1 = @my_max1 + @counter,
10932 new.f_int2 = @my_min2 - @counter,
10933 new.f_charbig = '####updated per insert trigger####';
10934 SET @counter = @counter + 1;
10935 END|
10936 SET @counter = 1;
10937 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10938 INSERT INTO t1 (f_char1, f_char2, f_charbig)
10939 SELECT CAST(f_int1 AS CHAR),
10940 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10941 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10942 ORDER BY f_int1;
10943 DROP TRIGGER trg_3;
10944         
10945 # check trigger-12 success:     1
10946 DELETE FROM t1
10947 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10948 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10949 AND f_charbig = '####updated per insert trigger####';
10950 ANALYZE  TABLE t1;
10951 Table   Op      Msg_type        Msg_text
10952 test.t1 analyze status  OK
10953 CHECK    TABLE t1 EXTENDED;
10954 Table   Op      Msg_type        Msg_text
10955 test.t1 check   status  OK
10956 CHECKSUM TABLE t1 EXTENDED;
10957 Table   Checksum
10958 test.t1 <some_value>
10959 OPTIMIZE TABLE t1;
10960 Table   Op      Msg_type        Msg_text
10961 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
10962 test.t1 optimize        status  OK
10963 # check layout success:    1
10964 REPAIR   TABLE t1 EXTENDED;
10965 Table   Op      Msg_type        Msg_text
10966 test.t1 repair  note    The storage engine for the table doesn't support repair
10967 # check layout success:    1
10968 TRUNCATE t1;
10969         
10970 # check TRUNCATE success:       1
10971 # check layout success:    1
10972 # End usability test (inc/partition_check.inc)
10973 DROP TABLE t1;
10974 CREATE TABLE t1 (
10975 f_int1 INTEGER,
10976 f_int2 INTEGER,
10977 f_char1 CHAR(20),
10978 f_char2 CHAR(20),
10979 f_charbig VARCHAR(1000)
10982 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
10983 (PARTITION part1 VALUES LESS THAN (0)
10984 (SUBPARTITION subpart11, SUBPARTITION subpart12),
10985 PARTITION part2 VALUES LESS THAN (5)
10986 (SUBPARTITION subpart21, SUBPARTITION subpart22),
10987 PARTITION part3 VALUES LESS THAN (10)
10988 (SUBPARTITION subpart31, SUBPARTITION subpart32),
10989 PARTITION part4 VALUES LESS THAN (2147483646)
10990 (SUBPARTITION subpart41, SUBPARTITION subpart42));
10991 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10992 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10993 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10994 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
10995 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10996 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10997 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10998 # Start usability test (inc/partition_check.inc)
10999 create_command
11000 SHOW CREATE TABLE t1;
11001 Table   Create Table
11002 t1      CREATE TABLE `t1` (
11003   `f_int1` int(11) DEFAULT NULL,
11004   `f_int2` int(11) DEFAULT NULL,
11005   `f_char1` char(20) DEFAULT NULL,
11006   `f_char2` char(20) DEFAULT NULL,
11007   `f_charbig` varchar(1000) DEFAULT NULL,
11008   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11009 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
11010 /*!50100 PARTITION BY RANGE (f_int1)
11011 SUBPARTITION BY KEY (f_int1)
11012 (PARTITION part1 VALUES LESS THAN (0)
11013  (SUBPARTITION subpart11 ENGINE = InnoDB,
11014   SUBPARTITION subpart12 ENGINE = InnoDB),
11015  PARTITION part2 VALUES LESS THAN (5)
11016  (SUBPARTITION subpart21 ENGINE = InnoDB,
11017   SUBPARTITION subpart22 ENGINE = InnoDB),
11018  PARTITION part3 VALUES LESS THAN (10)
11019  (SUBPARTITION subpart31 ENGINE = InnoDB,
11020   SUBPARTITION subpart32 ENGINE = InnoDB),
11021  PARTITION part4 VALUES LESS THAN (2147483646)
11022  (SUBPARTITION subpart41 ENGINE = InnoDB,
11023   SUBPARTITION subpart42 ENGINE = InnoDB)) */
11025 # check prerequisites-1 success:    1
11026 # check COUNT(*) success:    1
11027 # check MIN/MAX(f_int1) success:    1
11028 # check MIN/MAX(f_int2) success:    1
11029 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11030 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11031 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11032 WHERE f_int1 IN (2,3);
11033 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11034 # check prerequisites-3 success:    1
11035 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11036 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11037 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11038 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11039 WHERE f_int1 IN (2,3);
11040 DELETE FROM t1 WHERE f_charbig = 'delete me';
11041 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11042 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11043 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11044 WHERE f_int1 IN (2,3);
11045 DELETE FROM t1 WHERE f_charbig = 'delete me';
11046 # check read via f_int1 success: 1
11047 # check read via f_int2 success: 1
11048         
11049 # check multiple-1 success:     1
11050 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11051         
11052 # check multiple-2 success:     1
11053 INSERT INTO t1 SELECT * FROM t0_template
11054 WHERE MOD(f_int1,3) = 0;
11055         
11056 # check multiple-3 success:     1
11057 UPDATE t1 SET f_int1 = f_int1 + @max_row
11058 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11059 AND @max_row_div2 + @max_row_div4;
11060         
11061 # check multiple-4 success:     1
11062 DELETE FROM t1
11063 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11064 AND @max_row_div2 + @max_row_div4 + @max_row;
11065         
11066 # check multiple-5 success:     1
11067 SELECT COUNT(*) INTO @try_count FROM t0_template
11068 WHERE MOD(f_int1,3) = 0
11069 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11070 SELECT COUNT(*) INTO @clash_count
11071 FROM t1 INNER JOIN t0_template USING(f_int1)
11072 WHERE MOD(f_int1,3) = 0
11073 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11074 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11075 INSERT INTO t1
11076 SET f_int1 = @cur_value , f_int2 = @cur_value,
11077 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11078 f_charbig = '#SINGLE#';
11079         
11080 # check single-1 success:       1
11081 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11082 INSERT INTO t1
11083 SET f_int1 = @cur_value , f_int2 = @cur_value,
11084 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11085 f_charbig = '#SINGLE#';
11086         
11087 # check single-2 success:       1
11088 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11089 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11090 UPDATE t1 SET f_int1 = @cur_value2
11091 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11092         
11093 # check single-3 success:       1
11094 SET @cur_value1= -1;
11095 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11096 UPDATE t1 SET f_int1 = @cur_value1
11097 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11098         
11099 # check single-4 success:       1
11100 SELECT MAX(f_int1) INTO @cur_value FROM t1;
11101 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11102         
11103 # check single-5 success:       1
11104 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11105         
11106 # check single-6 success:       1
11107 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11108 ERROR HY000: Table has no partition for value 2147483647
11109 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11110 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11111 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11112 f_charbig = '#NULL#';
11113 INSERT INTO t1
11114 SET f_int1 = NULL , f_int2 = -@max_row,
11115 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11116 f_charbig = '#NULL#';
11117 # check null success:    1
11118         
11119 # check null-1 success:         1
11120 UPDATE t1 SET f_int1 = -@max_row
11121 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11122 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11123         
11124 # check null-2 success:         1
11125 UPDATE t1 SET f_int1 = NULL
11126 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11127 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11128         
11129 # check null-3 success:         1
11130 DELETE FROM t1
11131 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11132 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11133         
11134 # check null-4 success:         1
11135 DELETE FROM t1
11136 WHERE f_int1 = 0 AND f_int2 = 0
11137 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11138 AND f_charbig = '#NULL#';
11139 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11140 SELECT f_int1, f_int1, '', '', 'was inserted'
11141    FROM t0_template source_tab
11142 WHERE MOD(f_int1,3) = 0
11143 AND f_int1 BETWEEN @max_row_div2 AND @max_row
11144 ON DUPLICATE KEY
11145 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11146 f_int2 = 2 * @max_row + source_tab.f_int1,
11147 f_charbig = 'was updated';
11148         
11149 # check unique-1-a success:     1
11150         
11151 # check unique-1-b success:     1
11152 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11153 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11154 f_int2 = CAST(f_char1 AS SIGNED INT),
11155 f_charbig = CONCAT('===',f_char1,'===')
11156 WHERE f_charbig = 'was updated';
11157 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11158 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11159    FROM t0_template source_tab
11160 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11161         
11162 # check replace success:        1
11163 DELETE FROM t1
11164 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11165 DELETE FROM t1
11166 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11167 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11168 UPDATE t1 SET f_int2 = f_int1,
11169 f_char1 = CAST(f_int1 AS CHAR),
11170 f_char2 = CAST(f_int1 AS CHAR),
11171 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11172 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11173 SET AUTOCOMMIT= 0;
11174 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11175 SELECT f_int1, f_int1, '', '', 'was inserted'
11176 FROM t0_template source_tab
11177 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11178         
11179 # check transactions-1 success:         1
11180 COMMIT WORK;
11181         
11182 # check transactions-2 success:         1
11183 ROLLBACK WORK;
11184         
11185 # check transactions-3 success:         1
11186 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11187 COMMIT WORK;
11188 ROLLBACK WORK;
11189         
11190 # check transactions-4 success:         1
11191 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11192 SELECT f_int1, f_int1, '', '', 'was inserted'
11193 FROM t0_template source_tab
11194 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11195         
11196 # check transactions-5 success:         1
11197 ROLLBACK WORK;
11198         
11199 # check transactions-6 success:         1
11200 # INFO: Storage engine used for t1 seems to be transactional.
11201 COMMIT;
11202         
11203 # check transactions-7 success:         1
11204 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11205 COMMIT WORK;
11206 SET @@session.sql_mode = 'traditional';
11207 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11208 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11209 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11210 '', '', 'was inserted' FROM t0_template
11211 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11212 ERROR 22012: Division by 0
11213 COMMIT;
11214         
11215 # check transactions-8 success:         1
11216 # INFO: Storage engine used for t1 seems to be able to revert
11217 #       changes made by the failing statement.
11218 SET @@session.sql_mode = '';
11219 SET AUTOCOMMIT= 1;
11220 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11221 COMMIT WORK;
11222 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11223         
11224 # check special-1 success:      1
11225 UPDATE t1 SET f_charbig = '';
11226         
11227 # check special-2 success:      1
11228 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11229 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11230 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11231 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11232 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11233 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11234 'just inserted' FROM t0_template
11235 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11236 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11237 BEGIN
11238 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11239 f_charbig = 'updated by trigger'
11240       WHERE f_int1 = new.f_int1;
11241 END|
11242 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11243 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11244 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11245         
11246 # check trigger-1 success:      1
11247 DROP TRIGGER trg_1;
11248 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11249 f_int2 = CAST(f_char1 AS SIGNED INT),
11250 f_charbig = 'just inserted'
11251    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11252 DELETE FROM t0_aux
11253 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11254 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11255 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11256 'just inserted' FROM t0_template
11257 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11258 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11259 BEGIN
11260 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11261 f_charbig = 'updated by trigger'
11262       WHERE f_int1 = new.f_int1;
11263 END|
11264 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11265 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11266 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11267         
11268 # check trigger-2 success:      1
11269 DROP TRIGGER trg_1;
11270 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11271 f_int2 = CAST(f_char1 AS SIGNED INT),
11272 f_charbig = 'just inserted'
11273    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11274 DELETE FROM t0_aux
11275 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11276 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11277 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11278 'just inserted' FROM t0_template
11279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11280 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11281 BEGIN
11282 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11283 f_charbig = 'updated by trigger'
11284       WHERE f_int1 = new.f_int1;
11285 END|
11286 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11287 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11288         
11289 # check trigger-3 success:      1
11290 DROP TRIGGER trg_1;
11291 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11292 f_int2 = CAST(f_char1 AS SIGNED INT),
11293 f_charbig = 'just inserted'
11294    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11295 DELETE FROM t0_aux
11296 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11297 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11298 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11299 'just inserted' FROM t0_template
11300 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11301 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11302 BEGIN
11303 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11304 f_charbig = 'updated by trigger'
11305       WHERE f_int1 = - old.f_int1;
11306 END|
11307 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11308 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11309         
11310 # check trigger-4 success:      1
11311 DROP TRIGGER trg_1;
11312 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11313 f_int2 = CAST(f_char1 AS SIGNED INT),
11314 f_charbig = 'just inserted'
11315    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11316 DELETE FROM t0_aux
11317 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11318 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11319 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11320 'just inserted' FROM t0_template
11321 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11322 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11323 BEGIN
11324 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11325 f_charbig = 'updated by trigger'
11326       WHERE f_int1 = new.f_int1;
11327 END|
11328 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11329 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11330         
11331 # check trigger-5 success:      1
11332 DROP TRIGGER trg_1;
11333 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11334 f_int2 = CAST(f_char1 AS SIGNED INT),
11335 f_charbig = 'just inserted'
11336    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11337 DELETE FROM t0_aux
11338 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11339 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11340 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11341 'just inserted' FROM t0_template
11342 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11343 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11344 BEGIN
11345 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11346 f_charbig = 'updated by trigger'
11347       WHERE f_int1 = - old.f_int1;
11348 END|
11349 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11350 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11351         
11352 # check trigger-6 success:      1
11353 DROP TRIGGER trg_1;
11354 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11355 f_int2 = CAST(f_char1 AS SIGNED INT),
11356 f_charbig = 'just inserted'
11357    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11358 DELETE FROM t0_aux
11359 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11360 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11361 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11362 'just inserted' FROM t0_template
11363 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11364 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11365 BEGIN
11366 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11367 f_charbig = 'updated by trigger'
11368       WHERE f_int1 = - old.f_int1;
11369 END|
11370 DELETE FROM t0_aux
11371 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11372         
11373 # check trigger-7 success:      1
11374 DROP TRIGGER trg_1;
11375 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11376 f_int2 = CAST(f_char1 AS SIGNED INT),
11377 f_charbig = 'just inserted'
11378    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11379 DELETE FROM t0_aux
11380 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11381 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11382 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11383 'just inserted' FROM t0_template
11384 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11385 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11386 BEGIN
11387 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11388 f_charbig = 'updated by trigger'
11389       WHERE f_int1 = - old.f_int1;
11390 END|
11391 DELETE FROM t0_aux
11392 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11393         
11394 # check trigger-8 success:      1
11395 DROP TRIGGER trg_1;
11396 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11397 f_int2 = CAST(f_char1 AS SIGNED INT),
11398 f_charbig = 'just inserted'
11399    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11400 DELETE FROM t0_aux
11401 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11402 DELETE FROM t1
11403 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11404 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11405 BEGIN
11406 SET new.f_int1 = old.f_int1 + @max_row,
11407 new.f_int2 = old.f_int2 - @max_row,
11408 new.f_charbig = '####updated per update trigger####';
11409 END|
11410 UPDATE t1
11411 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11412 f_charbig = '####updated per update statement itself####';
11413         
11414 # check trigger-9 success:      1
11415 DROP TRIGGER trg_2;
11416 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11417 f_int2 = CAST(f_char1 AS SIGNED INT),
11418 f_charbig = CONCAT('===',f_char1,'===');
11419 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11420 BEGIN
11421 SET new.f_int1 = new.f_int1 + @max_row,
11422 new.f_int2 = new.f_int2 - @max_row,
11423 new.f_charbig = '####updated per update trigger####';
11424 END|
11425 UPDATE t1
11426 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11427 f_charbig = '####updated per update statement itself####';
11428         
11429 # check trigger-10 success:     1
11430 DROP TRIGGER trg_2;
11431 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11432 f_int2 = CAST(f_char1 AS SIGNED INT),
11433 f_charbig = CONCAT('===',f_char1,'===');
11434 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11435 BEGIN
11436 SET new.f_int1 = @my_max1 + @counter,
11437 new.f_int2 = @my_min2 - @counter,
11438 new.f_charbig = '####updated per insert trigger####';
11439 SET @counter = @counter + 1;
11440 END|
11441 SET @counter = 1;
11442 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11443 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11444 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11445 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11446 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11447 ORDER BY f_int1;
11448 DROP TRIGGER trg_3;
11449         
11450 # check trigger-11 success:     1
11451 DELETE FROM t1
11452 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11453 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11454 AND f_charbig = '####updated per insert trigger####';
11455 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11456 BEGIN
11457 SET new.f_int1 = @my_max1 + @counter,
11458 new.f_int2 = @my_min2 - @counter,
11459 new.f_charbig = '####updated per insert trigger####';
11460 SET @counter = @counter + 1;
11461 END|
11462 SET @counter = 1;
11463 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11464 INSERT INTO t1 (f_char1, f_char2, f_charbig)
11465 SELECT CAST(f_int1 AS CHAR),
11466 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11467 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11468 ORDER BY f_int1;
11469 DROP TRIGGER trg_3;
11470         
11471 # check trigger-12 success:     1
11472 DELETE FROM t1
11473 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11474 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11475 AND f_charbig = '####updated per insert trigger####';
11476 ANALYZE  TABLE t1;
11477 Table   Op      Msg_type        Msg_text
11478 test.t1 analyze status  OK
11479 CHECK    TABLE t1 EXTENDED;
11480 Table   Op      Msg_type        Msg_text
11481 test.t1 check   status  OK
11482 CHECKSUM TABLE t1 EXTENDED;
11483 Table   Checksum
11484 test.t1 <some_value>
11485 OPTIMIZE TABLE t1;
11486 Table   Op      Msg_type        Msg_text
11487 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
11488 test.t1 optimize        status  OK
11489 # check layout success:    1
11490 REPAIR   TABLE t1 EXTENDED;
11491 Table   Op      Msg_type        Msg_text
11492 test.t1 repair  note    The storage engine for the table doesn't support repair
11493 # check layout success:    1
11494 TRUNCATE t1;
11495         
11496 # check TRUNCATE success:       1
11497 # check layout success:    1
11498 # End usability test (inc/partition_check.inc)
11499 DROP TABLE t1;
11500 CREATE TABLE t1 (
11501 f_int1 INTEGER,
11502 f_int2 INTEGER,
11503 f_char1 CHAR(20),
11504 f_char2 CHAR(20),
11505 f_charbig VARCHAR(1000)
11508 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
11509 (PARTITION part1 VALUES IN (0)
11510 (SUBPARTITION sp11, SUBPARTITION sp12),
11511 PARTITION part2 VALUES IN (1)
11512 (SUBPARTITION sp21, SUBPARTITION sp22),
11513 PARTITION part3 VALUES IN (2)
11514 (SUBPARTITION sp31, SUBPARTITION sp32),
11515 PARTITION part4 VALUES IN (NULL)
11516 (SUBPARTITION sp41, SUBPARTITION sp42));
11517 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11518 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11519 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11520 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
11521 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11522 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11523 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11524 # Start usability test (inc/partition_check.inc)
11525 create_command
11526 SHOW CREATE TABLE t1;
11527 Table   Create Table
11528 t1      CREATE TABLE `t1` (
11529   `f_int1` int(11) DEFAULT NULL,
11530   `f_int2` int(11) DEFAULT NULL,
11531   `f_char1` char(20) DEFAULT NULL,
11532   `f_char2` char(20) DEFAULT NULL,
11533   `f_charbig` varchar(1000) DEFAULT NULL,
11534   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11535 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
11536 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
11537 SUBPARTITION BY HASH (f_int1 + 1)
11538 (PARTITION part1 VALUES IN (0)
11539  (SUBPARTITION sp11 ENGINE = InnoDB,
11540   SUBPARTITION sp12 ENGINE = InnoDB),
11541  PARTITION part2 VALUES IN (1)
11542  (SUBPARTITION sp21 ENGINE = InnoDB,
11543   SUBPARTITION sp22 ENGINE = InnoDB),
11544  PARTITION part3 VALUES IN (2)
11545  (SUBPARTITION sp31 ENGINE = InnoDB,
11546   SUBPARTITION sp32 ENGINE = InnoDB),
11547  PARTITION part4 VALUES IN (NULL)
11548  (SUBPARTITION sp41 ENGINE = InnoDB,
11549   SUBPARTITION sp42 ENGINE = InnoDB)) */
11551 # check prerequisites-1 success:    1
11552 # check COUNT(*) success:    1
11553 # check MIN/MAX(f_int1) success:    1
11554 # check MIN/MAX(f_int2) success:    1
11555 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11556 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11557 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11558 WHERE f_int1 IN (2,3);
11559 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11560 # check prerequisites-3 success:    1
11561 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11562 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11563 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11564 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11565 WHERE f_int1 IN (2,3);
11566 DELETE FROM t1 WHERE f_charbig = 'delete me';
11567 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11568 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11569 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11570 WHERE f_int1 IN (2,3);
11571 DELETE FROM t1 WHERE f_charbig = 'delete me';
11572 # check read via f_int1 success: 1
11573 # check read via f_int2 success: 1
11574         
11575 # check multiple-1 success:     1
11576 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11577         
11578 # check multiple-2 success:     1
11579 INSERT INTO t1 SELECT * FROM t0_template
11580 WHERE MOD(f_int1,3) = 0;
11581         
11582 # check multiple-3 success:     1
11583 UPDATE t1 SET f_int1 = f_int1 + @max_row
11584 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11585 AND @max_row_div2 + @max_row_div4;
11586         
11587 # check multiple-4 success:     1
11588 DELETE FROM t1
11589 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11590 AND @max_row_div2 + @max_row_div4 + @max_row;
11591         
11592 # check multiple-5 success:     1
11593 SELECT COUNT(*) INTO @try_count FROM t0_template
11594 WHERE MOD(f_int1,3) = 0
11595 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11596 SELECT COUNT(*) INTO @clash_count
11597 FROM t1 INNER JOIN t0_template USING(f_int1)
11598 WHERE MOD(f_int1,3) = 0
11599 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11600 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11601 INSERT INTO t1
11602 SET f_int1 = @cur_value , f_int2 = @cur_value,
11603 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11604 f_charbig = '#SINGLE#';
11605         
11606 # check single-1 success:       1
11607 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11608 INSERT INTO t1
11609 SET f_int1 = @cur_value , f_int2 = @cur_value,
11610 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11611 f_charbig = '#SINGLE#';
11612         
11613 # check single-2 success:       1
11614 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11615 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11616 UPDATE t1 SET f_int1 = @cur_value2
11617 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11618         
11619 # check single-3 success:       1
11620 SET @cur_value1= -1;
11621 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11622 UPDATE t1 SET f_int1 = @cur_value1
11623 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11624         
11625 # check single-4 success:       1
11626 SELECT MAX(f_int1) INTO @cur_value FROM t1;
11627 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11628         
11629 # check single-5 success:       1
11630 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11631         
11632 # check single-6 success:       1
11633 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11634         
11635 # check single-7 success:       1
11636 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11637 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11638 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11639 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11640 f_charbig = '#NULL#';
11641 INSERT INTO t1
11642 SET f_int1 = NULL , f_int2 = -@max_row,
11643 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11644 f_charbig = '#NULL#';
11645 # check null success:    1
11646         
11647 # check null-1 success:         1
11648 UPDATE t1 SET f_int1 = -@max_row
11649 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11650 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11651         
11652 # check null-2 success:         1
11653 UPDATE t1 SET f_int1 = NULL
11654 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11655 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11656         
11657 # check null-3 success:         1
11658 DELETE FROM t1
11659 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11660 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11661         
11662 # check null-4 success:         1
11663 DELETE FROM t1
11664 WHERE f_int1 = 0 AND f_int2 = 0
11665 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11666 AND f_charbig = '#NULL#';
11667 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11668 SELECT f_int1, f_int1, '', '', 'was inserted'
11669    FROM t0_template source_tab
11670 WHERE MOD(f_int1,3) = 0
11671 AND f_int1 BETWEEN @max_row_div2 AND @max_row
11672 ON DUPLICATE KEY
11673 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11674 f_int2 = 2 * @max_row + source_tab.f_int1,
11675 f_charbig = 'was updated';
11676         
11677 # check unique-1-a success:     1
11678         
11679 # check unique-1-b success:     1
11680 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11681 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11682 f_int2 = CAST(f_char1 AS SIGNED INT),
11683 f_charbig = CONCAT('===',f_char1,'===')
11684 WHERE f_charbig = 'was updated';
11685 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11686 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11687    FROM t0_template source_tab
11688 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11689         
11690 # check replace success:        1
11691 DELETE FROM t1
11692 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11693 DELETE FROM t1
11694 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11695 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11696 UPDATE t1 SET f_int2 = f_int1,
11697 f_char1 = CAST(f_int1 AS CHAR),
11698 f_char2 = CAST(f_int1 AS CHAR),
11699 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11700 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11701 SET AUTOCOMMIT= 0;
11702 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11703 SELECT f_int1, f_int1, '', '', 'was inserted'
11704 FROM t0_template source_tab
11705 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11706         
11707 # check transactions-1 success:         1
11708 COMMIT WORK;
11709         
11710 # check transactions-2 success:         1
11711 ROLLBACK WORK;
11712         
11713 # check transactions-3 success:         1
11714 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11715 COMMIT WORK;
11716 ROLLBACK WORK;
11717         
11718 # check transactions-4 success:         1
11719 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11720 SELECT f_int1, f_int1, '', '', 'was inserted'
11721 FROM t0_template source_tab
11722 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11723         
11724 # check transactions-5 success:         1
11725 ROLLBACK WORK;
11726         
11727 # check transactions-6 success:         1
11728 # INFO: Storage engine used for t1 seems to be transactional.
11729 COMMIT;
11730         
11731 # check transactions-7 success:         1
11732 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11733 COMMIT WORK;
11734 SET @@session.sql_mode = 'traditional';
11735 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11736 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11737 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11738 '', '', 'was inserted' FROM t0_template
11739 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11740 ERROR 22012: Division by 0
11741 COMMIT;
11742         
11743 # check transactions-8 success:         1
11744 # INFO: Storage engine used for t1 seems to be able to revert
11745 #       changes made by the failing statement.
11746 SET @@session.sql_mode = '';
11747 SET AUTOCOMMIT= 1;
11748 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11749 COMMIT WORK;
11750 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11751         
11752 # check special-1 success:      1
11753 UPDATE t1 SET f_charbig = '';
11754         
11755 # check special-2 success:      1
11756 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11757 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11758 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11759 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11760 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11761 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11762 'just inserted' FROM t0_template
11763 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11764 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11765 BEGIN
11766 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11767 f_charbig = 'updated by trigger'
11768       WHERE f_int1 = new.f_int1;
11769 END|
11770 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11771 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11772 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11773         
11774 # check trigger-1 success:      1
11775 DROP TRIGGER trg_1;
11776 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11777 f_int2 = CAST(f_char1 AS SIGNED INT),
11778 f_charbig = 'just inserted'
11779    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11780 DELETE FROM t0_aux
11781 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11782 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11783 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11784 'just inserted' FROM t0_template
11785 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11786 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11787 BEGIN
11788 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11789 f_charbig = 'updated by trigger'
11790       WHERE f_int1 = new.f_int1;
11791 END|
11792 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11793 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11794 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11795         
11796 # check trigger-2 success:      1
11797 DROP TRIGGER trg_1;
11798 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11799 f_int2 = CAST(f_char1 AS SIGNED INT),
11800 f_charbig = 'just inserted'
11801    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11802 DELETE FROM t0_aux
11803 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11804 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11805 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11806 'just inserted' FROM t0_template
11807 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11808 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11809 BEGIN
11810 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11811 f_charbig = 'updated by trigger'
11812       WHERE f_int1 = new.f_int1;
11813 END|
11814 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11815 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11816         
11817 # check trigger-3 success:      1
11818 DROP TRIGGER trg_1;
11819 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11820 f_int2 = CAST(f_char1 AS SIGNED INT),
11821 f_charbig = 'just inserted'
11822    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11823 DELETE FROM t0_aux
11824 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11825 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11826 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11827 'just inserted' FROM t0_template
11828 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11829 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11830 BEGIN
11831 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11832 f_charbig = 'updated by trigger'
11833       WHERE f_int1 = - old.f_int1;
11834 END|
11835 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11836 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11837         
11838 # check trigger-4 success:      1
11839 DROP TRIGGER trg_1;
11840 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11841 f_int2 = CAST(f_char1 AS SIGNED INT),
11842 f_charbig = 'just inserted'
11843    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11844 DELETE FROM t0_aux
11845 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11846 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11847 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11848 'just inserted' FROM t0_template
11849 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11850 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11851 BEGIN
11852 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11853 f_charbig = 'updated by trigger'
11854       WHERE f_int1 = new.f_int1;
11855 END|
11856 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11857 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11858         
11859 # check trigger-5 success:      1
11860 DROP TRIGGER trg_1;
11861 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11862 f_int2 = CAST(f_char1 AS SIGNED INT),
11863 f_charbig = 'just inserted'
11864    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11865 DELETE FROM t0_aux
11866 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11867 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11868 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11869 'just inserted' FROM t0_template
11870 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11871 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11872 BEGIN
11873 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11874 f_charbig = 'updated by trigger'
11875       WHERE f_int1 = - old.f_int1;
11876 END|
11877 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11878 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11879         
11880 # check trigger-6 success:      1
11881 DROP TRIGGER trg_1;
11882 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11883 f_int2 = CAST(f_char1 AS SIGNED INT),
11884 f_charbig = 'just inserted'
11885    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11886 DELETE FROM t0_aux
11887 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11888 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11889 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11890 'just inserted' FROM t0_template
11891 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11892 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11893 BEGIN
11894 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11895 f_charbig = 'updated by trigger'
11896       WHERE f_int1 = - old.f_int1;
11897 END|
11898 DELETE FROM t0_aux
11899 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11900         
11901 # check trigger-7 success:      1
11902 DROP TRIGGER trg_1;
11903 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11904 f_int2 = CAST(f_char1 AS SIGNED INT),
11905 f_charbig = 'just inserted'
11906    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11907 DELETE FROM t0_aux
11908 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11909 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11910 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11911 'just inserted' FROM t0_template
11912 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11913 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11914 BEGIN
11915 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11916 f_charbig = 'updated by trigger'
11917       WHERE f_int1 = - old.f_int1;
11918 END|
11919 DELETE FROM t0_aux
11920 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11921         
11922 # check trigger-8 success:      1
11923 DROP TRIGGER trg_1;
11924 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11925 f_int2 = CAST(f_char1 AS SIGNED INT),
11926 f_charbig = 'just inserted'
11927    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11928 DELETE FROM t0_aux
11929 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11930 DELETE FROM t1
11931 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11932 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11933 BEGIN
11934 SET new.f_int1 = old.f_int1 + @max_row,
11935 new.f_int2 = old.f_int2 - @max_row,
11936 new.f_charbig = '####updated per update trigger####';
11937 END|
11938 UPDATE t1
11939 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11940 f_charbig = '####updated per update statement itself####';
11941         
11942 # check trigger-9 success:      1
11943 DROP TRIGGER trg_2;
11944 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11945 f_int2 = CAST(f_char1 AS SIGNED INT),
11946 f_charbig = CONCAT('===',f_char1,'===');
11947 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11948 BEGIN
11949 SET new.f_int1 = new.f_int1 + @max_row,
11950 new.f_int2 = new.f_int2 - @max_row,
11951 new.f_charbig = '####updated per update trigger####';
11952 END|
11953 UPDATE t1
11954 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11955 f_charbig = '####updated per update statement itself####';
11956         
11957 # check trigger-10 success:     1
11958 DROP TRIGGER trg_2;
11959 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11960 f_int2 = CAST(f_char1 AS SIGNED INT),
11961 f_charbig = CONCAT('===',f_char1,'===');
11962 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11963 BEGIN
11964 SET new.f_int1 = @my_max1 + @counter,
11965 new.f_int2 = @my_min2 - @counter,
11966 new.f_charbig = '####updated per insert trigger####';
11967 SET @counter = @counter + 1;
11968 END|
11969 SET @counter = 1;
11970 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11971 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11972 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11973 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11974 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11975 ORDER BY f_int1;
11976 DROP TRIGGER trg_3;
11977         
11978 # check trigger-11 success:     1
11979 DELETE FROM t1
11980 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11981 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11982 AND f_charbig = '####updated per insert trigger####';
11983 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11984 BEGIN
11985 SET new.f_int1 = @my_max1 + @counter,
11986 new.f_int2 = @my_min2 - @counter,
11987 new.f_charbig = '####updated per insert trigger####';
11988 SET @counter = @counter + 1;
11989 END|
11990 SET @counter = 1;
11991 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11992 INSERT INTO t1 (f_char1, f_char2, f_charbig)
11993 SELECT CAST(f_int1 AS CHAR),
11994 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11995 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11996 ORDER BY f_int1;
11997 DROP TRIGGER trg_3;
11998         
11999 # check trigger-12 success:     1
12000 DELETE FROM t1
12001 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12002 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12003 AND f_charbig = '####updated per insert trigger####';
12004 ANALYZE  TABLE t1;
12005 Table   Op      Msg_type        Msg_text
12006 test.t1 analyze status  OK
12007 CHECK    TABLE t1 EXTENDED;
12008 Table   Op      Msg_type        Msg_text
12009 test.t1 check   status  OK
12010 CHECKSUM TABLE t1 EXTENDED;
12011 Table   Checksum
12012 test.t1 <some_value>
12013 OPTIMIZE TABLE t1;
12014 Table   Op      Msg_type        Msg_text
12015 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12016 test.t1 optimize        status  OK
12017 # check layout success:    1
12018 REPAIR   TABLE t1 EXTENDED;
12019 Table   Op      Msg_type        Msg_text
12020 test.t1 repair  note    The storage engine for the table doesn't support repair
12021 # check layout success:    1
12022 TRUNCATE t1;
12023         
12024 # check TRUNCATE success:       1
12025 # check layout success:    1
12026 # End usability test (inc/partition_check.inc)
12027 DROP TABLE t1;
12028 CREATE TABLE t1 (
12029 f_int1 INTEGER,
12030 f_int2 INTEGER,
12031 f_char1 CHAR(20),
12032 f_char2 CHAR(20),
12033 f_charbig VARCHAR(1000)
12036 PARTITION BY LIST(ABS(MOD(f_int1,2)))
12037 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
12038 (PARTITION part1 VALUES IN (0),
12039 PARTITION part2 VALUES IN (1),
12040 PARTITION part3 VALUES IN (NULL));
12041 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12042 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12043 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12044 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
12045 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12046 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12047 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12048 # Start usability test (inc/partition_check.inc)
12049 create_command
12050 SHOW CREATE TABLE t1;
12051 Table   Create Table
12052 t1      CREATE TABLE `t1` (
12053   `f_int1` int(11) DEFAULT NULL,
12054   `f_int2` int(11) DEFAULT NULL,
12055   `f_char1` char(20) DEFAULT NULL,
12056   `f_char2` char(20) DEFAULT NULL,
12057   `f_charbig` varchar(1000) DEFAULT NULL,
12058   UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12059 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
12060 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
12061 SUBPARTITION BY KEY (f_int1)
12062 SUBPARTITIONS 3
12063 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
12064  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
12065  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
12067 # check prerequisites-1 success:    1
12068 # check COUNT(*) success:    1
12069 # check MIN/MAX(f_int1) success:    1
12070 # check MIN/MAX(f_int2) success:    1
12071 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12072 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12073 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12074 WHERE f_int1 IN (2,3);
12075 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12076 # check prerequisites-3 success:    1
12077 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12078 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12079 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12080 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12081 WHERE f_int1 IN (2,3);
12082 DELETE FROM t1 WHERE f_charbig = 'delete me';
12083 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12084 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12085 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12086 WHERE f_int1 IN (2,3);
12087 DELETE FROM t1 WHERE f_charbig = 'delete me';
12088 # check read via f_int1 success: 1
12089 # check read via f_int2 success: 1
12090         
12091 # check multiple-1 success:     1
12092 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12093         
12094 # check multiple-2 success:     1
12095 INSERT INTO t1 SELECT * FROM t0_template
12096 WHERE MOD(f_int1,3) = 0;
12097         
12098 # check multiple-3 success:     1
12099 UPDATE t1 SET f_int1 = f_int1 + @max_row
12100 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12101 AND @max_row_div2 + @max_row_div4;
12102         
12103 # check multiple-4 success:     1
12104 DELETE FROM t1
12105 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12106 AND @max_row_div2 + @max_row_div4 + @max_row;
12107         
12108 # check multiple-5 success:     1
12109 SELECT COUNT(*) INTO @try_count FROM t0_template
12110 WHERE MOD(f_int1,3) = 0
12111 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12112 SELECT COUNT(*) INTO @clash_count
12113 FROM t1 INNER JOIN t0_template USING(f_int1)
12114 WHERE MOD(f_int1,3) = 0
12115 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12116 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12117 INSERT INTO t1
12118 SET f_int1 = @cur_value , f_int2 = @cur_value,
12119 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12120 f_charbig = '#SINGLE#';
12121         
12122 # check single-1 success:       1
12123 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12124 INSERT INTO t1
12125 SET f_int1 = @cur_value , f_int2 = @cur_value,
12126 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12127 f_charbig = '#SINGLE#';
12128         
12129 # check single-2 success:       1
12130 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12131 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12132 UPDATE t1 SET f_int1 = @cur_value2
12133 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12134         
12135 # check single-3 success:       1
12136 SET @cur_value1= -1;
12137 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12138 UPDATE t1 SET f_int1 = @cur_value1
12139 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12140         
12141 # check single-4 success:       1
12142 SELECT MAX(f_int1) INTO @cur_value FROM t1;
12143 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12144         
12145 # check single-5 success:       1
12146 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12147         
12148 # check single-6 success:       1
12149 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12150         
12151 # check single-7 success:       1
12152 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12153 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12154 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12155 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12156 f_charbig = '#NULL#';
12157 INSERT INTO t1
12158 SET f_int1 = NULL , f_int2 = -@max_row,
12159 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12160 f_charbig = '#NULL#';
12161 # check null success:    1
12162         
12163 # check null-1 success:         1
12164 UPDATE t1 SET f_int1 = -@max_row
12165 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12166 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12167         
12168 # check null-2 success:         1
12169 UPDATE t1 SET f_int1 = NULL
12170 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12171 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12172         
12173 # check null-3 success:         1
12174 DELETE FROM t1
12175 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12176 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12177         
12178 # check null-4 success:         1
12179 DELETE FROM t1
12180 WHERE f_int1 = 0 AND f_int2 = 0
12181 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12182 AND f_charbig = '#NULL#';
12183 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12184 SELECT f_int1, f_int1, '', '', 'was inserted'
12185    FROM t0_template source_tab
12186 WHERE MOD(f_int1,3) = 0
12187 AND f_int1 BETWEEN @max_row_div2 AND @max_row
12188 ON DUPLICATE KEY
12189 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12190 f_int2 = 2 * @max_row + source_tab.f_int1,
12191 f_charbig = 'was updated';
12192         
12193 # check unique-1-a success:     1
12194         
12195 # check unique-1-b success:     1
12196 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12197 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12198 f_int2 = CAST(f_char1 AS SIGNED INT),
12199 f_charbig = CONCAT('===',f_char1,'===')
12200 WHERE f_charbig = 'was updated';
12201 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12202 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12203    FROM t0_template source_tab
12204 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12205         
12206 # check replace success:        1
12207 DELETE FROM t1
12208 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12209 DELETE FROM t1
12210 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12211 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12212 UPDATE t1 SET f_int2 = f_int1,
12213 f_char1 = CAST(f_int1 AS CHAR),
12214 f_char2 = CAST(f_int1 AS CHAR),
12215 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12216 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12217 SET AUTOCOMMIT= 0;
12218 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12219 SELECT f_int1, f_int1, '', '', 'was inserted'
12220 FROM t0_template source_tab
12221 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12222         
12223 # check transactions-1 success:         1
12224 COMMIT WORK;
12225         
12226 # check transactions-2 success:         1
12227 ROLLBACK WORK;
12228         
12229 # check transactions-3 success:         1
12230 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12231 COMMIT WORK;
12232 ROLLBACK WORK;
12233         
12234 # check transactions-4 success:         1
12235 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12236 SELECT f_int1, f_int1, '', '', 'was inserted'
12237 FROM t0_template source_tab
12238 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12239         
12240 # check transactions-5 success:         1
12241 ROLLBACK WORK;
12242         
12243 # check transactions-6 success:         1
12244 # INFO: Storage engine used for t1 seems to be transactional.
12245 COMMIT;
12246         
12247 # check transactions-7 success:         1
12248 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12249 COMMIT WORK;
12250 SET @@session.sql_mode = 'traditional';
12251 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12252 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12253 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12254 '', '', 'was inserted' FROM t0_template
12255 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12256 ERROR 22012: Division by 0
12257 COMMIT;
12258         
12259 # check transactions-8 success:         1
12260 # INFO: Storage engine used for t1 seems to be able to revert
12261 #       changes made by the failing statement.
12262 SET @@session.sql_mode = '';
12263 SET AUTOCOMMIT= 1;
12264 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12265 COMMIT WORK;
12266 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12267         
12268 # check special-1 success:      1
12269 UPDATE t1 SET f_charbig = '';
12270         
12271 # check special-2 success:      1
12272 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12273 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12274 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12275 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12276 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12277 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12278 'just inserted' FROM t0_template
12279 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12280 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12281 BEGIN
12282 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12283 f_charbig = 'updated by trigger'
12284       WHERE f_int1 = new.f_int1;
12285 END|
12286 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12287 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12288 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12289         
12290 # check trigger-1 success:      1
12291 DROP TRIGGER trg_1;
12292 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12293 f_int2 = CAST(f_char1 AS SIGNED INT),
12294 f_charbig = 'just inserted'
12295    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12296 DELETE FROM t0_aux
12297 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12298 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12299 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12300 'just inserted' FROM t0_template
12301 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12302 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12303 BEGIN
12304 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12305 f_charbig = 'updated by trigger'
12306       WHERE f_int1 = new.f_int1;
12307 END|
12308 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12309 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12310 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12311         
12312 # check trigger-2 success:      1
12313 DROP TRIGGER trg_1;
12314 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12315 f_int2 = CAST(f_char1 AS SIGNED INT),
12316 f_charbig = 'just inserted'
12317    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12318 DELETE FROM t0_aux
12319 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12320 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12321 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12322 'just inserted' FROM t0_template
12323 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12324 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12325 BEGIN
12326 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12327 f_charbig = 'updated by trigger'
12328       WHERE f_int1 = new.f_int1;
12329 END|
12330 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12331 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12332         
12333 # check trigger-3 success:      1
12334 DROP TRIGGER trg_1;
12335 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12336 f_int2 = CAST(f_char1 AS SIGNED INT),
12337 f_charbig = 'just inserted'
12338    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12339 DELETE FROM t0_aux
12340 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12341 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12342 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12343 'just inserted' FROM t0_template
12344 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12345 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12346 BEGIN
12347 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12348 f_charbig = 'updated by trigger'
12349       WHERE f_int1 = - old.f_int1;
12350 END|
12351 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12352 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12353         
12354 # check trigger-4 success:      1
12355 DROP TRIGGER trg_1;
12356 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12357 f_int2 = CAST(f_char1 AS SIGNED INT),
12358 f_charbig = 'just inserted'
12359    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12360 DELETE FROM t0_aux
12361 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12362 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12363 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12364 'just inserted' FROM t0_template
12365 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12366 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12367 BEGIN
12368 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12369 f_charbig = 'updated by trigger'
12370       WHERE f_int1 = new.f_int1;
12371 END|
12372 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12373 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12374         
12375 # check trigger-5 success:      1
12376 DROP TRIGGER trg_1;
12377 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12378 f_int2 = CAST(f_char1 AS SIGNED INT),
12379 f_charbig = 'just inserted'
12380    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12381 DELETE FROM t0_aux
12382 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12383 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12384 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12385 'just inserted' FROM t0_template
12386 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12387 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12388 BEGIN
12389 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12390 f_charbig = 'updated by trigger'
12391       WHERE f_int1 = - old.f_int1;
12392 END|
12393 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12394 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12395         
12396 # check trigger-6 success:      1
12397 DROP TRIGGER trg_1;
12398 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12399 f_int2 = CAST(f_char1 AS SIGNED INT),
12400 f_charbig = 'just inserted'
12401    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12402 DELETE FROM t0_aux
12403 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12404 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12405 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12406 'just inserted' FROM t0_template
12407 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12408 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12409 BEGIN
12410 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12411 f_charbig = 'updated by trigger'
12412       WHERE f_int1 = - old.f_int1;
12413 END|
12414 DELETE FROM t0_aux
12415 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12416         
12417 # check trigger-7 success:      1
12418 DROP TRIGGER trg_1;
12419 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12420 f_int2 = CAST(f_char1 AS SIGNED INT),
12421 f_charbig = 'just inserted'
12422    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12423 DELETE FROM t0_aux
12424 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12425 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12426 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12427 'just inserted' FROM t0_template
12428 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12429 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12430 BEGIN
12431 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12432 f_charbig = 'updated by trigger'
12433       WHERE f_int1 = - old.f_int1;
12434 END|
12435 DELETE FROM t0_aux
12436 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12437         
12438 # check trigger-8 success:      1
12439 DROP TRIGGER trg_1;
12440 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12441 f_int2 = CAST(f_char1 AS SIGNED INT),
12442 f_charbig = 'just inserted'
12443    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12444 DELETE FROM t0_aux
12445 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12446 DELETE FROM t1
12447 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12448 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12449 BEGIN
12450 SET new.f_int1 = old.f_int1 + @max_row,
12451 new.f_int2 = old.f_int2 - @max_row,
12452 new.f_charbig = '####updated per update trigger####';
12453 END|
12454 UPDATE t1
12455 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12456 f_charbig = '####updated per update statement itself####';
12457         
12458 # check trigger-9 success:      1
12459 DROP TRIGGER trg_2;
12460 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12461 f_int2 = CAST(f_char1 AS SIGNED INT),
12462 f_charbig = CONCAT('===',f_char1,'===');
12463 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12464 BEGIN
12465 SET new.f_int1 = new.f_int1 + @max_row,
12466 new.f_int2 = new.f_int2 - @max_row,
12467 new.f_charbig = '####updated per update trigger####';
12468 END|
12469 UPDATE t1
12470 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12471 f_charbig = '####updated per update statement itself####';
12472         
12473 # check trigger-10 success:     1
12474 DROP TRIGGER trg_2;
12475 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12476 f_int2 = CAST(f_char1 AS SIGNED INT),
12477 f_charbig = CONCAT('===',f_char1,'===');
12478 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12479 BEGIN
12480 SET new.f_int1 = @my_max1 + @counter,
12481 new.f_int2 = @my_min2 - @counter,
12482 new.f_charbig = '####updated per insert trigger####';
12483 SET @counter = @counter + 1;
12484 END|
12485 SET @counter = 1;
12486 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12487 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12488 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12489 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12490 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12491 ORDER BY f_int1;
12492 DROP TRIGGER trg_3;
12493         
12494 # check trigger-11 success:     1
12495 DELETE FROM t1
12496 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12497 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12498 AND f_charbig = '####updated per insert trigger####';
12499 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12500 BEGIN
12501 SET new.f_int1 = @my_max1 + @counter,
12502 new.f_int2 = @my_min2 - @counter,
12503 new.f_charbig = '####updated per insert trigger####';
12504 SET @counter = @counter + 1;
12505 END|
12506 SET @counter = 1;
12507 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12508 INSERT INTO t1 (f_char1, f_char2, f_charbig)
12509 SELECT CAST(f_int1 AS CHAR),
12510 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12511 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12512 ORDER BY f_int1;
12513 DROP TRIGGER trg_3;
12514         
12515 # check trigger-12 success:     1
12516 DELETE FROM t1
12517 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12518 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12519 AND f_charbig = '####updated per insert trigger####';
12520 ANALYZE  TABLE t1;
12521 Table   Op      Msg_type        Msg_text
12522 test.t1 analyze status  OK
12523 CHECK    TABLE t1 EXTENDED;
12524 Table   Op      Msg_type        Msg_text
12525 test.t1 check   status  OK
12526 CHECKSUM TABLE t1 EXTENDED;
12527 Table   Checksum
12528 test.t1 <some_value>
12529 OPTIMIZE TABLE t1;
12530 Table   Op      Msg_type        Msg_text
12531 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
12532 test.t1 optimize        status  OK
12533 # check layout success:    1
12534 REPAIR   TABLE t1 EXTENDED;
12535 Table   Op      Msg_type        Msg_text
12536 test.t1 repair  note    The storage engine for the table doesn't support repair
12537 # check layout success:    1
12538 TRUNCATE t1;
12539         
12540 # check TRUNCATE success:       1
12541 # check layout success:    1
12542 # End usability test (inc/partition_check.inc)
12543 DROP TABLE t1;
12544 DROP TABLE IF EXISTS t1;
12545 CREATE TABLE t1 (
12546 f_int1 INTEGER,
12547 f_int2 INTEGER,
12548 f_char1 CHAR(20),
12549 f_char2 CHAR(20),
12550 f_charbig VARCHAR(1000)
12553 PARTITION BY HASH(f_int1) PARTITIONS 2;
12554 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12555 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12556 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12557 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
12558 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12559 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12560 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12561 # Start usability test (inc/partition_check.inc)
12562 create_command
12563 SHOW CREATE TABLE t1;
12564 Table   Create Table
12565 t1      CREATE TABLE `t1` (
12566   `f_int1` int(11) DEFAULT NULL,
12567   `f_int2` int(11) DEFAULT NULL,
12568   `f_char1` char(20) DEFAULT NULL,
12569   `f_char2` char(20) DEFAULT NULL,
12570   `f_charbig` varchar(1000) DEFAULT NULL,
12571   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12572 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
12573 /*!50100 PARTITION BY HASH (f_int1)
12574 PARTITIONS 2 */
12576 # check prerequisites-1 success:    1
12577 # check COUNT(*) success:    1
12578 # check MIN/MAX(f_int1) success:    1
12579 # check MIN/MAX(f_int2) success:    1
12580 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12581 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12582 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12583 WHERE f_int1 IN (2,3);
12584 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12585 # check prerequisites-3 success:    1
12586 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12587 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12588 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12589 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12590 WHERE f_int1 IN (2,3);
12591 DELETE FROM t1 WHERE f_charbig = 'delete me';
12592 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12593 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12594 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12595 WHERE f_int1 IN (2,3);
12596 DELETE FROM t1 WHERE f_charbig = 'delete me';
12597 # check read via f_int1 success: 1
12598 # check read via f_int2 success: 1
12599         
12600 # check multiple-1 success:     1
12601 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12602         
12603 # check multiple-2 success:     1
12604 INSERT INTO t1 SELECT * FROM t0_template
12605 WHERE MOD(f_int1,3) = 0;
12606         
12607 # check multiple-3 success:     1
12608 UPDATE t1 SET f_int1 = f_int1 + @max_row
12609 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12610 AND @max_row_div2 + @max_row_div4;
12611         
12612 # check multiple-4 success:     1
12613 DELETE FROM t1
12614 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12615 AND @max_row_div2 + @max_row_div4 + @max_row;
12616         
12617 # check multiple-5 success:     1
12618 SELECT COUNT(*) INTO @try_count FROM t0_template
12619 WHERE MOD(f_int1,3) = 0
12620 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12621 SELECT COUNT(*) INTO @clash_count
12622 FROM t1 INNER JOIN t0_template USING(f_int1)
12623 WHERE MOD(f_int1,3) = 0
12624 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12625 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12626 INSERT INTO t1
12627 SET f_int1 = @cur_value , f_int2 = @cur_value,
12628 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12629 f_charbig = '#SINGLE#';
12630         
12631 # check single-1 success:       1
12632 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12633 INSERT INTO t1
12634 SET f_int1 = @cur_value , f_int2 = @cur_value,
12635 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12636 f_charbig = '#SINGLE#';
12637         
12638 # check single-2 success:       1
12639 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12640 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12641 UPDATE t1 SET f_int1 = @cur_value2
12642 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12643         
12644 # check single-3 success:       1
12645 SET @cur_value1= -1;
12646 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12647 UPDATE t1 SET f_int1 = @cur_value1
12648 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12649         
12650 # check single-4 success:       1
12651 SELECT MAX(f_int1) INTO @cur_value FROM t1;
12652 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12653         
12654 # check single-5 success:       1
12655 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12656         
12657 # check single-6 success:       1
12658 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12659         
12660 # check single-7 success:       1
12661 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12662 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12663 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12664 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12665 f_charbig = '#NULL#';
12666 INSERT INTO t1
12667 SET f_int1 = NULL , f_int2 = -@max_row,
12668 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12669 f_charbig = '#NULL#';
12670 # check null success:    1
12671         
12672 # check null-1 success:         1
12673 UPDATE t1 SET f_int1 = -@max_row
12674 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12675 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12676         
12677 # check null-2 success:         1
12678 UPDATE t1 SET f_int1 = NULL
12679 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12680 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12681         
12682 # check null-3 success:         1
12683 DELETE FROM t1
12684 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12685 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12686         
12687 # check null-4 success:         1
12688 DELETE FROM t1
12689 WHERE f_int1 = 0 AND f_int2 = 0
12690 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12691 AND f_charbig = '#NULL#';
12692 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12693 SELECT f_int1, f_int1, '', '', 'was inserted'
12694    FROM t0_template source_tab
12695 WHERE MOD(f_int1,3) = 0
12696 AND f_int1 BETWEEN @max_row_div2 AND @max_row
12697 ON DUPLICATE KEY
12698 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12699 f_int2 = 2 * @max_row + source_tab.f_int1,
12700 f_charbig = 'was updated';
12701         
12702 # check unique-1-a success:     1
12703         
12704 # check unique-1-b success:     1
12705 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12706 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12707 f_int2 = CAST(f_char1 AS SIGNED INT),
12708 f_charbig = CONCAT('===',f_char1,'===')
12709 WHERE f_charbig = 'was updated';
12710 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12711 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12712    FROM t0_template source_tab
12713 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12714         
12715 # check replace success:        1
12716 DELETE FROM t1
12717 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12718 DELETE FROM t1
12719 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12720 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12721 UPDATE t1 SET f_int2 = f_int1,
12722 f_char1 = CAST(f_int1 AS CHAR),
12723 f_char2 = CAST(f_int1 AS CHAR),
12724 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12725 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12726 SET AUTOCOMMIT= 0;
12727 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12728 SELECT f_int1, f_int1, '', '', 'was inserted'
12729 FROM t0_template source_tab
12730 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12731         
12732 # check transactions-1 success:         1
12733 COMMIT WORK;
12734         
12735 # check transactions-2 success:         1
12736 ROLLBACK WORK;
12737         
12738 # check transactions-3 success:         1
12739 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12740 COMMIT WORK;
12741 ROLLBACK WORK;
12742         
12743 # check transactions-4 success:         1
12744 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12745 SELECT f_int1, f_int1, '', '', 'was inserted'
12746 FROM t0_template source_tab
12747 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12748         
12749 # check transactions-5 success:         1
12750 ROLLBACK WORK;
12751         
12752 # check transactions-6 success:         1
12753 # INFO: Storage engine used for t1 seems to be transactional.
12754 COMMIT;
12755         
12756 # check transactions-7 success:         1
12757 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12758 COMMIT WORK;
12759 SET @@session.sql_mode = 'traditional';
12760 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12761 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12762 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12763 '', '', 'was inserted' FROM t0_template
12764 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12765 ERROR 22012: Division by 0
12766 COMMIT;
12767         
12768 # check transactions-8 success:         1
12769 # INFO: Storage engine used for t1 seems to be able to revert
12770 #       changes made by the failing statement.
12771 SET @@session.sql_mode = '';
12772 SET AUTOCOMMIT= 1;
12773 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12774 COMMIT WORK;
12775 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12776         
12777 # check special-1 success:      1
12778 UPDATE t1 SET f_charbig = '';
12779         
12780 # check special-2 success:      1
12781 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12782 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12783 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12784 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12785 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12786 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12787 'just inserted' FROM t0_template
12788 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12789 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12790 BEGIN
12791 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12792 f_charbig = 'updated by trigger'
12793       WHERE f_int1 = new.f_int1;
12794 END|
12795 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12796 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12797 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12798         
12799 # check trigger-1 success:      1
12800 DROP TRIGGER trg_1;
12801 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12802 f_int2 = CAST(f_char1 AS SIGNED INT),
12803 f_charbig = 'just inserted'
12804    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12805 DELETE FROM t0_aux
12806 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12807 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12808 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12809 'just inserted' FROM t0_template
12810 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12811 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12812 BEGIN
12813 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12814 f_charbig = 'updated by trigger'
12815       WHERE f_int1 = new.f_int1;
12816 END|
12817 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12818 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12819 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12820         
12821 # check trigger-2 success:      1
12822 DROP TRIGGER trg_1;
12823 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12824 f_int2 = CAST(f_char1 AS SIGNED INT),
12825 f_charbig = 'just inserted'
12826    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12827 DELETE FROM t0_aux
12828 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12829 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12830 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12831 'just inserted' FROM t0_template
12832 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12833 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12834 BEGIN
12835 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12836 f_charbig = 'updated by trigger'
12837       WHERE f_int1 = new.f_int1;
12838 END|
12839 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12840 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12841         
12842 # check trigger-3 success:      1
12843 DROP TRIGGER trg_1;
12844 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12845 f_int2 = CAST(f_char1 AS SIGNED INT),
12846 f_charbig = 'just inserted'
12847    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12848 DELETE FROM t0_aux
12849 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12850 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12851 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12852 'just inserted' FROM t0_template
12853 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12854 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12855 BEGIN
12856 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12857 f_charbig = 'updated by trigger'
12858       WHERE f_int1 = - old.f_int1;
12859 END|
12860 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12861 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12862         
12863 # check trigger-4 success:      1
12864 DROP TRIGGER trg_1;
12865 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12866 f_int2 = CAST(f_char1 AS SIGNED INT),
12867 f_charbig = 'just inserted'
12868    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12869 DELETE FROM t0_aux
12870 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12871 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12872 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12873 'just inserted' FROM t0_template
12874 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12875 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12876 BEGIN
12877 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12878 f_charbig = 'updated by trigger'
12879       WHERE f_int1 = new.f_int1;
12880 END|
12881 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12882 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12883         
12884 # check trigger-5 success:      1
12885 DROP TRIGGER trg_1;
12886 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12887 f_int2 = CAST(f_char1 AS SIGNED INT),
12888 f_charbig = 'just inserted'
12889    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12890 DELETE FROM t0_aux
12891 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12892 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12893 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12894 'just inserted' FROM t0_template
12895 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12896 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12897 BEGIN
12898 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12899 f_charbig = 'updated by trigger'
12900       WHERE f_int1 = - old.f_int1;
12901 END|
12902 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12903 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12904         
12905 # check trigger-6 success:      1
12906 DROP TRIGGER trg_1;
12907 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12908 f_int2 = CAST(f_char1 AS SIGNED INT),
12909 f_charbig = 'just inserted'
12910    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12911 DELETE FROM t0_aux
12912 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12913 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12914 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12915 'just inserted' FROM t0_template
12916 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12917 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12918 BEGIN
12919 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12920 f_charbig = 'updated by trigger'
12921       WHERE f_int1 = - old.f_int1;
12922 END|
12923 DELETE FROM t0_aux
12924 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12925         
12926 # check trigger-7 success:      1
12927 DROP TRIGGER trg_1;
12928 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12929 f_int2 = CAST(f_char1 AS SIGNED INT),
12930 f_charbig = 'just inserted'
12931    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12932 DELETE FROM t0_aux
12933 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12934 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12935 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12936 'just inserted' FROM t0_template
12937 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12938 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12939 BEGIN
12940 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12941 f_charbig = 'updated by trigger'
12942       WHERE f_int1 = - old.f_int1;
12943 END|
12944 DELETE FROM t0_aux
12945 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12946         
12947 # check trigger-8 success:      1
12948 DROP TRIGGER trg_1;
12949 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12950 f_int2 = CAST(f_char1 AS SIGNED INT),
12951 f_charbig = 'just inserted'
12952    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12953 DELETE FROM t0_aux
12954 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12955 DELETE FROM t1
12956 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12957 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12958 BEGIN
12959 SET new.f_int1 = old.f_int1 + @max_row,
12960 new.f_int2 = old.f_int2 - @max_row,
12961 new.f_charbig = '####updated per update trigger####';
12962 END|
12963 UPDATE t1
12964 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12965 f_charbig = '####updated per update statement itself####';
12966         
12967 # check trigger-9 success:      1
12968 DROP TRIGGER trg_2;
12969 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12970 f_int2 = CAST(f_char1 AS SIGNED INT),
12971 f_charbig = CONCAT('===',f_char1,'===');
12972 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12973 BEGIN
12974 SET new.f_int1 = new.f_int1 + @max_row,
12975 new.f_int2 = new.f_int2 - @max_row,
12976 new.f_charbig = '####updated per update trigger####';
12977 END|
12978 UPDATE t1
12979 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12980 f_charbig = '####updated per update statement itself####';
12981         
12982 # check trigger-10 success:     1
12983 DROP TRIGGER trg_2;
12984 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12985 f_int2 = CAST(f_char1 AS SIGNED INT),
12986 f_charbig = CONCAT('===',f_char1,'===');
12987 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12988 BEGIN
12989 SET new.f_int1 = @my_max1 + @counter,
12990 new.f_int2 = @my_min2 - @counter,
12991 new.f_charbig = '####updated per insert trigger####';
12992 SET @counter = @counter + 1;
12993 END|
12994 SET @counter = 1;
12995 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12996 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12997 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12998 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12999 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13000 ORDER BY f_int1;
13001 DROP TRIGGER trg_3;
13002         
13003 # check trigger-11 success:     1
13004 DELETE FROM t1
13005 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13006 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13007 AND f_charbig = '####updated per insert trigger####';
13008 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13009 BEGIN
13010 SET new.f_int1 = @my_max1 + @counter,
13011 new.f_int2 = @my_min2 - @counter,
13012 new.f_charbig = '####updated per insert trigger####';
13013 SET @counter = @counter + 1;
13014 END|
13015 SET @counter = 1;
13016 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13017 INSERT INTO t1 (f_char1, f_char2, f_charbig)
13018 SELECT CAST(f_int1 AS CHAR),
13019 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13020 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13021 ORDER BY f_int1;
13022 DROP TRIGGER trg_3;
13023         
13024 # check trigger-12 success:     1
13025 DELETE FROM t1
13026 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13027 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13028 AND f_charbig = '####updated per insert trigger####';
13029 ANALYZE  TABLE t1;
13030 Table   Op      Msg_type        Msg_text
13031 test.t1 analyze status  OK
13032 CHECK    TABLE t1 EXTENDED;
13033 Table   Op      Msg_type        Msg_text
13034 test.t1 check   status  OK
13035 CHECKSUM TABLE t1 EXTENDED;
13036 Table   Checksum
13037 test.t1 <some_value>
13038 OPTIMIZE TABLE t1;
13039 Table   Op      Msg_type        Msg_text
13040 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13041 test.t1 optimize        status  OK
13042 # check layout success:    1
13043 REPAIR   TABLE t1 EXTENDED;
13044 Table   Op      Msg_type        Msg_text
13045 test.t1 repair  note    The storage engine for the table doesn't support repair
13046 # check layout success:    1
13047 TRUNCATE t1;
13048         
13049 # check TRUNCATE success:       1
13050 # check layout success:    1
13051 # End usability test (inc/partition_check.inc)
13052 DROP TABLE t1;
13053 CREATE TABLE t1 (
13054 f_int1 INTEGER,
13055 f_int2 INTEGER,
13056 f_char1 CHAR(20),
13057 f_char2 CHAR(20),
13058 f_charbig VARCHAR(1000)
13061 PARTITION BY KEY(f_int1) PARTITIONS 5;
13062 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13063 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13064 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13065 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
13066 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13067 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13068 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13069 # Start usability test (inc/partition_check.inc)
13070 create_command
13071 SHOW CREATE TABLE t1;
13072 Table   Create Table
13073 t1      CREATE TABLE `t1` (
13074   `f_int1` int(11) DEFAULT NULL,
13075   `f_int2` int(11) DEFAULT NULL,
13076   `f_char1` char(20) DEFAULT NULL,
13077   `f_char2` char(20) DEFAULT NULL,
13078   `f_charbig` varchar(1000) DEFAULT NULL,
13079   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13080 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
13081 /*!50100 PARTITION BY KEY (f_int1)
13082 PARTITIONS 5 */
13084 # check prerequisites-1 success:    1
13085 # check COUNT(*) success:    1
13086 # check MIN/MAX(f_int1) success:    1
13087 # check MIN/MAX(f_int2) success:    1
13088 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13089 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13090 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13091 WHERE f_int1 IN (2,3);
13092 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13093 # check prerequisites-3 success:    1
13094 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13095 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13096 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13097 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13098 WHERE f_int1 IN (2,3);
13099 DELETE FROM t1 WHERE f_charbig = 'delete me';
13100 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13101 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13102 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13103 WHERE f_int1 IN (2,3);
13104 DELETE FROM t1 WHERE f_charbig = 'delete me';
13105 # check read via f_int1 success: 1
13106 # check read via f_int2 success: 1
13107         
13108 # check multiple-1 success:     1
13109 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13110         
13111 # check multiple-2 success:     1
13112 INSERT INTO t1 SELECT * FROM t0_template
13113 WHERE MOD(f_int1,3) = 0;
13114         
13115 # check multiple-3 success:     1
13116 UPDATE t1 SET f_int1 = f_int1 + @max_row
13117 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13118 AND @max_row_div2 + @max_row_div4;
13119         
13120 # check multiple-4 success:     1
13121 DELETE FROM t1
13122 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13123 AND @max_row_div2 + @max_row_div4 + @max_row;
13124         
13125 # check multiple-5 success:     1
13126 SELECT COUNT(*) INTO @try_count FROM t0_template
13127 WHERE MOD(f_int1,3) = 0
13128 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13129 SELECT COUNT(*) INTO @clash_count
13130 FROM t1 INNER JOIN t0_template USING(f_int1)
13131 WHERE MOD(f_int1,3) = 0
13132 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13133 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13134 INSERT INTO t1
13135 SET f_int1 = @cur_value , f_int2 = @cur_value,
13136 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13137 f_charbig = '#SINGLE#';
13138         
13139 # check single-1 success:       1
13140 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13141 INSERT INTO t1
13142 SET f_int1 = @cur_value , f_int2 = @cur_value,
13143 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13144 f_charbig = '#SINGLE#';
13145         
13146 # check single-2 success:       1
13147 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13148 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13149 UPDATE t1 SET f_int1 = @cur_value2
13150 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13151         
13152 # check single-3 success:       1
13153 SET @cur_value1= -1;
13154 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13155 UPDATE t1 SET f_int1 = @cur_value1
13156 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13157         
13158 # check single-4 success:       1
13159 SELECT MAX(f_int1) INTO @cur_value FROM t1;
13160 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13161         
13162 # check single-5 success:       1
13163 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13164         
13165 # check single-6 success:       1
13166 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13167         
13168 # check single-7 success:       1
13169 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13170 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13171 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13172 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13173 f_charbig = '#NULL#';
13174 INSERT INTO t1
13175 SET f_int1 = NULL , f_int2 = -@max_row,
13176 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13177 f_charbig = '#NULL#';
13178 # check null success:    1
13179         
13180 # check null-1 success:         1
13181 UPDATE t1 SET f_int1 = -@max_row
13182 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13183 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13184         
13185 # check null-2 success:         1
13186 UPDATE t1 SET f_int1 = NULL
13187 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13188 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13189         
13190 # check null-3 success:         1
13191 DELETE FROM t1
13192 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13193 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13194         
13195 # check null-4 success:         1
13196 DELETE FROM t1
13197 WHERE f_int1 = 0 AND f_int2 = 0
13198 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13199 AND f_charbig = '#NULL#';
13200 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13201 SELECT f_int1, f_int1, '', '', 'was inserted'
13202    FROM t0_template source_tab
13203 WHERE MOD(f_int1,3) = 0
13204 AND f_int1 BETWEEN @max_row_div2 AND @max_row
13205 ON DUPLICATE KEY
13206 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13207 f_int2 = 2 * @max_row + source_tab.f_int1,
13208 f_charbig = 'was updated';
13209         
13210 # check unique-1-a success:     1
13211         
13212 # check unique-1-b success:     1
13213 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13214 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13215 f_int2 = CAST(f_char1 AS SIGNED INT),
13216 f_charbig = CONCAT('===',f_char1,'===')
13217 WHERE f_charbig = 'was updated';
13218 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13219 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13220    FROM t0_template source_tab
13221 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13222         
13223 # check replace success:        1
13224 DELETE FROM t1
13225 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13226 DELETE FROM t1
13227 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13228 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13229 UPDATE t1 SET f_int2 = f_int1,
13230 f_char1 = CAST(f_int1 AS CHAR),
13231 f_char2 = CAST(f_int1 AS CHAR),
13232 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13233 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13234 SET AUTOCOMMIT= 0;
13235 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13236 SELECT f_int1, f_int1, '', '', 'was inserted'
13237 FROM t0_template source_tab
13238 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13239         
13240 # check transactions-1 success:         1
13241 COMMIT WORK;
13242         
13243 # check transactions-2 success:         1
13244 ROLLBACK WORK;
13245         
13246 # check transactions-3 success:         1
13247 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13248 COMMIT WORK;
13249 ROLLBACK WORK;
13250         
13251 # check transactions-4 success:         1
13252 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13253 SELECT f_int1, f_int1, '', '', 'was inserted'
13254 FROM t0_template source_tab
13255 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13256         
13257 # check transactions-5 success:         1
13258 ROLLBACK WORK;
13259         
13260 # check transactions-6 success:         1
13261 # INFO: Storage engine used for t1 seems to be transactional.
13262 COMMIT;
13263         
13264 # check transactions-7 success:         1
13265 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13266 COMMIT WORK;
13267 SET @@session.sql_mode = 'traditional';
13268 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13269 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13270 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13271 '', '', 'was inserted' FROM t0_template
13272 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13273 ERROR 22012: Division by 0
13274 COMMIT;
13275         
13276 # check transactions-8 success:         1
13277 # INFO: Storage engine used for t1 seems to be able to revert
13278 #       changes made by the failing statement.
13279 SET @@session.sql_mode = '';
13280 SET AUTOCOMMIT= 1;
13281 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13282 COMMIT WORK;
13283 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13284         
13285 # check special-1 success:      1
13286 UPDATE t1 SET f_charbig = '';
13287         
13288 # check special-2 success:      1
13289 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13290 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13291 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13292 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13293 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13294 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13295 'just inserted' FROM t0_template
13296 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13297 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13298 BEGIN
13299 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13300 f_charbig = 'updated by trigger'
13301       WHERE f_int1 = new.f_int1;
13302 END|
13303 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13304 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13305 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13306         
13307 # check trigger-1 success:      1
13308 DROP TRIGGER trg_1;
13309 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13310 f_int2 = CAST(f_char1 AS SIGNED INT),
13311 f_charbig = 'just inserted'
13312    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13313 DELETE FROM t0_aux
13314 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13315 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13316 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13317 'just inserted' FROM t0_template
13318 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13319 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13320 BEGIN
13321 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13322 f_charbig = 'updated by trigger'
13323       WHERE f_int1 = new.f_int1;
13324 END|
13325 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13326 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13327 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13328         
13329 # check trigger-2 success:      1
13330 DROP TRIGGER trg_1;
13331 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13332 f_int2 = CAST(f_char1 AS SIGNED INT),
13333 f_charbig = 'just inserted'
13334    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13335 DELETE FROM t0_aux
13336 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13337 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13338 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13339 'just inserted' FROM t0_template
13340 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13341 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13342 BEGIN
13343 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13344 f_charbig = 'updated by trigger'
13345       WHERE f_int1 = new.f_int1;
13346 END|
13347 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13348 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13349         
13350 # check trigger-3 success:      1
13351 DROP TRIGGER trg_1;
13352 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13353 f_int2 = CAST(f_char1 AS SIGNED INT),
13354 f_charbig = 'just inserted'
13355    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13356 DELETE FROM t0_aux
13357 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13358 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13359 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13360 'just inserted' FROM t0_template
13361 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13362 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13363 BEGIN
13364 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13365 f_charbig = 'updated by trigger'
13366       WHERE f_int1 = - old.f_int1;
13367 END|
13368 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13369 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13370         
13371 # check trigger-4 success:      1
13372 DROP TRIGGER trg_1;
13373 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13374 f_int2 = CAST(f_char1 AS SIGNED INT),
13375 f_charbig = 'just inserted'
13376    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13377 DELETE FROM t0_aux
13378 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13379 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13380 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13381 'just inserted' FROM t0_template
13382 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13383 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13384 BEGIN
13385 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13386 f_charbig = 'updated by trigger'
13387       WHERE f_int1 = new.f_int1;
13388 END|
13389 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13390 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13391         
13392 # check trigger-5 success:      1
13393 DROP TRIGGER trg_1;
13394 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13395 f_int2 = CAST(f_char1 AS SIGNED INT),
13396 f_charbig = 'just inserted'
13397    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13398 DELETE FROM t0_aux
13399 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13400 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13401 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13402 'just inserted' FROM t0_template
13403 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13404 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13405 BEGIN
13406 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13407 f_charbig = 'updated by trigger'
13408       WHERE f_int1 = - old.f_int1;
13409 END|
13410 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13411 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13412         
13413 # check trigger-6 success:      1
13414 DROP TRIGGER trg_1;
13415 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13416 f_int2 = CAST(f_char1 AS SIGNED INT),
13417 f_charbig = 'just inserted'
13418    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13419 DELETE FROM t0_aux
13420 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13421 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13422 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13423 'just inserted' FROM t0_template
13424 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13425 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13426 BEGIN
13427 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13428 f_charbig = 'updated by trigger'
13429       WHERE f_int1 = - old.f_int1;
13430 END|
13431 DELETE FROM t0_aux
13432 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13433         
13434 # check trigger-7 success:      1
13435 DROP TRIGGER trg_1;
13436 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13437 f_int2 = CAST(f_char1 AS SIGNED INT),
13438 f_charbig = 'just inserted'
13439    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13440 DELETE FROM t0_aux
13441 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13442 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13443 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13444 'just inserted' FROM t0_template
13445 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13446 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13447 BEGIN
13448 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13449 f_charbig = 'updated by trigger'
13450       WHERE f_int1 = - old.f_int1;
13451 END|
13452 DELETE FROM t0_aux
13453 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13454         
13455 # check trigger-8 success:      1
13456 DROP TRIGGER trg_1;
13457 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13458 f_int2 = CAST(f_char1 AS SIGNED INT),
13459 f_charbig = 'just inserted'
13460    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13461 DELETE FROM t0_aux
13462 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13463 DELETE FROM t1
13464 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13465 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13466 BEGIN
13467 SET new.f_int1 = old.f_int1 + @max_row,
13468 new.f_int2 = old.f_int2 - @max_row,
13469 new.f_charbig = '####updated per update trigger####';
13470 END|
13471 UPDATE t1
13472 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13473 f_charbig = '####updated per update statement itself####';
13474         
13475 # check trigger-9 success:      1
13476 DROP TRIGGER trg_2;
13477 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13478 f_int2 = CAST(f_char1 AS SIGNED INT),
13479 f_charbig = CONCAT('===',f_char1,'===');
13480 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13481 BEGIN
13482 SET new.f_int1 = new.f_int1 + @max_row,
13483 new.f_int2 = new.f_int2 - @max_row,
13484 new.f_charbig = '####updated per update trigger####';
13485 END|
13486 UPDATE t1
13487 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13488 f_charbig = '####updated per update statement itself####';
13489         
13490 # check trigger-10 success:     1
13491 DROP TRIGGER trg_2;
13492 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13493 f_int2 = CAST(f_char1 AS SIGNED INT),
13494 f_charbig = CONCAT('===',f_char1,'===');
13495 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13496 BEGIN
13497 SET new.f_int1 = @my_max1 + @counter,
13498 new.f_int2 = @my_min2 - @counter,
13499 new.f_charbig = '####updated per insert trigger####';
13500 SET @counter = @counter + 1;
13501 END|
13502 SET @counter = 1;
13503 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13504 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13505 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13506 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13507 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13508 ORDER BY f_int1;
13509 DROP TRIGGER trg_3;
13510         
13511 # check trigger-11 success:     1
13512 DELETE FROM t1
13513 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13514 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13515 AND f_charbig = '####updated per insert trigger####';
13516 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13517 BEGIN
13518 SET new.f_int1 = @my_max1 + @counter,
13519 new.f_int2 = @my_min2 - @counter,
13520 new.f_charbig = '####updated per insert trigger####';
13521 SET @counter = @counter + 1;
13522 END|
13523 SET @counter = 1;
13524 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13525 INSERT INTO t1 (f_char1, f_char2, f_charbig)
13526 SELECT CAST(f_int1 AS CHAR),
13527 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13528 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13529 ORDER BY f_int1;
13530 DROP TRIGGER trg_3;
13531         
13532 # check trigger-12 success:     1
13533 DELETE FROM t1
13534 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13535 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13536 AND f_charbig = '####updated per insert trigger####';
13537 ANALYZE  TABLE t1;
13538 Table   Op      Msg_type        Msg_text
13539 test.t1 analyze status  OK
13540 CHECK    TABLE t1 EXTENDED;
13541 Table   Op      Msg_type        Msg_text
13542 test.t1 check   status  OK
13543 CHECKSUM TABLE t1 EXTENDED;
13544 Table   Checksum
13545 test.t1 <some_value>
13546 OPTIMIZE TABLE t1;
13547 Table   Op      Msg_type        Msg_text
13548 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
13549 test.t1 optimize        status  OK
13550 # check layout success:    1
13551 REPAIR   TABLE t1 EXTENDED;
13552 Table   Op      Msg_type        Msg_text
13553 test.t1 repair  note    The storage engine for the table doesn't support repair
13554 # check layout success:    1
13555 TRUNCATE t1;
13556         
13557 # check TRUNCATE success:       1
13558 # check layout success:    1
13559 # End usability test (inc/partition_check.inc)
13560 DROP TABLE t1;
13561 CREATE TABLE t1 (
13562 f_int1 INTEGER,
13563 f_int2 INTEGER,
13564 f_char1 CHAR(20),
13565 f_char2 CHAR(20),
13566 f_charbig VARCHAR(1000)
13569 PARTITION BY LIST(MOD(f_int1,4))
13570 (PARTITION part_3 VALUES IN (-3),
13571 PARTITION part_2 VALUES IN (-2),
13572 PARTITION part_1 VALUES IN (-1),
13573 PARTITION part_N VALUES IN (NULL),
13574 PARTITION part0 VALUES IN (0),
13575 PARTITION part1 VALUES IN (1),
13576 PARTITION part2 VALUES IN (2),
13577 PARTITION part3 VALUES IN (3));
13578 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13579 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13580 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13581 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
13582 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13583 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13584 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13585 # Start usability test (inc/partition_check.inc)
13586 create_command
13587 SHOW CREATE TABLE t1;
13588 Table   Create Table
13589 t1      CREATE TABLE `t1` (
13590   `f_int1` int(11) DEFAULT NULL,
13591   `f_int2` int(11) DEFAULT NULL,
13592   `f_char1` char(20) DEFAULT NULL,
13593   `f_char2` char(20) DEFAULT NULL,
13594   `f_charbig` varchar(1000) DEFAULT NULL,
13595   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13596 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
13597 /*!50100 PARTITION BY LIST (MOD(f_int1,4))
13598 (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
13599  PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
13600  PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
13601  PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
13602  PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
13603  PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
13604  PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
13605  PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
13607 # check prerequisites-1 success:    1
13608 # check COUNT(*) success:    1
13609 # check MIN/MAX(f_int1) success:    1
13610 # check MIN/MAX(f_int2) success:    1
13611 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13612 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13613 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13614 WHERE f_int1 IN (2,3);
13615 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13616 # check prerequisites-3 success:    1
13617 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13618 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13619 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13620 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13621 WHERE f_int1 IN (2,3);
13622 DELETE FROM t1 WHERE f_charbig = 'delete me';
13623 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13624 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13625 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13626 WHERE f_int1 IN (2,3);
13627 DELETE FROM t1 WHERE f_charbig = 'delete me';
13628 # check read via f_int1 success: 1
13629 # check read via f_int2 success: 1
13630         
13631 # check multiple-1 success:     1
13632 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13633         
13634 # check multiple-2 success:     1
13635 INSERT INTO t1 SELECT * FROM t0_template
13636 WHERE MOD(f_int1,3) = 0;
13637         
13638 # check multiple-3 success:     1
13639 UPDATE t1 SET f_int1 = f_int1 + @max_row
13640 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13641 AND @max_row_div2 + @max_row_div4;
13642         
13643 # check multiple-4 success:     1
13644 DELETE FROM t1
13645 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13646 AND @max_row_div2 + @max_row_div4 + @max_row;
13647         
13648 # check multiple-5 success:     1
13649 SELECT COUNT(*) INTO @try_count FROM t0_template
13650 WHERE MOD(f_int1,3) = 0
13651 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13652 SELECT COUNT(*) INTO @clash_count
13653 FROM t1 INNER JOIN t0_template USING(f_int1)
13654 WHERE MOD(f_int1,3) = 0
13655 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13656 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13657 INSERT INTO t1
13658 SET f_int1 = @cur_value , f_int2 = @cur_value,
13659 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13660 f_charbig = '#SINGLE#';
13661         
13662 # check single-1 success:       1
13663 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13664 INSERT INTO t1
13665 SET f_int1 = @cur_value , f_int2 = @cur_value,
13666 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13667 f_charbig = '#SINGLE#';
13668         
13669 # check single-2 success:       1
13670 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13671 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13672 UPDATE t1 SET f_int1 = @cur_value2
13673 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13674         
13675 # check single-3 success:       1
13676 SET @cur_value1= -1;
13677 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13678 UPDATE t1 SET f_int1 = @cur_value1
13679 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13680         
13681 # check single-4 success:       1
13682 SELECT MAX(f_int1) INTO @cur_value FROM t1;
13683 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13684         
13685 # check single-5 success:       1
13686 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13687         
13688 # check single-6 success:       1
13689 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13690         
13691 # check single-7 success:       1
13692 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13693 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13694 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13695 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13696 f_charbig = '#NULL#';
13697 INSERT INTO t1
13698 SET f_int1 = NULL , f_int2 = -@max_row,
13699 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13700 f_charbig = '#NULL#';
13701 # check null success:    1
13702         
13703 # check null-1 success:         1
13704 UPDATE t1 SET f_int1 = -@max_row
13705 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13706 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13707         
13708 # check null-2 success:         1
13709 UPDATE t1 SET f_int1 = NULL
13710 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13711 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13712         
13713 # check null-3 success:         1
13714 DELETE FROM t1
13715 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13716 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13717         
13718 # check null-4 success:         1
13719 DELETE FROM t1
13720 WHERE f_int1 = 0 AND f_int2 = 0
13721 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13722 AND f_charbig = '#NULL#';
13723 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13724 SELECT f_int1, f_int1, '', '', 'was inserted'
13725    FROM t0_template source_tab
13726 WHERE MOD(f_int1,3) = 0
13727 AND f_int1 BETWEEN @max_row_div2 AND @max_row
13728 ON DUPLICATE KEY
13729 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13730 f_int2 = 2 * @max_row + source_tab.f_int1,
13731 f_charbig = 'was updated';
13732         
13733 # check unique-1-a success:     1
13734         
13735 # check unique-1-b success:     1
13736 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13737 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13738 f_int2 = CAST(f_char1 AS SIGNED INT),
13739 f_charbig = CONCAT('===',f_char1,'===')
13740 WHERE f_charbig = 'was updated';
13741 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13742 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13743    FROM t0_template source_tab
13744 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13745         
13746 # check replace success:        1
13747 DELETE FROM t1
13748 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13749 DELETE FROM t1
13750 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13751 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13752 UPDATE t1 SET f_int2 = f_int1,
13753 f_char1 = CAST(f_int1 AS CHAR),
13754 f_char2 = CAST(f_int1 AS CHAR),
13755 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13756 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13757 SET AUTOCOMMIT= 0;
13758 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13759 SELECT f_int1, f_int1, '', '', 'was inserted'
13760 FROM t0_template source_tab
13761 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13762         
13763 # check transactions-1 success:         1
13764 COMMIT WORK;
13765         
13766 # check transactions-2 success:         1
13767 ROLLBACK WORK;
13768         
13769 # check transactions-3 success:         1
13770 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13771 COMMIT WORK;
13772 ROLLBACK WORK;
13773         
13774 # check transactions-4 success:         1
13775 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13776 SELECT f_int1, f_int1, '', '', 'was inserted'
13777 FROM t0_template source_tab
13778 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13779         
13780 # check transactions-5 success:         1
13781 ROLLBACK WORK;
13782         
13783 # check transactions-6 success:         1
13784 # INFO: Storage engine used for t1 seems to be transactional.
13785 COMMIT;
13786         
13787 # check transactions-7 success:         1
13788 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13789 COMMIT WORK;
13790 SET @@session.sql_mode = 'traditional';
13791 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13792 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13793 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13794 '', '', 'was inserted' FROM t0_template
13795 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13796 ERROR 22012: Division by 0
13797 COMMIT;
13798         
13799 # check transactions-8 success:         1
13800 # INFO: Storage engine used for t1 seems to be able to revert
13801 #       changes made by the failing statement.
13802 SET @@session.sql_mode = '';
13803 SET AUTOCOMMIT= 1;
13804 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13805 COMMIT WORK;
13806 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13807         
13808 # check special-1 success:      1
13809 UPDATE t1 SET f_charbig = '';
13810         
13811 # check special-2 success:      1
13812 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13813 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13814 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13815 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13816 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13817 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13818 'just inserted' FROM t0_template
13819 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13820 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13821 BEGIN
13822 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13823 f_charbig = 'updated by trigger'
13824       WHERE f_int1 = new.f_int1;
13825 END|
13826 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13827 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13828 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13829         
13830 # check trigger-1 success:      1
13831 DROP TRIGGER trg_1;
13832 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13833 f_int2 = CAST(f_char1 AS SIGNED INT),
13834 f_charbig = 'just inserted'
13835    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13836 DELETE FROM t0_aux
13837 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13838 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13839 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13840 'just inserted' FROM t0_template
13841 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13842 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13843 BEGIN
13844 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13845 f_charbig = 'updated by trigger'
13846       WHERE f_int1 = new.f_int1;
13847 END|
13848 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13849 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13850 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13851         
13852 # check trigger-2 success:      1
13853 DROP TRIGGER trg_1;
13854 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13855 f_int2 = CAST(f_char1 AS SIGNED INT),
13856 f_charbig = 'just inserted'
13857    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13858 DELETE FROM t0_aux
13859 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13860 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13861 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13862 'just inserted' FROM t0_template
13863 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13864 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13865 BEGIN
13866 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13867 f_charbig = 'updated by trigger'
13868       WHERE f_int1 = new.f_int1;
13869 END|
13870 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13871 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13872         
13873 # check trigger-3 success:      1
13874 DROP TRIGGER trg_1;
13875 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13876 f_int2 = CAST(f_char1 AS SIGNED INT),
13877 f_charbig = 'just inserted'
13878    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13879 DELETE FROM t0_aux
13880 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13881 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13882 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13883 'just inserted' FROM t0_template
13884 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13885 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13886 BEGIN
13887 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13888 f_charbig = 'updated by trigger'
13889       WHERE f_int1 = - old.f_int1;
13890 END|
13891 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13892 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13893         
13894 # check trigger-4 success:      1
13895 DROP TRIGGER trg_1;
13896 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13897 f_int2 = CAST(f_char1 AS SIGNED INT),
13898 f_charbig = 'just inserted'
13899    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13900 DELETE FROM t0_aux
13901 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13902 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13903 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13904 'just inserted' FROM t0_template
13905 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13906 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13907 BEGIN
13908 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13909 f_charbig = 'updated by trigger'
13910       WHERE f_int1 = new.f_int1;
13911 END|
13912 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13913 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13914         
13915 # check trigger-5 success:      1
13916 DROP TRIGGER trg_1;
13917 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13918 f_int2 = CAST(f_char1 AS SIGNED INT),
13919 f_charbig = 'just inserted'
13920    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13921 DELETE FROM t0_aux
13922 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13923 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13924 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13925 'just inserted' FROM t0_template
13926 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13927 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13928 BEGIN
13929 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13930 f_charbig = 'updated by trigger'
13931       WHERE f_int1 = - old.f_int1;
13932 END|
13933 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13934 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13935         
13936 # check trigger-6 success:      1
13937 DROP TRIGGER trg_1;
13938 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13939 f_int2 = CAST(f_char1 AS SIGNED INT),
13940 f_charbig = 'just inserted'
13941    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13942 DELETE FROM t0_aux
13943 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13944 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13945 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13946 'just inserted' FROM t0_template
13947 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13948 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13949 BEGIN
13950 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13951 f_charbig = 'updated by trigger'
13952       WHERE f_int1 = - old.f_int1;
13953 END|
13954 DELETE FROM t0_aux
13955 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13956         
13957 # check trigger-7 success:      1
13958 DROP TRIGGER trg_1;
13959 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13960 f_int2 = CAST(f_char1 AS SIGNED INT),
13961 f_charbig = 'just inserted'
13962    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13963 DELETE FROM t0_aux
13964 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13965 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13966 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13967 'just inserted' FROM t0_template
13968 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13969 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13970 BEGIN
13971 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13972 f_charbig = 'updated by trigger'
13973       WHERE f_int1 = - old.f_int1;
13974 END|
13975 DELETE FROM t0_aux
13976 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13977         
13978 # check trigger-8 success:      1
13979 DROP TRIGGER trg_1;
13980 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13981 f_int2 = CAST(f_char1 AS SIGNED INT),
13982 f_charbig = 'just inserted'
13983    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13984 DELETE FROM t0_aux
13985 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13986 DELETE FROM t1
13987 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13988 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13989 BEGIN
13990 SET new.f_int1 = old.f_int1 + @max_row,
13991 new.f_int2 = old.f_int2 - @max_row,
13992 new.f_charbig = '####updated per update trigger####';
13993 END|
13994 UPDATE t1
13995 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13996 f_charbig = '####updated per update statement itself####';
13997         
13998 # check trigger-9 success:      1
13999 DROP TRIGGER trg_2;
14000 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14001 f_int2 = CAST(f_char1 AS SIGNED INT),
14002 f_charbig = CONCAT('===',f_char1,'===');
14003 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14004 BEGIN
14005 SET new.f_int1 = new.f_int1 + @max_row,
14006 new.f_int2 = new.f_int2 - @max_row,
14007 new.f_charbig = '####updated per update trigger####';
14008 END|
14009 UPDATE t1
14010 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14011 f_charbig = '####updated per update statement itself####';
14012         
14013 # check trigger-10 success:     1
14014 DROP TRIGGER trg_2;
14015 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14016 f_int2 = CAST(f_char1 AS SIGNED INT),
14017 f_charbig = CONCAT('===',f_char1,'===');
14018 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14019 BEGIN
14020 SET new.f_int1 = @my_max1 + @counter,
14021 new.f_int2 = @my_min2 - @counter,
14022 new.f_charbig = '####updated per insert trigger####';
14023 SET @counter = @counter + 1;
14024 END|
14025 SET @counter = 1;
14026 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14027 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14028 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14029 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14030 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14031 ORDER BY f_int1;
14032 DROP TRIGGER trg_3;
14033         
14034 # check trigger-11 success:     1
14035 DELETE FROM t1
14036 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14037 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14038 AND f_charbig = '####updated per insert trigger####';
14039 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14040 BEGIN
14041 SET new.f_int1 = @my_max1 + @counter,
14042 new.f_int2 = @my_min2 - @counter,
14043 new.f_charbig = '####updated per insert trigger####';
14044 SET @counter = @counter + 1;
14045 END|
14046 SET @counter = 1;
14047 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14048 INSERT INTO t1 (f_char1, f_char2, f_charbig)
14049 SELECT CAST(f_int1 AS CHAR),
14050 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14051 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14052 ORDER BY f_int1;
14053 DROP TRIGGER trg_3;
14054         
14055 # check trigger-12 success:     1
14056 DELETE FROM t1
14057 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14058 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14059 AND f_charbig = '####updated per insert trigger####';
14060 ANALYZE  TABLE t1;
14061 Table   Op      Msg_type        Msg_text
14062 test.t1 analyze status  OK
14063 CHECK    TABLE t1 EXTENDED;
14064 Table   Op      Msg_type        Msg_text
14065 test.t1 check   status  OK
14066 CHECKSUM TABLE t1 EXTENDED;
14067 Table   Checksum
14068 test.t1 <some_value>
14069 OPTIMIZE TABLE t1;
14070 Table   Op      Msg_type        Msg_text
14071 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14072 test.t1 optimize        status  OK
14073 # check layout success:    1
14074 REPAIR   TABLE t1 EXTENDED;
14075 Table   Op      Msg_type        Msg_text
14076 test.t1 repair  note    The storage engine for the table doesn't support repair
14077 # check layout success:    1
14078 TRUNCATE t1;
14079         
14080 # check TRUNCATE success:       1
14081 # check layout success:    1
14082 # End usability test (inc/partition_check.inc)
14083 DROP TABLE t1;
14084 CREATE TABLE t1 (
14085 f_int1 INTEGER,
14086 f_int2 INTEGER,
14087 f_char1 CHAR(20),
14088 f_char2 CHAR(20),
14089 f_charbig VARCHAR(1000)
14092 PARTITION BY RANGE(f_int1)
14093 (PARTITION parta VALUES LESS THAN (0),
14094 PARTITION partb VALUES LESS THAN (5),
14095 PARTITION partc VALUES LESS THAN (10),
14096 PARTITION partd VALUES LESS THAN (10 + 5),
14097 PARTITION parte VALUES LESS THAN (20),
14098 PARTITION partf VALUES LESS THAN (2147483646));
14099 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14100 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14101 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14102 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
14103 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14104 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14105 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14106 # Start usability test (inc/partition_check.inc)
14107 create_command
14108 SHOW CREATE TABLE t1;
14109 Table   Create Table
14110 t1      CREATE TABLE `t1` (
14111   `f_int1` int(11) DEFAULT NULL,
14112   `f_int2` int(11) DEFAULT NULL,
14113   `f_char1` char(20) DEFAULT NULL,
14114   `f_char2` char(20) DEFAULT NULL,
14115   `f_charbig` varchar(1000) DEFAULT NULL,
14116   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14117 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
14118 /*!50100 PARTITION BY RANGE (f_int1)
14119 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
14120  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
14121  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
14122  PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
14123  PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
14124  PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
14126 # check prerequisites-1 success:    1
14127 # check COUNT(*) success:    1
14128 # check MIN/MAX(f_int1) success:    1
14129 # check MIN/MAX(f_int2) success:    1
14130 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14131 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14132 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14133 WHERE f_int1 IN (2,3);
14134 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14135 # check prerequisites-3 success:    1
14136 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14137 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14138 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14139 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14140 WHERE f_int1 IN (2,3);
14141 DELETE FROM t1 WHERE f_charbig = 'delete me';
14142 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14143 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14144 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14145 WHERE f_int1 IN (2,3);
14146 DELETE FROM t1 WHERE f_charbig = 'delete me';
14147 # check read via f_int1 success: 1
14148 # check read via f_int2 success: 1
14149         
14150 # check multiple-1 success:     1
14151 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14152         
14153 # check multiple-2 success:     1
14154 INSERT INTO t1 SELECT * FROM t0_template
14155 WHERE MOD(f_int1,3) = 0;
14156         
14157 # check multiple-3 success:     1
14158 UPDATE t1 SET f_int1 = f_int1 + @max_row
14159 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14160 AND @max_row_div2 + @max_row_div4;
14161         
14162 # check multiple-4 success:     1
14163 DELETE FROM t1
14164 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14165 AND @max_row_div2 + @max_row_div4 + @max_row;
14166         
14167 # check multiple-5 success:     1
14168 SELECT COUNT(*) INTO @try_count FROM t0_template
14169 WHERE MOD(f_int1,3) = 0
14170 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14171 SELECT COUNT(*) INTO @clash_count
14172 FROM t1 INNER JOIN t0_template USING(f_int1)
14173 WHERE MOD(f_int1,3) = 0
14174 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14175 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14176 INSERT INTO t1
14177 SET f_int1 = @cur_value , f_int2 = @cur_value,
14178 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14179 f_charbig = '#SINGLE#';
14180         
14181 # check single-1 success:       1
14182 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14183 INSERT INTO t1
14184 SET f_int1 = @cur_value , f_int2 = @cur_value,
14185 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14186 f_charbig = '#SINGLE#';
14187         
14188 # check single-2 success:       1
14189 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14190 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14191 UPDATE t1 SET f_int1 = @cur_value2
14192 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14193         
14194 # check single-3 success:       1
14195 SET @cur_value1= -1;
14196 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14197 UPDATE t1 SET f_int1 = @cur_value1
14198 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14199         
14200 # check single-4 success:       1
14201 SELECT MAX(f_int1) INTO @cur_value FROM t1;
14202 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14203         
14204 # check single-5 success:       1
14205 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14206         
14207 # check single-6 success:       1
14208 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14209 ERROR HY000: Table has no partition for value 2147483647
14210 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14211 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14212 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14213 f_charbig = '#NULL#';
14214 INSERT INTO t1
14215 SET f_int1 = NULL , f_int2 = -@max_row,
14216 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14217 f_charbig = '#NULL#';
14218 # check null success:    1
14219         
14220 # check null-1 success:         1
14221 UPDATE t1 SET f_int1 = -@max_row
14222 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14223 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14224         
14225 # check null-2 success:         1
14226 UPDATE t1 SET f_int1 = NULL
14227 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14228 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14229         
14230 # check null-3 success:         1
14231 DELETE FROM t1
14232 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14233 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14234         
14235 # check null-4 success:         1
14236 DELETE FROM t1
14237 WHERE f_int1 = 0 AND f_int2 = 0
14238 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14239 AND f_charbig = '#NULL#';
14240 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14241 SELECT f_int1, f_int1, '', '', 'was inserted'
14242    FROM t0_template source_tab
14243 WHERE MOD(f_int1,3) = 0
14244 AND f_int1 BETWEEN @max_row_div2 AND @max_row
14245 ON DUPLICATE KEY
14246 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14247 f_int2 = 2 * @max_row + source_tab.f_int1,
14248 f_charbig = 'was updated';
14249         
14250 # check unique-1-a success:     1
14251         
14252 # check unique-1-b success:     1
14253 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14254 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14255 f_int2 = CAST(f_char1 AS SIGNED INT),
14256 f_charbig = CONCAT('===',f_char1,'===')
14257 WHERE f_charbig = 'was updated';
14258 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14259 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14260    FROM t0_template source_tab
14261 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14262         
14263 # check replace success:        1
14264 DELETE FROM t1
14265 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14266 DELETE FROM t1
14267 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14268 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14269 UPDATE t1 SET f_int2 = f_int1,
14270 f_char1 = CAST(f_int1 AS CHAR),
14271 f_char2 = CAST(f_int1 AS CHAR),
14272 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14273 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14274 SET AUTOCOMMIT= 0;
14275 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14276 SELECT f_int1, f_int1, '', '', 'was inserted'
14277 FROM t0_template source_tab
14278 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14279         
14280 # check transactions-1 success:         1
14281 COMMIT WORK;
14282         
14283 # check transactions-2 success:         1
14284 ROLLBACK WORK;
14285         
14286 # check transactions-3 success:         1
14287 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14288 COMMIT WORK;
14289 ROLLBACK WORK;
14290         
14291 # check transactions-4 success:         1
14292 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14293 SELECT f_int1, f_int1, '', '', 'was inserted'
14294 FROM t0_template source_tab
14295 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14296         
14297 # check transactions-5 success:         1
14298 ROLLBACK WORK;
14299         
14300 # check transactions-6 success:         1
14301 # INFO: Storage engine used for t1 seems to be transactional.
14302 COMMIT;
14303         
14304 # check transactions-7 success:         1
14305 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14306 COMMIT WORK;
14307 SET @@session.sql_mode = 'traditional';
14308 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14309 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14310 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14311 '', '', 'was inserted' FROM t0_template
14312 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14313 ERROR 22012: Division by 0
14314 COMMIT;
14315         
14316 # check transactions-8 success:         1
14317 # INFO: Storage engine used for t1 seems to be able to revert
14318 #       changes made by the failing statement.
14319 SET @@session.sql_mode = '';
14320 SET AUTOCOMMIT= 1;
14321 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14322 COMMIT WORK;
14323 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14324         
14325 # check special-1 success:      1
14326 UPDATE t1 SET f_charbig = '';
14327         
14328 # check special-2 success:      1
14329 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14330 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14331 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14332 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14333 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14334 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14335 'just inserted' FROM t0_template
14336 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14337 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14338 BEGIN
14339 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14340 f_charbig = 'updated by trigger'
14341       WHERE f_int1 = new.f_int1;
14342 END|
14343 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14344 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14345 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14346         
14347 # check trigger-1 success:      1
14348 DROP TRIGGER trg_1;
14349 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14350 f_int2 = CAST(f_char1 AS SIGNED INT),
14351 f_charbig = 'just inserted'
14352    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14353 DELETE FROM t0_aux
14354 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14355 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14356 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14357 'just inserted' FROM t0_template
14358 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14359 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14360 BEGIN
14361 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14362 f_charbig = 'updated by trigger'
14363       WHERE f_int1 = new.f_int1;
14364 END|
14365 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14366 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14367 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14368         
14369 # check trigger-2 success:      1
14370 DROP TRIGGER trg_1;
14371 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14372 f_int2 = CAST(f_char1 AS SIGNED INT),
14373 f_charbig = 'just inserted'
14374    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14375 DELETE FROM t0_aux
14376 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14377 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14378 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14379 'just inserted' FROM t0_template
14380 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14381 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14382 BEGIN
14383 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14384 f_charbig = 'updated by trigger'
14385       WHERE f_int1 = new.f_int1;
14386 END|
14387 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14388 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14389         
14390 # check trigger-3 success:      1
14391 DROP TRIGGER trg_1;
14392 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14393 f_int2 = CAST(f_char1 AS SIGNED INT),
14394 f_charbig = 'just inserted'
14395    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14396 DELETE FROM t0_aux
14397 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14398 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14399 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14400 'just inserted' FROM t0_template
14401 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14402 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14403 BEGIN
14404 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14405 f_charbig = 'updated by trigger'
14406       WHERE f_int1 = - old.f_int1;
14407 END|
14408 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14409 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14410         
14411 # check trigger-4 success:      1
14412 DROP TRIGGER trg_1;
14413 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14414 f_int2 = CAST(f_char1 AS SIGNED INT),
14415 f_charbig = 'just inserted'
14416    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14417 DELETE FROM t0_aux
14418 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14419 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14420 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14421 'just inserted' FROM t0_template
14422 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14423 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14424 BEGIN
14425 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14426 f_charbig = 'updated by trigger'
14427       WHERE f_int1 = new.f_int1;
14428 END|
14429 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14430 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14431         
14432 # check trigger-5 success:      1
14433 DROP TRIGGER trg_1;
14434 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14435 f_int2 = CAST(f_char1 AS SIGNED INT),
14436 f_charbig = 'just inserted'
14437    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14438 DELETE FROM t0_aux
14439 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14440 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14441 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14442 'just inserted' FROM t0_template
14443 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14444 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14445 BEGIN
14446 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14447 f_charbig = 'updated by trigger'
14448       WHERE f_int1 = - old.f_int1;
14449 END|
14450 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14451 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14452         
14453 # check trigger-6 success:      1
14454 DROP TRIGGER trg_1;
14455 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14456 f_int2 = CAST(f_char1 AS SIGNED INT),
14457 f_charbig = 'just inserted'
14458    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14459 DELETE FROM t0_aux
14460 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14461 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14462 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14463 'just inserted' FROM t0_template
14464 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14465 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14466 BEGIN
14467 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14468 f_charbig = 'updated by trigger'
14469       WHERE f_int1 = - old.f_int1;
14470 END|
14471 DELETE FROM t0_aux
14472 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14473         
14474 # check trigger-7 success:      1
14475 DROP TRIGGER trg_1;
14476 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14477 f_int2 = CAST(f_char1 AS SIGNED INT),
14478 f_charbig = 'just inserted'
14479    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14480 DELETE FROM t0_aux
14481 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14482 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14483 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14484 'just inserted' FROM t0_template
14485 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14486 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14487 BEGIN
14488 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14489 f_charbig = 'updated by trigger'
14490       WHERE f_int1 = - old.f_int1;
14491 END|
14492 DELETE FROM t0_aux
14493 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14494         
14495 # check trigger-8 success:      1
14496 DROP TRIGGER trg_1;
14497 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14498 f_int2 = CAST(f_char1 AS SIGNED INT),
14499 f_charbig = 'just inserted'
14500    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14501 DELETE FROM t0_aux
14502 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14503 DELETE FROM t1
14504 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14505 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14506 BEGIN
14507 SET new.f_int1 = old.f_int1 + @max_row,
14508 new.f_int2 = old.f_int2 - @max_row,
14509 new.f_charbig = '####updated per update trigger####';
14510 END|
14511 UPDATE t1
14512 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14513 f_charbig = '####updated per update statement itself####';
14514         
14515 # check trigger-9 success:      1
14516 DROP TRIGGER trg_2;
14517 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14518 f_int2 = CAST(f_char1 AS SIGNED INT),
14519 f_charbig = CONCAT('===',f_char1,'===');
14520 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14521 BEGIN
14522 SET new.f_int1 = new.f_int1 + @max_row,
14523 new.f_int2 = new.f_int2 - @max_row,
14524 new.f_charbig = '####updated per update trigger####';
14525 END|
14526 UPDATE t1
14527 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14528 f_charbig = '####updated per update statement itself####';
14529         
14530 # check trigger-10 success:     1
14531 DROP TRIGGER trg_2;
14532 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14533 f_int2 = CAST(f_char1 AS SIGNED INT),
14534 f_charbig = CONCAT('===',f_char1,'===');
14535 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14536 BEGIN
14537 SET new.f_int1 = @my_max1 + @counter,
14538 new.f_int2 = @my_min2 - @counter,
14539 new.f_charbig = '####updated per insert trigger####';
14540 SET @counter = @counter + 1;
14541 END|
14542 SET @counter = 1;
14543 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14544 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14545 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14546 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14547 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14548 ORDER BY f_int1;
14549 DROP TRIGGER trg_3;
14550         
14551 # check trigger-11 success:     1
14552 DELETE FROM t1
14553 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14554 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14555 AND f_charbig = '####updated per insert trigger####';
14556 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14557 BEGIN
14558 SET new.f_int1 = @my_max1 + @counter,
14559 new.f_int2 = @my_min2 - @counter,
14560 new.f_charbig = '####updated per insert trigger####';
14561 SET @counter = @counter + 1;
14562 END|
14563 SET @counter = 1;
14564 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14565 INSERT INTO t1 (f_char1, f_char2, f_charbig)
14566 SELECT CAST(f_int1 AS CHAR),
14567 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14568 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14569 ORDER BY f_int1;
14570 DROP TRIGGER trg_3;
14571         
14572 # check trigger-12 success:     1
14573 DELETE FROM t1
14574 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14575 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14576 AND f_charbig = '####updated per insert trigger####';
14577 ANALYZE  TABLE t1;
14578 Table   Op      Msg_type        Msg_text
14579 test.t1 analyze status  OK
14580 CHECK    TABLE t1 EXTENDED;
14581 Table   Op      Msg_type        Msg_text
14582 test.t1 check   status  OK
14583 CHECKSUM TABLE t1 EXTENDED;
14584 Table   Checksum
14585 test.t1 <some_value>
14586 OPTIMIZE TABLE t1;
14587 Table   Op      Msg_type        Msg_text
14588 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
14589 test.t1 optimize        status  OK
14590 # check layout success:    1
14591 REPAIR   TABLE t1 EXTENDED;
14592 Table   Op      Msg_type        Msg_text
14593 test.t1 repair  note    The storage engine for the table doesn't support repair
14594 # check layout success:    1
14595 TRUNCATE t1;
14596         
14597 # check TRUNCATE success:       1
14598 # check layout success:    1
14599 # End usability test (inc/partition_check.inc)
14600 DROP TABLE t1;
14601 CREATE TABLE t1 (
14602 f_int1 INTEGER,
14603 f_int2 INTEGER,
14604 f_char1 CHAR(20),
14605 f_char2 CHAR(20),
14606 f_charbig VARCHAR(1000)
14609 PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
14610 (PARTITION parta VALUES LESS THAN (0),
14611 PARTITION partb VALUES LESS THAN (5),
14612 PARTITION partc VALUES LESS THAN (10),
14613 PARTITION partd VALUES LESS THAN (2147483646));
14614 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14615 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14616 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14617 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
14618 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14619 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14620 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14621 # Start usability test (inc/partition_check.inc)
14622 create_command
14623 SHOW CREATE TABLE t1;
14624 Table   Create Table
14625 t1      CREATE TABLE `t1` (
14626   `f_int1` int(11) DEFAULT NULL,
14627   `f_int2` int(11) DEFAULT NULL,
14628   `f_char1` char(20) DEFAULT NULL,
14629   `f_char2` char(20) DEFAULT NULL,
14630   `f_charbig` varchar(1000) DEFAULT NULL,
14631   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14632 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
14633 /*!50100 PARTITION BY RANGE (f_int1 DIV 2)
14634 SUBPARTITION BY HASH (f_int1)
14635 SUBPARTITIONS 2
14636 (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
14637  PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
14638  PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
14639  PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
14641 # check prerequisites-1 success:    1
14642 # check COUNT(*) success:    1
14643 # check MIN/MAX(f_int1) success:    1
14644 # check MIN/MAX(f_int2) success:    1
14645 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14646 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14647 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14648 WHERE f_int1 IN (2,3);
14649 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14650 # check prerequisites-3 success:    1
14651 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14652 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14653 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14654 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14655 WHERE f_int1 IN (2,3);
14656 DELETE FROM t1 WHERE f_charbig = 'delete me';
14657 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14658 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14659 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14660 WHERE f_int1 IN (2,3);
14661 DELETE FROM t1 WHERE f_charbig = 'delete me';
14662 # check read via f_int1 success: 1
14663 # check read via f_int2 success: 1
14664         
14665 # check multiple-1 success:     1
14666 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14667         
14668 # check multiple-2 success:     1
14669 INSERT INTO t1 SELECT * FROM t0_template
14670 WHERE MOD(f_int1,3) = 0;
14671         
14672 # check multiple-3 success:     1
14673 UPDATE t1 SET f_int1 = f_int1 + @max_row
14674 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14675 AND @max_row_div2 + @max_row_div4;
14676         
14677 # check multiple-4 success:     1
14678 DELETE FROM t1
14679 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14680 AND @max_row_div2 + @max_row_div4 + @max_row;
14681         
14682 # check multiple-5 success:     1
14683 SELECT COUNT(*) INTO @try_count FROM t0_template
14684 WHERE MOD(f_int1,3) = 0
14685 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14686 SELECT COUNT(*) INTO @clash_count
14687 FROM t1 INNER JOIN t0_template USING(f_int1)
14688 WHERE MOD(f_int1,3) = 0
14689 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14690 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14691 INSERT INTO t1
14692 SET f_int1 = @cur_value , f_int2 = @cur_value,
14693 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14694 f_charbig = '#SINGLE#';
14695         
14696 # check single-1 success:       1
14697 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14698 INSERT INTO t1
14699 SET f_int1 = @cur_value , f_int2 = @cur_value,
14700 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14701 f_charbig = '#SINGLE#';
14702         
14703 # check single-2 success:       1
14704 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14705 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14706 UPDATE t1 SET f_int1 = @cur_value2
14707 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14708         
14709 # check single-3 success:       1
14710 SET @cur_value1= -1;
14711 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14712 UPDATE t1 SET f_int1 = @cur_value1
14713 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14714         
14715 # check single-4 success:       1
14716 SELECT MAX(f_int1) INTO @cur_value FROM t1;
14717 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14718         
14719 # check single-5 success:       1
14720 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14721         
14722 # check single-6 success:       1
14723 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14724         
14725 # check single-7 success:       1
14726 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14727 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14728 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14729 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14730 f_charbig = '#NULL#';
14731 INSERT INTO t1
14732 SET f_int1 = NULL , f_int2 = -@max_row,
14733 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14734 f_charbig = '#NULL#';
14735 # check null success:    1
14736         
14737 # check null-1 success:         1
14738 UPDATE t1 SET f_int1 = -@max_row
14739 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14740 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14741         
14742 # check null-2 success:         1
14743 UPDATE t1 SET f_int1 = NULL
14744 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14745 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14746         
14747 # check null-3 success:         1
14748 DELETE FROM t1
14749 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14750 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14751         
14752 # check null-4 success:         1
14753 DELETE FROM t1
14754 WHERE f_int1 = 0 AND f_int2 = 0
14755 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14756 AND f_charbig = '#NULL#';
14757 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14758 SELECT f_int1, f_int1, '', '', 'was inserted'
14759    FROM t0_template source_tab
14760 WHERE MOD(f_int1,3) = 0
14761 AND f_int1 BETWEEN @max_row_div2 AND @max_row
14762 ON DUPLICATE KEY
14763 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14764 f_int2 = 2 * @max_row + source_tab.f_int1,
14765 f_charbig = 'was updated';
14766         
14767 # check unique-1-a success:     1
14768         
14769 # check unique-1-b success:     1
14770 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14771 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14772 f_int2 = CAST(f_char1 AS SIGNED INT),
14773 f_charbig = CONCAT('===',f_char1,'===')
14774 WHERE f_charbig = 'was updated';
14775 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14776 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14777    FROM t0_template source_tab
14778 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14779         
14780 # check replace success:        1
14781 DELETE FROM t1
14782 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14783 DELETE FROM t1
14784 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14785 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14786 UPDATE t1 SET f_int2 = f_int1,
14787 f_char1 = CAST(f_int1 AS CHAR),
14788 f_char2 = CAST(f_int1 AS CHAR),
14789 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14790 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14791 SET AUTOCOMMIT= 0;
14792 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14793 SELECT f_int1, f_int1, '', '', 'was inserted'
14794 FROM t0_template source_tab
14795 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14796         
14797 # check transactions-1 success:         1
14798 COMMIT WORK;
14799         
14800 # check transactions-2 success:         1
14801 ROLLBACK WORK;
14802         
14803 # check transactions-3 success:         1
14804 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14805 COMMIT WORK;
14806 ROLLBACK WORK;
14807         
14808 # check transactions-4 success:         1
14809 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14810 SELECT f_int1, f_int1, '', '', 'was inserted'
14811 FROM t0_template source_tab
14812 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14813         
14814 # check transactions-5 success:         1
14815 ROLLBACK WORK;
14816         
14817 # check transactions-6 success:         1
14818 # INFO: Storage engine used for t1 seems to be transactional.
14819 COMMIT;
14820         
14821 # check transactions-7 success:         1
14822 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14823 COMMIT WORK;
14824 SET @@session.sql_mode = 'traditional';
14825 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14826 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14827 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14828 '', '', 'was inserted' FROM t0_template
14829 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14830 ERROR 22012: Division by 0
14831 COMMIT;
14832         
14833 # check transactions-8 success:         1
14834 # INFO: Storage engine used for t1 seems to be able to revert
14835 #       changes made by the failing statement.
14836 SET @@session.sql_mode = '';
14837 SET AUTOCOMMIT= 1;
14838 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14839 COMMIT WORK;
14840 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14841         
14842 # check special-1 success:      1
14843 UPDATE t1 SET f_charbig = '';
14844         
14845 # check special-2 success:      1
14846 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14847 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14848 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14849 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14850 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14851 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14852 'just inserted' FROM t0_template
14853 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14854 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14855 BEGIN
14856 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14857 f_charbig = 'updated by trigger'
14858       WHERE f_int1 = new.f_int1;
14859 END|
14860 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14861 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14862 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14863         
14864 # check trigger-1 success:      1
14865 DROP TRIGGER trg_1;
14866 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14867 f_int2 = CAST(f_char1 AS SIGNED INT),
14868 f_charbig = 'just inserted'
14869    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14870 DELETE FROM t0_aux
14871 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14872 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14873 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14874 'just inserted' FROM t0_template
14875 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14876 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14877 BEGIN
14878 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14879 f_charbig = 'updated by trigger'
14880       WHERE f_int1 = new.f_int1;
14881 END|
14882 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14883 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14884 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14885         
14886 # check trigger-2 success:      1
14887 DROP TRIGGER trg_1;
14888 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14889 f_int2 = CAST(f_char1 AS SIGNED INT),
14890 f_charbig = 'just inserted'
14891    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14892 DELETE FROM t0_aux
14893 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14894 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14895 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14896 'just inserted' FROM t0_template
14897 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14898 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14899 BEGIN
14900 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14901 f_charbig = 'updated by trigger'
14902       WHERE f_int1 = new.f_int1;
14903 END|
14904 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14905 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14906         
14907 # check trigger-3 success:      1
14908 DROP TRIGGER trg_1;
14909 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14910 f_int2 = CAST(f_char1 AS SIGNED INT),
14911 f_charbig = 'just inserted'
14912    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14913 DELETE FROM t0_aux
14914 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14915 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14916 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14917 'just inserted' FROM t0_template
14918 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14919 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14920 BEGIN
14921 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14922 f_charbig = 'updated by trigger'
14923       WHERE f_int1 = - old.f_int1;
14924 END|
14925 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14926 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14927         
14928 # check trigger-4 success:      1
14929 DROP TRIGGER trg_1;
14930 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14931 f_int2 = CAST(f_char1 AS SIGNED INT),
14932 f_charbig = 'just inserted'
14933    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14934 DELETE FROM t0_aux
14935 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14936 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14937 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14938 'just inserted' FROM t0_template
14939 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14940 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14941 BEGIN
14942 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14943 f_charbig = 'updated by trigger'
14944       WHERE f_int1 = new.f_int1;
14945 END|
14946 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14947 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14948         
14949 # check trigger-5 success:      1
14950 DROP TRIGGER trg_1;
14951 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14952 f_int2 = CAST(f_char1 AS SIGNED INT),
14953 f_charbig = 'just inserted'
14954    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14955 DELETE FROM t0_aux
14956 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14957 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14958 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14959 'just inserted' FROM t0_template
14960 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14961 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14962 BEGIN
14963 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14964 f_charbig = 'updated by trigger'
14965       WHERE f_int1 = - old.f_int1;
14966 END|
14967 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14968 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14969         
14970 # check trigger-6 success:      1
14971 DROP TRIGGER trg_1;
14972 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14973 f_int2 = CAST(f_char1 AS SIGNED INT),
14974 f_charbig = 'just inserted'
14975    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14976 DELETE FROM t0_aux
14977 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14978 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14979 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14980 'just inserted' FROM t0_template
14981 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14982 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14983 BEGIN
14984 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14985 f_charbig = 'updated by trigger'
14986       WHERE f_int1 = - old.f_int1;
14987 END|
14988 DELETE FROM t0_aux
14989 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14990         
14991 # check trigger-7 success:      1
14992 DROP TRIGGER trg_1;
14993 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14994 f_int2 = CAST(f_char1 AS SIGNED INT),
14995 f_charbig = 'just inserted'
14996    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14997 DELETE FROM t0_aux
14998 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14999 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15000 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15001 'just inserted' FROM t0_template
15002 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15003 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15004 BEGIN
15005 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15006 f_charbig = 'updated by trigger'
15007       WHERE f_int1 = - old.f_int1;
15008 END|
15009 DELETE FROM t0_aux
15010 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15011         
15012 # check trigger-8 success:      1
15013 DROP TRIGGER trg_1;
15014 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15015 f_int2 = CAST(f_char1 AS SIGNED INT),
15016 f_charbig = 'just inserted'
15017    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15018 DELETE FROM t0_aux
15019 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15020 DELETE FROM t1
15021 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15022 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15023 BEGIN
15024 SET new.f_int1 = old.f_int1 + @max_row,
15025 new.f_int2 = old.f_int2 - @max_row,
15026 new.f_charbig = '####updated per update trigger####';
15027 END|
15028 UPDATE t1
15029 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15030 f_charbig = '####updated per update statement itself####';
15031         
15032 # check trigger-9 success:      1
15033 DROP TRIGGER trg_2;
15034 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15035 f_int2 = CAST(f_char1 AS SIGNED INT),
15036 f_charbig = CONCAT('===',f_char1,'===');
15037 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15038 BEGIN
15039 SET new.f_int1 = new.f_int1 + @max_row,
15040 new.f_int2 = new.f_int2 - @max_row,
15041 new.f_charbig = '####updated per update trigger####';
15042 END|
15043 UPDATE t1
15044 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15045 f_charbig = '####updated per update statement itself####';
15046         
15047 # check trigger-10 success:     1
15048 DROP TRIGGER trg_2;
15049 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15050 f_int2 = CAST(f_char1 AS SIGNED INT),
15051 f_charbig = CONCAT('===',f_char1,'===');
15052 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15053 BEGIN
15054 SET new.f_int1 = @my_max1 + @counter,
15055 new.f_int2 = @my_min2 - @counter,
15056 new.f_charbig = '####updated per insert trigger####';
15057 SET @counter = @counter + 1;
15058 END|
15059 SET @counter = 1;
15060 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15061 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15062 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15063 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15064 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15065 ORDER BY f_int1;
15066 DROP TRIGGER trg_3;
15067         
15068 # check trigger-11 success:     1
15069 DELETE FROM t1
15070 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15071 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15072 AND f_charbig = '####updated per insert trigger####';
15073 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15074 BEGIN
15075 SET new.f_int1 = @my_max1 + @counter,
15076 new.f_int2 = @my_min2 - @counter,
15077 new.f_charbig = '####updated per insert trigger####';
15078 SET @counter = @counter + 1;
15079 END|
15080 SET @counter = 1;
15081 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15082 INSERT INTO t1 (f_char1, f_char2, f_charbig)
15083 SELECT CAST(f_int1 AS CHAR),
15084 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15085 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15086 ORDER BY f_int1;
15087 DROP TRIGGER trg_3;
15088         
15089 # check trigger-12 success:     1
15090 DELETE FROM t1
15091 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15092 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15093 AND f_charbig = '####updated per insert trigger####';
15094 ANALYZE  TABLE t1;
15095 Table   Op      Msg_type        Msg_text
15096 test.t1 analyze status  OK
15097 CHECK    TABLE t1 EXTENDED;
15098 Table   Op      Msg_type        Msg_text
15099 test.t1 check   status  OK
15100 CHECKSUM TABLE t1 EXTENDED;
15101 Table   Checksum
15102 test.t1 <some_value>
15103 OPTIMIZE TABLE t1;
15104 Table   Op      Msg_type        Msg_text
15105 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15106 test.t1 optimize        status  OK
15107 # check layout success:    1
15108 REPAIR   TABLE t1 EXTENDED;
15109 Table   Op      Msg_type        Msg_text
15110 test.t1 repair  note    The storage engine for the table doesn't support repair
15111 # check layout success:    1
15112 TRUNCATE t1;
15113         
15114 # check TRUNCATE success:       1
15115 # check layout success:    1
15116 # End usability test (inc/partition_check.inc)
15117 DROP TABLE t1;
15118 CREATE TABLE t1 (
15119 f_int1 INTEGER,
15120 f_int2 INTEGER,
15121 f_char1 CHAR(20),
15122 f_char2 CHAR(20),
15123 f_charbig VARCHAR(1000)
15126 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
15127 (PARTITION part1 VALUES LESS THAN (0)
15128 (SUBPARTITION subpart11, SUBPARTITION subpart12),
15129 PARTITION part2 VALUES LESS THAN (5)
15130 (SUBPARTITION subpart21, SUBPARTITION subpart22),
15131 PARTITION part3 VALUES LESS THAN (10)
15132 (SUBPARTITION subpart31, SUBPARTITION subpart32),
15133 PARTITION part4 VALUES LESS THAN (2147483646)
15134 (SUBPARTITION subpart41, SUBPARTITION subpart42));
15135 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15136 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15137 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15138 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
15139 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15140 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15141 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15142 # Start usability test (inc/partition_check.inc)
15143 create_command
15144 SHOW CREATE TABLE t1;
15145 Table   Create Table
15146 t1      CREATE TABLE `t1` (
15147   `f_int1` int(11) DEFAULT NULL,
15148   `f_int2` int(11) DEFAULT NULL,
15149   `f_char1` char(20) DEFAULT NULL,
15150   `f_char2` char(20) DEFAULT NULL,
15151   `f_charbig` varchar(1000) DEFAULT NULL,
15152   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
15153 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
15154 /*!50100 PARTITION BY RANGE (f_int1)
15155 SUBPARTITION BY KEY (f_int1)
15156 (PARTITION part1 VALUES LESS THAN (0)
15157  (SUBPARTITION subpart11 ENGINE = InnoDB,
15158   SUBPARTITION subpart12 ENGINE = InnoDB),
15159  PARTITION part2 VALUES LESS THAN (5)
15160  (SUBPARTITION subpart21 ENGINE = InnoDB,
15161   SUBPARTITION subpart22 ENGINE = InnoDB),
15162  PARTITION part3 VALUES LESS THAN (10)
15163  (SUBPARTITION subpart31 ENGINE = InnoDB,
15164   SUBPARTITION subpart32 ENGINE = InnoDB),
15165  PARTITION part4 VALUES LESS THAN (2147483646)
15166  (SUBPARTITION subpart41 ENGINE = InnoDB,
15167   SUBPARTITION subpart42 ENGINE = InnoDB)) */
15169 # check prerequisites-1 success:    1
15170 # check COUNT(*) success:    1
15171 # check MIN/MAX(f_int1) success:    1
15172 # check MIN/MAX(f_int2) success:    1
15173 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15174 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15175 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15176 WHERE f_int1 IN (2,3);
15177 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15178 # check prerequisites-3 success:    1
15179 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15180 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15181 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15182 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15183 WHERE f_int1 IN (2,3);
15184 DELETE FROM t1 WHERE f_charbig = 'delete me';
15185 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15186 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15187 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15188 WHERE f_int1 IN (2,3);
15189 DELETE FROM t1 WHERE f_charbig = 'delete me';
15190 # check read via f_int1 success: 1
15191 # check read via f_int2 success: 1
15192         
15193 # check multiple-1 success:     1
15194 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15195         
15196 # check multiple-2 success:     1
15197 INSERT INTO t1 SELECT * FROM t0_template
15198 WHERE MOD(f_int1,3) = 0;
15199         
15200 # check multiple-3 success:     1
15201 UPDATE t1 SET f_int1 = f_int1 + @max_row
15202 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15203 AND @max_row_div2 + @max_row_div4;
15204         
15205 # check multiple-4 success:     1
15206 DELETE FROM t1
15207 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15208 AND @max_row_div2 + @max_row_div4 + @max_row;
15209         
15210 # check multiple-5 success:     1
15211 SELECT COUNT(*) INTO @try_count FROM t0_template
15212 WHERE MOD(f_int1,3) = 0
15213 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15214 SELECT COUNT(*) INTO @clash_count
15215 FROM t1 INNER JOIN t0_template USING(f_int1)
15216 WHERE MOD(f_int1,3) = 0
15217 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15218 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15219 INSERT INTO t1
15220 SET f_int1 = @cur_value , f_int2 = @cur_value,
15221 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15222 f_charbig = '#SINGLE#';
15223         
15224 # check single-1 success:       1
15225 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15226 INSERT INTO t1
15227 SET f_int1 = @cur_value , f_int2 = @cur_value,
15228 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15229 f_charbig = '#SINGLE#';
15230         
15231 # check single-2 success:       1
15232 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15233 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15234 UPDATE t1 SET f_int1 = @cur_value2
15235 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15236         
15237 # check single-3 success:       1
15238 SET @cur_value1= -1;
15239 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15240 UPDATE t1 SET f_int1 = @cur_value1
15241 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15242         
15243 # check single-4 success:       1
15244 SELECT MAX(f_int1) INTO @cur_value FROM t1;
15245 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15246         
15247 # check single-5 success:       1
15248 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15249         
15250 # check single-6 success:       1
15251 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15252 ERROR HY000: Table has no partition for value 2147483647
15253 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15254 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15255 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15256 f_charbig = '#NULL#';
15257 INSERT INTO t1
15258 SET f_int1 = NULL , f_int2 = -@max_row,
15259 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15260 f_charbig = '#NULL#';
15261 # check null success:    1
15262         
15263 # check null-1 success:         1
15264 UPDATE t1 SET f_int1 = -@max_row
15265 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15266 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15267         
15268 # check null-2 success:         1
15269 UPDATE t1 SET f_int1 = NULL
15270 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15271 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15272         
15273 # check null-3 success:         1
15274 DELETE FROM t1
15275 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15276 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15277         
15278 # check null-4 success:         1
15279 DELETE FROM t1
15280 WHERE f_int1 = 0 AND f_int2 = 0
15281 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15282 AND f_charbig = '#NULL#';
15283 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15284 SELECT f_int1, f_int1, '', '', 'was inserted'
15285    FROM t0_template source_tab
15286 WHERE MOD(f_int1,3) = 0
15287 AND f_int1 BETWEEN @max_row_div2 AND @max_row
15288 ON DUPLICATE KEY
15289 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15290 f_int2 = 2 * @max_row + source_tab.f_int1,
15291 f_charbig = 'was updated';
15292         
15293 # check unique-1-a success:     1
15294         
15295 # check unique-1-b success:     1
15296 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15297 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15298 f_int2 = CAST(f_char1 AS SIGNED INT),
15299 f_charbig = CONCAT('===',f_char1,'===')
15300 WHERE f_charbig = 'was updated';
15301 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15302 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15303    FROM t0_template source_tab
15304 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15305         
15306 # check replace success:        1
15307 DELETE FROM t1
15308 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15309 DELETE FROM t1
15310 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15311 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15312 UPDATE t1 SET f_int2 = f_int1,
15313 f_char1 = CAST(f_int1 AS CHAR),
15314 f_char2 = CAST(f_int1 AS CHAR),
15315 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15316 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15317 SET AUTOCOMMIT= 0;
15318 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15319 SELECT f_int1, f_int1, '', '', 'was inserted'
15320 FROM t0_template source_tab
15321 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15322         
15323 # check transactions-1 success:         1
15324 COMMIT WORK;
15325         
15326 # check transactions-2 success:         1
15327 ROLLBACK WORK;
15328         
15329 # check transactions-3 success:         1
15330 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15331 COMMIT WORK;
15332 ROLLBACK WORK;
15333         
15334 # check transactions-4 success:         1
15335 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15336 SELECT f_int1, f_int1, '', '', 'was inserted'
15337 FROM t0_template source_tab
15338 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15339         
15340 # check transactions-5 success:         1
15341 ROLLBACK WORK;
15342         
15343 # check transactions-6 success:         1
15344 # INFO: Storage engine used for t1 seems to be transactional.
15345 COMMIT;
15346         
15347 # check transactions-7 success:         1
15348 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15349 COMMIT WORK;
15350 SET @@session.sql_mode = 'traditional';
15351 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15352 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15353 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15354 '', '', 'was inserted' FROM t0_template
15355 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15356 ERROR 22012: Division by 0
15357 COMMIT;
15358         
15359 # check transactions-8 success:         1
15360 # INFO: Storage engine used for t1 seems to be able to revert
15361 #       changes made by the failing statement.
15362 SET @@session.sql_mode = '';
15363 SET AUTOCOMMIT= 1;
15364 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15365 COMMIT WORK;
15366 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15367         
15368 # check special-1 success:      1
15369 UPDATE t1 SET f_charbig = '';
15370         
15371 # check special-2 success:      1
15372 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15373 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15374 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15375 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15376 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15377 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15378 'just inserted' FROM t0_template
15379 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15380 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15381 BEGIN
15382 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15383 f_charbig = 'updated by trigger'
15384       WHERE f_int1 = new.f_int1;
15385 END|
15386 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15387 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15388 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15389         
15390 # check trigger-1 success:      1
15391 DROP TRIGGER trg_1;
15392 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15393 f_int2 = CAST(f_char1 AS SIGNED INT),
15394 f_charbig = 'just inserted'
15395    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15396 DELETE FROM t0_aux
15397 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15398 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15399 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15400 'just inserted' FROM t0_template
15401 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15402 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15403 BEGIN
15404 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15405 f_charbig = 'updated by trigger'
15406       WHERE f_int1 = new.f_int1;
15407 END|
15408 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15409 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15410 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15411         
15412 # check trigger-2 success:      1
15413 DROP TRIGGER trg_1;
15414 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15415 f_int2 = CAST(f_char1 AS SIGNED INT),
15416 f_charbig = 'just inserted'
15417    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15418 DELETE FROM t0_aux
15419 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15420 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15421 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15422 'just inserted' FROM t0_template
15423 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15424 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15425 BEGIN
15426 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15427 f_charbig = 'updated by trigger'
15428       WHERE f_int1 = new.f_int1;
15429 END|
15430 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15431 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15432         
15433 # check trigger-3 success:      1
15434 DROP TRIGGER trg_1;
15435 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15436 f_int2 = CAST(f_char1 AS SIGNED INT),
15437 f_charbig = 'just inserted'
15438    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15439 DELETE FROM t0_aux
15440 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15441 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15442 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15443 'just inserted' FROM t0_template
15444 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15445 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15446 BEGIN
15447 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15448 f_charbig = 'updated by trigger'
15449       WHERE f_int1 = - old.f_int1;
15450 END|
15451 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15452 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15453         
15454 # check trigger-4 success:      1
15455 DROP TRIGGER trg_1;
15456 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15457 f_int2 = CAST(f_char1 AS SIGNED INT),
15458 f_charbig = 'just inserted'
15459    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15460 DELETE FROM t0_aux
15461 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15462 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15463 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15464 'just inserted' FROM t0_template
15465 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15466 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15467 BEGIN
15468 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15469 f_charbig = 'updated by trigger'
15470       WHERE f_int1 = new.f_int1;
15471 END|
15472 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15473 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15474         
15475 # check trigger-5 success:      1
15476 DROP TRIGGER trg_1;
15477 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15478 f_int2 = CAST(f_char1 AS SIGNED INT),
15479 f_charbig = 'just inserted'
15480    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15481 DELETE FROM t0_aux
15482 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15483 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15484 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15485 'just inserted' FROM t0_template
15486 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15487 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15488 BEGIN
15489 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15490 f_charbig = 'updated by trigger'
15491       WHERE f_int1 = - old.f_int1;
15492 END|
15493 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15494 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15495         
15496 # check trigger-6 success:      1
15497 DROP TRIGGER trg_1;
15498 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15499 f_int2 = CAST(f_char1 AS SIGNED INT),
15500 f_charbig = 'just inserted'
15501    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15502 DELETE FROM t0_aux
15503 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15504 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15505 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15506 'just inserted' FROM t0_template
15507 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15508 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15509 BEGIN
15510 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15511 f_charbig = 'updated by trigger'
15512       WHERE f_int1 = - old.f_int1;
15513 END|
15514 DELETE FROM t0_aux
15515 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15516         
15517 # check trigger-7 success:      1
15518 DROP TRIGGER trg_1;
15519 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15520 f_int2 = CAST(f_char1 AS SIGNED INT),
15521 f_charbig = 'just inserted'
15522    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15523 DELETE FROM t0_aux
15524 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15525 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15526 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15527 'just inserted' FROM t0_template
15528 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15529 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15530 BEGIN
15531 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15532 f_charbig = 'updated by trigger'
15533       WHERE f_int1 = - old.f_int1;
15534 END|
15535 DELETE FROM t0_aux
15536 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15537         
15538 # check trigger-8 success:      1
15539 DROP TRIGGER trg_1;
15540 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15541 f_int2 = CAST(f_char1 AS SIGNED INT),
15542 f_charbig = 'just inserted'
15543    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15544 DELETE FROM t0_aux
15545 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15546 DELETE FROM t1
15547 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15548 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15549 BEGIN
15550 SET new.f_int1 = old.f_int1 + @max_row,
15551 new.f_int2 = old.f_int2 - @max_row,
15552 new.f_charbig = '####updated per update trigger####';
15553 END|
15554 UPDATE t1
15555 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15556 f_charbig = '####updated per update statement itself####';
15557         
15558 # check trigger-9 success:      1
15559 DROP TRIGGER trg_2;
15560 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15561 f_int2 = CAST(f_char1 AS SIGNED INT),
15562 f_charbig = CONCAT('===',f_char1,'===');
15563 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15564 BEGIN
15565 SET new.f_int1 = new.f_int1 + @max_row,
15566 new.f_int2 = new.f_int2 - @max_row,
15567 new.f_charbig = '####updated per update trigger####';
15568 END|
15569 UPDATE t1
15570 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15571 f_charbig = '####updated per update statement itself####';
15572         
15573 # check trigger-10 success:     1
15574 DROP TRIGGER trg_2;
15575 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15576 f_int2 = CAST(f_char1 AS SIGNED INT),
15577 f_charbig = CONCAT('===',f_char1,'===');
15578 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15579 BEGIN
15580 SET new.f_int1 = @my_max1 + @counter,
15581 new.f_int2 = @my_min2 - @counter,
15582 new.f_charbig = '####updated per insert trigger####';
15583 SET @counter = @counter + 1;
15584 END|
15585 SET @counter = 1;
15586 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15587 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15588 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15589 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15590 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15591 ORDER BY f_int1;
15592 DROP TRIGGER trg_3;
15593         
15594 # check trigger-11 success:     1
15595 DELETE FROM t1
15596 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15597 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15598 AND f_charbig = '####updated per insert trigger####';
15599 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15600 BEGIN
15601 SET new.f_int1 = @my_max1 + @counter,
15602 new.f_int2 = @my_min2 - @counter,
15603 new.f_charbig = '####updated per insert trigger####';
15604 SET @counter = @counter + 1;
15605 END|
15606 SET @counter = 1;
15607 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15608 INSERT INTO t1 (f_char1, f_char2, f_charbig)
15609 SELECT CAST(f_int1 AS CHAR),
15610 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15611 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15612 ORDER BY f_int1;
15613 DROP TRIGGER trg_3;
15614         
15615 # check trigger-12 success:     1
15616 DELETE FROM t1
15617 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15618 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15619 AND f_charbig = '####updated per insert trigger####';
15620 ANALYZE  TABLE t1;
15621 Table   Op      Msg_type        Msg_text
15622 test.t1 analyze status  OK
15623 CHECK    TABLE t1 EXTENDED;
15624 Table   Op      Msg_type        Msg_text
15625 test.t1 check   status  OK
15626 CHECKSUM TABLE t1 EXTENDED;
15627 Table   Checksum
15628 test.t1 <some_value>
15629 OPTIMIZE TABLE t1;
15630 Table   Op      Msg_type        Msg_text
15631 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
15632 test.t1 optimize        status  OK
15633 # check layout success:    1
15634 REPAIR   TABLE t1 EXTENDED;
15635 Table   Op      Msg_type        Msg_text
15636 test.t1 repair  note    The storage engine for the table doesn't support repair
15637 # check layout success:    1
15638 TRUNCATE t1;
15639         
15640 # check TRUNCATE success:       1
15641 # check layout success:    1
15642 # End usability test (inc/partition_check.inc)
15643 DROP TABLE t1;
15644 CREATE TABLE t1 (
15645 f_int1 INTEGER,
15646 f_int2 INTEGER,
15647 f_char1 CHAR(20),
15648 f_char2 CHAR(20),
15649 f_charbig VARCHAR(1000)
15652 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
15653 (PARTITION part1 VALUES IN (0)
15654 (SUBPARTITION sp11, SUBPARTITION sp12),
15655 PARTITION part2 VALUES IN (1)
15656 (SUBPARTITION sp21, SUBPARTITION sp22),
15657 PARTITION part3 VALUES IN (2)
15658 (SUBPARTITION sp31, SUBPARTITION sp32),
15659 PARTITION part4 VALUES IN (NULL)
15660 (SUBPARTITION sp41, SUBPARTITION sp42));
15661 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15662 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15663 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15664 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
15665 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15666 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15667 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15668 # Start usability test (inc/partition_check.inc)
15669 create_command
15670 SHOW CREATE TABLE t1;
15671 Table   Create Table
15672 t1      CREATE TABLE `t1` (
15673   `f_int1` int(11) DEFAULT NULL,
15674   `f_int2` int(11) DEFAULT NULL,
15675   `f_char1` char(20) DEFAULT NULL,
15676   `f_char2` char(20) DEFAULT NULL,
15677   `f_charbig` varchar(1000) DEFAULT NULL,
15678   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
15679 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
15680 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
15681 SUBPARTITION BY HASH (f_int1 + 1)
15682 (PARTITION part1 VALUES IN (0)
15683  (SUBPARTITION sp11 ENGINE = InnoDB,
15684   SUBPARTITION sp12 ENGINE = InnoDB),
15685  PARTITION part2 VALUES IN (1)
15686  (SUBPARTITION sp21 ENGINE = InnoDB,
15687   SUBPARTITION sp22 ENGINE = InnoDB),
15688  PARTITION part3 VALUES IN (2)
15689  (SUBPARTITION sp31 ENGINE = InnoDB,
15690   SUBPARTITION sp32 ENGINE = InnoDB),
15691  PARTITION part4 VALUES IN (NULL)
15692  (SUBPARTITION sp41 ENGINE = InnoDB,
15693   SUBPARTITION sp42 ENGINE = InnoDB)) */
15695 # check prerequisites-1 success:    1
15696 # check COUNT(*) success:    1
15697 # check MIN/MAX(f_int1) success:    1
15698 # check MIN/MAX(f_int2) success:    1
15699 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15700 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15701 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15702 WHERE f_int1 IN (2,3);
15703 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15704 # check prerequisites-3 success:    1
15705 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15706 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15707 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15708 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15709 WHERE f_int1 IN (2,3);
15710 DELETE FROM t1 WHERE f_charbig = 'delete me';
15711 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15712 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15713 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15714 WHERE f_int1 IN (2,3);
15715 DELETE FROM t1 WHERE f_charbig = 'delete me';
15716 # check read via f_int1 success: 1
15717 # check read via f_int2 success: 1
15718         
15719 # check multiple-1 success:     1
15720 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15721         
15722 # check multiple-2 success:     1
15723 INSERT INTO t1 SELECT * FROM t0_template
15724 WHERE MOD(f_int1,3) = 0;
15725         
15726 # check multiple-3 success:     1
15727 UPDATE t1 SET f_int1 = f_int1 + @max_row
15728 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15729 AND @max_row_div2 + @max_row_div4;
15730         
15731 # check multiple-4 success:     1
15732 DELETE FROM t1
15733 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15734 AND @max_row_div2 + @max_row_div4 + @max_row;
15735         
15736 # check multiple-5 success:     1
15737 SELECT COUNT(*) INTO @try_count FROM t0_template
15738 WHERE MOD(f_int1,3) = 0
15739 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15740 SELECT COUNT(*) INTO @clash_count
15741 FROM t1 INNER JOIN t0_template USING(f_int1)
15742 WHERE MOD(f_int1,3) = 0
15743 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15744 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15745 INSERT INTO t1
15746 SET f_int1 = @cur_value , f_int2 = @cur_value,
15747 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15748 f_charbig = '#SINGLE#';
15749         
15750 # check single-1 success:       1
15751 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15752 INSERT INTO t1
15753 SET f_int1 = @cur_value , f_int2 = @cur_value,
15754 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15755 f_charbig = '#SINGLE#';
15756         
15757 # check single-2 success:       1
15758 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15759 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15760 UPDATE t1 SET f_int1 = @cur_value2
15761 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15762         
15763 # check single-3 success:       1
15764 SET @cur_value1= -1;
15765 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15766 UPDATE t1 SET f_int1 = @cur_value1
15767 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15768         
15769 # check single-4 success:       1
15770 SELECT MAX(f_int1) INTO @cur_value FROM t1;
15771 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15772         
15773 # check single-5 success:       1
15774 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15775         
15776 # check single-6 success:       1
15777 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15778         
15779 # check single-7 success:       1
15780 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15781 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15782 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15783 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15784 f_charbig = '#NULL#';
15785 INSERT INTO t1
15786 SET f_int1 = NULL , f_int2 = -@max_row,
15787 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15788 f_charbig = '#NULL#';
15789 # check null success:    1
15790         
15791 # check null-1 success:         1
15792 UPDATE t1 SET f_int1 = -@max_row
15793 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15794 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15795         
15796 # check null-2 success:         1
15797 UPDATE t1 SET f_int1 = NULL
15798 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15799 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15800         
15801 # check null-3 success:         1
15802 DELETE FROM t1
15803 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15804 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15805         
15806 # check null-4 success:         1
15807 DELETE FROM t1
15808 WHERE f_int1 = 0 AND f_int2 = 0
15809 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15810 AND f_charbig = '#NULL#';
15811 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15812 SELECT f_int1, f_int1, '', '', 'was inserted'
15813    FROM t0_template source_tab
15814 WHERE MOD(f_int1,3) = 0
15815 AND f_int1 BETWEEN @max_row_div2 AND @max_row
15816 ON DUPLICATE KEY
15817 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15818 f_int2 = 2 * @max_row + source_tab.f_int1,
15819 f_charbig = 'was updated';
15820         
15821 # check unique-1-a success:     1
15822         
15823 # check unique-1-b success:     1
15824 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15825 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15826 f_int2 = CAST(f_char1 AS SIGNED INT),
15827 f_charbig = CONCAT('===',f_char1,'===')
15828 WHERE f_charbig = 'was updated';
15829 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15830 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15831    FROM t0_template source_tab
15832 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15833         
15834 # check replace success:        1
15835 DELETE FROM t1
15836 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15837 DELETE FROM t1
15838 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15839 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15840 UPDATE t1 SET f_int2 = f_int1,
15841 f_char1 = CAST(f_int1 AS CHAR),
15842 f_char2 = CAST(f_int1 AS CHAR),
15843 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15844 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15845 SET AUTOCOMMIT= 0;
15846 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15847 SELECT f_int1, f_int1, '', '', 'was inserted'
15848 FROM t0_template source_tab
15849 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15850         
15851 # check transactions-1 success:         1
15852 COMMIT WORK;
15853         
15854 # check transactions-2 success:         1
15855 ROLLBACK WORK;
15856         
15857 # check transactions-3 success:         1
15858 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15859 COMMIT WORK;
15860 ROLLBACK WORK;
15861         
15862 # check transactions-4 success:         1
15863 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15864 SELECT f_int1, f_int1, '', '', 'was inserted'
15865 FROM t0_template source_tab
15866 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15867         
15868 # check transactions-5 success:         1
15869 ROLLBACK WORK;
15870         
15871 # check transactions-6 success:         1
15872 # INFO: Storage engine used for t1 seems to be transactional.
15873 COMMIT;
15874         
15875 # check transactions-7 success:         1
15876 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15877 COMMIT WORK;
15878 SET @@session.sql_mode = 'traditional';
15879 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15880 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15881 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15882 '', '', 'was inserted' FROM t0_template
15883 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15884 ERROR 22012: Division by 0
15885 COMMIT;
15886         
15887 # check transactions-8 success:         1
15888 # INFO: Storage engine used for t1 seems to be able to revert
15889 #       changes made by the failing statement.
15890 SET @@session.sql_mode = '';
15891 SET AUTOCOMMIT= 1;
15892 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15893 COMMIT WORK;
15894 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15895         
15896 # check special-1 success:      1
15897 UPDATE t1 SET f_charbig = '';
15898         
15899 # check special-2 success:      1
15900 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15901 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15902 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15903 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15904 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15905 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15906 'just inserted' FROM t0_template
15907 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15908 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15909 BEGIN
15910 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15911 f_charbig = 'updated by trigger'
15912       WHERE f_int1 = new.f_int1;
15913 END|
15914 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15915 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15916 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15917         
15918 # check trigger-1 success:      1
15919 DROP TRIGGER trg_1;
15920 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15921 f_int2 = CAST(f_char1 AS SIGNED INT),
15922 f_charbig = 'just inserted'
15923    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15924 DELETE FROM t0_aux
15925 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15926 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15927 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15928 'just inserted' FROM t0_template
15929 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15930 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15931 BEGIN
15932 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15933 f_charbig = 'updated by trigger'
15934       WHERE f_int1 = new.f_int1;
15935 END|
15936 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15937 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15938 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15939         
15940 # check trigger-2 success:      1
15941 DROP TRIGGER trg_1;
15942 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15943 f_int2 = CAST(f_char1 AS SIGNED INT),
15944 f_charbig = 'just inserted'
15945    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15946 DELETE FROM t0_aux
15947 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15948 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15949 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15950 'just inserted' FROM t0_template
15951 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15952 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15953 BEGIN
15954 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15955 f_charbig = 'updated by trigger'
15956       WHERE f_int1 = new.f_int1;
15957 END|
15958 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15959 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15960         
15961 # check trigger-3 success:      1
15962 DROP TRIGGER trg_1;
15963 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15964 f_int2 = CAST(f_char1 AS SIGNED INT),
15965 f_charbig = 'just inserted'
15966    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15967 DELETE FROM t0_aux
15968 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15969 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15970 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15971 'just inserted' FROM t0_template
15972 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15973 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15974 BEGIN
15975 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15976 f_charbig = 'updated by trigger'
15977       WHERE f_int1 = - old.f_int1;
15978 END|
15979 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15980 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15981         
15982 # check trigger-4 success:      1
15983 DROP TRIGGER trg_1;
15984 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15985 f_int2 = CAST(f_char1 AS SIGNED INT),
15986 f_charbig = 'just inserted'
15987    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15988 DELETE FROM t0_aux
15989 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15990 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15991 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15992 'just inserted' FROM t0_template
15993 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15994 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15995 BEGIN
15996 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15997 f_charbig = 'updated by trigger'
15998       WHERE f_int1 = new.f_int1;
15999 END|
16000 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16001 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16002         
16003 # check trigger-5 success:      1
16004 DROP TRIGGER trg_1;
16005 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16006 f_int2 = CAST(f_char1 AS SIGNED INT),
16007 f_charbig = 'just inserted'
16008    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16009 DELETE FROM t0_aux
16010 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16011 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16012 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16013 'just inserted' FROM t0_template
16014 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16015 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16016 BEGIN
16017 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16018 f_charbig = 'updated by trigger'
16019       WHERE f_int1 = - old.f_int1;
16020 END|
16021 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16022 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16023         
16024 # check trigger-6 success:      1
16025 DROP TRIGGER trg_1;
16026 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16027 f_int2 = CAST(f_char1 AS SIGNED INT),
16028 f_charbig = 'just inserted'
16029    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16030 DELETE FROM t0_aux
16031 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16032 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16033 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16034 'just inserted' FROM t0_template
16035 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16036 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16037 BEGIN
16038 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16039 f_charbig = 'updated by trigger'
16040       WHERE f_int1 = - old.f_int1;
16041 END|
16042 DELETE FROM t0_aux
16043 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16044         
16045 # check trigger-7 success:      1
16046 DROP TRIGGER trg_1;
16047 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16048 f_int2 = CAST(f_char1 AS SIGNED INT),
16049 f_charbig = 'just inserted'
16050    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16051 DELETE FROM t0_aux
16052 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16053 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16054 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16055 'just inserted' FROM t0_template
16056 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16057 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16058 BEGIN
16059 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16060 f_charbig = 'updated by trigger'
16061       WHERE f_int1 = - old.f_int1;
16062 END|
16063 DELETE FROM t0_aux
16064 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16065         
16066 # check trigger-8 success:      1
16067 DROP TRIGGER trg_1;
16068 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16069 f_int2 = CAST(f_char1 AS SIGNED INT),
16070 f_charbig = 'just inserted'
16071    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16072 DELETE FROM t0_aux
16073 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16074 DELETE FROM t1
16075 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16076 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16077 BEGIN
16078 SET new.f_int1 = old.f_int1 + @max_row,
16079 new.f_int2 = old.f_int2 - @max_row,
16080 new.f_charbig = '####updated per update trigger####';
16081 END|
16082 UPDATE t1
16083 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16084 f_charbig = '####updated per update statement itself####';
16085         
16086 # check trigger-9 success:      1
16087 DROP TRIGGER trg_2;
16088 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16089 f_int2 = CAST(f_char1 AS SIGNED INT),
16090 f_charbig = CONCAT('===',f_char1,'===');
16091 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16092 BEGIN
16093 SET new.f_int1 = new.f_int1 + @max_row,
16094 new.f_int2 = new.f_int2 - @max_row,
16095 new.f_charbig = '####updated per update trigger####';
16096 END|
16097 UPDATE t1
16098 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16099 f_charbig = '####updated per update statement itself####';
16100         
16101 # check trigger-10 success:     1
16102 DROP TRIGGER trg_2;
16103 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16104 f_int2 = CAST(f_char1 AS SIGNED INT),
16105 f_charbig = CONCAT('===',f_char1,'===');
16106 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16107 BEGIN
16108 SET new.f_int1 = @my_max1 + @counter,
16109 new.f_int2 = @my_min2 - @counter,
16110 new.f_charbig = '####updated per insert trigger####';
16111 SET @counter = @counter + 1;
16112 END|
16113 SET @counter = 1;
16114 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16115 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16116 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16117 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16118 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16119 ORDER BY f_int1;
16120 DROP TRIGGER trg_3;
16121         
16122 # check trigger-11 success:     1
16123 DELETE FROM t1
16124 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16125 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16126 AND f_charbig = '####updated per insert trigger####';
16127 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16128 BEGIN
16129 SET new.f_int1 = @my_max1 + @counter,
16130 new.f_int2 = @my_min2 - @counter,
16131 new.f_charbig = '####updated per insert trigger####';
16132 SET @counter = @counter + 1;
16133 END|
16134 SET @counter = 1;
16135 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16136 INSERT INTO t1 (f_char1, f_char2, f_charbig)
16137 SELECT CAST(f_int1 AS CHAR),
16138 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16139 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16140 ORDER BY f_int1;
16141 DROP TRIGGER trg_3;
16142         
16143 # check trigger-12 success:     1
16144 DELETE FROM t1
16145 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16146 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16147 AND f_charbig = '####updated per insert trigger####';
16148 ANALYZE  TABLE t1;
16149 Table   Op      Msg_type        Msg_text
16150 test.t1 analyze status  OK
16151 CHECK    TABLE t1 EXTENDED;
16152 Table   Op      Msg_type        Msg_text
16153 test.t1 check   status  OK
16154 CHECKSUM TABLE t1 EXTENDED;
16155 Table   Checksum
16156 test.t1 <some_value>
16157 OPTIMIZE TABLE t1;
16158 Table   Op      Msg_type        Msg_text
16159 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
16160 test.t1 optimize        status  OK
16161 # check layout success:    1
16162 REPAIR   TABLE t1 EXTENDED;
16163 Table   Op      Msg_type        Msg_text
16164 test.t1 repair  note    The storage engine for the table doesn't support repair
16165 # check layout success:    1
16166 TRUNCATE t1;
16167         
16168 # check TRUNCATE success:       1
16169 # check layout success:    1
16170 # End usability test (inc/partition_check.inc)
16171 DROP TABLE t1;
16172 CREATE TABLE t1 (
16173 f_int1 INTEGER,
16174 f_int2 INTEGER,
16175 f_char1 CHAR(20),
16176 f_char2 CHAR(20),
16177 f_charbig VARCHAR(1000)
16180 PARTITION BY LIST(ABS(MOD(f_int1,2)))
16181 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
16182 (PARTITION part1 VALUES IN (0),
16183 PARTITION part2 VALUES IN (1),
16184 PARTITION part3 VALUES IN (NULL));
16185 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16186 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16187 WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16188 ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
16189 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16190 SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16191 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16192 # Start usability test (inc/partition_check.inc)
16193 create_command
16194 SHOW CREATE TABLE t1;
16195 Table   Create Table
16196 t1      CREATE TABLE `t1` (
16197   `f_int1` int(11) DEFAULT NULL,
16198   `f_int2` int(11) DEFAULT NULL,
16199   `f_char1` char(20) DEFAULT NULL,
16200   `f_char2` char(20) DEFAULT NULL,
16201   `f_charbig` varchar(1000) DEFAULT NULL,
16202   UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16203 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
16204 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
16205 SUBPARTITION BY KEY (f_int1)
16206 SUBPARTITIONS 3
16207 (PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
16208  PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
16209  PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
16211 # check prerequisites-1 success:    1
16212 # check COUNT(*) success:    1
16213 # check MIN/MAX(f_int1) success:    1
16214 # check MIN/MAX(f_int2) success:    1
16215 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16216 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16217 CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16218 WHERE f_int1 IN (2,3);
16219 ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16220 # check prerequisites-3 success:    1
16221 # INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16222 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16223 SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16224 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16225 WHERE f_int1 IN (2,3);
16226 DELETE FROM t1 WHERE f_charbig = 'delete me';
16227 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16228 SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16229 CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16230 WHERE f_int1 IN (2,3);
16231 DELETE FROM t1 WHERE f_charbig = 'delete me';
16232 # check read via f_int1 success: 1
16233 # check read via f_int2 success: 1
16234         
16235 # check multiple-1 success:     1
16236 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16237         
16238 # check multiple-2 success:     1
16239 INSERT INTO t1 SELECT * FROM t0_template
16240 WHERE MOD(f_int1,3) = 0;
16241         
16242 # check multiple-3 success:     1
16243 UPDATE t1 SET f_int1 = f_int1 + @max_row
16244 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16245 AND @max_row_div2 + @max_row_div4;
16246         
16247 # check multiple-4 success:     1
16248 DELETE FROM t1
16249 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16250 AND @max_row_div2 + @max_row_div4 + @max_row;
16251         
16252 # check multiple-5 success:     1
16253 SELECT COUNT(*) INTO @try_count FROM t0_template
16254 WHERE MOD(f_int1,3) = 0
16255 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16256 SELECT COUNT(*) INTO @clash_count
16257 FROM t1 INNER JOIN t0_template USING(f_int1)
16258 WHERE MOD(f_int1,3) = 0
16259 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16260 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16261 INSERT INTO t1
16262 SET f_int1 = @cur_value , f_int2 = @cur_value,
16263 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16264 f_charbig = '#SINGLE#';
16265         
16266 # check single-1 success:       1
16267 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16268 INSERT INTO t1
16269 SET f_int1 = @cur_value , f_int2 = @cur_value,
16270 f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16271 f_charbig = '#SINGLE#';
16272         
16273 # check single-2 success:       1
16274 SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16275 SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16276 UPDATE t1 SET f_int1 = @cur_value2
16277 WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16278         
16279 # check single-3 success:       1
16280 SET @cur_value1= -1;
16281 SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16282 UPDATE t1 SET f_int1 = @cur_value1
16283 WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16284         
16285 # check single-4 success:       1
16286 SELECT MAX(f_int1) INTO @cur_value FROM t1;
16287 DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16288         
16289 # check single-5 success:       1
16290 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16291         
16292 # check single-6 success:       1
16293 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16294         
16295 # check single-7 success:       1
16296 DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16297 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16298 INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16299 f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16300 f_charbig = '#NULL#';
16301 INSERT INTO t1
16302 SET f_int1 = NULL , f_int2 = -@max_row,
16303 f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16304 f_charbig = '#NULL#';
16305 # check null success:    1
16306         
16307 # check null-1 success:         1
16308 UPDATE t1 SET f_int1 = -@max_row
16309 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16310 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16311         
16312 # check null-2 success:         1
16313 UPDATE t1 SET f_int1 = NULL
16314 WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16315 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16316         
16317 # check null-3 success:         1
16318 DELETE FROM t1
16319 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16320 AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16321         
16322 # check null-4 success:         1
16323 DELETE FROM t1
16324 WHERE f_int1 = 0 AND f_int2 = 0
16325 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16326 AND f_charbig = '#NULL#';
16327 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16328 SELECT f_int1, f_int1, '', '', 'was inserted'
16329    FROM t0_template source_tab
16330 WHERE MOD(f_int1,3) = 0
16331 AND f_int1 BETWEEN @max_row_div2 AND @max_row
16332 ON DUPLICATE KEY
16333 UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16334 f_int2 = 2 * @max_row + source_tab.f_int1,
16335 f_charbig = 'was updated';
16336         
16337 # check unique-1-a success:     1
16338         
16339 # check unique-1-b success:     1
16340 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16341 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16342 f_int2 = CAST(f_char1 AS SIGNED INT),
16343 f_charbig = CONCAT('===',f_char1,'===')
16344 WHERE f_charbig = 'was updated';
16345 REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16346 SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16347    FROM t0_template source_tab
16348 WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16349         
16350 # check replace success:        1
16351 DELETE FROM t1
16352 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16353 DELETE FROM t1
16354 WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16355 f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16356 UPDATE t1 SET f_int2 = f_int1,
16357 f_char1 = CAST(f_int1 AS CHAR),
16358 f_char2 = CAST(f_int1 AS CHAR),
16359 f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16360 WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16361 SET AUTOCOMMIT= 0;
16362 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16363 SELECT f_int1, f_int1, '', '', 'was inserted'
16364 FROM t0_template source_tab
16365 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16366         
16367 # check transactions-1 success:         1
16368 COMMIT WORK;
16369         
16370 # check transactions-2 success:         1
16371 ROLLBACK WORK;
16372         
16373 # check transactions-3 success:         1
16374 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16375 COMMIT WORK;
16376 ROLLBACK WORK;
16377         
16378 # check transactions-4 success:         1
16379 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16380 SELECT f_int1, f_int1, '', '', 'was inserted'
16381 FROM t0_template source_tab
16382 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16383         
16384 # check transactions-5 success:         1
16385 ROLLBACK WORK;
16386         
16387 # check transactions-6 success:         1
16388 # INFO: Storage engine used for t1 seems to be transactional.
16389 COMMIT;
16390         
16391 # check transactions-7 success:         1
16392 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16393 COMMIT WORK;
16394 SET @@session.sql_mode = 'traditional';
16395 SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16396 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16397 SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16398 '', '', 'was inserted' FROM t0_template
16399 WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16400 ERROR 22012: Division by 0
16401 COMMIT;
16402         
16403 # check transactions-8 success:         1
16404 # INFO: Storage engine used for t1 seems to be able to revert
16405 #       changes made by the failing statement.
16406 SET @@session.sql_mode = '';
16407 SET AUTOCOMMIT= 1;
16408 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16409 COMMIT WORK;
16410 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16411         
16412 # check special-1 success:      1
16413 UPDATE t1 SET f_charbig = '';
16414         
16415 # check special-2 success:      1
16416 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16417 INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16418 SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16419 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16420 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16421 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16422 'just inserted' FROM t0_template
16423 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16424 CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16425 BEGIN
16426 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16427 f_charbig = 'updated by trigger'
16428       WHERE f_int1 = new.f_int1;
16429 END|
16430 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16431 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16432 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16433         
16434 # check trigger-1 success:      1
16435 DROP TRIGGER trg_1;
16436 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16437 f_int2 = CAST(f_char1 AS SIGNED INT),
16438 f_charbig = 'just inserted'
16439    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16440 DELETE FROM t0_aux
16441 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16442 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16443 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16444 'just inserted' FROM t0_template
16445 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16446 CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16447 BEGIN
16448 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16449 f_charbig = 'updated by trigger'
16450       WHERE f_int1 = new.f_int1;
16451 END|
16452 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16453 SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16454 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16455         
16456 # check trigger-2 success:      1
16457 DROP TRIGGER trg_1;
16458 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16459 f_int2 = CAST(f_char1 AS SIGNED INT),
16460 f_charbig = 'just inserted'
16461    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16462 DELETE FROM t0_aux
16463 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16464 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16465 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16466 'just inserted' FROM t0_template
16467 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16468 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16469 BEGIN
16470 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16471 f_charbig = 'updated by trigger'
16472       WHERE f_int1 = new.f_int1;
16473 END|
16474 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16475 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16476         
16477 # check trigger-3 success:      1
16478 DROP TRIGGER trg_1;
16479 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16480 f_int2 = CAST(f_char1 AS SIGNED INT),
16481 f_charbig = 'just inserted'
16482    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16483 DELETE FROM t0_aux
16484 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16485 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16486 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16487 'just inserted' FROM t0_template
16488 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16489 CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16490 BEGIN
16491 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16492 f_charbig = 'updated by trigger'
16493       WHERE f_int1 = - old.f_int1;
16494 END|
16495 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16496 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16497         
16498 # check trigger-4 success:      1
16499 DROP TRIGGER trg_1;
16500 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16501 f_int2 = CAST(f_char1 AS SIGNED INT),
16502 f_charbig = 'just inserted'
16503    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16504 DELETE FROM t0_aux
16505 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16506 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16507 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16508 'just inserted' FROM t0_template
16509 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16510 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16511 BEGIN
16512 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16513 f_charbig = 'updated by trigger'
16514       WHERE f_int1 = new.f_int1;
16515 END|
16516 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16517 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16518         
16519 # check trigger-5 success:      1
16520 DROP TRIGGER trg_1;
16521 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16522 f_int2 = CAST(f_char1 AS SIGNED INT),
16523 f_charbig = 'just inserted'
16524    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16525 DELETE FROM t0_aux
16526 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16527 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16528 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16529 'just inserted' FROM t0_template
16530 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16531 CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16532 BEGIN
16533 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16534 f_charbig = 'updated by trigger'
16535       WHERE f_int1 = - old.f_int1;
16536 END|
16537 UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16538 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16539         
16540 # check trigger-6 success:      1
16541 DROP TRIGGER trg_1;
16542 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16543 f_int2 = CAST(f_char1 AS SIGNED INT),
16544 f_charbig = 'just inserted'
16545    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16546 DELETE FROM t0_aux
16547 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16548 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16549 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16550 'just inserted' FROM t0_template
16551 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16552 CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16553 BEGIN
16554 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16555 f_charbig = 'updated by trigger'
16556       WHERE f_int1 = - old.f_int1;
16557 END|
16558 DELETE FROM t0_aux
16559 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16560         
16561 # check trigger-7 success:      1
16562 DROP TRIGGER trg_1;
16563 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16564 f_int2 = CAST(f_char1 AS SIGNED INT),
16565 f_charbig = 'just inserted'
16566    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16567 DELETE FROM t0_aux
16568 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16569 INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16570 SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16571 'just inserted' FROM t0_template
16572 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16573 CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16574 BEGIN
16575 UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16576 f_charbig = 'updated by trigger'
16577       WHERE f_int1 = - old.f_int1;
16578 END|
16579 DELETE FROM t0_aux
16580 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16581         
16582 # check trigger-8 success:      1
16583 DROP TRIGGER trg_1;
16584 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16585 f_int2 = CAST(f_char1 AS SIGNED INT),
16586 f_charbig = 'just inserted'
16587    WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16588 DELETE FROM t0_aux
16589 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16590 DELETE FROM t1
16591 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16592 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16593 BEGIN
16594 SET new.f_int1 = old.f_int1 + @max_row,
16595 new.f_int2 = old.f_int2 - @max_row,
16596 new.f_charbig = '####updated per update trigger####';
16597 END|
16598 UPDATE t1
16599 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16600 f_charbig = '####updated per update statement itself####';
16601         
16602 # check trigger-9 success:      1
16603 DROP TRIGGER trg_2;
16604 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16605 f_int2 = CAST(f_char1 AS SIGNED INT),
16606 f_charbig = CONCAT('===',f_char1,'===');
16607 CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16608 BEGIN
16609 SET new.f_int1 = new.f_int1 + @max_row,
16610 new.f_int2 = new.f_int2 - @max_row,
16611 new.f_charbig = '####updated per update trigger####';
16612 END|
16613 UPDATE t1
16614 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16615 f_charbig = '####updated per update statement itself####';
16616         
16617 # check trigger-10 success:     1
16618 DROP TRIGGER trg_2;
16619 UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16620 f_int2 = CAST(f_char1 AS SIGNED INT),
16621 f_charbig = CONCAT('===',f_char1,'===');
16622 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16623 BEGIN
16624 SET new.f_int1 = @my_max1 + @counter,
16625 new.f_int2 = @my_min2 - @counter,
16626 new.f_charbig = '####updated per insert trigger####';
16627 SET @counter = @counter + 1;
16628 END|
16629 SET @counter = 1;
16630 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16631 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16632 SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16633 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16634 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16635 ORDER BY f_int1;
16636 DROP TRIGGER trg_3;
16637         
16638 # check trigger-11 success:     1
16639 DELETE FROM t1
16640 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16641 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16642 AND f_charbig = '####updated per insert trigger####';
16643 CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16644 BEGIN
16645 SET new.f_int1 = @my_max1 + @counter,
16646 new.f_int2 = @my_min2 - @counter,
16647 new.f_charbig = '####updated per insert trigger####';
16648 SET @counter = @counter + 1;
16649 END|
16650 SET @counter = 1;
16651 SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16652 INSERT INTO t1 (f_char1, f_char2, f_charbig)
16653 SELECT CAST(f_int1 AS CHAR),
16654 CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16655 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16656 ORDER BY f_int1;
16657 DROP TRIGGER trg_3;
16658         
16659 # check trigger-12 success:     1
16660 DELETE FROM t1
16661 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16662 AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16663 AND f_charbig = '####updated per insert trigger####';
16664 ANALYZE  TABLE t1;
16665 Table   Op      Msg_type        Msg_text
16666 test.t1 analyze status  OK
16667 CHECK    TABLE t1 EXTENDED;
16668 Table   Op      Msg_type        Msg_text
16669 test.t1 check   status  OK
16670 CHECKSUM TABLE t1 EXTENDED;
16671 Table   Checksum
16672 test.t1 <some_value>
16673 OPTIMIZE TABLE t1;
16674 Table   Op      Msg_type        Msg_text
16675 test.t1 optimize        note    Table does not support optimize, doing recreate + analyze instead
16676 test.t1 optimize        status  OK
16677 # check layout success:    1
16678 REPAIR   TABLE t1 EXTENDED;
16679 Table   Op      Msg_type        Msg_text
16680 test.t1 repair  note    The storage engine for the table doesn't support repair
16681 # check layout success:    1
16682 TRUNCATE t1;
16683         
16684 # check TRUNCATE success:       1
16685 # check layout success:    1
16686 # End usability test (inc/partition_check.inc)
16687 DROP TABLE t1;
16688 DROP VIEW  IF EXISTS v1;
16689 DROP TABLE IF EXISTS t1;
16690 DROP TABLE IF EXISTS t0_aux;
16691 DROP TABLE IF EXISTS t0_definition;
16692 DROP TABLE IF EXISTS t0_template;