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 (
18 f_charbig VARCHAR(1000) ,
21 # Logging of <max_row> INSERTs into t0_template suppressed
22 DROP TABLE IF EXISTS t0_definition;
23 CREATE TABLE t0_definition (
25 create_command VARBINARY(5000),
26 file_list VARBINARY(10000),
29 DROP TABLE IF EXISTS t0_aux;
30 CREATE TABLE t0_aux ( f_int1 INTEGER,
34 f_charbig VARCHAR(1000) )
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;
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
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
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
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
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
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
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
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
207 DROP TABLE IF EXISTS t1;
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
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
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
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
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
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
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
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
366 # 1.1.3 PRIMARY KEY consisting of two columns
367 DROP TABLE IF EXISTS t1;
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)
386 SHOW CREATE TABLE t1;
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)
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
423 # check multiple-1 success: 1
424 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
426 # check multiple-2 success: 1
427 INSERT INTO t1 SELECT * FROM t0_template
428 WHERE MOD(f_int1,3) = 0;
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;
435 # check multiple-4 success: 1
437 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
438 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
454 # check single-1 success: 1
455 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
467 # check single-3 success: 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#';
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#';
477 # check single-5 success: 1
478 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
480 # check single-6 success: 1
481 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
509 # check unique-1-a success: 1
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;
522 # check replace success: 1
524 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
539 # check transactions-1 success: 1
542 # check transactions-2 success: 1
545 # check transactions-3 success: 1
546 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
556 # check transactions-5 success: 1
559 # check transactions-6 success: 1
560 # INFO: Storage engine used for t1 seems to be transactional.
563 # check transactions-7 success: 1
564 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
580 DELETE FROM t1 WHERE f_charbig = 'was inserted';
582 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
584 # check special-1 success: 1
585 UPDATE t1 SET f_charbig = '';
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
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;
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;
606 # check trigger-1 success: 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);
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
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;
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;
628 # check trigger-2 success: 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);
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
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;
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));
649 # check trigger-3 success: 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);
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
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;
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));
670 # check trigger-4 success: 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);
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
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;
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));
691 # check trigger-5 success: 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);
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
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;
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));
712 # check trigger-6 success: 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);
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
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;
731 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
733 # check trigger-7 success: 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);
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
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;
752 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
754 # check trigger-8 success: 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);
761 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
771 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
772 f_charbig = '####updated per update statement itself####';
774 # check trigger-9 success: 1
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
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####';
786 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
787 f_charbig = '####updated per update statement itself####';
789 # check trigger-10 success: 1
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
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;
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
810 # check trigger-11 success: 1
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
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;
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
831 # check trigger-12 success: 1
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####';
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;
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
856 # check TRUNCATE success: 1
857 # check layout success: 1
858 # End usability test (inc/partition_check.inc)
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)
878 SHOW CREATE TABLE t1;
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)
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
915 # check multiple-1 success: 1
916 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
918 # check multiple-2 success: 1
919 INSERT INTO t1 SELECT * FROM t0_template
920 WHERE MOD(f_int1,3) = 0;
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;
927 # check multiple-4 success: 1
929 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
930 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
946 # check single-1 success: 1
947 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
959 # check single-3 success: 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#';
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#';
969 # check single-5 success: 1
970 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
972 # check single-6 success: 1
973 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
1001 # check unique-1-a success: 1
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;
1014 # check replace success: 1
1016 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
1031 # check transactions-1 success: 1
1034 # check transactions-2 success: 1
1037 # check transactions-3 success: 1
1038 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
1048 # check transactions-5 success: 1
1051 # check transactions-6 success: 1
1052 # INFO: Storage engine used for t1 seems to be transactional.
1055 # check transactions-7 success: 1
1056 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
1072 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1074 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1076 # check special-1 success: 1
1077 UPDATE t1 SET f_charbig = '';
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
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;
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;
1098 # check trigger-1 success: 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);
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
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;
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;
1120 # check trigger-2 success: 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);
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
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;
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));
1141 # check trigger-3 success: 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);
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
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;
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));
1162 # check trigger-4 success: 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);
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
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;
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));
1183 # check trigger-5 success: 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);
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
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;
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));
1204 # check trigger-6 success: 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);
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
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;
1223 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1225 # check trigger-7 success: 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);
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
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;
1244 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1246 # check trigger-8 success: 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);
1253 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
1263 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1264 f_charbig = '####updated per update statement itself####';
1266 # check trigger-9 success: 1
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
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####';
1278 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1279 f_charbig = '####updated per update statement itself####';
1281 # check trigger-10 success: 1
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
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;
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
1302 # check trigger-11 success: 1
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
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;
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
1323 # check trigger-12 success: 1
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####';
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;
1336 test.t1 <some_value>
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
1348 # check TRUNCATE success: 1
1349 # check layout success: 1
1350 # End usability test (inc/partition_check.inc)
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)
1378 SHOW CREATE TABLE t1;
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
1422 # check multiple-1 success: 1
1423 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1425 # check multiple-2 success: 1
1426 INSERT INTO t1 SELECT * FROM t0_template
1427 WHERE MOD(f_int1,3) = 0;
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;
1434 # check multiple-4 success: 1
1436 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1437 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
1453 # check single-1 success: 1
1454 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
1476 # check single-5 success: 1
1477 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1479 # check single-6 success: 1
1480 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
1508 # check unique-1-a success: 1
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;
1521 # check replace success: 1
1523 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
1538 # check transactions-1 success: 1
1541 # check transactions-2 success: 1
1544 # check transactions-3 success: 1
1545 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
1555 # check transactions-5 success: 1
1558 # check transactions-6 success: 1
1559 # INFO: Storage engine used for t1 seems to be transactional.
1562 # check transactions-7 success: 1
1563 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
1579 DELETE FROM t1 WHERE f_charbig = 'was inserted';
1581 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1583 # check special-1 success: 1
1584 UPDATE t1 SET f_charbig = '';
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
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;
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;
1605 # check trigger-1 success: 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);
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
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;
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;
1627 # check trigger-2 success: 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);
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
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;
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));
1648 # check trigger-3 success: 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);
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
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;
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));
1669 # check trigger-4 success: 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);
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
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;
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));
1690 # check trigger-5 success: 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);
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
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;
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));
1711 # check trigger-6 success: 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);
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
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;
1730 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1732 # check trigger-7 success: 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);
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
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;
1751 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1753 # check trigger-8 success: 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);
1760 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
1770 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1771 f_charbig = '####updated per update statement itself####';
1773 # check trigger-9 success: 1
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
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####';
1785 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1786 f_charbig = '####updated per update statement itself####';
1788 # check trigger-10 success: 1
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
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;
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
1809 # check trigger-11 success: 1
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
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;
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
1830 # check trigger-12 success: 1
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####';
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;
1843 test.t1 <some_value>
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
1855 # check TRUNCATE success: 1
1856 # check layout success: 1
1857 # End usability test (inc/partition_check.inc)
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)
1883 SHOW CREATE TABLE t1;
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
1925 # check multiple-1 success: 1
1926 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1928 # check multiple-2 success: 1
1929 INSERT INTO t1 SELECT * FROM t0_template
1930 WHERE MOD(f_int1,3) = 0;
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;
1937 # check multiple-4 success: 1
1939 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1940 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
1956 # check single-1 success: 1
1957 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
1979 # check single-5 success: 1
1980 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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
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';
2009 # check unique-1-a success: 1
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;
2022 # check replace success: 1
2024 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
2039 # check transactions-1 success: 1
2042 # check transactions-2 success: 1
2045 # check transactions-3 success: 1
2046 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
2056 # check transactions-5 success: 1
2059 # check transactions-6 success: 1
2060 # INFO: Storage engine used for t1 seems to be transactional.
2063 # check transactions-7 success: 1
2064 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
2080 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2082 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2084 # check special-1 success: 1
2085 UPDATE t1 SET f_charbig = '';
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
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;
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;
2106 # check trigger-1 success: 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);
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
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;
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;
2128 # check trigger-2 success: 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);
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
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;
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));
2149 # check trigger-3 success: 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);
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
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;
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));
2170 # check trigger-4 success: 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);
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
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;
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));
2191 # check trigger-5 success: 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);
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
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;
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));
2212 # check trigger-6 success: 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);
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
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;
2231 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2233 # check trigger-7 success: 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);
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
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;
2252 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2254 # check trigger-8 success: 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);
2261 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
2271 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2272 f_charbig = '####updated per update statement itself####';
2274 # check trigger-9 success: 1
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
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####';
2286 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2287 f_charbig = '####updated per update statement itself####';
2289 # check trigger-10 success: 1
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
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;
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
2310 # check trigger-11 success: 1
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
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;
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
2331 # check trigger-12 success: 1
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####';
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;
2344 test.t1 <some_value>
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
2356 # check TRUNCATE success: 1
2357 # check layout success: 1
2358 # End usability test (inc/partition_check.inc)
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)
2382 SHOW CREATE TABLE t1;
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)
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
2424 # check multiple-1 success: 1
2425 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2427 # check multiple-2 success: 1
2428 INSERT INTO t1 SELECT * FROM t0_template
2429 WHERE MOD(f_int1,3) = 0;
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;
2436 # check multiple-4 success: 1
2438 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2439 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
2455 # check single-1 success: 1
2456 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
2478 # check single-5 success: 1
2479 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2481 # check single-6 success: 1
2482 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
2510 # check unique-1-a success: 1
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;
2523 # check replace success: 1
2525 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
2540 # check transactions-1 success: 1
2543 # check transactions-2 success: 1
2546 # check transactions-3 success: 1
2547 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
2557 # check transactions-5 success: 1
2560 # check transactions-6 success: 1
2561 # INFO: Storage engine used for t1 seems to be transactional.
2564 # check transactions-7 success: 1
2565 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
2581 DELETE FROM t1 WHERE f_charbig = 'was inserted';
2583 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2585 # check special-1 success: 1
2586 UPDATE t1 SET f_charbig = '';
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
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;
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;
2607 # check trigger-1 success: 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);
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
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;
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;
2629 # check trigger-2 success: 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);
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
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;
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));
2650 # check trigger-3 success: 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);
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
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;
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));
2671 # check trigger-4 success: 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);
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
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;
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));
2692 # check trigger-5 success: 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);
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
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;
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));
2713 # check trigger-6 success: 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);
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
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;
2732 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2734 # check trigger-7 success: 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);
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
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;
2753 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2755 # check trigger-8 success: 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);
2762 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
2772 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2773 f_charbig = '####updated per update statement itself####';
2775 # check trigger-9 success: 1
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
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####';
2787 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2788 f_charbig = '####updated per update statement itself####';
2790 # check trigger-10 success: 1
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
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;
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
2811 # check trigger-11 success: 1
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
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;
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
2832 # check trigger-12 success: 1
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####';
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;
2845 test.t1 <some_value>
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
2857 # check TRUNCATE success: 1
2858 # check layout success: 1
2859 # End usability test (inc/partition_check.inc)
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)
2887 SHOW CREATE TABLE t1;
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
2936 # check multiple-1 success: 1
2937 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2939 # check multiple-2 success: 1
2940 INSERT INTO t1 SELECT * FROM t0_template
2941 WHERE MOD(f_int1,3) = 0;
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;
2948 # check multiple-4 success: 1
2950 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2951 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
2967 # check single-1 success: 1
2968 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
2990 # check single-5 success: 1
2991 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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
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';
3020 # check unique-1-a success: 1
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;
3033 # check replace success: 1
3035 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
3050 # check transactions-1 success: 1
3053 # check transactions-2 success: 1
3056 # check transactions-3 success: 1
3057 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
3067 # check transactions-5 success: 1
3070 # check transactions-6 success: 1
3071 # INFO: Storage engine used for t1 seems to be transactional.
3074 # check transactions-7 success: 1
3075 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
3091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3093 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3095 # check special-1 success: 1
3096 UPDATE t1 SET f_charbig = '';
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
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;
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;
3117 # check trigger-1 success: 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);
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
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;
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;
3139 # check trigger-2 success: 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);
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
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;
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));
3160 # check trigger-3 success: 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);
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
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;
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));
3181 # check trigger-4 success: 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);
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
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;
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));
3202 # check trigger-5 success: 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);
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
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;
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));
3223 # check trigger-6 success: 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);
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
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;
3242 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3244 # check trigger-7 success: 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);
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
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;
3263 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3265 # check trigger-8 success: 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);
3272 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
3282 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3283 f_charbig = '####updated per update statement itself####';
3285 # check trigger-9 success: 1
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
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####';
3297 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3298 f_charbig = '####updated per update statement itself####';
3300 # check trigger-10 success: 1
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
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;
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
3321 # check trigger-11 success: 1
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
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;
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
3342 # check trigger-12 success: 1
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####';
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;
3355 test.t1 <some_value>
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
3367 # check TRUNCATE success: 1
3368 # check layout success: 1
3369 # End usability test (inc/partition_check.inc)
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)
3397 SHOW CREATE TABLE t1;
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
3446 # check multiple-1 success: 1
3447 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3449 # check multiple-2 success: 1
3450 INSERT INTO t1 SELECT * FROM t0_template
3451 WHERE MOD(f_int1,3) = 0;
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;
3458 # check multiple-4 success: 1
3460 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3461 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
3477 # check single-1 success: 1
3478 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
3500 # check single-5 success: 1
3501 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3503 # check single-6 success: 1
3504 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
3532 # check unique-1-a success: 1
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;
3545 # check replace success: 1
3547 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
3562 # check transactions-1 success: 1
3565 # check transactions-2 success: 1
3568 # check transactions-3 success: 1
3569 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
3579 # check transactions-5 success: 1
3582 # check transactions-6 success: 1
3583 # INFO: Storage engine used for t1 seems to be transactional.
3586 # check transactions-7 success: 1
3587 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
3603 DELETE FROM t1 WHERE f_charbig = 'was inserted';
3605 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3607 # check special-1 success: 1
3608 UPDATE t1 SET f_charbig = '';
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
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;
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;
3629 # check trigger-1 success: 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);
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
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;
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;
3651 # check trigger-2 success: 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);
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
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;
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));
3672 # check trigger-3 success: 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);
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
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;
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));
3693 # check trigger-4 success: 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);
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
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;
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));
3714 # check trigger-5 success: 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);
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
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;
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));
3735 # check trigger-6 success: 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);
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
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;
3754 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3756 # check trigger-7 success: 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);
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
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;
3775 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3777 # check trigger-8 success: 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);
3784 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
3794 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3795 f_charbig = '####updated per update statement itself####';
3797 # check trigger-9 success: 1
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
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####';
3809 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3810 f_charbig = '####updated per update statement itself####';
3812 # check trigger-10 success: 1
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
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;
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
3833 # check trigger-11 success: 1
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
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;
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
3854 # check trigger-12 success: 1
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####';
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;
3867 test.t1 <some_value>
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
3879 # check TRUNCATE success: 1
3880 # check layout success: 1
3881 # End usability test (inc/partition_check.inc)
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)
3905 SHOW CREATE TABLE t1;
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)
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
3946 # check multiple-1 success: 1
3947 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3949 # check multiple-2 success: 1
3950 INSERT INTO t1 SELECT * FROM t0_template
3951 WHERE MOD(f_int1,3) = 0;
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;
3958 # check multiple-4 success: 1
3960 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3961 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
3977 # check single-1 success: 1
3978 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
4000 # check single-5 success: 1
4001 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4003 # check single-6 success: 1
4004 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
4032 # check unique-1-a success: 1
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;
4045 # check replace success: 1
4047 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
4062 # check transactions-1 success: 1
4065 # check transactions-2 success: 1
4068 # check transactions-3 success: 1
4069 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
4079 # check transactions-5 success: 1
4082 # check transactions-6 success: 1
4083 # INFO: Storage engine used for t1 seems to be transactional.
4086 # check transactions-7 success: 1
4087 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
4103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4105 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4107 # check special-1 success: 1
4108 UPDATE t1 SET f_charbig = '';
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
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;
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;
4129 # check trigger-1 success: 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);
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
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;
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;
4151 # check trigger-2 success: 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);
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
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;
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));
4172 # check trigger-3 success: 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);
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
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;
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));
4193 # check trigger-4 success: 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);
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
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;
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));
4214 # check trigger-5 success: 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);
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
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;
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));
4235 # check trigger-6 success: 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);
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
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;
4254 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4256 # check trigger-7 success: 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);
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
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;
4275 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4277 # check trigger-8 success: 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);
4284 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
4294 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4295 f_charbig = '####updated per update statement itself####';
4297 # check trigger-9 success: 1
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
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####';
4309 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4310 f_charbig = '####updated per update statement itself####';
4312 # check trigger-10 success: 1
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
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;
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
4333 # check trigger-11 success: 1
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
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;
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
4354 # check trigger-12 success: 1
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####';
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;
4367 test.t1 <some_value>
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
4379 # check TRUNCATE success: 1
4380 # check layout success: 1
4381 # End usability test (inc/partition_check.inc)
4383 DROP TABLE IF EXISTS t1;
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)
4402 SHOW CREATE TABLE t1;
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)
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
4439 # check multiple-1 success: 1
4440 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4442 # check multiple-2 success: 1
4443 INSERT INTO t1 SELECT * FROM t0_template
4444 WHERE MOD(f_int1,3) = 0;
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;
4451 # check multiple-4 success: 1
4453 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4454 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
4470 # check single-1 success: 1
4471 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
4493 # check single-5 success: 1
4494 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4496 # check single-6 success: 1
4497 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
4525 # check unique-1-a success: 1
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;
4538 # check replace success: 1
4540 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
4555 # check transactions-1 success: 1
4558 # check transactions-2 success: 1
4561 # check transactions-3 success: 1
4562 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
4572 # check transactions-5 success: 1
4575 # check transactions-6 success: 1
4576 # INFO: Storage engine used for t1 seems to be transactional.
4579 # check transactions-7 success: 1
4580 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
4596 DELETE FROM t1 WHERE f_charbig = 'was inserted';
4598 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4600 # check special-1 success: 1
4601 UPDATE t1 SET f_charbig = '';
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
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;
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;
4622 # check trigger-1 success: 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);
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
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;
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;
4644 # check trigger-2 success: 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);
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
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;
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));
4665 # check trigger-3 success: 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);
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
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;
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));
4686 # check trigger-4 success: 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);
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
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;
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));
4707 # check trigger-5 success: 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);
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
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;
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));
4728 # check trigger-6 success: 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);
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
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;
4747 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4749 # check trigger-7 success: 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);
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
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;
4768 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4770 # check trigger-8 success: 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);
4777 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
4787 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4788 f_charbig = '####updated per update statement itself####';
4790 # check trigger-9 success: 1
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
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####';
4802 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4803 f_charbig = '####updated per update statement itself####';
4805 # check trigger-10 success: 1
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
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;
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
4826 # check trigger-11 success: 1
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
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;
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
4847 # check trigger-12 success: 1
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####';
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;
4860 test.t1 <some_value>
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
4872 # check TRUNCATE success: 1
4873 # check layout success: 1
4874 # End usability test (inc/partition_check.inc)
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)
4894 SHOW CREATE TABLE t1;
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)
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
4931 # check multiple-1 success: 1
4932 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4934 # check multiple-2 success: 1
4935 INSERT INTO t1 SELECT * FROM t0_template
4936 WHERE MOD(f_int1,3) = 0;
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;
4943 # check multiple-4 success: 1
4945 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4946 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
4962 # check single-1 success: 1
4963 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
4985 # check single-5 success: 1
4986 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4988 # check single-6 success: 1
4989 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
5017 # check unique-1-a success: 1
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;
5030 # check replace success: 1
5032 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
5047 # check transactions-1 success: 1
5050 # check transactions-2 success: 1
5053 # check transactions-3 success: 1
5054 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
5064 # check transactions-5 success: 1
5067 # check transactions-6 success: 1
5068 # INFO: Storage engine used for t1 seems to be transactional.
5071 # check transactions-7 success: 1
5072 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
5088 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5090 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5092 # check special-1 success: 1
5093 UPDATE t1 SET f_charbig = '';
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
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;
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;
5114 # check trigger-1 success: 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);
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
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;
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;
5136 # check trigger-2 success: 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);
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
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;
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));
5157 # check trigger-3 success: 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);
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
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;
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));
5178 # check trigger-4 success: 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);
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
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;
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));
5199 # check trigger-5 success: 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);
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
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;
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));
5220 # check trigger-6 success: 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);
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
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;
5239 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5241 # check trigger-7 success: 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);
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
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;
5260 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5262 # check trigger-8 success: 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);
5269 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
5279 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5280 f_charbig = '####updated per update statement itself####';
5282 # check trigger-9 success: 1
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
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####';
5294 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5295 f_charbig = '####updated per update statement itself####';
5297 # check trigger-10 success: 1
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
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;
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
5318 # check trigger-11 success: 1
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
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;
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
5339 # check trigger-12 success: 1
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####';
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;
5352 test.t1 <some_value>
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
5364 # check TRUNCATE success: 1
5365 # check layout success: 1
5366 # End usability test (inc/partition_check.inc)
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)
5394 SHOW CREATE TABLE t1;
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
5438 # check multiple-1 success: 1
5439 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5441 # check multiple-2 success: 1
5442 INSERT INTO t1 SELECT * FROM t0_template
5443 WHERE MOD(f_int1,3) = 0;
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;
5450 # check multiple-4 success: 1
5452 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5453 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
5469 # check single-1 success: 1
5470 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
5492 # check single-5 success: 1
5493 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5495 # check single-6 success: 1
5496 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
5524 # check unique-1-a success: 1
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;
5537 # check replace success: 1
5539 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
5554 # check transactions-1 success: 1
5557 # check transactions-2 success: 1
5560 # check transactions-3 success: 1
5561 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
5571 # check transactions-5 success: 1
5574 # check transactions-6 success: 1
5575 # INFO: Storage engine used for t1 seems to be transactional.
5578 # check transactions-7 success: 1
5579 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
5595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
5597 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5599 # check special-1 success: 1
5600 UPDATE t1 SET f_charbig = '';
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
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;
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;
5621 # check trigger-1 success: 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);
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
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;
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;
5643 # check trigger-2 success: 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);
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
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;
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));
5664 # check trigger-3 success: 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);
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
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;
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));
5685 # check trigger-4 success: 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);
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
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;
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));
5706 # check trigger-5 success: 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);
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
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;
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));
5727 # check trigger-6 success: 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);
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
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;
5746 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5748 # check trigger-7 success: 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);
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
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;
5767 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5769 # check trigger-8 success: 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);
5776 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
5786 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5787 f_charbig = '####updated per update statement itself####';
5789 # check trigger-9 success: 1
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
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####';
5801 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5802 f_charbig = '####updated per update statement itself####';
5804 # check trigger-10 success: 1
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
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;
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
5825 # check trigger-11 success: 1
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
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;
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
5846 # check trigger-12 success: 1
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####';
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;
5859 test.t1 <some_value>
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
5871 # check TRUNCATE success: 1
5872 # check layout success: 1
5873 # End usability test (inc/partition_check.inc)
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)
5899 SHOW CREATE TABLE t1;
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
5941 # check multiple-1 success: 1
5942 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5944 # check multiple-2 success: 1
5945 INSERT INTO t1 SELECT * FROM t0_template
5946 WHERE MOD(f_int1,3) = 0;
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;
5953 # check multiple-4 success: 1
5955 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5956 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
5972 # check single-1 success: 1
5973 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
5995 # check single-5 success: 1
5996 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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
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';
6025 # check unique-1-a success: 1
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;
6038 # check replace success: 1
6040 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
6055 # check transactions-1 success: 1
6058 # check transactions-2 success: 1
6061 # check transactions-3 success: 1
6062 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
6072 # check transactions-5 success: 1
6075 # check transactions-6 success: 1
6076 # INFO: Storage engine used for t1 seems to be transactional.
6079 # check transactions-7 success: 1
6080 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
6096 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6098 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6100 # check special-1 success: 1
6101 UPDATE t1 SET f_charbig = '';
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
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;
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;
6122 # check trigger-1 success: 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);
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
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;
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;
6144 # check trigger-2 success: 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);
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
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;
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));
6165 # check trigger-3 success: 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);
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
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;
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));
6186 # check trigger-4 success: 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);
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
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;
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));
6207 # check trigger-5 success: 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);
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
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;
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));
6228 # check trigger-6 success: 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);
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
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;
6247 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6249 # check trigger-7 success: 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);
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
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;
6268 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6270 # check trigger-8 success: 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);
6277 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
6287 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6288 f_charbig = '####updated per update statement itself####';
6290 # check trigger-9 success: 1
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
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####';
6302 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6303 f_charbig = '####updated per update statement itself####';
6305 # check trigger-10 success: 1
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
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;
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
6326 # check trigger-11 success: 1
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
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;
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
6347 # check trigger-12 success: 1
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####';
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;
6360 test.t1 <some_value>
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
6372 # check TRUNCATE success: 1
6373 # check layout success: 1
6374 # End usability test (inc/partition_check.inc)
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)
6398 SHOW CREATE TABLE t1;
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)
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
6440 # check multiple-1 success: 1
6441 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6443 # check multiple-2 success: 1
6444 INSERT INTO t1 SELECT * FROM t0_template
6445 WHERE MOD(f_int1,3) = 0;
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;
6452 # check multiple-4 success: 1
6454 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6455 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
6471 # check single-1 success: 1
6472 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
6494 # check single-5 success: 1
6495 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6497 # check single-6 success: 1
6498 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
6526 # check unique-1-a success: 1
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;
6539 # check replace success: 1
6541 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
6556 # check transactions-1 success: 1
6559 # check transactions-2 success: 1
6562 # check transactions-3 success: 1
6563 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
6573 # check transactions-5 success: 1
6576 # check transactions-6 success: 1
6577 # INFO: Storage engine used for t1 seems to be transactional.
6580 # check transactions-7 success: 1
6581 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
6597 DELETE FROM t1 WHERE f_charbig = 'was inserted';
6599 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6601 # check special-1 success: 1
6602 UPDATE t1 SET f_charbig = '';
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
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;
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;
6623 # check trigger-1 success: 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);
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
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;
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;
6645 # check trigger-2 success: 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);
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
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;
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));
6666 # check trigger-3 success: 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);
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
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;
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));
6687 # check trigger-4 success: 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);
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
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;
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));
6708 # check trigger-5 success: 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);
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
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;
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));
6729 # check trigger-6 success: 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);
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
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;
6748 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6750 # check trigger-7 success: 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);
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
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;
6769 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6771 # check trigger-8 success: 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);
6778 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
6788 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6789 f_charbig = '####updated per update statement itself####';
6791 # check trigger-9 success: 1
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
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####';
6803 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6804 f_charbig = '####updated per update statement itself####';
6806 # check trigger-10 success: 1
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
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;
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
6827 # check trigger-11 success: 1
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
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;
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
6848 # check trigger-12 success: 1
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####';
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;
6861 test.t1 <some_value>
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
6873 # check TRUNCATE success: 1
6874 # check layout success: 1
6875 # End usability test (inc/partition_check.inc)
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)
6903 SHOW CREATE TABLE t1;
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
6952 # check multiple-1 success: 1
6953 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6955 # check multiple-2 success: 1
6956 INSERT INTO t1 SELECT * FROM t0_template
6957 WHERE MOD(f_int1,3) = 0;
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;
6964 # check multiple-4 success: 1
6966 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6967 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
6983 # check single-1 success: 1
6984 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
7006 # check single-5 success: 1
7007 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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
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';
7036 # check unique-1-a success: 1
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;
7049 # check replace success: 1
7051 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
7066 # check transactions-1 success: 1
7069 # check transactions-2 success: 1
7072 # check transactions-3 success: 1
7073 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
7083 # check transactions-5 success: 1
7086 # check transactions-6 success: 1
7087 # INFO: Storage engine used for t1 seems to be transactional.
7090 # check transactions-7 success: 1
7091 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
7107 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7109 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7111 # check special-1 success: 1
7112 UPDATE t1 SET f_charbig = '';
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
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;
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;
7133 # check trigger-1 success: 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);
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
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;
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;
7155 # check trigger-2 success: 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);
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
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;
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));
7176 # check trigger-3 success: 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);
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
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;
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));
7197 # check trigger-4 success: 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);
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
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;
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));
7218 # check trigger-5 success: 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);
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
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;
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));
7239 # check trigger-6 success: 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);
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
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;
7258 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7260 # check trigger-7 success: 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);
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
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;
7279 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7281 # check trigger-8 success: 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);
7288 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
7298 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7299 f_charbig = '####updated per update statement itself####';
7301 # check trigger-9 success: 1
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
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####';
7313 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7314 f_charbig = '####updated per update statement itself####';
7316 # check trigger-10 success: 1
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
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;
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
7337 # check trigger-11 success: 1
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
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;
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
7358 # check trigger-12 success: 1
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####';
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;
7371 test.t1 <some_value>
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
7383 # check TRUNCATE success: 1
7384 # check layout success: 1
7385 # End usability test (inc/partition_check.inc)
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)
7413 SHOW CREATE TABLE t1;
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
7462 # check multiple-1 success: 1
7463 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7465 # check multiple-2 success: 1
7466 INSERT INTO t1 SELECT * FROM t0_template
7467 WHERE MOD(f_int1,3) = 0;
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;
7474 # check multiple-4 success: 1
7476 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7477 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
7493 # check single-1 success: 1
7494 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
7516 # check single-5 success: 1
7517 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7519 # check single-6 success: 1
7520 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
7548 # check unique-1-a success: 1
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;
7561 # check replace success: 1
7563 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
7578 # check transactions-1 success: 1
7581 # check transactions-2 success: 1
7584 # check transactions-3 success: 1
7585 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
7595 # check transactions-5 success: 1
7598 # check transactions-6 success: 1
7599 # INFO: Storage engine used for t1 seems to be transactional.
7602 # check transactions-7 success: 1
7603 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
7619 DELETE FROM t1 WHERE f_charbig = 'was inserted';
7621 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7623 # check special-1 success: 1
7624 UPDATE t1 SET f_charbig = '';
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
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;
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;
7645 # check trigger-1 success: 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);
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
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;
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;
7667 # check trigger-2 success: 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);
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
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;
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));
7688 # check trigger-3 success: 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);
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
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;
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));
7709 # check trigger-4 success: 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);
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
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;
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));
7730 # check trigger-5 success: 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);
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
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;
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));
7751 # check trigger-6 success: 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);
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
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;
7770 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7772 # check trigger-7 success: 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);
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
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;
7791 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7793 # check trigger-8 success: 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);
7800 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
7810 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7811 f_charbig = '####updated per update statement itself####';
7813 # check trigger-9 success: 1
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
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####';
7825 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7826 f_charbig = '####updated per update statement itself####';
7828 # check trigger-10 success: 1
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
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;
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
7849 # check trigger-11 success: 1
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
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;
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
7870 # check trigger-12 success: 1
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####';
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;
7883 test.t1 <some_value>
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
7895 # check TRUNCATE success: 1
7896 # check layout success: 1
7897 # End usability test (inc/partition_check.inc)
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)
7921 SHOW CREATE TABLE t1;
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)
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
7962 # check multiple-1 success: 1
7963 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7965 # check multiple-2 success: 1
7966 INSERT INTO t1 SELECT * FROM t0_template
7967 WHERE MOD(f_int1,3) = 0;
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;
7974 # check multiple-4 success: 1
7976 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7977 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
7993 # check single-1 success: 1
7994 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
8016 # check single-5 success: 1
8017 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8019 # check single-6 success: 1
8020 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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
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';
8048 # check unique-1-a success: 1
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;
8061 # check replace success: 1
8063 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
8078 # check transactions-1 success: 1
8081 # check transactions-2 success: 1
8084 # check transactions-3 success: 1
8085 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
8095 # check transactions-5 success: 1
8098 # check transactions-6 success: 1
8099 # INFO: Storage engine used for t1 seems to be transactional.
8102 # check transactions-7 success: 1
8103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
8119 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8121 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8123 # check special-1 success: 1
8124 UPDATE t1 SET f_charbig = '';
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
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;
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;
8145 # check trigger-1 success: 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);
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
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;
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;
8167 # check trigger-2 success: 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);
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
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;
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));
8188 # check trigger-3 success: 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);
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
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;
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));
8209 # check trigger-4 success: 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);
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
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;
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));
8230 # check trigger-5 success: 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);
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
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;
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));
8251 # check trigger-6 success: 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);
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
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;
8270 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8272 # check trigger-7 success: 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);
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
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;
8291 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8293 # check trigger-8 success: 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);
8300 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
8310 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8311 f_charbig = '####updated per update statement itself####';
8313 # check trigger-9 success: 1
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
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####';
8325 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8326 f_charbig = '####updated per update statement itself####';
8328 # check trigger-10 success: 1
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
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;
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
8349 # check trigger-11 success: 1
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
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;
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
8370 # check trigger-12 success: 1
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####';
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;
8383 test.t1 <some_value>
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
8395 # check TRUNCATE success: 1
8396 # check layout success: 1
8397 # End usability test (inc/partition_check.inc)
8399 # 1.1.4 UNIQUE INDEX consisting of two columns
8400 DROP TABLE IF EXISTS t1;
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)
8419 SHOW CREATE TABLE t1;
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)
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
8456 # check multiple-1 success: 1
8457 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8459 # check multiple-2 success: 1
8460 INSERT INTO t1 SELECT * FROM t0_template
8461 WHERE MOD(f_int1,3) = 0;
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;
8468 # check multiple-4 success: 1
8470 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8471 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
8487 # check single-1 success: 1
8488 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
8510 # check single-5 success: 1
8511 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8513 # check single-6 success: 1
8514 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
8538 # check null-3 success: 1
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#';
8543 # check null-4 success: 1
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
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';
8558 # check unique-1-a success: 1
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;
8571 # check replace success: 1
8573 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
8588 # check transactions-1 success: 1
8591 # check transactions-2 success: 1
8594 # check transactions-3 success: 1
8595 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
8605 # check transactions-5 success: 1
8608 # check transactions-6 success: 1
8609 # INFO: Storage engine used for t1 seems to be transactional.
8612 # check transactions-7 success: 1
8613 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
8629 DELETE FROM t1 WHERE f_charbig = 'was inserted';
8631 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8633 # check special-1 success: 1
8634 UPDATE t1 SET f_charbig = '';
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
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;
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;
8655 # check trigger-1 success: 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);
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
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;
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;
8677 # check trigger-2 success: 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);
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
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;
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));
8698 # check trigger-3 success: 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);
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
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;
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));
8719 # check trigger-4 success: 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);
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
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;
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));
8740 # check trigger-5 success: 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);
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
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;
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));
8761 # check trigger-6 success: 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);
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
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;
8780 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8782 # check trigger-7 success: 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);
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
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;
8801 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8803 # check trigger-8 success: 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);
8810 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
8820 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8821 f_charbig = '####updated per update statement itself####';
8823 # check trigger-9 success: 1
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
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####';
8835 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8836 f_charbig = '####updated per update statement itself####';
8838 # check trigger-10 success: 1
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
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;
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
8859 # check trigger-11 success: 1
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
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;
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
8880 # check trigger-12 success: 1
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####';
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;
8893 test.t1 <some_value>
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
8905 # check TRUNCATE success: 1
8906 # check layout success: 1
8907 # End usability test (inc/partition_check.inc)
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)
8927 SHOW CREATE TABLE t1;
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)
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
8964 # check multiple-1 success: 1
8965 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8967 # check multiple-2 success: 1
8968 INSERT INTO t1 SELECT * FROM t0_template
8969 WHERE MOD(f_int1,3) = 0;
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;
8976 # check multiple-4 success: 1
8978 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8979 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
8995 # check single-1 success: 1
8996 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
9018 # check single-5 success: 1
9019 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9021 # check single-6 success: 1
9022 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
9046 # check null-3 success: 1
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#';
9051 # check null-4 success: 1
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
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';
9066 # check unique-1-a success: 1
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;
9079 # check replace success: 1
9081 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
9096 # check transactions-1 success: 1
9099 # check transactions-2 success: 1
9102 # check transactions-3 success: 1
9103 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
9113 # check transactions-5 success: 1
9116 # check transactions-6 success: 1
9117 # INFO: Storage engine used for t1 seems to be transactional.
9120 # check transactions-7 success: 1
9121 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
9137 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9139 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9141 # check special-1 success: 1
9142 UPDATE t1 SET f_charbig = '';
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
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;
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;
9163 # check trigger-1 success: 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);
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
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;
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;
9185 # check trigger-2 success: 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);
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
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;
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));
9206 # check trigger-3 success: 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);
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
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;
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));
9227 # check trigger-4 success: 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);
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
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;
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));
9248 # check trigger-5 success: 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);
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
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;
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));
9269 # check trigger-6 success: 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);
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
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;
9288 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9290 # check trigger-7 success: 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);
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
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;
9309 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9311 # check trigger-8 success: 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);
9318 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
9328 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9329 f_charbig = '####updated per update statement itself####';
9331 # check trigger-9 success: 1
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
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####';
9343 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9344 f_charbig = '####updated per update statement itself####';
9346 # check trigger-10 success: 1
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
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;
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
9367 # check trigger-11 success: 1
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
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;
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
9388 # check trigger-12 success: 1
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####';
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;
9401 test.t1 <some_value>
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
9413 # check TRUNCATE success: 1
9414 # check layout success: 1
9415 # End usability test (inc/partition_check.inc)
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)
9443 SHOW CREATE TABLE t1;
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
9487 # check multiple-1 success: 1
9488 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9490 # check multiple-2 success: 1
9491 INSERT INTO t1 SELECT * FROM t0_template
9492 WHERE MOD(f_int1,3) = 0;
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;
9499 # check multiple-4 success: 1
9501 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9502 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
9518 # check single-1 success: 1
9519 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
9541 # check single-5 success: 1
9542 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9544 # check single-6 success: 1
9545 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
9569 # check null-3 success: 1
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#';
9574 # check null-4 success: 1
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
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';
9589 # check unique-1-a success: 1
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;
9602 # check replace success: 1
9604 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
9619 # check transactions-1 success: 1
9622 # check transactions-2 success: 1
9625 # check transactions-3 success: 1
9626 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
9636 # check transactions-5 success: 1
9639 # check transactions-6 success: 1
9640 # INFO: Storage engine used for t1 seems to be transactional.
9643 # check transactions-7 success: 1
9644 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
9660 DELETE FROM t1 WHERE f_charbig = 'was inserted';
9662 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9664 # check special-1 success: 1
9665 UPDATE t1 SET f_charbig = '';
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
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;
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;
9686 # check trigger-1 success: 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);
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
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;
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;
9708 # check trigger-2 success: 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);
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
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;
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));
9729 # check trigger-3 success: 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);
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
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;
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));
9750 # check trigger-4 success: 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);
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
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;
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));
9771 # check trigger-5 success: 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);
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
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;
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));
9792 # check trigger-6 success: 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);
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
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;
9811 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9813 # check trigger-7 success: 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);
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
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;
9832 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9834 # check trigger-8 success: 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);
9841 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
9851 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9852 f_charbig = '####updated per update statement itself####';
9854 # check trigger-9 success: 1
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
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####';
9866 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9867 f_charbig = '####updated per update statement itself####';
9869 # check trigger-10 success: 1
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
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;
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
9890 # check trigger-11 success: 1
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
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;
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
9911 # check trigger-12 success: 1
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####';
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;
9924 test.t1 <some_value>
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
9936 # check TRUNCATE success: 1
9937 # check layout success: 1
9938 # End usability test (inc/partition_check.inc)
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)
9964 SHOW CREATE TABLE t1;
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
10006 # check multiple-1 success: 1
10007 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10009 # check multiple-2 success: 1
10010 INSERT INTO t1 SELECT * FROM t0_template
10011 WHERE MOD(f_int1,3) = 0;
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;
10018 # check multiple-4 success: 1
10020 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10021 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
10037 # check single-1 success: 1
10038 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
10060 # check single-5 success: 1
10061 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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#';
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#';
10086 # check null-3 success: 1
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#';
10091 # check null-4 success: 1
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
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';
10106 # check unique-1-a success: 1
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;
10119 # check replace success: 1
10121 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
10136 # check transactions-1 success: 1
10139 # check transactions-2 success: 1
10142 # check transactions-3 success: 1
10143 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
10153 # check transactions-5 success: 1
10156 # check transactions-6 success: 1
10157 # INFO: Storage engine used for t1 seems to be transactional.
10160 # check transactions-7 success: 1
10161 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
10177 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10179 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10181 # check special-1 success: 1
10182 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
10328 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
10349 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
10358 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
10368 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10369 f_charbig = '####updated per update statement itself####';
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
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####';
10383 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10384 f_charbig = '####updated per update statement itself####';
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
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;
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
10405 DROP TRIGGER trg_3;
10407 # check trigger-11 success: 1
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
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;
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
10426 DROP TRIGGER trg_3;
10428 # check trigger-12 success: 1
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####';
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;
10441 test.t1 <some_value>
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
10453 # check TRUNCATE success: 1
10454 # check layout success: 1
10455 # End usability test (inc/partition_check.inc)
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)
10479 SHOW CREATE TABLE t1;
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)
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
10521 # check multiple-1 success: 1
10522 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10524 # check multiple-2 success: 1
10525 INSERT INTO t1 SELECT * FROM t0_template
10526 WHERE MOD(f_int1,3) = 0;
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;
10533 # check multiple-4 success: 1
10535 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10536 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
10552 # check single-1 success: 1
10553 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
10575 # check single-5 success: 1
10576 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10578 # check single-6 success: 1
10579 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
10603 # check null-3 success: 1
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#';
10608 # check null-4 success: 1
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
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';
10623 # check unique-1-a success: 1
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;
10636 # check replace success: 1
10638 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
10653 # check transactions-1 success: 1
10656 # check transactions-2 success: 1
10659 # check transactions-3 success: 1
10660 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
10670 # check transactions-5 success: 1
10673 # check transactions-6 success: 1
10674 # INFO: Storage engine used for t1 seems to be transactional.
10677 # check transactions-7 success: 1
10678 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
10694 DELETE FROM t1 WHERE f_charbig = 'was inserted';
10696 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10698 # check special-1 success: 1
10699 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
10845 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
10866 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
10875 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
10885 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10886 f_charbig = '####updated per update statement itself####';
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
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####';
10900 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10901 f_charbig = '####updated per update statement itself####';
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
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;
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
10922 DROP TRIGGER trg_3;
10924 # check trigger-11 success: 1
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
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;
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
10943 DROP TRIGGER trg_3;
10945 # check trigger-12 success: 1
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####';
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;
10958 test.t1 <some_value>
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
10970 # check TRUNCATE success: 1
10971 # check layout success: 1
10972 # End usability test (inc/partition_check.inc)
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)
11000 SHOW CREATE TABLE t1;
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
11049 # check multiple-1 success: 1
11050 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11052 # check multiple-2 success: 1
11053 INSERT INTO t1 SELECT * FROM t0_template
11054 WHERE MOD(f_int1,3) = 0;
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;
11061 # check multiple-4 success: 1
11063 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11064 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
11080 # check single-1 success: 1
11081 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
11103 # check single-5 success: 1
11104 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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#';
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#';
11129 # check null-3 success: 1
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#';
11134 # check null-4 success: 1
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
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';
11149 # check unique-1-a success: 1
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;
11162 # check replace success: 1
11164 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
11179 # check transactions-1 success: 1
11182 # check transactions-2 success: 1
11185 # check transactions-3 success: 1
11186 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
11196 # check transactions-5 success: 1
11199 # check transactions-6 success: 1
11200 # INFO: Storage engine used for t1 seems to be transactional.
11203 # check transactions-7 success: 1
11204 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
11220 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11222 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11224 # check special-1 success: 1
11225 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
11371 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
11392 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
11401 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
11411 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11412 f_charbig = '####updated per update statement itself####';
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
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####';
11426 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11427 f_charbig = '####updated per update statement itself####';
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
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;
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
11448 DROP TRIGGER trg_3;
11450 # check trigger-11 success: 1
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
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;
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
11469 DROP TRIGGER trg_3;
11471 # check trigger-12 success: 1
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####';
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;
11484 test.t1 <some_value>
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
11496 # check TRUNCATE success: 1
11497 # check layout success: 1
11498 # End usability test (inc/partition_check.inc)
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)
11526 SHOW CREATE TABLE t1;
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
11575 # check multiple-1 success: 1
11576 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11578 # check multiple-2 success: 1
11579 INSERT INTO t1 SELECT * FROM t0_template
11580 WHERE MOD(f_int1,3) = 0;
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;
11587 # check multiple-4 success: 1
11589 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11590 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
11606 # check single-1 success: 1
11607 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
11629 # check single-5 success: 1
11630 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11632 # check single-6 success: 1
11633 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
11657 # check null-3 success: 1
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#';
11662 # check null-4 success: 1
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
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';
11677 # check unique-1-a success: 1
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;
11690 # check replace success: 1
11692 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
11707 # check transactions-1 success: 1
11710 # check transactions-2 success: 1
11713 # check transactions-3 success: 1
11714 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
11724 # check transactions-5 success: 1
11727 # check transactions-6 success: 1
11728 # INFO: Storage engine used for t1 seems to be transactional.
11731 # check transactions-7 success: 1
11732 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
11748 DELETE FROM t1 WHERE f_charbig = 'was inserted';
11750 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11752 # check special-1 success: 1
11753 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
11899 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
11920 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
11929 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
11939 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11940 f_charbig = '####updated per update statement itself####';
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
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####';
11954 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11955 f_charbig = '####updated per update statement itself####';
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
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;
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
11976 DROP TRIGGER trg_3;
11978 # check trigger-11 success: 1
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
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;
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
11997 DROP TRIGGER trg_3;
11999 # check trigger-12 success: 1
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####';
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;
12012 test.t1 <some_value>
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
12024 # check TRUNCATE success: 1
12025 # check layout success: 1
12026 # End usability test (inc/partition_check.inc)
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)
12050 SHOW CREATE TABLE t1;
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)
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
12091 # check multiple-1 success: 1
12092 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12094 # check multiple-2 success: 1
12095 INSERT INTO t1 SELECT * FROM t0_template
12096 WHERE MOD(f_int1,3) = 0;
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;
12103 # check multiple-4 success: 1
12105 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12106 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
12122 # check single-1 success: 1
12123 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
12145 # check single-5 success: 1
12146 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12148 # check single-6 success: 1
12149 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
12173 # check null-3 success: 1
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#';
12178 # check null-4 success: 1
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
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';
12193 # check unique-1-a success: 1
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;
12206 # check replace success: 1
12208 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
12223 # check transactions-1 success: 1
12226 # check transactions-2 success: 1
12229 # check transactions-3 success: 1
12230 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
12240 # check transactions-5 success: 1
12243 # check transactions-6 success: 1
12244 # INFO: Storage engine used for t1 seems to be transactional.
12247 # check transactions-7 success: 1
12248 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
12264 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12266 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12268 # check special-1 success: 1
12269 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
12415 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
12436 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
12445 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
12455 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12456 f_charbig = '####updated per update statement itself####';
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
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####';
12470 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12471 f_charbig = '####updated per update statement itself####';
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
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;
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
12492 DROP TRIGGER trg_3;
12494 # check trigger-11 success: 1
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
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;
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
12513 DROP TRIGGER trg_3;
12515 # check trigger-12 success: 1
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####';
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;
12528 test.t1 <some_value>
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
12540 # check TRUNCATE success: 1
12541 # check layout success: 1
12542 # End usability test (inc/partition_check.inc)
12544 DROP TABLE IF EXISTS t1;
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)
12563 SHOW CREATE TABLE t1;
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)
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
12600 # check multiple-1 success: 1
12601 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12603 # check multiple-2 success: 1
12604 INSERT INTO t1 SELECT * FROM t0_template
12605 WHERE MOD(f_int1,3) = 0;
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;
12612 # check multiple-4 success: 1
12614 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12615 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
12631 # check single-1 success: 1
12632 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
12654 # check single-5 success: 1
12655 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12657 # check single-6 success: 1
12658 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
12682 # check null-3 success: 1
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#';
12687 # check null-4 success: 1
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
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';
12702 # check unique-1-a success: 1
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;
12715 # check replace success: 1
12717 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
12732 # check transactions-1 success: 1
12735 # check transactions-2 success: 1
12738 # check transactions-3 success: 1
12739 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
12749 # check transactions-5 success: 1
12752 # check transactions-6 success: 1
12753 # INFO: Storage engine used for t1 seems to be transactional.
12756 # check transactions-7 success: 1
12757 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
12773 DELETE FROM t1 WHERE f_charbig = 'was inserted';
12775 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12777 # check special-1 success: 1
12778 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
12924 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
12945 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
12954 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
12964 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12965 f_charbig = '####updated per update statement itself####';
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
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####';
12979 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12980 f_charbig = '####updated per update statement itself####';
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
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;
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
13001 DROP TRIGGER trg_3;
13003 # check trigger-11 success: 1
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
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;
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
13022 DROP TRIGGER trg_3;
13024 # check trigger-12 success: 1
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####';
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;
13037 test.t1 <some_value>
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
13049 # check TRUNCATE success: 1
13050 # check layout success: 1
13051 # End usability test (inc/partition_check.inc)
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)
13071 SHOW CREATE TABLE t1;
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)
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
13108 # check multiple-1 success: 1
13109 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13111 # check multiple-2 success: 1
13112 INSERT INTO t1 SELECT * FROM t0_template
13113 WHERE MOD(f_int1,3) = 0;
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;
13120 # check multiple-4 success: 1
13122 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13123 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
13139 # check single-1 success: 1
13140 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
13162 # check single-5 success: 1
13163 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13165 # check single-6 success: 1
13166 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
13190 # check null-3 success: 1
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#';
13195 # check null-4 success: 1
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
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';
13210 # check unique-1-a success: 1
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;
13223 # check replace success: 1
13225 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
13240 # check transactions-1 success: 1
13243 # check transactions-2 success: 1
13246 # check transactions-3 success: 1
13247 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
13257 # check transactions-5 success: 1
13260 # check transactions-6 success: 1
13261 # INFO: Storage engine used for t1 seems to be transactional.
13264 # check transactions-7 success: 1
13265 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
13281 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13283 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13285 # check special-1 success: 1
13286 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
13432 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
13453 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
13462 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
13472 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13473 f_charbig = '####updated per update statement itself####';
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
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####';
13487 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13488 f_charbig = '####updated per update statement itself####';
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
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;
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
13509 DROP TRIGGER trg_3;
13511 # check trigger-11 success: 1
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
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;
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
13530 DROP TRIGGER trg_3;
13532 # check trigger-12 success: 1
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####';
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;
13545 test.t1 <some_value>
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
13557 # check TRUNCATE success: 1
13558 # check layout success: 1
13559 # End usability test (inc/partition_check.inc)
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)
13587 SHOW CREATE TABLE t1;
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
13631 # check multiple-1 success: 1
13632 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13634 # check multiple-2 success: 1
13635 INSERT INTO t1 SELECT * FROM t0_template
13636 WHERE MOD(f_int1,3) = 0;
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;
13643 # check multiple-4 success: 1
13645 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13646 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
13662 # check single-1 success: 1
13663 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
13685 # check single-5 success: 1
13686 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13688 # check single-6 success: 1
13689 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
13713 # check null-3 success: 1
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#';
13718 # check null-4 success: 1
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
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';
13733 # check unique-1-a success: 1
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;
13746 # check replace success: 1
13748 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
13763 # check transactions-1 success: 1
13766 # check transactions-2 success: 1
13769 # check transactions-3 success: 1
13770 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
13780 # check transactions-5 success: 1
13783 # check transactions-6 success: 1
13784 # INFO: Storage engine used for t1 seems to be transactional.
13787 # check transactions-7 success: 1
13788 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
13804 DELETE FROM t1 WHERE f_charbig = 'was inserted';
13806 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13808 # check special-1 success: 1
13809 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
13955 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
13976 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
13985 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
13995 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13996 f_charbig = '####updated per update statement itself####';
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
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####';
14010 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14011 f_charbig = '####updated per update statement itself####';
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
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;
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
14032 DROP TRIGGER trg_3;
14034 # check trigger-11 success: 1
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
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;
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
14053 DROP TRIGGER trg_3;
14055 # check trigger-12 success: 1
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####';
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;
14068 test.t1 <some_value>
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
14080 # check TRUNCATE success: 1
14081 # check layout success: 1
14082 # End usability test (inc/partition_check.inc)
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)
14108 SHOW CREATE TABLE t1;
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
14150 # check multiple-1 success: 1
14151 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14153 # check multiple-2 success: 1
14154 INSERT INTO t1 SELECT * FROM t0_template
14155 WHERE MOD(f_int1,3) = 0;
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;
14162 # check multiple-4 success: 1
14164 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14165 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
14181 # check single-1 success: 1
14182 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
14204 # check single-5 success: 1
14205 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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#';
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#';
14230 # check null-3 success: 1
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#';
14235 # check null-4 success: 1
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
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';
14250 # check unique-1-a success: 1
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;
14263 # check replace success: 1
14265 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
14280 # check transactions-1 success: 1
14283 # check transactions-2 success: 1
14286 # check transactions-3 success: 1
14287 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
14297 # check transactions-5 success: 1
14300 # check transactions-6 success: 1
14301 # INFO: Storage engine used for t1 seems to be transactional.
14304 # check transactions-7 success: 1
14305 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
14321 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14323 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14325 # check special-1 success: 1
14326 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
14472 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
14493 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
14502 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
14512 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14513 f_charbig = '####updated per update statement itself####';
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
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####';
14527 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14528 f_charbig = '####updated per update statement itself####';
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
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;
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
14549 DROP TRIGGER trg_3;
14551 # check trigger-11 success: 1
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
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;
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
14570 DROP TRIGGER trg_3;
14572 # check trigger-12 success: 1
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####';
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;
14585 test.t1 <some_value>
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
14597 # check TRUNCATE success: 1
14598 # check layout success: 1
14599 # End usability test (inc/partition_check.inc)
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)
14623 SHOW CREATE TABLE t1;
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)
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
14665 # check multiple-1 success: 1
14666 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14668 # check multiple-2 success: 1
14669 INSERT INTO t1 SELECT * FROM t0_template
14670 WHERE MOD(f_int1,3) = 0;
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;
14677 # check multiple-4 success: 1
14679 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14680 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
14696 # check single-1 success: 1
14697 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
14719 # check single-5 success: 1
14720 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14722 # check single-6 success: 1
14723 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
14747 # check null-3 success: 1
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#';
14752 # check null-4 success: 1
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
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';
14767 # check unique-1-a success: 1
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;
14780 # check replace success: 1
14782 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
14797 # check transactions-1 success: 1
14800 # check transactions-2 success: 1
14803 # check transactions-3 success: 1
14804 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
14814 # check transactions-5 success: 1
14817 # check transactions-6 success: 1
14818 # INFO: Storage engine used for t1 seems to be transactional.
14821 # check transactions-7 success: 1
14822 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
14838 DELETE FROM t1 WHERE f_charbig = 'was inserted';
14840 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14842 # check special-1 success: 1
14843 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
14989 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
15010 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
15019 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
15029 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15030 f_charbig = '####updated per update statement itself####';
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
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####';
15044 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15045 f_charbig = '####updated per update statement itself####';
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
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;
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
15066 DROP TRIGGER trg_3;
15068 # check trigger-11 success: 1
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
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;
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
15087 DROP TRIGGER trg_3;
15089 # check trigger-12 success: 1
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####';
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;
15102 test.t1 <some_value>
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
15114 # check TRUNCATE success: 1
15115 # check layout success: 1
15116 # End usability test (inc/partition_check.inc)
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)
15144 SHOW CREATE TABLE t1;
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
15193 # check multiple-1 success: 1
15194 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15196 # check multiple-2 success: 1
15197 INSERT INTO t1 SELECT * FROM t0_template
15198 WHERE MOD(f_int1,3) = 0;
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;
15205 # check multiple-4 success: 1
15207 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15208 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
15224 # check single-1 success: 1
15225 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
15247 # check single-5 success: 1
15248 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
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#';
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
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#';
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#';
15273 # check null-3 success: 1
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#';
15278 # check null-4 success: 1
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
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';
15293 # check unique-1-a success: 1
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;
15306 # check replace success: 1
15308 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
15323 # check transactions-1 success: 1
15326 # check transactions-2 success: 1
15329 # check transactions-3 success: 1
15330 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
15340 # check transactions-5 success: 1
15343 # check transactions-6 success: 1
15344 # INFO: Storage engine used for t1 seems to be transactional.
15347 # check transactions-7 success: 1
15348 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
15364 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15366 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15368 # check special-1 success: 1
15369 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
15515 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
15536 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
15545 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
15555 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15556 f_charbig = '####updated per update statement itself####';
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
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####';
15570 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15571 f_charbig = '####updated per update statement itself####';
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
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;
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
15592 DROP TRIGGER trg_3;
15594 # check trigger-11 success: 1
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
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;
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
15613 DROP TRIGGER trg_3;
15615 # check trigger-12 success: 1
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####';
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;
15628 test.t1 <some_value>
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
15640 # check TRUNCATE success: 1
15641 # check layout success: 1
15642 # End usability test (inc/partition_check.inc)
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)
15670 SHOW CREATE TABLE t1;
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
15719 # check multiple-1 success: 1
15720 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15722 # check multiple-2 success: 1
15723 INSERT INTO t1 SELECT * FROM t0_template
15724 WHERE MOD(f_int1,3) = 0;
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;
15731 # check multiple-4 success: 1
15733 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15734 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
15750 # check single-1 success: 1
15751 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
15773 # check single-5 success: 1
15774 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15776 # check single-6 success: 1
15777 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
15801 # check null-3 success: 1
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#';
15806 # check null-4 success: 1
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
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';
15821 # check unique-1-a success: 1
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;
15834 # check replace success: 1
15836 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
15851 # check transactions-1 success: 1
15854 # check transactions-2 success: 1
15857 # check transactions-3 success: 1
15858 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
15868 # check transactions-5 success: 1
15871 # check transactions-6 success: 1
15872 # INFO: Storage engine used for t1 seems to be transactional.
15875 # check transactions-7 success: 1
15876 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
15892 DELETE FROM t1 WHERE f_charbig = 'was inserted';
15894 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15896 # check special-1 success: 1
15897 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
16043 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
16064 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
16073 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
16083 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16084 f_charbig = '####updated per update statement itself####';
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
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####';
16098 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16099 f_charbig = '####updated per update statement itself####';
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
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;
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
16120 DROP TRIGGER trg_3;
16122 # check trigger-11 success: 1
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
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;
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
16141 DROP TRIGGER trg_3;
16143 # check trigger-12 success: 1
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####';
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;
16156 test.t1 <some_value>
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
16168 # check TRUNCATE success: 1
16169 # check layout success: 1
16170 # End usability test (inc/partition_check.inc)
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)
16194 SHOW CREATE TABLE t1;
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)
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
16235 # check multiple-1 success: 1
16236 DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16238 # check multiple-2 success: 1
16239 INSERT INTO t1 SELECT * FROM t0_template
16240 WHERE MOD(f_int1,3) = 0;
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;
16247 # check multiple-4 success: 1
16249 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16250 AND @max_row_div2 + @max_row_div4 + @max_row;
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;
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#';
16266 # check single-1 success: 1
16267 SELECT MAX(f_int1) + 1 INTO @cur_value FROM 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#';
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#';
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#';
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#';
16289 # check single-5 success: 1
16290 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16292 # check single-6 success: 1
16293 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
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#';
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
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#';
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#';
16317 # check null-3 success: 1
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#';
16322 # check null-4 success: 1
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
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';
16337 # check unique-1-a success: 1
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;
16350 # check replace success: 1
16352 WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
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;
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;
16367 # check transactions-1 success: 1
16370 # check transactions-2 success: 1
16373 # check transactions-3 success: 1
16374 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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;
16384 # check transactions-5 success: 1
16387 # check transactions-6 success: 1
16388 # INFO: Storage engine used for t1 seems to be transactional.
16391 # check transactions-7 success: 1
16392 DELETE FROM t1 WHERE f_charbig = 'was inserted';
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
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 = '';
16408 DELETE FROM t1 WHERE f_charbig = 'was inserted';
16410 UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16412 # check special-1 success: 1
16413 UPDATE t1 SET f_charbig = '';
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
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;
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;
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);
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
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;
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;
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
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));
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);
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
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;
16559 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
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
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;
16580 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
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);
16589 WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
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
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####';
16599 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16600 f_charbig = '####updated per update statement itself####';
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
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####';
16614 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16615 f_charbig = '####updated per update statement itself####';
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
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;
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
16636 DROP TRIGGER trg_3;
16638 # check trigger-11 success: 1
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
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;
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
16657 DROP TRIGGER trg_3;
16659 # check trigger-12 success: 1
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####';
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;
16672 test.t1 <some_value>
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
16684 # check TRUNCATE success: 1
16685 # check layout success: 1
16686 # End usability test (inc/partition_check.inc)
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;