1SET @max_row = 20; 2SET @@session.default_storage_engine = 'InnoDB'; 3 4#------------------------------------------------------------------------ 5# 0. Setting of auxiliary variables + Creation of an auxiliary tables 6# needed in many testcases 7#------------------------------------------------------------------------ 8SELECT @max_row DIV 2 INTO @max_row_div2; 9SELECT @max_row DIV 3 INTO @max_row_div3; 10SELECT @max_row DIV 4 INTO @max_row_div4; 11SET @max_int_4 = 2147483647; 12DROP TABLE IF EXISTS t0_template; 13CREATE TABLE t0_template ( 14f_int1 INTEGER DEFAULT 0, 15f_int2 INTEGER DEFAULT 0, 16f_char1 CHAR(20), 17f_char2 CHAR(20), 18f_charbig VARCHAR(1000) , 19PRIMARY KEY(f_int1)) 20ENGINE = MEMORY; 21# Logging of <max_row> INSERTs into t0_template suppressed 22DROP TABLE IF EXISTS t0_definition; 23CREATE TABLE t0_definition ( 24state CHAR(3), 25create_command VARBINARY(5000), 26file_list VARBINARY(10000), 27PRIMARY KEY (state) 28) ENGINE = MEMORY; 29DROP TABLE IF EXISTS t0_aux; 30CREATE TABLE t0_aux ( f_int1 INTEGER DEFAULT 0, 31f_int2 INTEGER DEFAULT 0, 32f_char1 CHAR(20), 33f_char2 CHAR(20), 34f_charbig VARCHAR(1000) ) 35ENGINE = MEMORY; 36SET AUTOCOMMIT= 1; 37SET @@session.sql_mode= ''; 38# End of basic preparations needed for all tests 39#----------------------------------------------- 40 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#------------------------------------------------------------------------ 48DROP TABLE IF EXISTS t1; 49CREATE TABLE t1 ( 50f_int1 INTEGER DEFAULT 0, 51f_int2 INTEGER DEFAULT 0, 52f_char1 CHAR(20), 53f_char2 CHAR(20), 54f_charbig VARCHAR(1000) 55 56) 57PARTITION BY HASH(f_int1) PARTITIONS 2; 58INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 59SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 60WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 61ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 62ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 63DROP TABLE t1; 64CREATE TABLE t1 ( 65f_int1 INTEGER DEFAULT 0, 66f_int2 INTEGER DEFAULT 0, 67f_char1 CHAR(20), 68f_char2 CHAR(20), 69f_charbig VARCHAR(1000) 70 71) 72PARTITION BY KEY(f_int1) PARTITIONS 5; 73INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 74SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 75WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 76ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 77ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 78DROP TABLE t1; 79CREATE TABLE t1 ( 80f_int1 INTEGER DEFAULT 0, 81f_int2 INTEGER DEFAULT 0, 82f_char1 CHAR(20), 83f_char2 CHAR(20), 84f_charbig VARCHAR(1000) 85 86) 87PARTITION BY LIST(MOD(f_int1,4)) 88(PARTITION part_3 VALUES IN (-3), 89PARTITION part_2 VALUES IN (-2), 90PARTITION part_1 VALUES IN (-1), 91PARTITION part_N VALUES IN (NULL), 92PARTITION part0 VALUES IN (0), 93PARTITION part1 VALUES IN (1), 94PARTITION part2 VALUES IN (2), 95PARTITION part3 VALUES IN (3)); 96INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 97SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 98WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 99ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 100ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 101DROP TABLE t1; 102CREATE TABLE t1 ( 103f_int1 INTEGER DEFAULT 0, 104f_int2 INTEGER DEFAULT 0, 105f_char1 CHAR(20), 106f_char2 CHAR(20), 107f_charbig VARCHAR(1000) 108 109) 110PARTITION BY RANGE(f_int1) 111(PARTITION parta VALUES LESS THAN (0), 112PARTITION partb VALUES LESS THAN (5), 113PARTITION partc VALUES LESS THAN (10), 114PARTITION partd VALUES LESS THAN (10 + 5), 115PARTITION parte VALUES LESS THAN (20), 116PARTITION partf VALUES LESS THAN (2147483646)); 117INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 118SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 119WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 120ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 121ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 122DROP TABLE t1; 123CREATE TABLE t1 ( 124f_int1 INTEGER DEFAULT 0, 125f_int2 INTEGER DEFAULT 0, 126f_char1 CHAR(20), 127f_char2 CHAR(20), 128f_charbig VARCHAR(1000) 129 130) 131PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 132(PARTITION parta VALUES LESS THAN (0), 133PARTITION partb VALUES LESS THAN (5), 134PARTITION partc VALUES LESS THAN (10), 135PARTITION partd VALUES LESS THAN (2147483646)); 136INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 137SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 138WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 139ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 140ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 141DROP TABLE t1; 142CREATE TABLE t1 ( 143f_int1 INTEGER DEFAULT 0, 144f_int2 INTEGER DEFAULT 0, 145f_char1 CHAR(20), 146f_char2 CHAR(20), 147f_charbig VARCHAR(1000) 148 149) 150PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 151(PARTITION part1 VALUES LESS THAN (0) 152(SUBPARTITION subpart11, SUBPARTITION subpart12), 153PARTITION part2 VALUES LESS THAN (5) 154(SUBPARTITION subpart21, SUBPARTITION subpart22), 155PARTITION part3 VALUES LESS THAN (10) 156(SUBPARTITION subpart31, SUBPARTITION subpart32), 157PARTITION part4 VALUES LESS THAN (2147483646) 158(SUBPARTITION subpart41, SUBPARTITION subpart42)); 159INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 160SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 161WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 162ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 163ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 164DROP TABLE t1; 165CREATE TABLE t1 ( 166f_int1 INTEGER DEFAULT 0, 167f_int2 INTEGER DEFAULT 0, 168f_char1 CHAR(20), 169f_char2 CHAR(20), 170f_charbig VARCHAR(1000) 171 172) 173PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 174(PARTITION part1 VALUES IN (0) 175(SUBPARTITION sp11, SUBPARTITION sp12), 176PARTITION part2 VALUES IN (1) 177(SUBPARTITION sp21, SUBPARTITION sp22), 178PARTITION part3 VALUES IN (2) 179(SUBPARTITION sp31, SUBPARTITION sp32), 180PARTITION part4 VALUES IN (NULL) 181(SUBPARTITION sp41, SUBPARTITION sp42)); 182INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 183SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 184WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 185ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 186ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 187DROP TABLE t1; 188CREATE TABLE t1 ( 189f_int1 INTEGER DEFAULT 0, 190f_int2 INTEGER DEFAULT 0, 191f_char1 CHAR(20), 192f_char2 CHAR(20), 193f_charbig VARCHAR(1000) 194 195) 196PARTITION BY LIST(ABS(MOD(f_int1,2))) 197SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 198(PARTITION part1 VALUES IN (0), 199PARTITION part2 VALUES IN (1), 200PARTITION part3 VALUES IN (NULL)); 201INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 202SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 203WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 204ALTER TABLE t1 ADD PRIMARY KEY(f_int2); 205ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function 206DROP TABLE t1; 207DROP TABLE IF EXISTS t1; 208CREATE TABLE t1 ( 209f_int1 INTEGER DEFAULT 0, 210f_int2 INTEGER DEFAULT 0, 211f_char1 CHAR(20), 212f_char2 CHAR(20), 213f_charbig VARCHAR(1000) 214 215) 216PARTITION BY HASH(f_int1) PARTITIONS 2; 217INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 218SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 219WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 220ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 221ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 222DROP TABLE t1; 223CREATE TABLE t1 ( 224f_int1 INTEGER DEFAULT 0, 225f_int2 INTEGER DEFAULT 0, 226f_char1 CHAR(20), 227f_char2 CHAR(20), 228f_charbig VARCHAR(1000) 229 230) 231PARTITION BY KEY(f_int1) PARTITIONS 5; 232INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 233SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 234WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 235ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 236ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 237DROP TABLE t1; 238CREATE TABLE t1 ( 239f_int1 INTEGER DEFAULT 0, 240f_int2 INTEGER DEFAULT 0, 241f_char1 CHAR(20), 242f_char2 CHAR(20), 243f_charbig VARCHAR(1000) 244 245) 246PARTITION BY LIST(MOD(f_int1,4)) 247(PARTITION part_3 VALUES IN (-3), 248PARTITION part_2 VALUES IN (-2), 249PARTITION part_1 VALUES IN (-1), 250PARTITION part_N VALUES IN (NULL), 251PARTITION part0 VALUES IN (0), 252PARTITION part1 VALUES IN (1), 253PARTITION part2 VALUES IN (2), 254PARTITION part3 VALUES IN (3)); 255INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 256SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 257WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 258ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 259ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 260DROP TABLE t1; 261CREATE TABLE t1 ( 262f_int1 INTEGER DEFAULT 0, 263f_int2 INTEGER DEFAULT 0, 264f_char1 CHAR(20), 265f_char2 CHAR(20), 266f_charbig VARCHAR(1000) 267 268) 269PARTITION BY RANGE(f_int1) 270(PARTITION parta VALUES LESS THAN (0), 271PARTITION partb VALUES LESS THAN (5), 272PARTITION partc VALUES LESS THAN (10), 273PARTITION partd VALUES LESS THAN (10 + 5), 274PARTITION parte VALUES LESS THAN (20), 275PARTITION partf VALUES LESS THAN (2147483646)); 276INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 277SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 278WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 279ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 280ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 281DROP TABLE t1; 282CREATE TABLE t1 ( 283f_int1 INTEGER DEFAULT 0, 284f_int2 INTEGER DEFAULT 0, 285f_char1 CHAR(20), 286f_char2 CHAR(20), 287f_charbig VARCHAR(1000) 288 289) 290PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 291(PARTITION parta VALUES LESS THAN (0), 292PARTITION partb VALUES LESS THAN (5), 293PARTITION partc VALUES LESS THAN (10), 294PARTITION partd VALUES LESS THAN (2147483646)); 295INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 296SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 297WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 298ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 299ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 300DROP TABLE t1; 301CREATE TABLE t1 ( 302f_int1 INTEGER DEFAULT 0, 303f_int2 INTEGER DEFAULT 0, 304f_char1 CHAR(20), 305f_char2 CHAR(20), 306f_charbig VARCHAR(1000) 307 308) 309PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 310(PARTITION part1 VALUES LESS THAN (0) 311(SUBPARTITION subpart11, SUBPARTITION subpart12), 312PARTITION part2 VALUES LESS THAN (5) 313(SUBPARTITION subpart21, SUBPARTITION subpart22), 314PARTITION part3 VALUES LESS THAN (10) 315(SUBPARTITION subpart31, SUBPARTITION subpart32), 316PARTITION part4 VALUES LESS THAN (2147483646) 317(SUBPARTITION subpart41, SUBPARTITION subpart42)); 318INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 319SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 320WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 321ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 322ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 323DROP TABLE t1; 324CREATE TABLE t1 ( 325f_int1 INTEGER DEFAULT 0, 326f_int2 INTEGER DEFAULT 0, 327f_char1 CHAR(20), 328f_char2 CHAR(20), 329f_charbig VARCHAR(1000) 330 331) 332PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 333(PARTITION part1 VALUES IN (0) 334(SUBPARTITION sp11, SUBPARTITION sp12), 335PARTITION part2 VALUES IN (1) 336(SUBPARTITION sp21, SUBPARTITION sp22), 337PARTITION part3 VALUES IN (2) 338(SUBPARTITION sp31, SUBPARTITION sp32), 339PARTITION part4 VALUES IN (NULL) 340(SUBPARTITION sp41, SUBPARTITION sp42)); 341INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 342SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 343WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 344ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 345ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 346DROP TABLE t1; 347CREATE TABLE t1 ( 348f_int1 INTEGER DEFAULT 0, 349f_int2 INTEGER DEFAULT 0, 350f_char1 CHAR(20), 351f_char2 CHAR(20), 352f_charbig VARCHAR(1000) 353 354) 355PARTITION BY LIST(ABS(MOD(f_int1,2))) 356SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 357(PARTITION part1 VALUES IN (0), 358PARTITION part2 VALUES IN (1), 359PARTITION part3 VALUES IN (NULL)); 360INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 361SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 362WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 363ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); 364ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function 365DROP TABLE t1; 366# 1.1.3 PRIMARY KEY consisting of two columns 367DROP TABLE IF EXISTS t1; 368CREATE TABLE t1 ( 369f_int1 INTEGER DEFAULT 0, 370f_int2 INTEGER DEFAULT 0, 371f_char1 CHAR(20), 372f_char2 CHAR(20), 373f_charbig VARCHAR(1000) 374 375) 376PARTITION BY HASH(f_int1) PARTITIONS 2; 377INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 378SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 379WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 380ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 381INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 382SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 383WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 384# Start usability test (inc/partition_check.inc) 385create_command 386SHOW CREATE TABLE t1; 387Table Create Table 388t1 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 PARTITION BY HASH (`f_int1`) 397PARTITIONS 2 398 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 403INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 404SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 405CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 406WHERE f_int1 IN (2,3); 407ERROR 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 410INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 411SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 412CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 413WHERE f_int1 IN (2,3); 414DELETE FROM t1 WHERE f_charbig = 'delete me'; 415INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 416SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 417CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 418WHERE f_int1 IN (2,3); 419DELETE FROM t1 WHERE f_charbig = 'delete me'; 420# check read via f_int1 success: 1 421# check read via f_int2 success: 1 422 423# check multiple-1 success: 1 424DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 425 426# check multiple-2 success: 1 427INSERT INTO t1 SELECT * FROM t0_template 428WHERE MOD(f_int1,3) = 0; 429 430# check multiple-3 success: 1 431UPDATE t1 SET f_int1 = f_int1 + @max_row 432WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 433AND @max_row_div2 + @max_row_div4; 434 435# check multiple-4 success: 1 436DELETE FROM t1 437WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 438AND @max_row_div2 + @max_row_div4 + @max_row; 439 440# check multiple-5 success: 1 441SELECT COUNT(*) INTO @try_count FROM t0_template 442WHERE MOD(f_int1,3) = 0 443AND f_int1 BETWEEN @max_row_div2 AND @max_row; 444SELECT COUNT(*) INTO @clash_count 445FROM t1 INNER JOIN t0_template USING(f_int1) 446WHERE MOD(f_int1,3) = 0 447AND f_int1 BETWEEN @max_row_div2 AND @max_row; 448SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 449INSERT INTO t1 450SET f_int1 = @cur_value , f_int2 = @cur_value, 451f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 452f_charbig = '#SINGLE#'; 453 454# check single-1 success: 1 455SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 456INSERT INTO t1 457SET f_int1 = @cur_value , f_int2 = @cur_value, 458f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 459f_charbig = '#SINGLE#'; 460 461# check single-2 success: 1 462SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 463SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 464UPDATE t1 SET f_int1 = @cur_value2 465WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 466 467# check single-3 success: 1 468SET @cur_value1= -1; 469SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 470UPDATE t1 SET f_int1 = @cur_value1 471WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 472 473# check single-4 success: 1 474SELECT MAX(f_int1) INTO @cur_value FROM t1; 475DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 476 477# check single-5 success: 1 478DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 479 480# check single-6 success: 1 481INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 482 483# check single-7 success: 1 484DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 485DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 486INSERT t1 SET f_int1 = 0 , f_int2 = 0, 487f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 488f_charbig = '#NULL#'; 489INSERT INTO t1 490SET f_int1 = NULL , f_int2 = -@max_row, 491f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 492f_charbig = '#NULL#'; 493ERROR 23000: Column 'f_int1' cannot be null 494# check null success: 1 495DELETE FROM t1 496WHERE f_int1 = 0 AND f_int2 = 0 497AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 498AND f_charbig = '#NULL#'; 499INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 500SELECT f_int1, f_int1, '', '', 'was inserted' 501 FROM t0_template source_tab 502WHERE MOD(f_int1,3) = 0 503AND f_int1 BETWEEN @max_row_div2 AND @max_row 504ON DUPLICATE KEY 505UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 506f_int2 = 2 * @max_row + source_tab.f_int1, 507f_charbig = 'was updated'; 508 509# check unique-1-a success: 1 510 511# check unique-1-b success: 1 512DELETE FROM t1 WHERE f_charbig = 'was inserted'; 513UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 514f_int2 = CAST(f_char1 AS SIGNED INT), 515f_charbig = CONCAT('===',f_char1,'===') 516WHERE f_charbig = 'was updated'; 517REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 518SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 519 FROM t0_template source_tab 520WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 521 522# check replace success: 1 523DELETE FROM t1 524WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 525DELETE FROM t1 526WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 527f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 528UPDATE t1 SET f_int2 = f_int1, 529f_char1 = CAST(f_int1 AS CHAR), 530f_char2 = CAST(f_int1 AS CHAR), 531f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 532WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 533SET AUTOCOMMIT= 0; 534INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 535SELECT f_int1, f_int1, '', '', 'was inserted' 536FROM t0_template source_tab 537WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 538 539# check transactions-1 success: 1 540COMMIT WORK; 541 542# check transactions-2 success: 1 543ROLLBACK WORK; 544 545# check transactions-3 success: 1 546DELETE FROM t1 WHERE f_charbig = 'was inserted'; 547COMMIT WORK; 548ROLLBACK WORK; 549 550# check transactions-4 success: 1 551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 552SELECT f_int1, f_int1, '', '', 'was inserted' 553FROM t0_template source_tab 554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 555 556# check transactions-5 success: 1 557ROLLBACK WORK; 558 559# check transactions-6 success: 1 560# INFO: Storage engine used for t1 seems to be transactional. 561COMMIT; 562 563# check transactions-7 success: 1 564DELETE FROM t1 WHERE f_charbig = 'was inserted'; 565COMMIT WORK; 566SET @@session.sql_mode = 'traditional'; 567SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 569SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 570'', '', 'was inserted' FROM t0_template 571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 572ERROR 22012: Division by 0 573COMMIT; 574 575# check transactions-8 success: 1 576# INFO: Storage engine used for t1 seems to be able to revert 577# changes made by the failing statement. 578SET @@session.sql_mode = ''; 579SET AUTOCOMMIT= 1; 580DELETE FROM t1 WHERE f_charbig = 'was inserted'; 581COMMIT WORK; 582UPDATE t1 SET f_charbig = REPEAT('b', 1000); 583 584# check special-1 success: 1 585UPDATE t1 SET f_charbig = ''; 586 587# check special-2 success: 1 588UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 589INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 590SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 592INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 593SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 594'just inserted' FROM t0_template 595WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 596CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 597BEGIN 598UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 599f_charbig = 'updated by trigger' 600 WHERE f_int1 = new.f_int1; 601END| 602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 603SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 605 606# check trigger-1 success: 1 607DROP TRIGGER trg_1; 608UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 609f_int2 = CAST(f_char1 AS SIGNED INT), 610f_charbig = 'just inserted' 611 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 612DELETE FROM t0_aux 613WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 614INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 615SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 616'just inserted' FROM t0_template 617WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 618CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 619BEGIN 620UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 621f_charbig = 'updated by trigger' 622 WHERE f_int1 = new.f_int1; 623END| 624INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 625SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 627 628# check trigger-2 success: 1 629DROP TRIGGER trg_1; 630UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 631f_int2 = CAST(f_char1 AS SIGNED INT), 632f_charbig = 'just inserted' 633 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 634DELETE FROM t0_aux 635WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 636INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 637SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 638'just inserted' FROM t0_template 639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 640CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 641BEGIN 642UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 643f_charbig = 'updated by trigger' 644 WHERE f_int1 = new.f_int1; 645END| 646UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 647WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 648 649# check trigger-3 success: 1 650DROP TRIGGER trg_1; 651UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 652f_int2 = CAST(f_char1 AS SIGNED INT), 653f_charbig = 'just inserted' 654 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 655DELETE FROM t0_aux 656WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 657INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 658SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 659'just inserted' FROM t0_template 660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 661CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 662BEGIN 663UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 664f_charbig = 'updated by trigger' 665 WHERE f_int1 = - old.f_int1; 666END| 667UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 668WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 669 670# check trigger-4 success: 1 671DROP TRIGGER trg_1; 672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 673f_int2 = CAST(f_char1 AS SIGNED INT), 674f_charbig = 'just inserted' 675 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 676DELETE FROM t0_aux 677WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 678INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 679SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 680'just inserted' FROM t0_template 681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 682CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 683BEGIN 684UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 685f_charbig = 'updated by trigger' 686 WHERE f_int1 = new.f_int1; 687END| 688UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 689WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 690 691# check trigger-5 success: 1 692DROP TRIGGER trg_1; 693UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 694f_int2 = CAST(f_char1 AS SIGNED INT), 695f_charbig = 'just inserted' 696 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 697DELETE FROM t0_aux 698WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 699INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 700SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 701'just inserted' FROM t0_template 702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 703CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 704BEGIN 705UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 706f_charbig = 'updated by trigger' 707 WHERE f_int1 = - old.f_int1; 708END| 709UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 710WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 711 712# check trigger-6 success: 1 713DROP TRIGGER trg_1; 714UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 715f_int2 = CAST(f_char1 AS SIGNED INT), 716f_charbig = 'just inserted' 717 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 718DELETE FROM t0_aux 719WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 720INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 721SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 722'just inserted' FROM t0_template 723WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 724CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 725BEGIN 726UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 727f_charbig = 'updated by trigger' 728 WHERE f_int1 = - old.f_int1; 729END| 730DELETE FROM t0_aux 731WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 732 733# check trigger-7 success: 1 734DROP TRIGGER trg_1; 735UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 736f_int2 = CAST(f_char1 AS SIGNED INT), 737f_charbig = 'just inserted' 738 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 739DELETE FROM t0_aux 740WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 741INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 742SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 743'just inserted' FROM t0_template 744WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 745CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 746BEGIN 747UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 748f_charbig = 'updated by trigger' 749 WHERE f_int1 = - old.f_int1; 750END| 751DELETE FROM t0_aux 752WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 753 754# check trigger-8 success: 1 755DROP TRIGGER trg_1; 756UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 757f_int2 = CAST(f_char1 AS SIGNED INT), 758f_charbig = 'just inserted' 759 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 760DELETE FROM t0_aux 761WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 762DELETE FROM t1 763WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 764CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 765BEGIN 766SET new.f_int1 = old.f_int1 + @max_row, 767new.f_int2 = old.f_int2 - @max_row, 768new.f_charbig = '####updated per update trigger####'; 769END| 770UPDATE t1 771SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 772f_charbig = '####updated per update statement itself####'; 773 774# check trigger-9 success: 1 775DROP TRIGGER trg_2; 776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 777f_int2 = CAST(f_char1 AS SIGNED INT), 778f_charbig = CONCAT('===',f_char1,'==='); 779CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 780BEGIN 781SET new.f_int1 = new.f_int1 + @max_row, 782new.f_int2 = new.f_int2 - @max_row, 783new.f_charbig = '####updated per update trigger####'; 784END| 785UPDATE t1 786SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 787f_charbig = '####updated per update statement itself####'; 788 789# check trigger-10 success: 1 790DROP TRIGGER trg_2; 791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 792f_int2 = CAST(f_char1 AS SIGNED INT), 793f_charbig = CONCAT('===',f_char1,'==='); 794CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 795BEGIN 796SET new.f_int1 = @my_max1 + @counter, 797new.f_int2 = @my_min2 - @counter, 798new.f_charbig = '####updated per insert trigger####'; 799SET @counter = @counter + 1; 800END| 801SET @counter = 1; 802SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 803INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 804SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 805CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 806WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 807ORDER BY f_int1; 808DROP TRIGGER trg_3; 809 810# check trigger-11 success: 1 811DELETE FROM t1 812WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 813AND f_int2 <> CAST(f_char1 AS SIGNED INT) 814AND f_charbig = '####updated per insert trigger####'; 815CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 816BEGIN 817SET new.f_int1 = @my_max1 + @counter, 818new.f_int2 = @my_min2 - @counter, 819new.f_charbig = '####updated per insert trigger####'; 820SET @counter = @counter + 1; 821END| 822SET @counter = 1; 823SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 824INSERT INTO t1 (f_char1, f_char2, f_charbig) 825SELECT CAST(f_int1 AS CHAR), 826CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 827WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 828ORDER BY f_int1; 829DROP TRIGGER trg_3; 830 831# check trigger-12 success: 1 832DELETE FROM t1 833WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 834AND f_int2 <> CAST(f_char1 AS SIGNED INT) 835AND f_charbig = '####updated per insert trigger####'; 836ANALYZE TABLE t1; 837Table Op Msg_type Msg_text 838test.t1 analyze status OK 839CHECK TABLE t1 EXTENDED; 840Table Op Msg_type Msg_text 841test.t1 check status OK 842CHECKSUM TABLE t1 EXTENDED; 843Table Checksum 844test.t1 <some_value> 845OPTIMIZE TABLE t1; 846Table Op Msg_type Msg_text 847test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 848test.t1 optimize status OK 849# check layout success: 1 850REPAIR TABLE t1 EXTENDED; 851Table Op Msg_type Msg_text 852test.t1 repair status OK 853# check layout success: 1 854TRUNCATE t1; 855 856# check TRUNCATE success: 1 857# check layout success: 1 858# End usability test (inc/partition_check.inc) 859DROP TABLE t1; 860CREATE TABLE t1 ( 861f_int1 INTEGER DEFAULT 0, 862f_int2 INTEGER DEFAULT 0, 863f_char1 CHAR(20), 864f_char2 CHAR(20), 865f_charbig VARCHAR(1000) 866 867) 868PARTITION BY KEY(f_int1) PARTITIONS 5; 869INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 870SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 871WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 872ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 873INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 874SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 875WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 876# Start usability test (inc/partition_check.inc) 877create_command 878SHOW CREATE TABLE t1; 879Table Create Table 880t1 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 PARTITION BY KEY (`f_int1`) 889PARTITIONS 5 890 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 895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 896SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 897CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 898WHERE f_int1 IN (2,3); 899ERROR 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 902INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 903SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 904CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 905WHERE f_int1 IN (2,3); 906DELETE FROM t1 WHERE f_charbig = 'delete me'; 907INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 908SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 909CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 910WHERE f_int1 IN (2,3); 911DELETE FROM t1 WHERE f_charbig = 'delete me'; 912# check read via f_int1 success: 1 913# check read via f_int2 success: 1 914 915# check multiple-1 success: 1 916DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 917 918# check multiple-2 success: 1 919INSERT INTO t1 SELECT * FROM t0_template 920WHERE MOD(f_int1,3) = 0; 921 922# check multiple-3 success: 1 923UPDATE t1 SET f_int1 = f_int1 + @max_row 924WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 925AND @max_row_div2 + @max_row_div4; 926 927# check multiple-4 success: 1 928DELETE FROM t1 929WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 930AND @max_row_div2 + @max_row_div4 + @max_row; 931 932# check multiple-5 success: 1 933SELECT COUNT(*) INTO @try_count FROM t0_template 934WHERE MOD(f_int1,3) = 0 935AND f_int1 BETWEEN @max_row_div2 AND @max_row; 936SELECT COUNT(*) INTO @clash_count 937FROM t1 INNER JOIN t0_template USING(f_int1) 938WHERE MOD(f_int1,3) = 0 939AND f_int1 BETWEEN @max_row_div2 AND @max_row; 940SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 941INSERT INTO t1 942SET f_int1 = @cur_value , f_int2 = @cur_value, 943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 944f_charbig = '#SINGLE#'; 945 946# check single-1 success: 1 947SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 948INSERT INTO t1 949SET f_int1 = @cur_value , f_int2 = @cur_value, 950f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 951f_charbig = '#SINGLE#'; 952 953# check single-2 success: 1 954SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 955SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 956UPDATE t1 SET f_int1 = @cur_value2 957WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 958 959# check single-3 success: 1 960SET @cur_value1= -1; 961SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 962UPDATE t1 SET f_int1 = @cur_value1 963WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 964 965# check single-4 success: 1 966SELECT MAX(f_int1) INTO @cur_value FROM t1; 967DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 968 969# check single-5 success: 1 970DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 971 972# check single-6 success: 1 973INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 974 975# check single-7 success: 1 976DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 977DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 978INSERT t1 SET f_int1 = 0 , f_int2 = 0, 979f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 980f_charbig = '#NULL#'; 981INSERT INTO t1 982SET f_int1 = NULL , f_int2 = -@max_row, 983f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 984f_charbig = '#NULL#'; 985ERROR 23000: Column 'f_int1' cannot be null 986# check null success: 1 987DELETE FROM t1 988WHERE f_int1 = 0 AND f_int2 = 0 989AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 990AND f_charbig = '#NULL#'; 991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 992SELECT f_int1, f_int1, '', '', 'was inserted' 993 FROM t0_template source_tab 994WHERE MOD(f_int1,3) = 0 995AND f_int1 BETWEEN @max_row_div2 AND @max_row 996ON DUPLICATE KEY 997UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 998f_int2 = 2 * @max_row + source_tab.f_int1, 999f_charbig = 'was updated'; 1000 1001# check unique-1-a success: 1 1002 1003# check unique-1-b success: 1 1004DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1006f_int2 = CAST(f_char1 AS SIGNED INT), 1007f_charbig = CONCAT('===',f_char1,'===') 1008WHERE f_charbig = 'was updated'; 1009REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1010SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 1011 FROM t0_template source_tab 1012WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1013 1014# check replace success: 1 1015DELETE FROM t1 1016WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 1017DELETE FROM t1 1018WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 1019f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 1020UPDATE t1 SET f_int2 = f_int1, 1021f_char1 = CAST(f_int1 AS CHAR), 1022f_char2 = CAST(f_int1 AS CHAR), 1023f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 1024WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 1025SET AUTOCOMMIT= 0; 1026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1027SELECT f_int1, f_int1, '', '', 'was inserted' 1028FROM t0_template source_tab 1029WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1030 1031# check transactions-1 success: 1 1032COMMIT WORK; 1033 1034# check transactions-2 success: 1 1035ROLLBACK WORK; 1036 1037# check transactions-3 success: 1 1038DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1039COMMIT WORK; 1040ROLLBACK WORK; 1041 1042# check transactions-4 success: 1 1043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1044SELECT f_int1, f_int1, '', '', 'was inserted' 1045FROM t0_template source_tab 1046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1047 1048# check transactions-5 success: 1 1049ROLLBACK WORK; 1050 1051# check transactions-6 success: 1 1052# INFO: Storage engine used for t1 seems to be transactional. 1053COMMIT; 1054 1055# check transactions-7 success: 1 1056DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1057COMMIT WORK; 1058SET @@session.sql_mode = 'traditional'; 1059SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 1060INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1061SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 1062'', '', 'was inserted' FROM t0_template 1063WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1064ERROR 22012: Division by 0 1065COMMIT; 1066 1067# check transactions-8 success: 1 1068# INFO: Storage engine used for t1 seems to be able to revert 1069# changes made by the failing statement. 1070SET @@session.sql_mode = ''; 1071SET AUTOCOMMIT= 1; 1072DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1073COMMIT WORK; 1074UPDATE t1 SET f_charbig = REPEAT('b', 1000); 1075 1076# check special-1 success: 1 1077UPDATE t1 SET f_charbig = ''; 1078 1079# check special-2 success: 1 1080UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 1081INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1082SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 1083WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1084INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1085SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1086'just inserted' FROM t0_template 1087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1088CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 1089BEGIN 1090UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1091f_charbig = 'updated by trigger' 1092 WHERE f_int1 = new.f_int1; 1093END| 1094INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1095SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1096WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1097 1098# check trigger-1 success: 1 1099DROP TRIGGER trg_1; 1100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1101f_int2 = CAST(f_char1 AS SIGNED INT), 1102f_charbig = 'just inserted' 1103 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1104DELETE FROM t0_aux 1105WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1107SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1108'just inserted' FROM t0_template 1109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1110CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 1111BEGIN 1112UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1113f_charbig = 'updated by trigger' 1114 WHERE f_int1 = new.f_int1; 1115END| 1116INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1117SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1119 1120# check trigger-2 success: 1 1121DROP TRIGGER trg_1; 1122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1123f_int2 = CAST(f_char1 AS SIGNED INT), 1124f_charbig = 'just inserted' 1125 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1126DELETE FROM t0_aux 1127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1130'just inserted' FROM t0_template 1131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1132CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1133BEGIN 1134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1135f_charbig = 'updated by trigger' 1136 WHERE f_int1 = new.f_int1; 1137END| 1138UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1140 1141# check trigger-3 success: 1 1142DROP TRIGGER trg_1; 1143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1144f_int2 = CAST(f_char1 AS SIGNED INT), 1145f_charbig = 'just inserted' 1146 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1147DELETE FROM t0_aux 1148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1151'just inserted' FROM t0_template 1152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1153CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1154BEGIN 1155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1156f_charbig = 'updated by trigger' 1157 WHERE f_int1 = - old.f_int1; 1158END| 1159UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1160WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1161 1162# check trigger-4 success: 1 1163DROP TRIGGER trg_1; 1164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1165f_int2 = CAST(f_char1 AS SIGNED INT), 1166f_charbig = 'just inserted' 1167 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1168DELETE FROM t0_aux 1169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1172'just inserted' FROM t0_template 1173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1174CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1175BEGIN 1176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1177f_charbig = 'updated by trigger' 1178 WHERE f_int1 = new.f_int1; 1179END| 1180UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1182 1183# check trigger-5 success: 1 1184DROP TRIGGER trg_1; 1185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1186f_int2 = CAST(f_char1 AS SIGNED INT), 1187f_charbig = 'just inserted' 1188 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1189DELETE FROM t0_aux 1190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1193'just inserted' FROM t0_template 1194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1195CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1196BEGIN 1197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1198f_charbig = 'updated by trigger' 1199 WHERE f_int1 = - old.f_int1; 1200END| 1201UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1203 1204# check trigger-6 success: 1 1205DROP TRIGGER trg_1; 1206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1207f_int2 = CAST(f_char1 AS SIGNED INT), 1208f_charbig = 'just inserted' 1209 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1210DELETE FROM t0_aux 1211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1212INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1213SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1214'just inserted' FROM t0_template 1215WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1216CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 1217BEGIN 1218UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1219f_charbig = 'updated by trigger' 1220 WHERE f_int1 = - old.f_int1; 1221END| 1222DELETE FROM t0_aux 1223WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1224 1225# check trigger-7 success: 1 1226DROP TRIGGER trg_1; 1227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1228f_int2 = CAST(f_char1 AS SIGNED INT), 1229f_charbig = 'just inserted' 1230 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1231DELETE FROM t0_aux 1232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1235'just inserted' FROM t0_template 1236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1237CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 1238BEGIN 1239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1240f_charbig = 'updated by trigger' 1241 WHERE f_int1 = - old.f_int1; 1242END| 1243DELETE FROM t0_aux 1244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1245 1246# check trigger-8 success: 1 1247DROP TRIGGER trg_1; 1248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1249f_int2 = CAST(f_char1 AS SIGNED INT), 1250f_charbig = 'just inserted' 1251 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1252DELETE FROM t0_aux 1253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1254DELETE FROM t1 1255WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1256CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1257BEGIN 1258SET new.f_int1 = old.f_int1 + @max_row, 1259new.f_int2 = old.f_int2 - @max_row, 1260new.f_charbig = '####updated per update trigger####'; 1261END| 1262UPDATE t1 1263SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1264f_charbig = '####updated per update statement itself####'; 1265 1266# check trigger-9 success: 1 1267DROP TRIGGER trg_2; 1268UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1269f_int2 = CAST(f_char1 AS SIGNED INT), 1270f_charbig = CONCAT('===',f_char1,'==='); 1271CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1272BEGIN 1273SET new.f_int1 = new.f_int1 + @max_row, 1274new.f_int2 = new.f_int2 - @max_row, 1275new.f_charbig = '####updated per update trigger####'; 1276END| 1277UPDATE t1 1278SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1279f_charbig = '####updated per update statement itself####'; 1280 1281# check trigger-10 success: 1 1282DROP TRIGGER trg_2; 1283UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1284f_int2 = CAST(f_char1 AS SIGNED INT), 1285f_charbig = CONCAT('===',f_char1,'==='); 1286CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1287BEGIN 1288SET new.f_int1 = @my_max1 + @counter, 1289new.f_int2 = @my_min2 - @counter, 1290new.f_charbig = '####updated per insert trigger####'; 1291SET @counter = @counter + 1; 1292END| 1293SET @counter = 1; 1294SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1295INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1296SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1297CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1298WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1299ORDER BY f_int1; 1300DROP TRIGGER trg_3; 1301 1302# check trigger-11 success: 1 1303DELETE FROM t1 1304WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1305AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1306AND f_charbig = '####updated per insert trigger####'; 1307CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1308BEGIN 1309SET new.f_int1 = @my_max1 + @counter, 1310new.f_int2 = @my_min2 - @counter, 1311new.f_charbig = '####updated per insert trigger####'; 1312SET @counter = @counter + 1; 1313END| 1314SET @counter = 1; 1315SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1316INSERT INTO t1 (f_char1, f_char2, f_charbig) 1317SELECT CAST(f_int1 AS CHAR), 1318CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1320ORDER BY f_int1; 1321DROP TRIGGER trg_3; 1322 1323# check trigger-12 success: 1 1324DELETE FROM t1 1325WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1326AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1327AND f_charbig = '####updated per insert trigger####'; 1328ANALYZE TABLE t1; 1329Table Op Msg_type Msg_text 1330test.t1 analyze status OK 1331CHECK TABLE t1 EXTENDED; 1332Table Op Msg_type Msg_text 1333test.t1 check status OK 1334CHECKSUM TABLE t1 EXTENDED; 1335Table Checksum 1336test.t1 <some_value> 1337OPTIMIZE TABLE t1; 1338Table Op Msg_type Msg_text 1339test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 1340test.t1 optimize status OK 1341# check layout success: 1 1342REPAIR TABLE t1 EXTENDED; 1343Table Op Msg_type Msg_text 1344test.t1 repair status OK 1345# check layout success: 1 1346TRUNCATE t1; 1347 1348# check TRUNCATE success: 1 1349# check layout success: 1 1350# End usability test (inc/partition_check.inc) 1351DROP TABLE t1; 1352CREATE TABLE t1 ( 1353f_int1 INTEGER DEFAULT 0, 1354f_int2 INTEGER DEFAULT 0, 1355f_char1 CHAR(20), 1356f_char2 CHAR(20), 1357f_charbig VARCHAR(1000) 1358 1359) 1360PARTITION BY LIST(MOD(f_int1,4)) 1361(PARTITION part_3 VALUES IN (-3), 1362PARTITION part_2 VALUES IN (-2), 1363PARTITION part_1 VALUES IN (-1), 1364PARTITION part_N VALUES IN (NULL), 1365PARTITION part0 VALUES IN (0), 1366PARTITION part1 VALUES IN (1), 1367PARTITION part2 VALUES IN (2), 1368PARTITION part3 VALUES IN (3)); 1369INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1370SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1371WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 1372ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 1373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1375WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 1376# Start usability test (inc/partition_check.inc) 1377create_command 1378SHOW CREATE TABLE t1; 1379Table Create Table 1380t1 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 PARTITION BY LIST (`f_int1` MOD 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) 1397 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 1402INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1403SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1404CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 1405WHERE f_int1 IN (2,3); 1406ERROR 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 1409INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1410SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 1411CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 1412WHERE f_int1 IN (2,3); 1413DELETE FROM t1 WHERE f_charbig = 'delete me'; 1414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1415SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 1416CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 1417WHERE f_int1 IN (2,3); 1418DELETE FROM t1 WHERE f_charbig = 'delete me'; 1419# check read via f_int1 success: 1 1420# check read via f_int2 success: 1 1421 1422# check multiple-1 success: 1 1423DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 1424 1425# check multiple-2 success: 1 1426INSERT INTO t1 SELECT * FROM t0_template 1427WHERE MOD(f_int1,3) = 0; 1428 1429# check multiple-3 success: 1 1430UPDATE t1 SET f_int1 = f_int1 + @max_row 1431WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 1432AND @max_row_div2 + @max_row_div4; 1433 1434# check multiple-4 success: 1 1435DELETE FROM t1 1436WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 1437AND @max_row_div2 + @max_row_div4 + @max_row; 1438 1439# check multiple-5 success: 1 1440SELECT COUNT(*) INTO @try_count FROM t0_template 1441WHERE MOD(f_int1,3) = 0 1442AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1443SELECT COUNT(*) INTO @clash_count 1444FROM t1 INNER JOIN t0_template USING(f_int1) 1445WHERE MOD(f_int1,3) = 0 1446AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1447SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 1448INSERT INTO t1 1449SET f_int1 = @cur_value , f_int2 = @cur_value, 1450f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1451f_charbig = '#SINGLE#'; 1452 1453# check single-1 success: 1 1454SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 1455INSERT INTO t1 1456SET f_int1 = @cur_value , f_int2 = @cur_value, 1457f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1458f_charbig = '#SINGLE#'; 1459 1460# check single-2 success: 1 1461SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 1462SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 1463UPDATE t1 SET f_int1 = @cur_value2 1464WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 1465 1466# check single-3 success: 1 1467SET @cur_value1= -1; 1468SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 1469UPDATE t1 SET f_int1 = @cur_value1 1470WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 1471 1472# check single-4 success: 1 1473SELECT MAX(f_int1) INTO @cur_value FROM t1; 1474DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 1475 1476# check single-5 success: 1 1477DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 1478 1479# check single-6 success: 1 1480INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 1481 1482# check single-7 success: 1 1483DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 1484DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 1485INSERT t1 SET f_int1 = 0 , f_int2 = 0, 1486f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 1487f_charbig = '#NULL#'; 1488INSERT INTO t1 1489SET f_int1 = NULL , f_int2 = -@max_row, 1490f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 1491f_charbig = '#NULL#'; 1492ERROR 23000: Column 'f_int1' cannot be null 1493# check null success: 1 1494DELETE FROM t1 1495WHERE f_int1 = 0 AND f_int2 = 0 1496AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 1497AND f_charbig = '#NULL#'; 1498INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1499SELECT f_int1, f_int1, '', '', 'was inserted' 1500 FROM t0_template source_tab 1501WHERE MOD(f_int1,3) = 0 1502AND f_int1 BETWEEN @max_row_div2 AND @max_row 1503ON DUPLICATE KEY 1504UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 1505f_int2 = 2 * @max_row + source_tab.f_int1, 1506f_charbig = 'was updated'; 1507 1508# check unique-1-a success: 1 1509 1510# check unique-1-b success: 1 1511DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1512UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1513f_int2 = CAST(f_char1 AS SIGNED INT), 1514f_charbig = CONCAT('===',f_char1,'===') 1515WHERE f_charbig = 'was updated'; 1516REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1517SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 1518 FROM t0_template source_tab 1519WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1520 1521# check replace success: 1 1522DELETE FROM t1 1523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 1524DELETE FROM t1 1525WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 1526f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 1527UPDATE t1 SET f_int2 = f_int1, 1528f_char1 = CAST(f_int1 AS CHAR), 1529f_char2 = CAST(f_int1 AS CHAR), 1530f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 1531WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 1532SET AUTOCOMMIT= 0; 1533INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1534SELECT f_int1, f_int1, '', '', 'was inserted' 1535FROM t0_template source_tab 1536WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1537 1538# check transactions-1 success: 1 1539COMMIT WORK; 1540 1541# check transactions-2 success: 1 1542ROLLBACK WORK; 1543 1544# check transactions-3 success: 1 1545DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1546COMMIT WORK; 1547ROLLBACK WORK; 1548 1549# check transactions-4 success: 1 1550INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1551SELECT f_int1, f_int1, '', '', 'was inserted' 1552FROM t0_template source_tab 1553WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1554 1555# check transactions-5 success: 1 1556ROLLBACK WORK; 1557 1558# check transactions-6 success: 1 1559# INFO: Storage engine used for t1 seems to be transactional. 1560COMMIT; 1561 1562# check transactions-7 success: 1 1563DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1564COMMIT WORK; 1565SET @@session.sql_mode = 'traditional'; 1566SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 1567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1568SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 1569'', '', 'was inserted' FROM t0_template 1570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1571ERROR 22012: Division by 0 1572COMMIT; 1573 1574# check transactions-8 success: 1 1575# INFO: Storage engine used for t1 seems to be able to revert 1576# changes made by the failing statement. 1577SET @@session.sql_mode = ''; 1578SET AUTOCOMMIT= 1; 1579DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1580COMMIT WORK; 1581UPDATE t1 SET f_charbig = REPEAT('b', 1000); 1582 1583# check special-1 success: 1 1584UPDATE t1 SET f_charbig = ''; 1585 1586# check special-2 success: 1 1587UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 1588INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1589SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 1590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1591INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1592SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1593'just inserted' FROM t0_template 1594WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1595CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 1596BEGIN 1597UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1598f_charbig = 'updated by trigger' 1599 WHERE f_int1 = new.f_int1; 1600END| 1601INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1602SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1603WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1604 1605# check trigger-1 success: 1 1606DROP TRIGGER trg_1; 1607UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1608f_int2 = CAST(f_char1 AS SIGNED INT), 1609f_charbig = 'just inserted' 1610 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1611DELETE FROM t0_aux 1612WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1613INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1614SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1615'just inserted' FROM t0_template 1616WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1617CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 1618BEGIN 1619UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1620f_charbig = 'updated by trigger' 1621 WHERE f_int1 = new.f_int1; 1622END| 1623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1624SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1625WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1626 1627# check trigger-2 success: 1 1628DROP TRIGGER trg_1; 1629UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1630f_int2 = CAST(f_char1 AS SIGNED INT), 1631f_charbig = 'just inserted' 1632 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1633DELETE FROM t0_aux 1634WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1635INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1636SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1637'just inserted' FROM t0_template 1638WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1639CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1640BEGIN 1641UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1642f_charbig = 'updated by trigger' 1643 WHERE f_int1 = new.f_int1; 1644END| 1645UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1646WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1647 1648# check trigger-3 success: 1 1649DROP TRIGGER trg_1; 1650UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1651f_int2 = CAST(f_char1 AS SIGNED INT), 1652f_charbig = 'just inserted' 1653 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1654DELETE FROM t0_aux 1655WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1656INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1657SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1658'just inserted' FROM t0_template 1659WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1660CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1661BEGIN 1662UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1663f_charbig = 'updated by trigger' 1664 WHERE f_int1 = - old.f_int1; 1665END| 1666UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1667WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1668 1669# check trigger-4 success: 1 1670DROP TRIGGER trg_1; 1671UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1672f_int2 = CAST(f_char1 AS SIGNED INT), 1673f_charbig = 'just inserted' 1674 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1675DELETE FROM t0_aux 1676WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1677INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1678SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1679'just inserted' FROM t0_template 1680WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1681CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1682BEGIN 1683UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1684f_charbig = 'updated by trigger' 1685 WHERE f_int1 = new.f_int1; 1686END| 1687UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1688WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1689 1690# check trigger-5 success: 1 1691DROP TRIGGER trg_1; 1692UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1693f_int2 = CAST(f_char1 AS SIGNED INT), 1694f_charbig = 'just inserted' 1695 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1696DELETE FROM t0_aux 1697WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1698INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1699SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1700'just inserted' FROM t0_template 1701WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1702CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1703BEGIN 1704UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1705f_charbig = 'updated by trigger' 1706 WHERE f_int1 = - old.f_int1; 1707END| 1708UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1709WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1710 1711# check trigger-6 success: 1 1712DROP TRIGGER trg_1; 1713UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1714f_int2 = CAST(f_char1 AS SIGNED INT), 1715f_charbig = 'just inserted' 1716 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1717DELETE FROM t0_aux 1718WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1719INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1720SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1721'just inserted' FROM t0_template 1722WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1723CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 1724BEGIN 1725UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1726f_charbig = 'updated by trigger' 1727 WHERE f_int1 = - old.f_int1; 1728END| 1729DELETE FROM t0_aux 1730WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1731 1732# check trigger-7 success: 1 1733DROP TRIGGER trg_1; 1734UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1735f_int2 = CAST(f_char1 AS SIGNED INT), 1736f_charbig = 'just inserted' 1737 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1738DELETE FROM t0_aux 1739WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1740INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1741SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1742'just inserted' FROM t0_template 1743WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1744CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 1745BEGIN 1746UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1747f_charbig = 'updated by trigger' 1748 WHERE f_int1 = - old.f_int1; 1749END| 1750DELETE FROM t0_aux 1751WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1752 1753# check trigger-8 success: 1 1754DROP TRIGGER trg_1; 1755UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1756f_int2 = CAST(f_char1 AS SIGNED INT), 1757f_charbig = 'just inserted' 1758 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1759DELETE FROM t0_aux 1760WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1761DELETE FROM t1 1762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1763CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1764BEGIN 1765SET new.f_int1 = old.f_int1 + @max_row, 1766new.f_int2 = old.f_int2 - @max_row, 1767new.f_charbig = '####updated per update trigger####'; 1768END| 1769UPDATE t1 1770SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1771f_charbig = '####updated per update statement itself####'; 1772 1773# check trigger-9 success: 1 1774DROP TRIGGER trg_2; 1775UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1776f_int2 = CAST(f_char1 AS SIGNED INT), 1777f_charbig = CONCAT('===',f_char1,'==='); 1778CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1779BEGIN 1780SET new.f_int1 = new.f_int1 + @max_row, 1781new.f_int2 = new.f_int2 - @max_row, 1782new.f_charbig = '####updated per update trigger####'; 1783END| 1784UPDATE t1 1785SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1786f_charbig = '####updated per update statement itself####'; 1787 1788# check trigger-10 success: 1 1789DROP TRIGGER trg_2; 1790UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1791f_int2 = CAST(f_char1 AS SIGNED INT), 1792f_charbig = CONCAT('===',f_char1,'==='); 1793CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1794BEGIN 1795SET new.f_int1 = @my_max1 + @counter, 1796new.f_int2 = @my_min2 - @counter, 1797new.f_charbig = '####updated per insert trigger####'; 1798SET @counter = @counter + 1; 1799END| 1800SET @counter = 1; 1801SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1802INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1803SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1804CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1805WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1806ORDER BY f_int1; 1807DROP TRIGGER trg_3; 1808 1809# check trigger-11 success: 1 1810DELETE FROM t1 1811WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1812AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1813AND f_charbig = '####updated per insert trigger####'; 1814CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1815BEGIN 1816SET new.f_int1 = @my_max1 + @counter, 1817new.f_int2 = @my_min2 - @counter, 1818new.f_charbig = '####updated per insert trigger####'; 1819SET @counter = @counter + 1; 1820END| 1821SET @counter = 1; 1822SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1823INSERT INTO t1 (f_char1, f_char2, f_charbig) 1824SELECT CAST(f_int1 AS CHAR), 1825CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1826WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1827ORDER BY f_int1; 1828DROP TRIGGER trg_3; 1829 1830# check trigger-12 success: 1 1831DELETE FROM t1 1832WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1833AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1834AND f_charbig = '####updated per insert trigger####'; 1835ANALYZE TABLE t1; 1836Table Op Msg_type Msg_text 1837test.t1 analyze status OK 1838CHECK TABLE t1 EXTENDED; 1839Table Op Msg_type Msg_text 1840test.t1 check status OK 1841CHECKSUM TABLE t1 EXTENDED; 1842Table Checksum 1843test.t1 <some_value> 1844OPTIMIZE TABLE t1; 1845Table Op Msg_type Msg_text 1846test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 1847test.t1 optimize status OK 1848# check layout success: 1 1849REPAIR TABLE t1 EXTENDED; 1850Table Op Msg_type Msg_text 1851test.t1 repair status OK 1852# check layout success: 1 1853TRUNCATE t1; 1854 1855# check TRUNCATE success: 1 1856# check layout success: 1 1857# End usability test (inc/partition_check.inc) 1858DROP TABLE t1; 1859CREATE TABLE t1 ( 1860f_int1 INTEGER DEFAULT 0, 1861f_int2 INTEGER DEFAULT 0, 1862f_char1 CHAR(20), 1863f_char2 CHAR(20), 1864f_charbig VARCHAR(1000) 1865 1866) 1867PARTITION BY RANGE(f_int1) 1868(PARTITION parta VALUES LESS THAN (0), 1869PARTITION partb VALUES LESS THAN (5), 1870PARTITION partc VALUES LESS THAN (10), 1871PARTITION partd VALUES LESS THAN (10 + 5), 1872PARTITION parte VALUES LESS THAN (20), 1873PARTITION partf VALUES LESS THAN (2147483646)); 1874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 1877ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 1878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1880WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 1881# Start usability test (inc/partition_check.inc) 1882create_command 1883SHOW CREATE TABLE t1; 1884Table Create Table 1885t1 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 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) 1900 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 1905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1906SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1907CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 1908WHERE f_int1 IN (2,3); 1909ERROR 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 1912INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1913SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 1914CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 1915WHERE f_int1 IN (2,3); 1916DELETE FROM t1 WHERE f_charbig = 'delete me'; 1917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1918SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 1919CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 1920WHERE f_int1 IN (2,3); 1921DELETE FROM t1 WHERE f_charbig = 'delete me'; 1922# check read via f_int1 success: 1 1923# check read via f_int2 success: 1 1924 1925# check multiple-1 success: 1 1926DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 1927 1928# check multiple-2 success: 1 1929INSERT INTO t1 SELECT * FROM t0_template 1930WHERE MOD(f_int1,3) = 0; 1931 1932# check multiple-3 success: 1 1933UPDATE t1 SET f_int1 = f_int1 + @max_row 1934WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 1935AND @max_row_div2 + @max_row_div4; 1936 1937# check multiple-4 success: 1 1938DELETE FROM t1 1939WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 1940AND @max_row_div2 + @max_row_div4 + @max_row; 1941 1942# check multiple-5 success: 1 1943SELECT COUNT(*) INTO @try_count FROM t0_template 1944WHERE MOD(f_int1,3) = 0 1945AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1946SELECT COUNT(*) INTO @clash_count 1947FROM t1 INNER JOIN t0_template USING(f_int1) 1948WHERE MOD(f_int1,3) = 0 1949AND f_int1 BETWEEN @max_row_div2 AND @max_row; 1950SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 1951INSERT INTO t1 1952SET f_int1 = @cur_value , f_int2 = @cur_value, 1953f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1954f_charbig = '#SINGLE#'; 1955 1956# check single-1 success: 1 1957SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 1958INSERT INTO t1 1959SET f_int1 = @cur_value , f_int2 = @cur_value, 1960f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1961f_charbig = '#SINGLE#'; 1962 1963# check single-2 success: 1 1964SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 1965SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 1966UPDATE t1 SET f_int1 = @cur_value2 1967WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 1968 1969# check single-3 success: 1 1970SET @cur_value1= -1; 1971SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 1972UPDATE t1 SET f_int1 = @cur_value1 1973WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 1974 1975# check single-4 success: 1 1976SELECT MAX(f_int1) INTO @cur_value FROM t1; 1977DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 1978 1979# check single-5 success: 1 1980DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 1981 1982# check single-6 success: 1 1983INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 1984ERROR HY000: Table has no partition for value 2147483647 1985DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 1986INSERT t1 SET f_int1 = 0 , f_int2 = 0, 1987f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 1988f_charbig = '#NULL#'; 1989INSERT INTO t1 1990SET f_int1 = NULL , f_int2 = -@max_row, 1991f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 1992f_charbig = '#NULL#'; 1993ERROR 23000: Column 'f_int1' cannot be null 1994# check null success: 1 1995DELETE FROM t1 1996WHERE f_int1 = 0 AND f_int2 = 0 1997AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 1998AND f_charbig = '#NULL#'; 1999INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2000SELECT f_int1, f_int1, '', '', 'was inserted' 2001 FROM t0_template source_tab 2002WHERE MOD(f_int1,3) = 0 2003AND f_int1 BETWEEN @max_row_div2 AND @max_row 2004ON DUPLICATE KEY 2005UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 2006f_int2 = 2 * @max_row + source_tab.f_int1, 2007f_charbig = 'was updated'; 2008 2009# check unique-1-a success: 1 2010 2011# check unique-1-b success: 1 2012DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2013UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2014f_int2 = CAST(f_char1 AS SIGNED INT), 2015f_charbig = CONCAT('===',f_char1,'===') 2016WHERE f_charbig = 'was updated'; 2017REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2018SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 2019 FROM t0_template source_tab 2020WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2021 2022# check replace success: 1 2023DELETE FROM t1 2024WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 2025DELETE FROM t1 2026WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 2027f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 2028UPDATE t1 SET f_int2 = f_int1, 2029f_char1 = CAST(f_int1 AS CHAR), 2030f_char2 = CAST(f_int1 AS CHAR), 2031f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 2032WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 2033SET AUTOCOMMIT= 0; 2034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2035SELECT f_int1, f_int1, '', '', 'was inserted' 2036FROM t0_template source_tab 2037WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2038 2039# check transactions-1 success: 1 2040COMMIT WORK; 2041 2042# check transactions-2 success: 1 2043ROLLBACK WORK; 2044 2045# check transactions-3 success: 1 2046DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2047COMMIT WORK; 2048ROLLBACK WORK; 2049 2050# check transactions-4 success: 1 2051INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2052SELECT f_int1, f_int1, '', '', 'was inserted' 2053FROM t0_template source_tab 2054WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2055 2056# check transactions-5 success: 1 2057ROLLBACK WORK; 2058 2059# check transactions-6 success: 1 2060# INFO: Storage engine used for t1 seems to be transactional. 2061COMMIT; 2062 2063# check transactions-7 success: 1 2064DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2065COMMIT WORK; 2066SET @@session.sql_mode = 'traditional'; 2067SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 2068INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2069SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 2070'', '', 'was inserted' FROM t0_template 2071WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2072ERROR 22012: Division by 0 2073COMMIT; 2074 2075# check transactions-8 success: 1 2076# INFO: Storage engine used for t1 seems to be able to revert 2077# changes made by the failing statement. 2078SET @@session.sql_mode = ''; 2079SET AUTOCOMMIT= 1; 2080DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2081COMMIT WORK; 2082UPDATE t1 SET f_charbig = REPEAT('b', 1000); 2083 2084# check special-1 success: 1 2085UPDATE t1 SET f_charbig = ''; 2086 2087# check special-2 success: 1 2088UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 2089INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2090SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 2091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2092INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2093SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2094'just inserted' FROM t0_template 2095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2096CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 2097BEGIN 2098UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2099f_charbig = 'updated by trigger' 2100 WHERE f_int1 = new.f_int1; 2101END| 2102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2103SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2104WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2105 2106# check trigger-1 success: 1 2107DROP TRIGGER trg_1; 2108UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2109f_int2 = CAST(f_char1 AS SIGNED INT), 2110f_charbig = 'just inserted' 2111 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2112DELETE FROM t0_aux 2113WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2114INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2115SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2116'just inserted' FROM t0_template 2117WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2118CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 2119BEGIN 2120UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2121f_charbig = 'updated by trigger' 2122 WHERE f_int1 = new.f_int1; 2123END| 2124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2125SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2127 2128# check trigger-2 success: 1 2129DROP TRIGGER trg_1; 2130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2131f_int2 = CAST(f_char1 AS SIGNED INT), 2132f_charbig = 'just inserted' 2133 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2134DELETE FROM t0_aux 2135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2138'just inserted' FROM t0_template 2139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2140CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2141BEGIN 2142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2143f_charbig = 'updated by trigger' 2144 WHERE f_int1 = new.f_int1; 2145END| 2146UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2148 2149# check trigger-3 success: 1 2150DROP TRIGGER trg_1; 2151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2152f_int2 = CAST(f_char1 AS SIGNED INT), 2153f_charbig = 'just inserted' 2154 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2155DELETE FROM t0_aux 2156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2157INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2158SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2159'just inserted' FROM t0_template 2160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2161CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2162BEGIN 2163UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2164f_charbig = 'updated by trigger' 2165 WHERE f_int1 = - old.f_int1; 2166END| 2167UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2168WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2169 2170# check trigger-4 success: 1 2171DROP TRIGGER trg_1; 2172UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2173f_int2 = CAST(f_char1 AS SIGNED INT), 2174f_charbig = 'just inserted' 2175 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2176DELETE FROM t0_aux 2177WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2178INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2179SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2180'just inserted' FROM t0_template 2181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2182CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2183BEGIN 2184UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2185f_charbig = 'updated by trigger' 2186 WHERE f_int1 = new.f_int1; 2187END| 2188UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2189WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2190 2191# check trigger-5 success: 1 2192DROP TRIGGER trg_1; 2193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2194f_int2 = CAST(f_char1 AS SIGNED INT), 2195f_charbig = 'just inserted' 2196 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2197DELETE FROM t0_aux 2198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2201'just inserted' FROM t0_template 2202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2203CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2204BEGIN 2205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2206f_charbig = 'updated by trigger' 2207 WHERE f_int1 = - old.f_int1; 2208END| 2209UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2211 2212# check trigger-6 success: 1 2213DROP TRIGGER trg_1; 2214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2215f_int2 = CAST(f_char1 AS SIGNED INT), 2216f_charbig = 'just inserted' 2217 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2218DELETE FROM t0_aux 2219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2220INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2221SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2222'just inserted' FROM t0_template 2223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2224CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 2225BEGIN 2226UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2227f_charbig = 'updated by trigger' 2228 WHERE f_int1 = - old.f_int1; 2229END| 2230DELETE FROM t0_aux 2231WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2232 2233# check trigger-7 success: 1 2234DROP TRIGGER trg_1; 2235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2236f_int2 = CAST(f_char1 AS SIGNED INT), 2237f_charbig = 'just inserted' 2238 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2239DELETE FROM t0_aux 2240WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2241INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2242SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2243'just inserted' FROM t0_template 2244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2245CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 2246BEGIN 2247UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2248f_charbig = 'updated by trigger' 2249 WHERE f_int1 = - old.f_int1; 2250END| 2251DELETE FROM t0_aux 2252WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2253 2254# check trigger-8 success: 1 2255DROP TRIGGER trg_1; 2256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2257f_int2 = CAST(f_char1 AS SIGNED INT), 2258f_charbig = 'just inserted' 2259 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2260DELETE FROM t0_aux 2261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2262DELETE FROM t1 2263WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2264CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2265BEGIN 2266SET new.f_int1 = old.f_int1 + @max_row, 2267new.f_int2 = old.f_int2 - @max_row, 2268new.f_charbig = '####updated per update trigger####'; 2269END| 2270UPDATE t1 2271SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2272f_charbig = '####updated per update statement itself####'; 2273 2274# check trigger-9 success: 1 2275DROP TRIGGER trg_2; 2276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2277f_int2 = CAST(f_char1 AS SIGNED INT), 2278f_charbig = CONCAT('===',f_char1,'==='); 2279CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2280BEGIN 2281SET new.f_int1 = new.f_int1 + @max_row, 2282new.f_int2 = new.f_int2 - @max_row, 2283new.f_charbig = '####updated per update trigger####'; 2284END| 2285UPDATE t1 2286SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2287f_charbig = '####updated per update statement itself####'; 2288 2289# check trigger-10 success: 1 2290DROP TRIGGER trg_2; 2291UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2292f_int2 = CAST(f_char1 AS SIGNED INT), 2293f_charbig = CONCAT('===',f_char1,'==='); 2294CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2295BEGIN 2296SET new.f_int1 = @my_max1 + @counter, 2297new.f_int2 = @my_min2 - @counter, 2298new.f_charbig = '####updated per insert trigger####'; 2299SET @counter = @counter + 1; 2300END| 2301SET @counter = 1; 2302SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2303INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2304SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2305CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2307ORDER BY f_int1; 2308DROP TRIGGER trg_3; 2309 2310# check trigger-11 success: 1 2311DELETE FROM t1 2312WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2313AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2314AND f_charbig = '####updated per insert trigger####'; 2315CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2316BEGIN 2317SET new.f_int1 = @my_max1 + @counter, 2318new.f_int2 = @my_min2 - @counter, 2319new.f_charbig = '####updated per insert trigger####'; 2320SET @counter = @counter + 1; 2321END| 2322SET @counter = 1; 2323SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2324INSERT INTO t1 (f_char1, f_char2, f_charbig) 2325SELECT CAST(f_int1 AS CHAR), 2326CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2328ORDER BY f_int1; 2329DROP TRIGGER trg_3; 2330 2331# check trigger-12 success: 1 2332DELETE FROM t1 2333WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2334AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2335AND f_charbig = '####updated per insert trigger####'; 2336ANALYZE TABLE t1; 2337Table Op Msg_type Msg_text 2338test.t1 analyze status OK 2339CHECK TABLE t1 EXTENDED; 2340Table Op Msg_type Msg_text 2341test.t1 check status OK 2342CHECKSUM TABLE t1 EXTENDED; 2343Table Checksum 2344test.t1 <some_value> 2345OPTIMIZE TABLE t1; 2346Table Op Msg_type Msg_text 2347test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 2348test.t1 optimize status OK 2349# check layout success: 1 2350REPAIR TABLE t1 EXTENDED; 2351Table Op Msg_type Msg_text 2352test.t1 repair status OK 2353# check layout success: 1 2354TRUNCATE t1; 2355 2356# check TRUNCATE success: 1 2357# check layout success: 1 2358# End usability test (inc/partition_check.inc) 2359DROP TABLE t1; 2360CREATE TABLE t1 ( 2361f_int1 INTEGER DEFAULT 0, 2362f_int2 INTEGER DEFAULT 0, 2363f_char1 CHAR(20), 2364f_char2 CHAR(20), 2365f_charbig VARCHAR(1000) 2366 2367) 2368PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 2369(PARTITION parta VALUES LESS THAN (0), 2370PARTITION partb VALUES LESS THAN (5), 2371PARTITION partc VALUES LESS THAN (10), 2372PARTITION partd VALUES LESS THAN (2147483646)); 2373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2375WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 2376ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 2377INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2378SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2379WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 2380# Start usability test (inc/partition_check.inc) 2381create_command 2382SHOW CREATE TABLE t1; 2383Table Create Table 2384t1 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 PARTITION BY RANGE (`f_int1` DIV 2) 2393SUBPARTITION BY HASH (`f_int1`) 2394SUBPARTITIONS 2 2395(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB, 2396 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB, 2397 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB, 2398 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB) 2399 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 2404INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2405SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2406CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 2407WHERE f_int1 IN (2,3); 2408ERROR 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 2411INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2412SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 2413CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 2414WHERE f_int1 IN (2,3); 2415DELETE FROM t1 WHERE f_charbig = 'delete me'; 2416INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2417SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 2418CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 2419WHERE f_int1 IN (2,3); 2420DELETE FROM t1 WHERE f_charbig = 'delete me'; 2421# check read via f_int1 success: 1 2422# check read via f_int2 success: 1 2423 2424# check multiple-1 success: 1 2425DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 2426 2427# check multiple-2 success: 1 2428INSERT INTO t1 SELECT * FROM t0_template 2429WHERE MOD(f_int1,3) = 0; 2430 2431# check multiple-3 success: 1 2432UPDATE t1 SET f_int1 = f_int1 + @max_row 2433WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 2434AND @max_row_div2 + @max_row_div4; 2435 2436# check multiple-4 success: 1 2437DELETE FROM t1 2438WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 2439AND @max_row_div2 + @max_row_div4 + @max_row; 2440 2441# check multiple-5 success: 1 2442SELECT COUNT(*) INTO @try_count FROM t0_template 2443WHERE MOD(f_int1,3) = 0 2444AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2445SELECT COUNT(*) INTO @clash_count 2446FROM t1 INNER JOIN t0_template USING(f_int1) 2447WHERE MOD(f_int1,3) = 0 2448AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2449SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 2450INSERT INTO t1 2451SET f_int1 = @cur_value , f_int2 = @cur_value, 2452f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2453f_charbig = '#SINGLE#'; 2454 2455# check single-1 success: 1 2456SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 2457INSERT INTO t1 2458SET f_int1 = @cur_value , f_int2 = @cur_value, 2459f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2460f_charbig = '#SINGLE#'; 2461 2462# check single-2 success: 1 2463SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 2464SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 2465UPDATE t1 SET f_int1 = @cur_value2 2466WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 2467 2468# check single-3 success: 1 2469SET @cur_value1= -1; 2470SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 2471UPDATE t1 SET f_int1 = @cur_value1 2472WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 2473 2474# check single-4 success: 1 2475SELECT MAX(f_int1) INTO @cur_value FROM t1; 2476DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 2477 2478# check single-5 success: 1 2479DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 2480 2481# check single-6 success: 1 2482INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 2483 2484# check single-7 success: 1 2485DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 2486DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 2487INSERT t1 SET f_int1 = 0 , f_int2 = 0, 2488f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 2489f_charbig = '#NULL#'; 2490INSERT INTO t1 2491SET f_int1 = NULL , f_int2 = -@max_row, 2492f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 2493f_charbig = '#NULL#'; 2494ERROR 23000: Column 'f_int1' cannot be null 2495# check null success: 1 2496DELETE FROM t1 2497WHERE f_int1 = 0 AND f_int2 = 0 2498AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 2499AND f_charbig = '#NULL#'; 2500INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2501SELECT f_int1, f_int1, '', '', 'was inserted' 2502 FROM t0_template source_tab 2503WHERE MOD(f_int1,3) = 0 2504AND f_int1 BETWEEN @max_row_div2 AND @max_row 2505ON DUPLICATE KEY 2506UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 2507f_int2 = 2 * @max_row + source_tab.f_int1, 2508f_charbig = 'was updated'; 2509 2510# check unique-1-a success: 1 2511 2512# check unique-1-b success: 1 2513DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2514UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2515f_int2 = CAST(f_char1 AS SIGNED INT), 2516f_charbig = CONCAT('===',f_char1,'===') 2517WHERE f_charbig = 'was updated'; 2518REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2519SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 2520 FROM t0_template source_tab 2521WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2522 2523# check replace success: 1 2524DELETE FROM t1 2525WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 2526DELETE FROM t1 2527WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 2528f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 2529UPDATE t1 SET f_int2 = f_int1, 2530f_char1 = CAST(f_int1 AS CHAR), 2531f_char2 = CAST(f_int1 AS CHAR), 2532f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 2533WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 2534SET AUTOCOMMIT= 0; 2535INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2536SELECT f_int1, f_int1, '', '', 'was inserted' 2537FROM t0_template source_tab 2538WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2539 2540# check transactions-1 success: 1 2541COMMIT WORK; 2542 2543# check transactions-2 success: 1 2544ROLLBACK WORK; 2545 2546# check transactions-3 success: 1 2547DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2548COMMIT WORK; 2549ROLLBACK WORK; 2550 2551# check transactions-4 success: 1 2552INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2553SELECT f_int1, f_int1, '', '', 'was inserted' 2554FROM t0_template source_tab 2555WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2556 2557# check transactions-5 success: 1 2558ROLLBACK WORK; 2559 2560# check transactions-6 success: 1 2561# INFO: Storage engine used for t1 seems to be transactional. 2562COMMIT; 2563 2564# check transactions-7 success: 1 2565DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2566COMMIT WORK; 2567SET @@session.sql_mode = 'traditional'; 2568SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 2569INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2570SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 2571'', '', 'was inserted' FROM t0_template 2572WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2573ERROR 22012: Division by 0 2574COMMIT; 2575 2576# check transactions-8 success: 1 2577# INFO: Storage engine used for t1 seems to be able to revert 2578# changes made by the failing statement. 2579SET @@session.sql_mode = ''; 2580SET AUTOCOMMIT= 1; 2581DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2582COMMIT WORK; 2583UPDATE t1 SET f_charbig = REPEAT('b', 1000); 2584 2585# check special-1 success: 1 2586UPDATE t1 SET f_charbig = ''; 2587 2588# check special-2 success: 1 2589UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 2590INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2591SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 2592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2593INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2594SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2595'just inserted' FROM t0_template 2596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2597CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 2598BEGIN 2599UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2600f_charbig = 'updated by trigger' 2601 WHERE f_int1 = new.f_int1; 2602END| 2603INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2604SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2606 2607# check trigger-1 success: 1 2608DROP TRIGGER trg_1; 2609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2610f_int2 = CAST(f_char1 AS SIGNED INT), 2611f_charbig = 'just inserted' 2612 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2613DELETE FROM t0_aux 2614WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2617'just inserted' FROM t0_template 2618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2619CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 2620BEGIN 2621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2622f_charbig = 'updated by trigger' 2623 WHERE f_int1 = new.f_int1; 2624END| 2625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2628 2629# check trigger-2 success: 1 2630DROP TRIGGER trg_1; 2631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2632f_int2 = CAST(f_char1 AS SIGNED INT), 2633f_charbig = 'just inserted' 2634 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2635DELETE FROM t0_aux 2636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2639'just inserted' FROM t0_template 2640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2641CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2642BEGIN 2643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2644f_charbig = 'updated by trigger' 2645 WHERE f_int1 = new.f_int1; 2646END| 2647UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2648WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2649 2650# check trigger-3 success: 1 2651DROP TRIGGER trg_1; 2652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2653f_int2 = CAST(f_char1 AS SIGNED INT), 2654f_charbig = 'just inserted' 2655 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2656DELETE FROM t0_aux 2657WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2659SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2660'just inserted' FROM t0_template 2661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2662CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2663BEGIN 2664UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2665f_charbig = 'updated by trigger' 2666 WHERE f_int1 = - old.f_int1; 2667END| 2668UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2669WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2670 2671# check trigger-4 success: 1 2672DROP TRIGGER trg_1; 2673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2674f_int2 = CAST(f_char1 AS SIGNED INT), 2675f_charbig = 'just inserted' 2676 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2677DELETE FROM t0_aux 2678WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2679INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2680SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2681'just inserted' FROM t0_template 2682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2683CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2684BEGIN 2685UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2686f_charbig = 'updated by trigger' 2687 WHERE f_int1 = new.f_int1; 2688END| 2689UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2690WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2691 2692# check trigger-5 success: 1 2693DROP TRIGGER trg_1; 2694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2695f_int2 = CAST(f_char1 AS SIGNED INT), 2696f_charbig = 'just inserted' 2697 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2698DELETE FROM t0_aux 2699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2702'just inserted' FROM t0_template 2703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2704CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2705BEGIN 2706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2707f_charbig = 'updated by trigger' 2708 WHERE f_int1 = - old.f_int1; 2709END| 2710UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2712 2713# check trigger-6 success: 1 2714DROP TRIGGER trg_1; 2715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2716f_int2 = CAST(f_char1 AS SIGNED INT), 2717f_charbig = 'just inserted' 2718 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2719DELETE FROM t0_aux 2720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2723'just inserted' FROM t0_template 2724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2725CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 2726BEGIN 2727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2728f_charbig = 'updated by trigger' 2729 WHERE f_int1 = - old.f_int1; 2730END| 2731DELETE FROM t0_aux 2732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2733 2734# check trigger-7 success: 1 2735DROP TRIGGER trg_1; 2736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2737f_int2 = CAST(f_char1 AS SIGNED INT), 2738f_charbig = 'just inserted' 2739 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2740DELETE FROM t0_aux 2741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2744'just inserted' FROM t0_template 2745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2746CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 2747BEGIN 2748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2749f_charbig = 'updated by trigger' 2750 WHERE f_int1 = - old.f_int1; 2751END| 2752DELETE FROM t0_aux 2753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2754 2755# check trigger-8 success: 1 2756DROP TRIGGER trg_1; 2757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2758f_int2 = CAST(f_char1 AS SIGNED INT), 2759f_charbig = 'just inserted' 2760 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2761DELETE FROM t0_aux 2762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2763DELETE FROM t1 2764WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2765CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2766BEGIN 2767SET new.f_int1 = old.f_int1 + @max_row, 2768new.f_int2 = old.f_int2 - @max_row, 2769new.f_charbig = '####updated per update trigger####'; 2770END| 2771UPDATE t1 2772SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2773f_charbig = '####updated per update statement itself####'; 2774 2775# check trigger-9 success: 1 2776DROP TRIGGER trg_2; 2777UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2778f_int2 = CAST(f_char1 AS SIGNED INT), 2779f_charbig = CONCAT('===',f_char1,'==='); 2780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2781BEGIN 2782SET new.f_int1 = new.f_int1 + @max_row, 2783new.f_int2 = new.f_int2 - @max_row, 2784new.f_charbig = '####updated per update trigger####'; 2785END| 2786UPDATE t1 2787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2788f_charbig = '####updated per update statement itself####'; 2789 2790# check trigger-10 success: 1 2791DROP TRIGGER trg_2; 2792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2793f_int2 = CAST(f_char1 AS SIGNED INT), 2794f_charbig = CONCAT('===',f_char1,'==='); 2795CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2796BEGIN 2797SET new.f_int1 = @my_max1 + @counter, 2798new.f_int2 = @my_min2 - @counter, 2799new.f_charbig = '####updated per insert trigger####'; 2800SET @counter = @counter + 1; 2801END| 2802SET @counter = 1; 2803SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2805SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2806CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2808ORDER BY f_int1; 2809DROP TRIGGER trg_3; 2810 2811# check trigger-11 success: 1 2812DELETE FROM t1 2813WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2814AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2815AND f_charbig = '####updated per insert trigger####'; 2816CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2817BEGIN 2818SET new.f_int1 = @my_max1 + @counter, 2819new.f_int2 = @my_min2 - @counter, 2820new.f_charbig = '####updated per insert trigger####'; 2821SET @counter = @counter + 1; 2822END| 2823SET @counter = 1; 2824SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2825INSERT INTO t1 (f_char1, f_char2, f_charbig) 2826SELECT CAST(f_int1 AS CHAR), 2827CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2829ORDER BY f_int1; 2830DROP TRIGGER trg_3; 2831 2832# check trigger-12 success: 1 2833DELETE FROM t1 2834WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2835AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2836AND f_charbig = '####updated per insert trigger####'; 2837ANALYZE TABLE t1; 2838Table Op Msg_type Msg_text 2839test.t1 analyze status OK 2840CHECK TABLE t1 EXTENDED; 2841Table Op Msg_type Msg_text 2842test.t1 check status OK 2843CHECKSUM TABLE t1 EXTENDED; 2844Table Checksum 2845test.t1 <some_value> 2846OPTIMIZE TABLE t1; 2847Table Op Msg_type Msg_text 2848test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 2849test.t1 optimize status OK 2850# check layout success: 1 2851REPAIR TABLE t1 EXTENDED; 2852Table Op Msg_type Msg_text 2853test.t1 repair status OK 2854# check layout success: 1 2855TRUNCATE t1; 2856 2857# check TRUNCATE success: 1 2858# check layout success: 1 2859# End usability test (inc/partition_check.inc) 2860DROP TABLE t1; 2861CREATE TABLE t1 ( 2862f_int1 INTEGER DEFAULT 0, 2863f_int2 INTEGER DEFAULT 0, 2864f_char1 CHAR(20), 2865f_char2 CHAR(20), 2866f_charbig VARCHAR(1000) 2867 2868) 2869PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 2870(PARTITION part1 VALUES LESS THAN (0) 2871(SUBPARTITION subpart11, SUBPARTITION subpart12), 2872PARTITION part2 VALUES LESS THAN (5) 2873(SUBPARTITION subpart21, SUBPARTITION subpart22), 2874PARTITION part3 VALUES LESS THAN (10) 2875(SUBPARTITION subpart31, SUBPARTITION subpart32), 2876PARTITION part4 VALUES LESS THAN (2147483646) 2877(SUBPARTITION subpart41, SUBPARTITION subpart42)); 2878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2880WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 2881ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 2882INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2883SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2884WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 2885# Start usability test (inc/partition_check.inc) 2886create_command 2887SHOW CREATE TABLE t1; 2888Table Create Table 2889t1 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 PARTITION BY RANGE (`f_int1`) 2898SUBPARTITION 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)) 2911 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 2916INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2917SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2918CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 2919WHERE f_int1 IN (2,3); 2920ERROR 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 2923INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2924SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 2925CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 2926WHERE f_int1 IN (2,3); 2927DELETE FROM t1 WHERE f_charbig = 'delete me'; 2928INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2929SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 2930CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 2931WHERE f_int1 IN (2,3); 2932DELETE FROM t1 WHERE f_charbig = 'delete me'; 2933# check read via f_int1 success: 1 2934# check read via f_int2 success: 1 2935 2936# check multiple-1 success: 1 2937DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 2938 2939# check multiple-2 success: 1 2940INSERT INTO t1 SELECT * FROM t0_template 2941WHERE MOD(f_int1,3) = 0; 2942 2943# check multiple-3 success: 1 2944UPDATE t1 SET f_int1 = f_int1 + @max_row 2945WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 2946AND @max_row_div2 + @max_row_div4; 2947 2948# check multiple-4 success: 1 2949DELETE FROM t1 2950WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 2951AND @max_row_div2 + @max_row_div4 + @max_row; 2952 2953# check multiple-5 success: 1 2954SELECT COUNT(*) INTO @try_count FROM t0_template 2955WHERE MOD(f_int1,3) = 0 2956AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2957SELECT COUNT(*) INTO @clash_count 2958FROM t1 INNER JOIN t0_template USING(f_int1) 2959WHERE MOD(f_int1,3) = 0 2960AND f_int1 BETWEEN @max_row_div2 AND @max_row; 2961SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 2962INSERT INTO t1 2963SET f_int1 = @cur_value , f_int2 = @cur_value, 2964f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2965f_charbig = '#SINGLE#'; 2966 2967# check single-1 success: 1 2968SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 2969INSERT INTO t1 2970SET f_int1 = @cur_value , f_int2 = @cur_value, 2971f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2972f_charbig = '#SINGLE#'; 2973 2974# check single-2 success: 1 2975SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 2976SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 2977UPDATE t1 SET f_int1 = @cur_value2 2978WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 2979 2980# check single-3 success: 1 2981SET @cur_value1= -1; 2982SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 2983UPDATE t1 SET f_int1 = @cur_value1 2984WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 2985 2986# check single-4 success: 1 2987SELECT MAX(f_int1) INTO @cur_value FROM t1; 2988DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 2989 2990# check single-5 success: 1 2991DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 2992 2993# check single-6 success: 1 2994INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 2995ERROR HY000: Table has no partition for value 2147483647 2996DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 2997INSERT t1 SET f_int1 = 0 , f_int2 = 0, 2998f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 2999f_charbig = '#NULL#'; 3000INSERT INTO t1 3001SET f_int1 = NULL , f_int2 = -@max_row, 3002f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 3003f_charbig = '#NULL#'; 3004ERROR 23000: Column 'f_int1' cannot be null 3005# check null success: 1 3006DELETE FROM t1 3007WHERE f_int1 = 0 AND f_int2 = 0 3008AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 3009AND f_charbig = '#NULL#'; 3010INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3011SELECT f_int1, f_int1, '', '', 'was inserted' 3012 FROM t0_template source_tab 3013WHERE MOD(f_int1,3) = 0 3014AND f_int1 BETWEEN @max_row_div2 AND @max_row 3015ON DUPLICATE KEY 3016UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 3017f_int2 = 2 * @max_row + source_tab.f_int1, 3018f_charbig = 'was updated'; 3019 3020# check unique-1-a success: 1 3021 3022# check unique-1-b success: 1 3023DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3024UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3025f_int2 = CAST(f_char1 AS SIGNED INT), 3026f_charbig = CONCAT('===',f_char1,'===') 3027WHERE f_charbig = 'was updated'; 3028REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3029SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 3030 FROM t0_template source_tab 3031WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3032 3033# check replace success: 1 3034DELETE FROM t1 3035WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 3036DELETE FROM t1 3037WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 3038f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 3039UPDATE t1 SET f_int2 = f_int1, 3040f_char1 = CAST(f_int1 AS CHAR), 3041f_char2 = CAST(f_int1 AS CHAR), 3042f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 3043WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 3044SET AUTOCOMMIT= 0; 3045INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3046SELECT f_int1, f_int1, '', '', 'was inserted' 3047FROM t0_template source_tab 3048WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3049 3050# check transactions-1 success: 1 3051COMMIT WORK; 3052 3053# check transactions-2 success: 1 3054ROLLBACK WORK; 3055 3056# check transactions-3 success: 1 3057DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3058COMMIT WORK; 3059ROLLBACK WORK; 3060 3061# check transactions-4 success: 1 3062INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3063SELECT f_int1, f_int1, '', '', 'was inserted' 3064FROM t0_template source_tab 3065WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3066 3067# check transactions-5 success: 1 3068ROLLBACK WORK; 3069 3070# check transactions-6 success: 1 3071# INFO: Storage engine used for t1 seems to be transactional. 3072COMMIT; 3073 3074# check transactions-7 success: 1 3075DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3076COMMIT WORK; 3077SET @@session.sql_mode = 'traditional'; 3078SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 3079INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3080SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 3081'', '', 'was inserted' FROM t0_template 3082WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3083ERROR 22012: Division by 0 3084COMMIT; 3085 3086# check transactions-8 success: 1 3087# INFO: Storage engine used for t1 seems to be able to revert 3088# changes made by the failing statement. 3089SET @@session.sql_mode = ''; 3090SET AUTOCOMMIT= 1; 3091DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3092COMMIT WORK; 3093UPDATE t1 SET f_charbig = REPEAT('b', 1000); 3094 3095# check special-1 success: 1 3096UPDATE t1 SET f_charbig = ''; 3097 3098# check special-2 success: 1 3099UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 3100INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3101SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 3102WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3103INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3104SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3105'just inserted' FROM t0_template 3106WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3107CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 3108BEGIN 3109UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3110f_charbig = 'updated by trigger' 3111 WHERE f_int1 = new.f_int1; 3112END| 3113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3114SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3115WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3116 3117# check trigger-1 success: 1 3118DROP TRIGGER trg_1; 3119UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3120f_int2 = CAST(f_char1 AS SIGNED INT), 3121f_charbig = 'just inserted' 3122 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3123DELETE FROM t0_aux 3124WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3126SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3127'just inserted' FROM t0_template 3128WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3129CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 3130BEGIN 3131UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3132f_charbig = 'updated by trigger' 3133 WHERE f_int1 = new.f_int1; 3134END| 3135INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3136SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3138 3139# check trigger-2 success: 1 3140DROP TRIGGER trg_1; 3141UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3142f_int2 = CAST(f_char1 AS SIGNED INT), 3143f_charbig = 'just inserted' 3144 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3145DELETE FROM t0_aux 3146WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3147INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3148SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3149'just inserted' FROM t0_template 3150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3151CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3152BEGIN 3153UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3154f_charbig = 'updated by trigger' 3155 WHERE f_int1 = new.f_int1; 3156END| 3157UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3158WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3159 3160# check trigger-3 success: 1 3161DROP TRIGGER trg_1; 3162UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3163f_int2 = CAST(f_char1 AS SIGNED INT), 3164f_charbig = 'just inserted' 3165 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3166DELETE FROM t0_aux 3167WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3168INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3169SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3170'just inserted' FROM t0_template 3171WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3172CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3173BEGIN 3174UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3175f_charbig = 'updated by trigger' 3176 WHERE f_int1 = - old.f_int1; 3177END| 3178UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3179WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3180 3181# check trigger-4 success: 1 3182DROP TRIGGER trg_1; 3183UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3184f_int2 = CAST(f_char1 AS SIGNED INT), 3185f_charbig = 'just inserted' 3186 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3187DELETE FROM t0_aux 3188WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3189INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3190SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3191'just inserted' FROM t0_template 3192WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3193CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3194BEGIN 3195UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3196f_charbig = 'updated by trigger' 3197 WHERE f_int1 = new.f_int1; 3198END| 3199UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3200WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3201 3202# check trigger-5 success: 1 3203DROP TRIGGER trg_1; 3204UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3205f_int2 = CAST(f_char1 AS SIGNED INT), 3206f_charbig = 'just inserted' 3207 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3208DELETE FROM t0_aux 3209WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3210INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3211SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3212'just inserted' FROM t0_template 3213WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3214CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3215BEGIN 3216UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3217f_charbig = 'updated by trigger' 3218 WHERE f_int1 = - old.f_int1; 3219END| 3220UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3221WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3222 3223# check trigger-6 success: 1 3224DROP TRIGGER trg_1; 3225UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3226f_int2 = CAST(f_char1 AS SIGNED INT), 3227f_charbig = 'just inserted' 3228 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3229DELETE FROM t0_aux 3230WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3231INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3232SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3233'just inserted' FROM t0_template 3234WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3235CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 3236BEGIN 3237UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3238f_charbig = 'updated by trigger' 3239 WHERE f_int1 = - old.f_int1; 3240END| 3241DELETE FROM t0_aux 3242WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3243 3244# check trigger-7 success: 1 3245DROP TRIGGER trg_1; 3246UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3247f_int2 = CAST(f_char1 AS SIGNED INT), 3248f_charbig = 'just inserted' 3249 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3250DELETE FROM t0_aux 3251WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3252INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3253SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3254'just inserted' FROM t0_template 3255WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3256CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 3257BEGIN 3258UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3259f_charbig = 'updated by trigger' 3260 WHERE f_int1 = - old.f_int1; 3261END| 3262DELETE FROM t0_aux 3263WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3264 3265# check trigger-8 success: 1 3266DROP TRIGGER trg_1; 3267UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3268f_int2 = CAST(f_char1 AS SIGNED INT), 3269f_charbig = 'just inserted' 3270 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3271DELETE FROM t0_aux 3272WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3273DELETE FROM t1 3274WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3275CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3276BEGIN 3277SET new.f_int1 = old.f_int1 + @max_row, 3278new.f_int2 = old.f_int2 - @max_row, 3279new.f_charbig = '####updated per update trigger####'; 3280END| 3281UPDATE t1 3282SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3283f_charbig = '####updated per update statement itself####'; 3284 3285# check trigger-9 success: 1 3286DROP TRIGGER trg_2; 3287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3288f_int2 = CAST(f_char1 AS SIGNED INT), 3289f_charbig = CONCAT('===',f_char1,'==='); 3290CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3291BEGIN 3292SET new.f_int1 = new.f_int1 + @max_row, 3293new.f_int2 = new.f_int2 - @max_row, 3294new.f_charbig = '####updated per update trigger####'; 3295END| 3296UPDATE t1 3297SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3298f_charbig = '####updated per update statement itself####'; 3299 3300# check trigger-10 success: 1 3301DROP TRIGGER trg_2; 3302UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3303f_int2 = CAST(f_char1 AS SIGNED INT), 3304f_charbig = CONCAT('===',f_char1,'==='); 3305CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3306BEGIN 3307SET new.f_int1 = @my_max1 + @counter, 3308new.f_int2 = @my_min2 - @counter, 3309new.f_charbig = '####updated per insert trigger####'; 3310SET @counter = @counter + 1; 3311END| 3312SET @counter = 1; 3313SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3314INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3315SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3316CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3317WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3318ORDER BY f_int1; 3319DROP TRIGGER trg_3; 3320 3321# check trigger-11 success: 1 3322DELETE FROM t1 3323WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3324AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3325AND f_charbig = '####updated per insert trigger####'; 3326CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3327BEGIN 3328SET new.f_int1 = @my_max1 + @counter, 3329new.f_int2 = @my_min2 - @counter, 3330new.f_charbig = '####updated per insert trigger####'; 3331SET @counter = @counter + 1; 3332END| 3333SET @counter = 1; 3334SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3335INSERT INTO t1 (f_char1, f_char2, f_charbig) 3336SELECT CAST(f_int1 AS CHAR), 3337CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3338WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3339ORDER BY f_int1; 3340DROP TRIGGER trg_3; 3341 3342# check trigger-12 success: 1 3343DELETE FROM t1 3344WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3345AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3346AND f_charbig = '####updated per insert trigger####'; 3347ANALYZE TABLE t1; 3348Table Op Msg_type Msg_text 3349test.t1 analyze status OK 3350CHECK TABLE t1 EXTENDED; 3351Table Op Msg_type Msg_text 3352test.t1 check status OK 3353CHECKSUM TABLE t1 EXTENDED; 3354Table Checksum 3355test.t1 <some_value> 3356OPTIMIZE TABLE t1; 3357Table Op Msg_type Msg_text 3358test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 3359test.t1 optimize status OK 3360# check layout success: 1 3361REPAIR TABLE t1 EXTENDED; 3362Table Op Msg_type Msg_text 3363test.t1 repair status OK 3364# check layout success: 1 3365TRUNCATE t1; 3366 3367# check TRUNCATE success: 1 3368# check layout success: 1 3369# End usability test (inc/partition_check.inc) 3370DROP TABLE t1; 3371CREATE TABLE t1 ( 3372f_int1 INTEGER DEFAULT 0, 3373f_int2 INTEGER DEFAULT 0, 3374f_char1 CHAR(20), 3375f_char2 CHAR(20), 3376f_charbig VARCHAR(1000) 3377 3378) 3379PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 3380(PARTITION part1 VALUES IN (0) 3381(SUBPARTITION sp11, SUBPARTITION sp12), 3382PARTITION part2 VALUES IN (1) 3383(SUBPARTITION sp21, SUBPARTITION sp22), 3384PARTITION part3 VALUES IN (2) 3385(SUBPARTITION sp31, SUBPARTITION sp32), 3386PARTITION part4 VALUES IN (NULL) 3387(SUBPARTITION sp41, SUBPARTITION sp42)); 3388INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3389SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3390WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 3391ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 3392INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3393SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3394WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 3395# Start usability test (inc/partition_check.inc) 3396create_command 3397SHOW CREATE TABLE t1; 3398Table Create Table 3399t1 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 PARTITION BY LIST (abs(`f_int1` MOD 3)) 3408SUBPARTITION 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)) 3421 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 3426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3427SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3428CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 3429WHERE f_int1 IN (2,3); 3430ERROR 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 3433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3434SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3435CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3436WHERE f_int1 IN (2,3); 3437DELETE FROM t1 WHERE f_charbig = 'delete me'; 3438INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3439SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3440CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3441WHERE f_int1 IN (2,3); 3442DELETE FROM t1 WHERE f_charbig = 'delete me'; 3443# check read via f_int1 success: 1 3444# check read via f_int2 success: 1 3445 3446# check multiple-1 success: 1 3447DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 3448 3449# check multiple-2 success: 1 3450INSERT INTO t1 SELECT * FROM t0_template 3451WHERE MOD(f_int1,3) = 0; 3452 3453# check multiple-3 success: 1 3454UPDATE t1 SET f_int1 = f_int1 + @max_row 3455WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 3456AND @max_row_div2 + @max_row_div4; 3457 3458# check multiple-4 success: 1 3459DELETE FROM t1 3460WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 3461AND @max_row_div2 + @max_row_div4 + @max_row; 3462 3463# check multiple-5 success: 1 3464SELECT COUNT(*) INTO @try_count FROM t0_template 3465WHERE MOD(f_int1,3) = 0 3466AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3467SELECT COUNT(*) INTO @clash_count 3468FROM t1 INNER JOIN t0_template USING(f_int1) 3469WHERE MOD(f_int1,3) = 0 3470AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3471SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 3472INSERT INTO t1 3473SET f_int1 = @cur_value , f_int2 = @cur_value, 3474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3475f_charbig = '#SINGLE#'; 3476 3477# check single-1 success: 1 3478SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 3479INSERT INTO t1 3480SET f_int1 = @cur_value , f_int2 = @cur_value, 3481f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3482f_charbig = '#SINGLE#'; 3483 3484# check single-2 success: 1 3485SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 3486SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 3487UPDATE t1 SET f_int1 = @cur_value2 3488WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 3489 3490# check single-3 success: 1 3491SET @cur_value1= -1; 3492SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 3493UPDATE t1 SET f_int1 = @cur_value1 3494WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 3495 3496# check single-4 success: 1 3497SELECT MAX(f_int1) INTO @cur_value FROM t1; 3498DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 3499 3500# check single-5 success: 1 3501DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 3502 3503# check single-6 success: 1 3504INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 3505 3506# check single-7 success: 1 3507DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 3508DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 3509INSERT t1 SET f_int1 = 0 , f_int2 = 0, 3510f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 3511f_charbig = '#NULL#'; 3512INSERT INTO t1 3513SET f_int1 = NULL , f_int2 = -@max_row, 3514f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 3515f_charbig = '#NULL#'; 3516ERROR 23000: Column 'f_int1' cannot be null 3517# check null success: 1 3518DELETE FROM t1 3519WHERE f_int1 = 0 AND f_int2 = 0 3520AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 3521AND f_charbig = '#NULL#'; 3522INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3523SELECT f_int1, f_int1, '', '', 'was inserted' 3524 FROM t0_template source_tab 3525WHERE MOD(f_int1,3) = 0 3526AND f_int1 BETWEEN @max_row_div2 AND @max_row 3527ON DUPLICATE KEY 3528UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 3529f_int2 = 2 * @max_row + source_tab.f_int1, 3530f_charbig = 'was updated'; 3531 3532# check unique-1-a success: 1 3533 3534# check unique-1-b success: 1 3535DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3536UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3537f_int2 = CAST(f_char1 AS SIGNED INT), 3538f_charbig = CONCAT('===',f_char1,'===') 3539WHERE f_charbig = 'was updated'; 3540REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3541SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 3542 FROM t0_template source_tab 3543WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3544 3545# check replace success: 1 3546DELETE FROM t1 3547WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 3548DELETE FROM t1 3549WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 3550f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 3551UPDATE t1 SET f_int2 = f_int1, 3552f_char1 = CAST(f_int1 AS CHAR), 3553f_char2 = CAST(f_int1 AS CHAR), 3554f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 3555WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 3556SET AUTOCOMMIT= 0; 3557INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3558SELECT f_int1, f_int1, '', '', 'was inserted' 3559FROM t0_template source_tab 3560WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3561 3562# check transactions-1 success: 1 3563COMMIT WORK; 3564 3565# check transactions-2 success: 1 3566ROLLBACK WORK; 3567 3568# check transactions-3 success: 1 3569DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3570COMMIT WORK; 3571ROLLBACK WORK; 3572 3573# check transactions-4 success: 1 3574INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3575SELECT f_int1, f_int1, '', '', 'was inserted' 3576FROM t0_template source_tab 3577WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3578 3579# check transactions-5 success: 1 3580ROLLBACK WORK; 3581 3582# check transactions-6 success: 1 3583# INFO: Storage engine used for t1 seems to be transactional. 3584COMMIT; 3585 3586# check transactions-7 success: 1 3587DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3588COMMIT WORK; 3589SET @@session.sql_mode = 'traditional'; 3590SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 3591INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3592SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 3593'', '', 'was inserted' FROM t0_template 3594WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3595ERROR 22012: Division by 0 3596COMMIT; 3597 3598# check transactions-8 success: 1 3599# INFO: Storage engine used for t1 seems to be able to revert 3600# changes made by the failing statement. 3601SET @@session.sql_mode = ''; 3602SET AUTOCOMMIT= 1; 3603DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3604COMMIT WORK; 3605UPDATE t1 SET f_charbig = REPEAT('b', 1000); 3606 3607# check special-1 success: 1 3608UPDATE t1 SET f_charbig = ''; 3609 3610# check special-2 success: 1 3611UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 3612INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3613SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 3614WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3617'just inserted' FROM t0_template 3618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3619CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 3620BEGIN 3621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3622f_charbig = 'updated by trigger' 3623 WHERE f_int1 = new.f_int1; 3624END| 3625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3628 3629# check trigger-1 success: 1 3630DROP TRIGGER trg_1; 3631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3632f_int2 = CAST(f_char1 AS SIGNED INT), 3633f_charbig = 'just inserted' 3634 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3635DELETE FROM t0_aux 3636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3639'just inserted' FROM t0_template 3640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3641CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 3642BEGIN 3643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3644f_charbig = 'updated by trigger' 3645 WHERE f_int1 = new.f_int1; 3646END| 3647INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3648SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3649WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3650 3651# check trigger-2 success: 1 3652DROP TRIGGER trg_1; 3653UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3654f_int2 = CAST(f_char1 AS SIGNED INT), 3655f_charbig = 'just inserted' 3656 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3657DELETE FROM t0_aux 3658WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3659INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3660SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3661'just inserted' FROM t0_template 3662WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3663CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3664BEGIN 3665UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3666f_charbig = 'updated by trigger' 3667 WHERE f_int1 = new.f_int1; 3668END| 3669UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3670WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3671 3672# check trigger-3 success: 1 3673DROP TRIGGER trg_1; 3674UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3675f_int2 = CAST(f_char1 AS SIGNED INT), 3676f_charbig = 'just inserted' 3677 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3678DELETE FROM t0_aux 3679WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3680INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3681SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3682'just inserted' FROM t0_template 3683WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3684CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3685BEGIN 3686UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3687f_charbig = 'updated by trigger' 3688 WHERE f_int1 = - old.f_int1; 3689END| 3690UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3691WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3692 3693# check trigger-4 success: 1 3694DROP TRIGGER trg_1; 3695UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3696f_int2 = CAST(f_char1 AS SIGNED INT), 3697f_charbig = 'just inserted' 3698 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3699DELETE FROM t0_aux 3700WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3701INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3702SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3703'just inserted' FROM t0_template 3704WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3705CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3706BEGIN 3707UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3708f_charbig = 'updated by trigger' 3709 WHERE f_int1 = new.f_int1; 3710END| 3711UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3712WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3713 3714# check trigger-5 success: 1 3715DROP TRIGGER trg_1; 3716UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3717f_int2 = CAST(f_char1 AS SIGNED INT), 3718f_charbig = 'just inserted' 3719 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3720DELETE FROM t0_aux 3721WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3722INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3723SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3724'just inserted' FROM t0_template 3725WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3726CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3727BEGIN 3728UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3729f_charbig = 'updated by trigger' 3730 WHERE f_int1 = - old.f_int1; 3731END| 3732UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3733WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3734 3735# check trigger-6 success: 1 3736DROP TRIGGER trg_1; 3737UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3738f_int2 = CAST(f_char1 AS SIGNED INT), 3739f_charbig = 'just inserted' 3740 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3741DELETE FROM t0_aux 3742WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3743INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3744SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3745'just inserted' FROM t0_template 3746WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3747CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 3748BEGIN 3749UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3750f_charbig = 'updated by trigger' 3751 WHERE f_int1 = - old.f_int1; 3752END| 3753DELETE FROM t0_aux 3754WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3755 3756# check trigger-7 success: 1 3757DROP TRIGGER trg_1; 3758UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3759f_int2 = CAST(f_char1 AS SIGNED INT), 3760f_charbig = 'just inserted' 3761 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3762DELETE FROM t0_aux 3763WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3764INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3765SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3766'just inserted' FROM t0_template 3767WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3768CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 3769BEGIN 3770UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3771f_charbig = 'updated by trigger' 3772 WHERE f_int1 = - old.f_int1; 3773END| 3774DELETE FROM t0_aux 3775WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3776 3777# check trigger-8 success: 1 3778DROP TRIGGER trg_1; 3779UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3780f_int2 = CAST(f_char1 AS SIGNED INT), 3781f_charbig = 'just inserted' 3782 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3783DELETE FROM t0_aux 3784WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3785DELETE FROM t1 3786WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3787CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3788BEGIN 3789SET new.f_int1 = old.f_int1 + @max_row, 3790new.f_int2 = old.f_int2 - @max_row, 3791new.f_charbig = '####updated per update trigger####'; 3792END| 3793UPDATE t1 3794SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3795f_charbig = '####updated per update statement itself####'; 3796 3797# check trigger-9 success: 1 3798DROP TRIGGER trg_2; 3799UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3800f_int2 = CAST(f_char1 AS SIGNED INT), 3801f_charbig = CONCAT('===',f_char1,'==='); 3802CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3803BEGIN 3804SET new.f_int1 = new.f_int1 + @max_row, 3805new.f_int2 = new.f_int2 - @max_row, 3806new.f_charbig = '####updated per update trigger####'; 3807END| 3808UPDATE t1 3809SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3810f_charbig = '####updated per update statement itself####'; 3811 3812# check trigger-10 success: 1 3813DROP TRIGGER trg_2; 3814UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3815f_int2 = CAST(f_char1 AS SIGNED INT), 3816f_charbig = CONCAT('===',f_char1,'==='); 3817CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3818BEGIN 3819SET new.f_int1 = @my_max1 + @counter, 3820new.f_int2 = @my_min2 - @counter, 3821new.f_charbig = '####updated per insert trigger####'; 3822SET @counter = @counter + 1; 3823END| 3824SET @counter = 1; 3825SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3826INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3827SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3828CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3830ORDER BY f_int1; 3831DROP TRIGGER trg_3; 3832 3833# check trigger-11 success: 1 3834DELETE FROM t1 3835WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3836AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3837AND f_charbig = '####updated per insert trigger####'; 3838CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3839BEGIN 3840SET new.f_int1 = @my_max1 + @counter, 3841new.f_int2 = @my_min2 - @counter, 3842new.f_charbig = '####updated per insert trigger####'; 3843SET @counter = @counter + 1; 3844END| 3845SET @counter = 1; 3846SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3847INSERT INTO t1 (f_char1, f_char2, f_charbig) 3848SELECT CAST(f_int1 AS CHAR), 3849CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3850WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3851ORDER BY f_int1; 3852DROP TRIGGER trg_3; 3853 3854# check trigger-12 success: 1 3855DELETE FROM t1 3856WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3857AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3858AND f_charbig = '####updated per insert trigger####'; 3859ANALYZE TABLE t1; 3860Table Op Msg_type Msg_text 3861test.t1 analyze status OK 3862CHECK TABLE t1 EXTENDED; 3863Table Op Msg_type Msg_text 3864test.t1 check status OK 3865CHECKSUM TABLE t1 EXTENDED; 3866Table Checksum 3867test.t1 <some_value> 3868OPTIMIZE TABLE t1; 3869Table Op Msg_type Msg_text 3870test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 3871test.t1 optimize status OK 3872# check layout success: 1 3873REPAIR TABLE t1 EXTENDED; 3874Table Op Msg_type Msg_text 3875test.t1 repair status OK 3876# check layout success: 1 3877TRUNCATE t1; 3878 3879# check TRUNCATE success: 1 3880# check layout success: 1 3881# End usability test (inc/partition_check.inc) 3882DROP TABLE t1; 3883CREATE TABLE t1 ( 3884f_int1 INTEGER DEFAULT 0, 3885f_int2 INTEGER DEFAULT 0, 3886f_char1 CHAR(20), 3887f_char2 CHAR(20), 3888f_charbig VARCHAR(1000) 3889 3890) 3891PARTITION BY LIST(ABS(MOD(f_int1,2))) 3892SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 3893(PARTITION part1 VALUES IN (0), 3894PARTITION part2 VALUES IN (1), 3895PARTITION part3 VALUES IN (NULL)); 3896INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3897SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3898WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 3899ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2); 3900INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3901SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3902WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 3903# Start usability test (inc/partition_check.inc) 3904create_command 3905SHOW CREATE TABLE t1; 3906Table Create Table 3907t1 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 PARTITION BY LIST (abs(`f_int1` MOD 2)) 3916SUBPARTITION BY KEY (`f_int1`) 3917SUBPARTITIONS 3 3918(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB, 3919 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB, 3920 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB) 3921 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 3926INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3927SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3928CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 3929WHERE f_int1 IN (2,3); 3930ERROR 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 3933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3934SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3935CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3936WHERE f_int1 IN (2,3); 3937DELETE FROM t1 WHERE f_charbig = 'delete me'; 3938INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3939SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3940CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3941WHERE f_int1 IN (2,3); 3942DELETE FROM t1 WHERE f_charbig = 'delete me'; 3943# check read via f_int1 success: 1 3944# check read via f_int2 success: 1 3945 3946# check multiple-1 success: 1 3947DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 3948 3949# check multiple-2 success: 1 3950INSERT INTO t1 SELECT * FROM t0_template 3951WHERE MOD(f_int1,3) = 0; 3952 3953# check multiple-3 success: 1 3954UPDATE t1 SET f_int1 = f_int1 + @max_row 3955WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 3956AND @max_row_div2 + @max_row_div4; 3957 3958# check multiple-4 success: 1 3959DELETE FROM t1 3960WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 3961AND @max_row_div2 + @max_row_div4 + @max_row; 3962 3963# check multiple-5 success: 1 3964SELECT COUNT(*) INTO @try_count FROM t0_template 3965WHERE MOD(f_int1,3) = 0 3966AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3967SELECT COUNT(*) INTO @clash_count 3968FROM t1 INNER JOIN t0_template USING(f_int1) 3969WHERE MOD(f_int1,3) = 0 3970AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3971SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 3972INSERT INTO t1 3973SET f_int1 = @cur_value , f_int2 = @cur_value, 3974f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3975f_charbig = '#SINGLE#'; 3976 3977# check single-1 success: 1 3978SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 3979INSERT INTO t1 3980SET f_int1 = @cur_value , f_int2 = @cur_value, 3981f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3982f_charbig = '#SINGLE#'; 3983 3984# check single-2 success: 1 3985SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 3986SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 3987UPDATE t1 SET f_int1 = @cur_value2 3988WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 3989 3990# check single-3 success: 1 3991SET @cur_value1= -1; 3992SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 3993UPDATE t1 SET f_int1 = @cur_value1 3994WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 3995 3996# check single-4 success: 1 3997SELECT MAX(f_int1) INTO @cur_value FROM t1; 3998DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 3999 4000# check single-5 success: 1 4001DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 4002 4003# check single-6 success: 1 4004INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 4005 4006# check single-7 success: 1 4007DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 4008DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 4009INSERT t1 SET f_int1 = 0 , f_int2 = 0, 4010f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 4011f_charbig = '#NULL#'; 4012INSERT INTO t1 4013SET f_int1 = NULL , f_int2 = -@max_row, 4014f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 4015f_charbig = '#NULL#'; 4016ERROR 23000: Column 'f_int1' cannot be null 4017# check null success: 1 4018DELETE FROM t1 4019WHERE f_int1 = 0 AND f_int2 = 0 4020AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 4021AND f_charbig = '#NULL#'; 4022INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4023SELECT f_int1, f_int1, '', '', 'was inserted' 4024 FROM t0_template source_tab 4025WHERE MOD(f_int1,3) = 0 4026AND f_int1 BETWEEN @max_row_div2 AND @max_row 4027ON DUPLICATE KEY 4028UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 4029f_int2 = 2 * @max_row + source_tab.f_int1, 4030f_charbig = 'was updated'; 4031 4032# check unique-1-a success: 1 4033 4034# check unique-1-b success: 1 4035DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4036UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4037f_int2 = CAST(f_char1 AS SIGNED INT), 4038f_charbig = CONCAT('===',f_char1,'===') 4039WHERE f_charbig = 'was updated'; 4040REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4041SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 4042 FROM t0_template source_tab 4043WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4044 4045# check replace success: 1 4046DELETE FROM t1 4047WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 4048DELETE FROM t1 4049WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 4050f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 4051UPDATE t1 SET f_int2 = f_int1, 4052f_char1 = CAST(f_int1 AS CHAR), 4053f_char2 = CAST(f_int1 AS CHAR), 4054f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 4055WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 4056SET AUTOCOMMIT= 0; 4057INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4058SELECT f_int1, f_int1, '', '', 'was inserted' 4059FROM t0_template source_tab 4060WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4061 4062# check transactions-1 success: 1 4063COMMIT WORK; 4064 4065# check transactions-2 success: 1 4066ROLLBACK WORK; 4067 4068# check transactions-3 success: 1 4069DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4070COMMIT WORK; 4071ROLLBACK WORK; 4072 4073# check transactions-4 success: 1 4074INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4075SELECT f_int1, f_int1, '', '', 'was inserted' 4076FROM t0_template source_tab 4077WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4078 4079# check transactions-5 success: 1 4080ROLLBACK WORK; 4081 4082# check transactions-6 success: 1 4083# INFO: Storage engine used for t1 seems to be transactional. 4084COMMIT; 4085 4086# check transactions-7 success: 1 4087DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4088COMMIT WORK; 4089SET @@session.sql_mode = 'traditional'; 4090SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 4091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4092SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 4093'', '', 'was inserted' FROM t0_template 4094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4095ERROR 22012: Division by 0 4096COMMIT; 4097 4098# check transactions-8 success: 1 4099# INFO: Storage engine used for t1 seems to be able to revert 4100# changes made by the failing statement. 4101SET @@session.sql_mode = ''; 4102SET AUTOCOMMIT= 1; 4103DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4104COMMIT WORK; 4105UPDATE t1 SET f_charbig = REPEAT('b', 1000); 4106 4107# check special-1 success: 1 4108UPDATE t1 SET f_charbig = ''; 4109 4110# check special-2 success: 1 4111UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 4112INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4113SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 4114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4115INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4116SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4117'just inserted' FROM t0_template 4118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4119CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 4120BEGIN 4121UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4122f_charbig = 'updated by trigger' 4123 WHERE f_int1 = new.f_int1; 4124END| 4125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4126SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4127WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4128 4129# check trigger-1 success: 1 4130DROP TRIGGER trg_1; 4131UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4132f_int2 = CAST(f_char1 AS SIGNED INT), 4133f_charbig = 'just inserted' 4134 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4135DELETE FROM t0_aux 4136WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4137INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4138SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4139'just inserted' FROM t0_template 4140WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4141CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 4142BEGIN 4143UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4144f_charbig = 'updated by trigger' 4145 WHERE f_int1 = new.f_int1; 4146END| 4147INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4148SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4149WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4150 4151# check trigger-2 success: 1 4152DROP TRIGGER trg_1; 4153UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4154f_int2 = CAST(f_char1 AS SIGNED INT), 4155f_charbig = 'just inserted' 4156 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4157DELETE FROM t0_aux 4158WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4159INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4160SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4161'just inserted' FROM t0_template 4162WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4163CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4164BEGIN 4165UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4166f_charbig = 'updated by trigger' 4167 WHERE f_int1 = new.f_int1; 4168END| 4169UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4170WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4171 4172# check trigger-3 success: 1 4173DROP TRIGGER trg_1; 4174UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4175f_int2 = CAST(f_char1 AS SIGNED INT), 4176f_charbig = 'just inserted' 4177 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4178DELETE FROM t0_aux 4179WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4180INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4181SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4182'just inserted' FROM t0_template 4183WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4184CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4185BEGIN 4186UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4187f_charbig = 'updated by trigger' 4188 WHERE f_int1 = - old.f_int1; 4189END| 4190UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4191WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4192 4193# check trigger-4 success: 1 4194DROP TRIGGER trg_1; 4195UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4196f_int2 = CAST(f_char1 AS SIGNED INT), 4197f_charbig = 'just inserted' 4198 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4199DELETE FROM t0_aux 4200WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4201INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4202SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4203'just inserted' FROM t0_template 4204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4205CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4206BEGIN 4207UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4208f_charbig = 'updated by trigger' 4209 WHERE f_int1 = new.f_int1; 4210END| 4211UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4212WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4213 4214# check trigger-5 success: 1 4215DROP TRIGGER trg_1; 4216UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4217f_int2 = CAST(f_char1 AS SIGNED INT), 4218f_charbig = 'just inserted' 4219 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4220DELETE FROM t0_aux 4221WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4222INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4223SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4224'just inserted' FROM t0_template 4225WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4226CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4227BEGIN 4228UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4229f_charbig = 'updated by trigger' 4230 WHERE f_int1 = - old.f_int1; 4231END| 4232UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4233WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4234 4235# check trigger-6 success: 1 4236DROP TRIGGER trg_1; 4237UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4238f_int2 = CAST(f_char1 AS SIGNED INT), 4239f_charbig = 'just inserted' 4240 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4241DELETE FROM t0_aux 4242WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4243INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4244SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4245'just inserted' FROM t0_template 4246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4247CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 4248BEGIN 4249UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4250f_charbig = 'updated by trigger' 4251 WHERE f_int1 = - old.f_int1; 4252END| 4253DELETE FROM t0_aux 4254WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4255 4256# check trigger-7 success: 1 4257DROP TRIGGER trg_1; 4258UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4259f_int2 = CAST(f_char1 AS SIGNED INT), 4260f_charbig = 'just inserted' 4261 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4262DELETE FROM t0_aux 4263WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4264INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4265SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4266'just inserted' FROM t0_template 4267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4268CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 4269BEGIN 4270UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4271f_charbig = 'updated by trigger' 4272 WHERE f_int1 = - old.f_int1; 4273END| 4274DELETE FROM t0_aux 4275WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4276 4277# check trigger-8 success: 1 4278DROP TRIGGER trg_1; 4279UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4280f_int2 = CAST(f_char1 AS SIGNED INT), 4281f_charbig = 'just inserted' 4282 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4283DELETE FROM t0_aux 4284WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4285DELETE FROM t1 4286WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4287CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4288BEGIN 4289SET new.f_int1 = old.f_int1 + @max_row, 4290new.f_int2 = old.f_int2 - @max_row, 4291new.f_charbig = '####updated per update trigger####'; 4292END| 4293UPDATE t1 4294SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4295f_charbig = '####updated per update statement itself####'; 4296 4297# check trigger-9 success: 1 4298DROP TRIGGER trg_2; 4299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4300f_int2 = CAST(f_char1 AS SIGNED INT), 4301f_charbig = CONCAT('===',f_char1,'==='); 4302CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4303BEGIN 4304SET new.f_int1 = new.f_int1 + @max_row, 4305new.f_int2 = new.f_int2 - @max_row, 4306new.f_charbig = '####updated per update trigger####'; 4307END| 4308UPDATE t1 4309SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4310f_charbig = '####updated per update statement itself####'; 4311 4312# check trigger-10 success: 1 4313DROP TRIGGER trg_2; 4314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4315f_int2 = CAST(f_char1 AS SIGNED INT), 4316f_charbig = CONCAT('===',f_char1,'==='); 4317CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4318BEGIN 4319SET new.f_int1 = @my_max1 + @counter, 4320new.f_int2 = @my_min2 - @counter, 4321new.f_charbig = '####updated per insert trigger####'; 4322SET @counter = @counter + 1; 4323END| 4324SET @counter = 1; 4325SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4326INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4327SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4328CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4329WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4330ORDER BY f_int1; 4331DROP TRIGGER trg_3; 4332 4333# check trigger-11 success: 1 4334DELETE FROM t1 4335WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4336AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4337AND f_charbig = '####updated per insert trigger####'; 4338CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4339BEGIN 4340SET new.f_int1 = @my_max1 + @counter, 4341new.f_int2 = @my_min2 - @counter, 4342new.f_charbig = '####updated per insert trigger####'; 4343SET @counter = @counter + 1; 4344END| 4345SET @counter = 1; 4346SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4347INSERT INTO t1 (f_char1, f_char2, f_charbig) 4348SELECT CAST(f_int1 AS CHAR), 4349CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4351ORDER BY f_int1; 4352DROP TRIGGER trg_3; 4353 4354# check trigger-12 success: 1 4355DELETE FROM t1 4356WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4357AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4358AND f_charbig = '####updated per insert trigger####'; 4359ANALYZE TABLE t1; 4360Table Op Msg_type Msg_text 4361test.t1 analyze status OK 4362CHECK TABLE t1 EXTENDED; 4363Table Op Msg_type Msg_text 4364test.t1 check status OK 4365CHECKSUM TABLE t1 EXTENDED; 4366Table Checksum 4367test.t1 <some_value> 4368OPTIMIZE TABLE t1; 4369Table Op Msg_type Msg_text 4370test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 4371test.t1 optimize status OK 4372# check layout success: 1 4373REPAIR TABLE t1 EXTENDED; 4374Table Op Msg_type Msg_text 4375test.t1 repair status OK 4376# check layout success: 1 4377TRUNCATE t1; 4378 4379# check TRUNCATE success: 1 4380# check layout success: 1 4381# End usability test (inc/partition_check.inc) 4382DROP TABLE t1; 4383DROP TABLE IF EXISTS t1; 4384CREATE TABLE t1 ( 4385f_int1 INTEGER DEFAULT 0, 4386f_int2 INTEGER DEFAULT 0, 4387f_char1 CHAR(20), 4388f_char2 CHAR(20), 4389f_charbig VARCHAR(1000) 4390 4391) 4392PARTITION BY HASH(f_int1) PARTITIONS 2; 4393INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4394SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4395WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 4396ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 4397INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4398SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4399WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 4400# Start usability test (inc/partition_check.inc) 4401create_command 4402SHOW CREATE TABLE t1; 4403Table Create Table 4404t1 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 PARTITION BY HASH (`f_int1`) 4413PARTITIONS 2 4414 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 4419INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4420SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4421CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 4422WHERE f_int1 IN (2,3); 4423ERROR 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 4426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4427SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4428CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4429WHERE f_int1 IN (2,3); 4430DELETE FROM t1 WHERE f_charbig = 'delete me'; 4431INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4432SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4433CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4434WHERE f_int1 IN (2,3); 4435DELETE FROM t1 WHERE f_charbig = 'delete me'; 4436# check read via f_int1 success: 1 4437# check read via f_int2 success: 1 4438 4439# check multiple-1 success: 1 4440DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 4441 4442# check multiple-2 success: 1 4443INSERT INTO t1 SELECT * FROM t0_template 4444WHERE MOD(f_int1,3) = 0; 4445 4446# check multiple-3 success: 1 4447UPDATE t1 SET f_int1 = f_int1 + @max_row 4448WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 4449AND @max_row_div2 + @max_row_div4; 4450 4451# check multiple-4 success: 1 4452DELETE FROM t1 4453WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 4454AND @max_row_div2 + @max_row_div4 + @max_row; 4455 4456# check multiple-5 success: 1 4457SELECT COUNT(*) INTO @try_count FROM t0_template 4458WHERE MOD(f_int1,3) = 0 4459AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4460SELECT COUNT(*) INTO @clash_count 4461FROM t1 INNER JOIN t0_template USING(f_int1) 4462WHERE MOD(f_int1,3) = 0 4463AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4464SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 4465INSERT INTO t1 4466SET f_int1 = @cur_value , f_int2 = @cur_value, 4467f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4468f_charbig = '#SINGLE#'; 4469 4470# check single-1 success: 1 4471SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 4472INSERT INTO t1 4473SET f_int1 = @cur_value , f_int2 = @cur_value, 4474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4475f_charbig = '#SINGLE#'; 4476 4477# check single-2 success: 1 4478SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 4479SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 4480UPDATE t1 SET f_int1 = @cur_value2 4481WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 4482 4483# check single-3 success: 1 4484SET @cur_value1= -1; 4485SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 4486UPDATE t1 SET f_int1 = @cur_value1 4487WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 4488 4489# check single-4 success: 1 4490SELECT MAX(f_int1) INTO @cur_value FROM t1; 4491DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 4492 4493# check single-5 success: 1 4494DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 4495 4496# check single-6 success: 1 4497INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 4498 4499# check single-7 success: 1 4500DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 4501DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 4502INSERT t1 SET f_int1 = 0 , f_int2 = 0, 4503f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 4504f_charbig = '#NULL#'; 4505INSERT INTO t1 4506SET f_int1 = NULL , f_int2 = -@max_row, 4507f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 4508f_charbig = '#NULL#'; 4509ERROR 23000: Column 'f_int1' cannot be null 4510# check null success: 1 4511DELETE FROM t1 4512WHERE f_int1 = 0 AND f_int2 = 0 4513AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 4514AND f_charbig = '#NULL#'; 4515INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4516SELECT f_int1, f_int1, '', '', 'was inserted' 4517 FROM t0_template source_tab 4518WHERE MOD(f_int1,3) = 0 4519AND f_int1 BETWEEN @max_row_div2 AND @max_row 4520ON DUPLICATE KEY 4521UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 4522f_int2 = 2 * @max_row + source_tab.f_int1, 4523f_charbig = 'was updated'; 4524 4525# check unique-1-a success: 1 4526 4527# check unique-1-b success: 1 4528DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4529UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4530f_int2 = CAST(f_char1 AS SIGNED INT), 4531f_charbig = CONCAT('===',f_char1,'===') 4532WHERE f_charbig = 'was updated'; 4533REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4534SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 4535 FROM t0_template source_tab 4536WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4537 4538# check replace success: 1 4539DELETE FROM t1 4540WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 4541DELETE FROM t1 4542WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 4543f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 4544UPDATE t1 SET f_int2 = f_int1, 4545f_char1 = CAST(f_int1 AS CHAR), 4546f_char2 = CAST(f_int1 AS CHAR), 4547f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 4548WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 4549SET AUTOCOMMIT= 0; 4550INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4551SELECT f_int1, f_int1, '', '', 'was inserted' 4552FROM t0_template source_tab 4553WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4554 4555# check transactions-1 success: 1 4556COMMIT WORK; 4557 4558# check transactions-2 success: 1 4559ROLLBACK WORK; 4560 4561# check transactions-3 success: 1 4562DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4563COMMIT WORK; 4564ROLLBACK WORK; 4565 4566# check transactions-4 success: 1 4567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4568SELECT f_int1, f_int1, '', '', 'was inserted' 4569FROM t0_template source_tab 4570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4571 4572# check transactions-5 success: 1 4573ROLLBACK WORK; 4574 4575# check transactions-6 success: 1 4576# INFO: Storage engine used for t1 seems to be transactional. 4577COMMIT; 4578 4579# check transactions-7 success: 1 4580DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4581COMMIT WORK; 4582SET @@session.sql_mode = 'traditional'; 4583SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 4584INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4585SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 4586'', '', 'was inserted' FROM t0_template 4587WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4588ERROR 22012: Division by 0 4589COMMIT; 4590 4591# check transactions-8 success: 1 4592# INFO: Storage engine used for t1 seems to be able to revert 4593# changes made by the failing statement. 4594SET @@session.sql_mode = ''; 4595SET AUTOCOMMIT= 1; 4596DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4597COMMIT WORK; 4598UPDATE t1 SET f_charbig = REPEAT('b', 1000); 4599 4600# check special-1 success: 1 4601UPDATE t1 SET f_charbig = ''; 4602 4603# check special-2 success: 1 4604UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 4605INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4606SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 4607WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4610'just inserted' FROM t0_template 4611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4612CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 4613BEGIN 4614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4615f_charbig = 'updated by trigger' 4616 WHERE f_int1 = new.f_int1; 4617END| 4618INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4619SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4621 4622# check trigger-1 success: 1 4623DROP TRIGGER trg_1; 4624UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4625f_int2 = CAST(f_char1 AS SIGNED INT), 4626f_charbig = 'just inserted' 4627 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4628DELETE FROM t0_aux 4629WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4630INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4631SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4632'just inserted' FROM t0_template 4633WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4634CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 4635BEGIN 4636UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4637f_charbig = 'updated by trigger' 4638 WHERE f_int1 = new.f_int1; 4639END| 4640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4641SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4643 4644# check trigger-2 success: 1 4645DROP TRIGGER trg_1; 4646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4647f_int2 = CAST(f_char1 AS SIGNED INT), 4648f_charbig = 'just inserted' 4649 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4650DELETE FROM t0_aux 4651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4654'just inserted' FROM t0_template 4655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4656CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4657BEGIN 4658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4659f_charbig = 'updated by trigger' 4660 WHERE f_int1 = new.f_int1; 4661END| 4662UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4663WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4664 4665# check trigger-3 success: 1 4666DROP TRIGGER trg_1; 4667UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4668f_int2 = CAST(f_char1 AS SIGNED INT), 4669f_charbig = 'just inserted' 4670 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4671DELETE FROM t0_aux 4672WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4674SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4675'just inserted' FROM t0_template 4676WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4677CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4678BEGIN 4679UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4680f_charbig = 'updated by trigger' 4681 WHERE f_int1 = - old.f_int1; 4682END| 4683UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4684WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4685 4686# check trigger-4 success: 1 4687DROP TRIGGER trg_1; 4688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4689f_int2 = CAST(f_char1 AS SIGNED INT), 4690f_charbig = 'just inserted' 4691 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4692DELETE FROM t0_aux 4693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4696'just inserted' FROM t0_template 4697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4698CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4699BEGIN 4700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4701f_charbig = 'updated by trigger' 4702 WHERE f_int1 = new.f_int1; 4703END| 4704UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4705WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4706 4707# check trigger-5 success: 1 4708DROP TRIGGER trg_1; 4709UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4710f_int2 = CAST(f_char1 AS SIGNED INT), 4711f_charbig = 'just inserted' 4712 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4713DELETE FROM t0_aux 4714WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4715INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4716SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4717'just inserted' FROM t0_template 4718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4719CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4720BEGIN 4721UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4722f_charbig = 'updated by trigger' 4723 WHERE f_int1 = - old.f_int1; 4724END| 4725UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4726WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4727 4728# check trigger-6 success: 1 4729DROP TRIGGER trg_1; 4730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4731f_int2 = CAST(f_char1 AS SIGNED INT), 4732f_charbig = 'just inserted' 4733 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4734DELETE FROM t0_aux 4735WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4737SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4738'just inserted' FROM t0_template 4739WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4740CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 4741BEGIN 4742UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4743f_charbig = 'updated by trigger' 4744 WHERE f_int1 = - old.f_int1; 4745END| 4746DELETE FROM t0_aux 4747WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4748 4749# check trigger-7 success: 1 4750DROP TRIGGER trg_1; 4751UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4752f_int2 = CAST(f_char1 AS SIGNED INT), 4753f_charbig = 'just inserted' 4754 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4755DELETE FROM t0_aux 4756WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4757INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4758SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4759'just inserted' FROM t0_template 4760WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4761CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 4762BEGIN 4763UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4764f_charbig = 'updated by trigger' 4765 WHERE f_int1 = - old.f_int1; 4766END| 4767DELETE FROM t0_aux 4768WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4769 4770# check trigger-8 success: 1 4771DROP TRIGGER trg_1; 4772UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4773f_int2 = CAST(f_char1 AS SIGNED INT), 4774f_charbig = 'just inserted' 4775 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4776DELETE FROM t0_aux 4777WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4778DELETE FROM t1 4779WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4781BEGIN 4782SET new.f_int1 = old.f_int1 + @max_row, 4783new.f_int2 = old.f_int2 - @max_row, 4784new.f_charbig = '####updated per update trigger####'; 4785END| 4786UPDATE t1 4787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4788f_charbig = '####updated per update statement itself####'; 4789 4790# check trigger-9 success: 1 4791DROP TRIGGER trg_2; 4792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4793f_int2 = CAST(f_char1 AS SIGNED INT), 4794f_charbig = CONCAT('===',f_char1,'==='); 4795CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4796BEGIN 4797SET new.f_int1 = new.f_int1 + @max_row, 4798new.f_int2 = new.f_int2 - @max_row, 4799new.f_charbig = '####updated per update trigger####'; 4800END| 4801UPDATE t1 4802SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4803f_charbig = '####updated per update statement itself####'; 4804 4805# check trigger-10 success: 1 4806DROP TRIGGER trg_2; 4807UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4808f_int2 = CAST(f_char1 AS SIGNED INT), 4809f_charbig = CONCAT('===',f_char1,'==='); 4810CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4811BEGIN 4812SET new.f_int1 = @my_max1 + @counter, 4813new.f_int2 = @my_min2 - @counter, 4814new.f_charbig = '####updated per insert trigger####'; 4815SET @counter = @counter + 1; 4816END| 4817SET @counter = 1; 4818SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4819INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4820SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4821CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4822WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4823ORDER BY f_int1; 4824DROP TRIGGER trg_3; 4825 4826# check trigger-11 success: 1 4827DELETE FROM t1 4828WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4829AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4830AND f_charbig = '####updated per insert trigger####'; 4831CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4832BEGIN 4833SET new.f_int1 = @my_max1 + @counter, 4834new.f_int2 = @my_min2 - @counter, 4835new.f_charbig = '####updated per insert trigger####'; 4836SET @counter = @counter + 1; 4837END| 4838SET @counter = 1; 4839SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4840INSERT INTO t1 (f_char1, f_char2, f_charbig) 4841SELECT CAST(f_int1 AS CHAR), 4842CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4843WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4844ORDER BY f_int1; 4845DROP TRIGGER trg_3; 4846 4847# check trigger-12 success: 1 4848DELETE FROM t1 4849WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4850AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4851AND f_charbig = '####updated per insert trigger####'; 4852ANALYZE TABLE t1; 4853Table Op Msg_type Msg_text 4854test.t1 analyze status OK 4855CHECK TABLE t1 EXTENDED; 4856Table Op Msg_type Msg_text 4857test.t1 check status OK 4858CHECKSUM TABLE t1 EXTENDED; 4859Table Checksum 4860test.t1 <some_value> 4861OPTIMIZE TABLE t1; 4862Table Op Msg_type Msg_text 4863test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 4864test.t1 optimize status OK 4865# check layout success: 1 4866REPAIR TABLE t1 EXTENDED; 4867Table Op Msg_type Msg_text 4868test.t1 repair status OK 4869# check layout success: 1 4870TRUNCATE t1; 4871 4872# check TRUNCATE success: 1 4873# check layout success: 1 4874# End usability test (inc/partition_check.inc) 4875DROP TABLE t1; 4876CREATE TABLE t1 ( 4877f_int1 INTEGER DEFAULT 0, 4878f_int2 INTEGER DEFAULT 0, 4879f_char1 CHAR(20), 4880f_char2 CHAR(20), 4881f_charbig VARCHAR(1000) 4882 4883) 4884PARTITION BY KEY(f_int1) PARTITIONS 5; 4885INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4886SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4887WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 4888ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 4889INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4890SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4891WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 4892# Start usability test (inc/partition_check.inc) 4893create_command 4894SHOW CREATE TABLE t1; 4895Table Create Table 4896t1 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 PARTITION BY KEY (`f_int1`) 4905PARTITIONS 5 4906 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 4911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4913CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 4914WHERE f_int1 IN (2,3); 4915ERROR 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 4918INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4919SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4920CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4921WHERE f_int1 IN (2,3); 4922DELETE FROM t1 WHERE f_charbig = 'delete me'; 4923INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4924SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4925CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4926WHERE f_int1 IN (2,3); 4927DELETE FROM t1 WHERE f_charbig = 'delete me'; 4928# check read via f_int1 success: 1 4929# check read via f_int2 success: 1 4930 4931# check multiple-1 success: 1 4932DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 4933 4934# check multiple-2 success: 1 4935INSERT INTO t1 SELECT * FROM t0_template 4936WHERE MOD(f_int1,3) = 0; 4937 4938# check multiple-3 success: 1 4939UPDATE t1 SET f_int1 = f_int1 + @max_row 4940WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 4941AND @max_row_div2 + @max_row_div4; 4942 4943# check multiple-4 success: 1 4944DELETE FROM t1 4945WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 4946AND @max_row_div2 + @max_row_div4 + @max_row; 4947 4948# check multiple-5 success: 1 4949SELECT COUNT(*) INTO @try_count FROM t0_template 4950WHERE MOD(f_int1,3) = 0 4951AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4952SELECT COUNT(*) INTO @clash_count 4953FROM t1 INNER JOIN t0_template USING(f_int1) 4954WHERE MOD(f_int1,3) = 0 4955AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4956SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 4957INSERT INTO t1 4958SET f_int1 = @cur_value , f_int2 = @cur_value, 4959f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4960f_charbig = '#SINGLE#'; 4961 4962# check single-1 success: 1 4963SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 4964INSERT INTO t1 4965SET f_int1 = @cur_value , f_int2 = @cur_value, 4966f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4967f_charbig = '#SINGLE#'; 4968 4969# check single-2 success: 1 4970SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 4971SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 4972UPDATE t1 SET f_int1 = @cur_value2 4973WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 4974 4975# check single-3 success: 1 4976SET @cur_value1= -1; 4977SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 4978UPDATE t1 SET f_int1 = @cur_value1 4979WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 4980 4981# check single-4 success: 1 4982SELECT MAX(f_int1) INTO @cur_value FROM t1; 4983DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 4984 4985# check single-5 success: 1 4986DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 4987 4988# check single-6 success: 1 4989INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 4990 4991# check single-7 success: 1 4992DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 4993DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 4994INSERT t1 SET f_int1 = 0 , f_int2 = 0, 4995f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 4996f_charbig = '#NULL#'; 4997INSERT INTO t1 4998SET f_int1 = NULL , f_int2 = -@max_row, 4999f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 5000f_charbig = '#NULL#'; 5001ERROR 23000: Column 'f_int1' cannot be null 5002# check null success: 1 5003DELETE FROM t1 5004WHERE f_int1 = 0 AND f_int2 = 0 5005AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 5006AND f_charbig = '#NULL#'; 5007INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5008SELECT f_int1, f_int1, '', '', 'was inserted' 5009 FROM t0_template source_tab 5010WHERE MOD(f_int1,3) = 0 5011AND f_int1 BETWEEN @max_row_div2 AND @max_row 5012ON DUPLICATE KEY 5013UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 5014f_int2 = 2 * @max_row + source_tab.f_int1, 5015f_charbig = 'was updated'; 5016 5017# check unique-1-a success: 1 5018 5019# check unique-1-b success: 1 5020DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5022f_int2 = CAST(f_char1 AS SIGNED INT), 5023f_charbig = CONCAT('===',f_char1,'===') 5024WHERE f_charbig = 'was updated'; 5025REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5026SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 5027 FROM t0_template source_tab 5028WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5029 5030# check replace success: 1 5031DELETE FROM t1 5032WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 5033DELETE FROM t1 5034WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 5035f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 5036UPDATE t1 SET f_int2 = f_int1, 5037f_char1 = CAST(f_int1 AS CHAR), 5038f_char2 = CAST(f_int1 AS CHAR), 5039f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 5040WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 5041SET AUTOCOMMIT= 0; 5042INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5043SELECT f_int1, f_int1, '', '', 'was inserted' 5044FROM t0_template source_tab 5045WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5046 5047# check transactions-1 success: 1 5048COMMIT WORK; 5049 5050# check transactions-2 success: 1 5051ROLLBACK WORK; 5052 5053# check transactions-3 success: 1 5054DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5055COMMIT WORK; 5056ROLLBACK WORK; 5057 5058# check transactions-4 success: 1 5059INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5060SELECT f_int1, f_int1, '', '', 'was inserted' 5061FROM t0_template source_tab 5062WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5063 5064# check transactions-5 success: 1 5065ROLLBACK WORK; 5066 5067# check transactions-6 success: 1 5068# INFO: Storage engine used for t1 seems to be transactional. 5069COMMIT; 5070 5071# check transactions-7 success: 1 5072DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5073COMMIT WORK; 5074SET @@session.sql_mode = 'traditional'; 5075SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 5076INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5077SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 5078'', '', 'was inserted' FROM t0_template 5079WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5080ERROR 22012: Division by 0 5081COMMIT; 5082 5083# check transactions-8 success: 1 5084# INFO: Storage engine used for t1 seems to be able to revert 5085# changes made by the failing statement. 5086SET @@session.sql_mode = ''; 5087SET AUTOCOMMIT= 1; 5088DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5089COMMIT WORK; 5090UPDATE t1 SET f_charbig = REPEAT('b', 1000); 5091 5092# check special-1 success: 1 5093UPDATE t1 SET f_charbig = ''; 5094 5095# check special-2 success: 1 5096UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 5097INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5098SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 5099WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5100INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5101SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5102'just inserted' FROM t0_template 5103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5104CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 5105BEGIN 5106UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5107f_charbig = 'updated by trigger' 5108 WHERE f_int1 = new.f_int1; 5109END| 5110INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5111SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5112WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5113 5114# check trigger-1 success: 1 5115DROP TRIGGER trg_1; 5116UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5117f_int2 = CAST(f_char1 AS SIGNED INT), 5118f_charbig = 'just inserted' 5119 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5120DELETE FROM t0_aux 5121WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5122INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5123SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5124'just inserted' FROM t0_template 5125WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5126CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 5127BEGIN 5128UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5129f_charbig = 'updated by trigger' 5130 WHERE f_int1 = new.f_int1; 5131END| 5132INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5133SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5134WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5135 5136# check trigger-2 success: 1 5137DROP TRIGGER trg_1; 5138UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5139f_int2 = CAST(f_char1 AS SIGNED INT), 5140f_charbig = 'just inserted' 5141 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5142DELETE FROM t0_aux 5143WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5144INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5145SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5146'just inserted' FROM t0_template 5147WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5148CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5149BEGIN 5150UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5151f_charbig = 'updated by trigger' 5152 WHERE f_int1 = new.f_int1; 5153END| 5154UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5155WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5156 5157# check trigger-3 success: 1 5158DROP TRIGGER trg_1; 5159UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5160f_int2 = CAST(f_char1 AS SIGNED INT), 5161f_charbig = 'just inserted' 5162 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5163DELETE FROM t0_aux 5164WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5165INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5166SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5167'just inserted' FROM t0_template 5168WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5169CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5170BEGIN 5171UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5172f_charbig = 'updated by trigger' 5173 WHERE f_int1 = - old.f_int1; 5174END| 5175UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5176WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5177 5178# check trigger-4 success: 1 5179DROP TRIGGER trg_1; 5180UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5181f_int2 = CAST(f_char1 AS SIGNED INT), 5182f_charbig = 'just inserted' 5183 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5184DELETE FROM t0_aux 5185WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5186INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5187SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5188'just inserted' FROM t0_template 5189WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5190CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5191BEGIN 5192UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5193f_charbig = 'updated by trigger' 5194 WHERE f_int1 = new.f_int1; 5195END| 5196UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5197WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5198 5199# check trigger-5 success: 1 5200DROP TRIGGER trg_1; 5201UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5202f_int2 = CAST(f_char1 AS SIGNED INT), 5203f_charbig = 'just inserted' 5204 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5205DELETE FROM t0_aux 5206WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5207INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5208SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5209'just inserted' FROM t0_template 5210WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5211CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5212BEGIN 5213UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5214f_charbig = 'updated by trigger' 5215 WHERE f_int1 = - old.f_int1; 5216END| 5217UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5218WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5219 5220# check trigger-6 success: 1 5221DROP TRIGGER trg_1; 5222UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5223f_int2 = CAST(f_char1 AS SIGNED INT), 5224f_charbig = 'just inserted' 5225 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5226DELETE FROM t0_aux 5227WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5228INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5229SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5230'just inserted' FROM t0_template 5231WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5232CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 5233BEGIN 5234UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5235f_charbig = 'updated by trigger' 5236 WHERE f_int1 = - old.f_int1; 5237END| 5238DELETE FROM t0_aux 5239WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5240 5241# check trigger-7 success: 1 5242DROP TRIGGER trg_1; 5243UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5244f_int2 = CAST(f_char1 AS SIGNED INT), 5245f_charbig = 'just inserted' 5246 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5247DELETE FROM t0_aux 5248WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5249INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5250SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5251'just inserted' FROM t0_template 5252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5253CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 5254BEGIN 5255UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5256f_charbig = 'updated by trigger' 5257 WHERE f_int1 = - old.f_int1; 5258END| 5259DELETE FROM t0_aux 5260WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5261 5262# check trigger-8 success: 1 5263DROP TRIGGER trg_1; 5264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5265f_int2 = CAST(f_char1 AS SIGNED INT), 5266f_charbig = 'just inserted' 5267 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5268DELETE FROM t0_aux 5269WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5270DELETE FROM t1 5271WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5272CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5273BEGIN 5274SET new.f_int1 = old.f_int1 + @max_row, 5275new.f_int2 = old.f_int2 - @max_row, 5276new.f_charbig = '####updated per update trigger####'; 5277END| 5278UPDATE t1 5279SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5280f_charbig = '####updated per update statement itself####'; 5281 5282# check trigger-9 success: 1 5283DROP TRIGGER trg_2; 5284UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5285f_int2 = CAST(f_char1 AS SIGNED INT), 5286f_charbig = CONCAT('===',f_char1,'==='); 5287CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5288BEGIN 5289SET new.f_int1 = new.f_int1 + @max_row, 5290new.f_int2 = new.f_int2 - @max_row, 5291new.f_charbig = '####updated per update trigger####'; 5292END| 5293UPDATE t1 5294SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5295f_charbig = '####updated per update statement itself####'; 5296 5297# check trigger-10 success: 1 5298DROP TRIGGER trg_2; 5299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5300f_int2 = CAST(f_char1 AS SIGNED INT), 5301f_charbig = CONCAT('===',f_char1,'==='); 5302CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5303BEGIN 5304SET new.f_int1 = @my_max1 + @counter, 5305new.f_int2 = @my_min2 - @counter, 5306new.f_charbig = '####updated per insert trigger####'; 5307SET @counter = @counter + 1; 5308END| 5309SET @counter = 1; 5310SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5311INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5312SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5313CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5314WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5315ORDER BY f_int1; 5316DROP TRIGGER trg_3; 5317 5318# check trigger-11 success: 1 5319DELETE FROM t1 5320WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5321AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5322AND f_charbig = '####updated per insert trigger####'; 5323CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5324BEGIN 5325SET new.f_int1 = @my_max1 + @counter, 5326new.f_int2 = @my_min2 - @counter, 5327new.f_charbig = '####updated per insert trigger####'; 5328SET @counter = @counter + 1; 5329END| 5330SET @counter = 1; 5331SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5332INSERT INTO t1 (f_char1, f_char2, f_charbig) 5333SELECT CAST(f_int1 AS CHAR), 5334CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5335WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5336ORDER BY f_int1; 5337DROP TRIGGER trg_3; 5338 5339# check trigger-12 success: 1 5340DELETE FROM t1 5341WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5342AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5343AND f_charbig = '####updated per insert trigger####'; 5344ANALYZE TABLE t1; 5345Table Op Msg_type Msg_text 5346test.t1 analyze status OK 5347CHECK TABLE t1 EXTENDED; 5348Table Op Msg_type Msg_text 5349test.t1 check status OK 5350CHECKSUM TABLE t1 EXTENDED; 5351Table Checksum 5352test.t1 <some_value> 5353OPTIMIZE TABLE t1; 5354Table Op Msg_type Msg_text 5355test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 5356test.t1 optimize status OK 5357# check layout success: 1 5358REPAIR TABLE t1 EXTENDED; 5359Table Op Msg_type Msg_text 5360test.t1 repair status OK 5361# check layout success: 1 5362TRUNCATE t1; 5363 5364# check TRUNCATE success: 1 5365# check layout success: 1 5366# End usability test (inc/partition_check.inc) 5367DROP TABLE t1; 5368CREATE TABLE t1 ( 5369f_int1 INTEGER DEFAULT 0, 5370f_int2 INTEGER DEFAULT 0, 5371f_char1 CHAR(20), 5372f_char2 CHAR(20), 5373f_charbig VARCHAR(1000) 5374 5375) 5376PARTITION BY LIST(MOD(f_int1,4)) 5377(PARTITION part_3 VALUES IN (-3), 5378PARTITION part_2 VALUES IN (-2), 5379PARTITION part_1 VALUES IN (-1), 5380PARTITION part_N VALUES IN (NULL), 5381PARTITION part0 VALUES IN (0), 5382PARTITION part1 VALUES IN (1), 5383PARTITION part2 VALUES IN (2), 5384PARTITION part3 VALUES IN (3)); 5385INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5386SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5387WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 5388ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 5389INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5390SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5391WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 5392# Start usability test (inc/partition_check.inc) 5393create_command 5394SHOW CREATE TABLE t1; 5395Table Create Table 5396t1 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 PARTITION BY LIST (`f_int1` MOD 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) 5413 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 5418INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5419SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5420CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 5421WHERE f_int1 IN (2,3); 5422ERROR 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 5425INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5426SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5427CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5428WHERE f_int1 IN (2,3); 5429DELETE FROM t1 WHERE f_charbig = 'delete me'; 5430INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5431SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5432CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5433WHERE f_int1 IN (2,3); 5434DELETE FROM t1 WHERE f_charbig = 'delete me'; 5435# check read via f_int1 success: 1 5436# check read via f_int2 success: 1 5437 5438# check multiple-1 success: 1 5439DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 5440 5441# check multiple-2 success: 1 5442INSERT INTO t1 SELECT * FROM t0_template 5443WHERE MOD(f_int1,3) = 0; 5444 5445# check multiple-3 success: 1 5446UPDATE t1 SET f_int1 = f_int1 + @max_row 5447WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 5448AND @max_row_div2 + @max_row_div4; 5449 5450# check multiple-4 success: 1 5451DELETE FROM t1 5452WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 5453AND @max_row_div2 + @max_row_div4 + @max_row; 5454 5455# check multiple-5 success: 1 5456SELECT COUNT(*) INTO @try_count FROM t0_template 5457WHERE MOD(f_int1,3) = 0 5458AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5459SELECT COUNT(*) INTO @clash_count 5460FROM t1 INNER JOIN t0_template USING(f_int1) 5461WHERE MOD(f_int1,3) = 0 5462AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5463SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 5464INSERT INTO t1 5465SET f_int1 = @cur_value , f_int2 = @cur_value, 5466f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5467f_charbig = '#SINGLE#'; 5468 5469# check single-1 success: 1 5470SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 5471INSERT INTO t1 5472SET f_int1 = @cur_value , f_int2 = @cur_value, 5473f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5474f_charbig = '#SINGLE#'; 5475 5476# check single-2 success: 1 5477SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 5478SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 5479UPDATE t1 SET f_int1 = @cur_value2 5480WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 5481 5482# check single-3 success: 1 5483SET @cur_value1= -1; 5484SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 5485UPDATE t1 SET f_int1 = @cur_value1 5486WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 5487 5488# check single-4 success: 1 5489SELECT MAX(f_int1) INTO @cur_value FROM t1; 5490DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 5491 5492# check single-5 success: 1 5493DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 5494 5495# check single-6 success: 1 5496INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 5497 5498# check single-7 success: 1 5499DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 5500DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 5501INSERT t1 SET f_int1 = 0 , f_int2 = 0, 5502f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 5503f_charbig = '#NULL#'; 5504INSERT INTO t1 5505SET f_int1 = NULL , f_int2 = -@max_row, 5506f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 5507f_charbig = '#NULL#'; 5508ERROR 23000: Column 'f_int1' cannot be null 5509# check null success: 1 5510DELETE FROM t1 5511WHERE f_int1 = 0 AND f_int2 = 0 5512AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 5513AND f_charbig = '#NULL#'; 5514INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5515SELECT f_int1, f_int1, '', '', 'was inserted' 5516 FROM t0_template source_tab 5517WHERE MOD(f_int1,3) = 0 5518AND f_int1 BETWEEN @max_row_div2 AND @max_row 5519ON DUPLICATE KEY 5520UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 5521f_int2 = 2 * @max_row + source_tab.f_int1, 5522f_charbig = 'was updated'; 5523 5524# check unique-1-a success: 1 5525 5526# check unique-1-b success: 1 5527DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5528UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5529f_int2 = CAST(f_char1 AS SIGNED INT), 5530f_charbig = CONCAT('===',f_char1,'===') 5531WHERE f_charbig = 'was updated'; 5532REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5533SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 5534 FROM t0_template source_tab 5535WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5536 5537# check replace success: 1 5538DELETE FROM t1 5539WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 5540DELETE FROM t1 5541WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 5542f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 5543UPDATE t1 SET f_int2 = f_int1, 5544f_char1 = CAST(f_int1 AS CHAR), 5545f_char2 = CAST(f_int1 AS CHAR), 5546f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 5547WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 5548SET AUTOCOMMIT= 0; 5549INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5550SELECT f_int1, f_int1, '', '', 'was inserted' 5551FROM t0_template source_tab 5552WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5553 5554# check transactions-1 success: 1 5555COMMIT WORK; 5556 5557# check transactions-2 success: 1 5558ROLLBACK WORK; 5559 5560# check transactions-3 success: 1 5561DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5562COMMIT WORK; 5563ROLLBACK WORK; 5564 5565# check transactions-4 success: 1 5566INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5567SELECT f_int1, f_int1, '', '', 'was inserted' 5568FROM t0_template source_tab 5569WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5570 5571# check transactions-5 success: 1 5572ROLLBACK WORK; 5573 5574# check transactions-6 success: 1 5575# INFO: Storage engine used for t1 seems to be transactional. 5576COMMIT; 5577 5578# check transactions-7 success: 1 5579DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5580COMMIT WORK; 5581SET @@session.sql_mode = 'traditional'; 5582SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 5583INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5584SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 5585'', '', 'was inserted' FROM t0_template 5586WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5587ERROR 22012: Division by 0 5588COMMIT; 5589 5590# check transactions-8 success: 1 5591# INFO: Storage engine used for t1 seems to be able to revert 5592# changes made by the failing statement. 5593SET @@session.sql_mode = ''; 5594SET AUTOCOMMIT= 1; 5595DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5596COMMIT WORK; 5597UPDATE t1 SET f_charbig = REPEAT('b', 1000); 5598 5599# check special-1 success: 1 5600UPDATE t1 SET f_charbig = ''; 5601 5602# check special-2 success: 1 5603UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 5604INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5605SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 5606WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5607INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5608SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5609'just inserted' FROM t0_template 5610WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5611CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 5612BEGIN 5613UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5614f_charbig = 'updated by trigger' 5615 WHERE f_int1 = new.f_int1; 5616END| 5617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5618SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5619WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5620 5621# check trigger-1 success: 1 5622DROP TRIGGER trg_1; 5623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5624f_int2 = CAST(f_char1 AS SIGNED INT), 5625f_charbig = 'just inserted' 5626 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5627DELETE FROM t0_aux 5628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5631'just inserted' FROM t0_template 5632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5633CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 5634BEGIN 5635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5636f_charbig = 'updated by trigger' 5637 WHERE f_int1 = new.f_int1; 5638END| 5639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5640SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5641WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5642 5643# check trigger-2 success: 1 5644DROP TRIGGER trg_1; 5645UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5646f_int2 = CAST(f_char1 AS SIGNED INT), 5647f_charbig = 'just inserted' 5648 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5649DELETE FROM t0_aux 5650WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5651INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5652SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5653'just inserted' FROM t0_template 5654WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5655CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5656BEGIN 5657UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5658f_charbig = 'updated by trigger' 5659 WHERE f_int1 = new.f_int1; 5660END| 5661UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5662WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5663 5664# check trigger-3 success: 1 5665DROP TRIGGER trg_1; 5666UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5667f_int2 = CAST(f_char1 AS SIGNED INT), 5668f_charbig = 'just inserted' 5669 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5670DELETE FROM t0_aux 5671WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5672INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5673SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5674'just inserted' FROM t0_template 5675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5676CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5677BEGIN 5678UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5679f_charbig = 'updated by trigger' 5680 WHERE f_int1 = - old.f_int1; 5681END| 5682UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5683WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5684 5685# check trigger-4 success: 1 5686DROP TRIGGER trg_1; 5687UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5688f_int2 = CAST(f_char1 AS SIGNED INT), 5689f_charbig = 'just inserted' 5690 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5691DELETE FROM t0_aux 5692WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5693INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5694SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5695'just inserted' FROM t0_template 5696WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5697CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5698BEGIN 5699UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5700f_charbig = 'updated by trigger' 5701 WHERE f_int1 = new.f_int1; 5702END| 5703UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5704WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5705 5706# check trigger-5 success: 1 5707DROP TRIGGER trg_1; 5708UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5709f_int2 = CAST(f_char1 AS SIGNED INT), 5710f_charbig = 'just inserted' 5711 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5712DELETE FROM t0_aux 5713WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5715SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5716'just inserted' FROM t0_template 5717WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5718CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5719BEGIN 5720UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5721f_charbig = 'updated by trigger' 5722 WHERE f_int1 = - old.f_int1; 5723END| 5724UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5725WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5726 5727# check trigger-6 success: 1 5728DROP TRIGGER trg_1; 5729UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5730f_int2 = CAST(f_char1 AS SIGNED INT), 5731f_charbig = 'just inserted' 5732 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5733DELETE FROM t0_aux 5734WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5735INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5736SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5737'just inserted' FROM t0_template 5738WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5739CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 5740BEGIN 5741UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5742f_charbig = 'updated by trigger' 5743 WHERE f_int1 = - old.f_int1; 5744END| 5745DELETE FROM t0_aux 5746WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5747 5748# check trigger-7 success: 1 5749DROP TRIGGER trg_1; 5750UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5751f_int2 = CAST(f_char1 AS SIGNED INT), 5752f_charbig = 'just inserted' 5753 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5754DELETE FROM t0_aux 5755WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5756INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5757SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5758'just inserted' FROM t0_template 5759WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5760CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 5761BEGIN 5762UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5763f_charbig = 'updated by trigger' 5764 WHERE f_int1 = - old.f_int1; 5765END| 5766DELETE FROM t0_aux 5767WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5768 5769# check trigger-8 success: 1 5770DROP TRIGGER trg_1; 5771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5772f_int2 = CAST(f_char1 AS SIGNED INT), 5773f_charbig = 'just inserted' 5774 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5775DELETE FROM t0_aux 5776WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5777DELETE FROM t1 5778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5779CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5780BEGIN 5781SET new.f_int1 = old.f_int1 + @max_row, 5782new.f_int2 = old.f_int2 - @max_row, 5783new.f_charbig = '####updated per update trigger####'; 5784END| 5785UPDATE t1 5786SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5787f_charbig = '####updated per update statement itself####'; 5788 5789# check trigger-9 success: 1 5790DROP TRIGGER trg_2; 5791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5792f_int2 = CAST(f_char1 AS SIGNED INT), 5793f_charbig = CONCAT('===',f_char1,'==='); 5794CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5795BEGIN 5796SET new.f_int1 = new.f_int1 + @max_row, 5797new.f_int2 = new.f_int2 - @max_row, 5798new.f_charbig = '####updated per update trigger####'; 5799END| 5800UPDATE t1 5801SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5802f_charbig = '####updated per update statement itself####'; 5803 5804# check trigger-10 success: 1 5805DROP TRIGGER trg_2; 5806UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5807f_int2 = CAST(f_char1 AS SIGNED INT), 5808f_charbig = CONCAT('===',f_char1,'==='); 5809CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5810BEGIN 5811SET new.f_int1 = @my_max1 + @counter, 5812new.f_int2 = @my_min2 - @counter, 5813new.f_charbig = '####updated per insert trigger####'; 5814SET @counter = @counter + 1; 5815END| 5816SET @counter = 1; 5817SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5818INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5819SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5820CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5821WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5822ORDER BY f_int1; 5823DROP TRIGGER trg_3; 5824 5825# check trigger-11 success: 1 5826DELETE FROM t1 5827WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5828AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5829AND f_charbig = '####updated per insert trigger####'; 5830CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5831BEGIN 5832SET new.f_int1 = @my_max1 + @counter, 5833new.f_int2 = @my_min2 - @counter, 5834new.f_charbig = '####updated per insert trigger####'; 5835SET @counter = @counter + 1; 5836END| 5837SET @counter = 1; 5838SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5839INSERT INTO t1 (f_char1, f_char2, f_charbig) 5840SELECT CAST(f_int1 AS CHAR), 5841CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5843ORDER BY f_int1; 5844DROP TRIGGER trg_3; 5845 5846# check trigger-12 success: 1 5847DELETE FROM t1 5848WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5849AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5850AND f_charbig = '####updated per insert trigger####'; 5851ANALYZE TABLE t1; 5852Table Op Msg_type Msg_text 5853test.t1 analyze status OK 5854CHECK TABLE t1 EXTENDED; 5855Table Op Msg_type Msg_text 5856test.t1 check status OK 5857CHECKSUM TABLE t1 EXTENDED; 5858Table Checksum 5859test.t1 <some_value> 5860OPTIMIZE TABLE t1; 5861Table Op Msg_type Msg_text 5862test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 5863test.t1 optimize status OK 5864# check layout success: 1 5865REPAIR TABLE t1 EXTENDED; 5866Table Op Msg_type Msg_text 5867test.t1 repair status OK 5868# check layout success: 1 5869TRUNCATE t1; 5870 5871# check TRUNCATE success: 1 5872# check layout success: 1 5873# End usability test (inc/partition_check.inc) 5874DROP TABLE t1; 5875CREATE TABLE t1 ( 5876f_int1 INTEGER DEFAULT 0, 5877f_int2 INTEGER DEFAULT 0, 5878f_char1 CHAR(20), 5879f_char2 CHAR(20), 5880f_charbig VARCHAR(1000) 5881 5882) 5883PARTITION BY RANGE(f_int1) 5884(PARTITION parta VALUES LESS THAN (0), 5885PARTITION partb VALUES LESS THAN (5), 5886PARTITION partc VALUES LESS THAN (10), 5887PARTITION partd VALUES LESS THAN (10 + 5), 5888PARTITION parte VALUES LESS THAN (20), 5889PARTITION partf VALUES LESS THAN (2147483646)); 5890INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5891SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5892WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 5893ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 5894INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5895SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5896WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 5897# Start usability test (inc/partition_check.inc) 5898create_command 5899SHOW CREATE TABLE t1; 5900Table Create Table 5901t1 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 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) 5916 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 5921INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5922SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5923CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 5924WHERE f_int1 IN (2,3); 5925ERROR 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 5928INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5929SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5930CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5931WHERE f_int1 IN (2,3); 5932DELETE FROM t1 WHERE f_charbig = 'delete me'; 5933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5934SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5935CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5936WHERE f_int1 IN (2,3); 5937DELETE FROM t1 WHERE f_charbig = 'delete me'; 5938# check read via f_int1 success: 1 5939# check read via f_int2 success: 1 5940 5941# check multiple-1 success: 1 5942DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 5943 5944# check multiple-2 success: 1 5945INSERT INTO t1 SELECT * FROM t0_template 5946WHERE MOD(f_int1,3) = 0; 5947 5948# check multiple-3 success: 1 5949UPDATE t1 SET f_int1 = f_int1 + @max_row 5950WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 5951AND @max_row_div2 + @max_row_div4; 5952 5953# check multiple-4 success: 1 5954DELETE FROM t1 5955WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 5956AND @max_row_div2 + @max_row_div4 + @max_row; 5957 5958# check multiple-5 success: 1 5959SELECT COUNT(*) INTO @try_count FROM t0_template 5960WHERE MOD(f_int1,3) = 0 5961AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5962SELECT COUNT(*) INTO @clash_count 5963FROM t1 INNER JOIN t0_template USING(f_int1) 5964WHERE MOD(f_int1,3) = 0 5965AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5966SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 5967INSERT INTO t1 5968SET f_int1 = @cur_value , f_int2 = @cur_value, 5969f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5970f_charbig = '#SINGLE#'; 5971 5972# check single-1 success: 1 5973SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 5974INSERT INTO t1 5975SET f_int1 = @cur_value , f_int2 = @cur_value, 5976f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5977f_charbig = '#SINGLE#'; 5978 5979# check single-2 success: 1 5980SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 5981SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 5982UPDATE t1 SET f_int1 = @cur_value2 5983WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 5984 5985# check single-3 success: 1 5986SET @cur_value1= -1; 5987SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 5988UPDATE t1 SET f_int1 = @cur_value1 5989WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 5990 5991# check single-4 success: 1 5992SELECT MAX(f_int1) INTO @cur_value FROM t1; 5993DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 5994 5995# check single-5 success: 1 5996DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 5997 5998# check single-6 success: 1 5999INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 6000ERROR HY000: Table has no partition for value 2147483647 6001DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 6002INSERT t1 SET f_int1 = 0 , f_int2 = 0, 6003f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 6004f_charbig = '#NULL#'; 6005INSERT INTO t1 6006SET f_int1 = NULL , f_int2 = -@max_row, 6007f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 6008f_charbig = '#NULL#'; 6009ERROR 23000: Column 'f_int1' cannot be null 6010# check null success: 1 6011DELETE FROM t1 6012WHERE f_int1 = 0 AND f_int2 = 0 6013AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 6014AND f_charbig = '#NULL#'; 6015INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6016SELECT f_int1, f_int1, '', '', 'was inserted' 6017 FROM t0_template source_tab 6018WHERE MOD(f_int1,3) = 0 6019AND f_int1 BETWEEN @max_row_div2 AND @max_row 6020ON DUPLICATE KEY 6021UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 6022f_int2 = 2 * @max_row + source_tab.f_int1, 6023f_charbig = 'was updated'; 6024 6025# check unique-1-a success: 1 6026 6027# check unique-1-b success: 1 6028DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6029UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6030f_int2 = CAST(f_char1 AS SIGNED INT), 6031f_charbig = CONCAT('===',f_char1,'===') 6032WHERE f_charbig = 'was updated'; 6033REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6034SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 6035 FROM t0_template source_tab 6036WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6037 6038# check replace success: 1 6039DELETE FROM t1 6040WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 6041DELETE FROM t1 6042WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 6043f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 6044UPDATE t1 SET f_int2 = f_int1, 6045f_char1 = CAST(f_int1 AS CHAR), 6046f_char2 = CAST(f_int1 AS CHAR), 6047f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 6048WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 6049SET AUTOCOMMIT= 0; 6050INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6051SELECT f_int1, f_int1, '', '', 'was inserted' 6052FROM t0_template source_tab 6053WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6054 6055# check transactions-1 success: 1 6056COMMIT WORK; 6057 6058# check transactions-2 success: 1 6059ROLLBACK WORK; 6060 6061# check transactions-3 success: 1 6062DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6063COMMIT WORK; 6064ROLLBACK WORK; 6065 6066# check transactions-4 success: 1 6067INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6068SELECT f_int1, f_int1, '', '', 'was inserted' 6069FROM t0_template source_tab 6070WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6071 6072# check transactions-5 success: 1 6073ROLLBACK WORK; 6074 6075# check transactions-6 success: 1 6076# INFO: Storage engine used for t1 seems to be transactional. 6077COMMIT; 6078 6079# check transactions-7 success: 1 6080DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6081COMMIT WORK; 6082SET @@session.sql_mode = 'traditional'; 6083SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 6084INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6085SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 6086'', '', 'was inserted' FROM t0_template 6087WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6088ERROR 22012: Division by 0 6089COMMIT; 6090 6091# check transactions-8 success: 1 6092# INFO: Storage engine used for t1 seems to be able to revert 6093# changes made by the failing statement. 6094SET @@session.sql_mode = ''; 6095SET AUTOCOMMIT= 1; 6096DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6097COMMIT WORK; 6098UPDATE t1 SET f_charbig = REPEAT('b', 1000); 6099 6100# check special-1 success: 1 6101UPDATE t1 SET f_charbig = ''; 6102 6103# check special-2 success: 1 6104UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 6105INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6106SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 6107WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6108INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6109SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6110'just inserted' FROM t0_template 6111WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6112CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 6113BEGIN 6114UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6115f_charbig = 'updated by trigger' 6116 WHERE f_int1 = new.f_int1; 6117END| 6118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6119SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6120WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6121 6122# check trigger-1 success: 1 6123DROP TRIGGER trg_1; 6124UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6125f_int2 = CAST(f_char1 AS SIGNED INT), 6126f_charbig = 'just inserted' 6127 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6128DELETE FROM t0_aux 6129WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6130INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6131SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6132'just inserted' FROM t0_template 6133WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6134CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 6135BEGIN 6136UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6137f_charbig = 'updated by trigger' 6138 WHERE f_int1 = new.f_int1; 6139END| 6140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6141SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6142WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6143 6144# check trigger-2 success: 1 6145DROP TRIGGER trg_1; 6146UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6147f_int2 = CAST(f_char1 AS SIGNED INT), 6148f_charbig = 'just inserted' 6149 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6150DELETE FROM t0_aux 6151WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6152INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6153SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6154'just inserted' FROM t0_template 6155WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6156CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6157BEGIN 6158UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6159f_charbig = 'updated by trigger' 6160 WHERE f_int1 = new.f_int1; 6161END| 6162UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6163WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6164 6165# check trigger-3 success: 1 6166DROP TRIGGER trg_1; 6167UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6168f_int2 = CAST(f_char1 AS SIGNED INT), 6169f_charbig = 'just inserted' 6170 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6171DELETE FROM t0_aux 6172WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6173INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6174SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6175'just inserted' FROM t0_template 6176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6177CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6178BEGIN 6179UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6180f_charbig = 'updated by trigger' 6181 WHERE f_int1 = - old.f_int1; 6182END| 6183UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6184WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6185 6186# check trigger-4 success: 1 6187DROP TRIGGER trg_1; 6188UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6189f_int2 = CAST(f_char1 AS SIGNED INT), 6190f_charbig = 'just inserted' 6191 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6192DELETE FROM t0_aux 6193WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6194INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6195SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6196'just inserted' FROM t0_template 6197WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6198CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6199BEGIN 6200UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6201f_charbig = 'updated by trigger' 6202 WHERE f_int1 = new.f_int1; 6203END| 6204UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6205WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6206 6207# check trigger-5 success: 1 6208DROP TRIGGER trg_1; 6209UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6210f_int2 = CAST(f_char1 AS SIGNED INT), 6211f_charbig = 'just inserted' 6212 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6213DELETE FROM t0_aux 6214WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6216SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6217'just inserted' FROM t0_template 6218WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6219CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6220BEGIN 6221UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6222f_charbig = 'updated by trigger' 6223 WHERE f_int1 = - old.f_int1; 6224END| 6225UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6226WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6227 6228# check trigger-6 success: 1 6229DROP TRIGGER trg_1; 6230UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6231f_int2 = CAST(f_char1 AS SIGNED INT), 6232f_charbig = 'just inserted' 6233 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6234DELETE FROM t0_aux 6235WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6236INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6237SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6238'just inserted' FROM t0_template 6239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6240CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 6241BEGIN 6242UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6243f_charbig = 'updated by trigger' 6244 WHERE f_int1 = - old.f_int1; 6245END| 6246DELETE FROM t0_aux 6247WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6248 6249# check trigger-7 success: 1 6250DROP TRIGGER trg_1; 6251UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6252f_int2 = CAST(f_char1 AS SIGNED INT), 6253f_charbig = 'just inserted' 6254 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6255DELETE FROM t0_aux 6256WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6257INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6258SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6259'just inserted' FROM t0_template 6260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6261CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 6262BEGIN 6263UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6264f_charbig = 'updated by trigger' 6265 WHERE f_int1 = - old.f_int1; 6266END| 6267DELETE FROM t0_aux 6268WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6269 6270# check trigger-8 success: 1 6271DROP TRIGGER trg_1; 6272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6273f_int2 = CAST(f_char1 AS SIGNED INT), 6274f_charbig = 'just inserted' 6275 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6276DELETE FROM t0_aux 6277WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6278DELETE FROM t1 6279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6280CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6281BEGIN 6282SET new.f_int1 = old.f_int1 + @max_row, 6283new.f_int2 = old.f_int2 - @max_row, 6284new.f_charbig = '####updated per update trigger####'; 6285END| 6286UPDATE t1 6287SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6288f_charbig = '####updated per update statement itself####'; 6289 6290# check trigger-9 success: 1 6291DROP TRIGGER trg_2; 6292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6293f_int2 = CAST(f_char1 AS SIGNED INT), 6294f_charbig = CONCAT('===',f_char1,'==='); 6295CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6296BEGIN 6297SET new.f_int1 = new.f_int1 + @max_row, 6298new.f_int2 = new.f_int2 - @max_row, 6299new.f_charbig = '####updated per update trigger####'; 6300END| 6301UPDATE t1 6302SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6303f_charbig = '####updated per update statement itself####'; 6304 6305# check trigger-10 success: 1 6306DROP TRIGGER trg_2; 6307UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6308f_int2 = CAST(f_char1 AS SIGNED INT), 6309f_charbig = CONCAT('===',f_char1,'==='); 6310CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6311BEGIN 6312SET new.f_int1 = @my_max1 + @counter, 6313new.f_int2 = @my_min2 - @counter, 6314new.f_charbig = '####updated per insert trigger####'; 6315SET @counter = @counter + 1; 6316END| 6317SET @counter = 1; 6318SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6319INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6320SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6321CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6322WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6323ORDER BY f_int1; 6324DROP TRIGGER trg_3; 6325 6326# check trigger-11 success: 1 6327DELETE FROM t1 6328WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6329AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6330AND f_charbig = '####updated per insert trigger####'; 6331CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6332BEGIN 6333SET new.f_int1 = @my_max1 + @counter, 6334new.f_int2 = @my_min2 - @counter, 6335new.f_charbig = '####updated per insert trigger####'; 6336SET @counter = @counter + 1; 6337END| 6338SET @counter = 1; 6339SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6340INSERT INTO t1 (f_char1, f_char2, f_charbig) 6341SELECT CAST(f_int1 AS CHAR), 6342CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6343WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6344ORDER BY f_int1; 6345DROP TRIGGER trg_3; 6346 6347# check trigger-12 success: 1 6348DELETE FROM t1 6349WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6350AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6351AND f_charbig = '####updated per insert trigger####'; 6352ANALYZE TABLE t1; 6353Table Op Msg_type Msg_text 6354test.t1 analyze status OK 6355CHECK TABLE t1 EXTENDED; 6356Table Op Msg_type Msg_text 6357test.t1 check status OK 6358CHECKSUM TABLE t1 EXTENDED; 6359Table Checksum 6360test.t1 <some_value> 6361OPTIMIZE TABLE t1; 6362Table Op Msg_type Msg_text 6363test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 6364test.t1 optimize status OK 6365# check layout success: 1 6366REPAIR TABLE t1 EXTENDED; 6367Table Op Msg_type Msg_text 6368test.t1 repair status OK 6369# check layout success: 1 6370TRUNCATE t1; 6371 6372# check TRUNCATE success: 1 6373# check layout success: 1 6374# End usability test (inc/partition_check.inc) 6375DROP TABLE t1; 6376CREATE TABLE t1 ( 6377f_int1 INTEGER DEFAULT 0, 6378f_int2 INTEGER DEFAULT 0, 6379f_char1 CHAR(20), 6380f_char2 CHAR(20), 6381f_charbig VARCHAR(1000) 6382 6383) 6384PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 6385(PARTITION parta VALUES LESS THAN (0), 6386PARTITION partb VALUES LESS THAN (5), 6387PARTITION partc VALUES LESS THAN (10), 6388PARTITION partd VALUES LESS THAN (2147483646)); 6389INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6390SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6391WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 6392ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 6393INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6394SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6395WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 6396# Start usability test (inc/partition_check.inc) 6397create_command 6398SHOW CREATE TABLE t1; 6399Table Create Table 6400t1 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 PARTITION BY RANGE (`f_int1` DIV 2) 6409SUBPARTITION BY HASH (`f_int1`) 6410SUBPARTITIONS 2 6411(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB, 6412 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB, 6413 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB, 6414 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB) 6415 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 6420INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6421SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6422CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 6423WHERE f_int1 IN (2,3); 6424ERROR 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 6427INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6428SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6429CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6430WHERE f_int1 IN (2,3); 6431DELETE FROM t1 WHERE f_charbig = 'delete me'; 6432INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6433SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6434CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6435WHERE f_int1 IN (2,3); 6436DELETE FROM t1 WHERE f_charbig = 'delete me'; 6437# check read via f_int1 success: 1 6438# check read via f_int2 success: 1 6439 6440# check multiple-1 success: 1 6441DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 6442 6443# check multiple-2 success: 1 6444INSERT INTO t1 SELECT * FROM t0_template 6445WHERE MOD(f_int1,3) = 0; 6446 6447# check multiple-3 success: 1 6448UPDATE t1 SET f_int1 = f_int1 + @max_row 6449WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 6450AND @max_row_div2 + @max_row_div4; 6451 6452# check multiple-4 success: 1 6453DELETE FROM t1 6454WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 6455AND @max_row_div2 + @max_row_div4 + @max_row; 6456 6457# check multiple-5 success: 1 6458SELECT COUNT(*) INTO @try_count FROM t0_template 6459WHERE MOD(f_int1,3) = 0 6460AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6461SELECT COUNT(*) INTO @clash_count 6462FROM t1 INNER JOIN t0_template USING(f_int1) 6463WHERE MOD(f_int1,3) = 0 6464AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6465SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 6466INSERT INTO t1 6467SET f_int1 = @cur_value , f_int2 = @cur_value, 6468f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6469f_charbig = '#SINGLE#'; 6470 6471# check single-1 success: 1 6472SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 6473INSERT INTO t1 6474SET f_int1 = @cur_value , f_int2 = @cur_value, 6475f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6476f_charbig = '#SINGLE#'; 6477 6478# check single-2 success: 1 6479SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 6480SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 6481UPDATE t1 SET f_int1 = @cur_value2 6482WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 6483 6484# check single-3 success: 1 6485SET @cur_value1= -1; 6486SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 6487UPDATE t1 SET f_int1 = @cur_value1 6488WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 6489 6490# check single-4 success: 1 6491SELECT MAX(f_int1) INTO @cur_value FROM t1; 6492DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 6493 6494# check single-5 success: 1 6495DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 6496 6497# check single-6 success: 1 6498INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 6499 6500# check single-7 success: 1 6501DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 6502DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 6503INSERT t1 SET f_int1 = 0 , f_int2 = 0, 6504f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 6505f_charbig = '#NULL#'; 6506INSERT INTO t1 6507SET f_int1 = NULL , f_int2 = -@max_row, 6508f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 6509f_charbig = '#NULL#'; 6510ERROR 23000: Column 'f_int1' cannot be null 6511# check null success: 1 6512DELETE FROM t1 6513WHERE f_int1 = 0 AND f_int2 = 0 6514AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 6515AND f_charbig = '#NULL#'; 6516INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6517SELECT f_int1, f_int1, '', '', 'was inserted' 6518 FROM t0_template source_tab 6519WHERE MOD(f_int1,3) = 0 6520AND f_int1 BETWEEN @max_row_div2 AND @max_row 6521ON DUPLICATE KEY 6522UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 6523f_int2 = 2 * @max_row + source_tab.f_int1, 6524f_charbig = 'was updated'; 6525 6526# check unique-1-a success: 1 6527 6528# check unique-1-b success: 1 6529DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6530UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6531f_int2 = CAST(f_char1 AS SIGNED INT), 6532f_charbig = CONCAT('===',f_char1,'===') 6533WHERE f_charbig = 'was updated'; 6534REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6535SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 6536 FROM t0_template source_tab 6537WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6538 6539# check replace success: 1 6540DELETE FROM t1 6541WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 6542DELETE FROM t1 6543WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 6544f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 6545UPDATE t1 SET f_int2 = f_int1, 6546f_char1 = CAST(f_int1 AS CHAR), 6547f_char2 = CAST(f_int1 AS CHAR), 6548f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 6549WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 6550SET AUTOCOMMIT= 0; 6551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6552SELECT f_int1, f_int1, '', '', 'was inserted' 6553FROM t0_template source_tab 6554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6555 6556# check transactions-1 success: 1 6557COMMIT WORK; 6558 6559# check transactions-2 success: 1 6560ROLLBACK WORK; 6561 6562# check transactions-3 success: 1 6563DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6564COMMIT WORK; 6565ROLLBACK WORK; 6566 6567# check transactions-4 success: 1 6568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6569SELECT f_int1, f_int1, '', '', 'was inserted' 6570FROM t0_template source_tab 6571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6572 6573# check transactions-5 success: 1 6574ROLLBACK WORK; 6575 6576# check transactions-6 success: 1 6577# INFO: Storage engine used for t1 seems to be transactional. 6578COMMIT; 6579 6580# check transactions-7 success: 1 6581DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6582COMMIT WORK; 6583SET @@session.sql_mode = 'traditional'; 6584SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 6585INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6586SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 6587'', '', 'was inserted' FROM t0_template 6588WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6589ERROR 22012: Division by 0 6590COMMIT; 6591 6592# check transactions-8 success: 1 6593# INFO: Storage engine used for t1 seems to be able to revert 6594# changes made by the failing statement. 6595SET @@session.sql_mode = ''; 6596SET AUTOCOMMIT= 1; 6597DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6598COMMIT WORK; 6599UPDATE t1 SET f_charbig = REPEAT('b', 1000); 6600 6601# check special-1 success: 1 6602UPDATE t1 SET f_charbig = ''; 6603 6604# check special-2 success: 1 6605UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 6606INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6607SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 6608WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6609INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6610SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6611'just inserted' FROM t0_template 6612WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6613CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 6614BEGIN 6615UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6616f_charbig = 'updated by trigger' 6617 WHERE f_int1 = new.f_int1; 6618END| 6619INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6620SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6622 6623# check trigger-1 success: 1 6624DROP TRIGGER trg_1; 6625UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6626f_int2 = CAST(f_char1 AS SIGNED INT), 6627f_charbig = 'just inserted' 6628 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6629DELETE FROM t0_aux 6630WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6633'just inserted' FROM t0_template 6634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6635CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 6636BEGIN 6637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6638f_charbig = 'updated by trigger' 6639 WHERE f_int1 = new.f_int1; 6640END| 6641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6642SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6644 6645# check trigger-2 success: 1 6646DROP TRIGGER trg_1; 6647UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6648f_int2 = CAST(f_char1 AS SIGNED INT), 6649f_charbig = 'just inserted' 6650 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6651DELETE FROM t0_aux 6652WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6653INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6654SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6655'just inserted' FROM t0_template 6656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6657CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6658BEGIN 6659UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6660f_charbig = 'updated by trigger' 6661 WHERE f_int1 = new.f_int1; 6662END| 6663UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6664WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6665 6666# check trigger-3 success: 1 6667DROP TRIGGER trg_1; 6668UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6669f_int2 = CAST(f_char1 AS SIGNED INT), 6670f_charbig = 'just inserted' 6671 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6672DELETE FROM t0_aux 6673WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6674INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6675SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6676'just inserted' FROM t0_template 6677WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6678CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6679BEGIN 6680UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6681f_charbig = 'updated by trigger' 6682 WHERE f_int1 = - old.f_int1; 6683END| 6684UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6685WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6686 6687# check trigger-4 success: 1 6688DROP TRIGGER trg_1; 6689UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6690f_int2 = CAST(f_char1 AS SIGNED INT), 6691f_charbig = 'just inserted' 6692 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6693DELETE FROM t0_aux 6694WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6695INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6696SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6697'just inserted' FROM t0_template 6698WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6699CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6700BEGIN 6701UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6702f_charbig = 'updated by trigger' 6703 WHERE f_int1 = new.f_int1; 6704END| 6705UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6706WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6707 6708# check trigger-5 success: 1 6709DROP TRIGGER trg_1; 6710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6711f_int2 = CAST(f_char1 AS SIGNED INT), 6712f_charbig = 'just inserted' 6713 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6714DELETE FROM t0_aux 6715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6718'just inserted' FROM t0_template 6719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6720CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6721BEGIN 6722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6723f_charbig = 'updated by trigger' 6724 WHERE f_int1 = - old.f_int1; 6725END| 6726UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6728 6729# check trigger-6 success: 1 6730DROP TRIGGER trg_1; 6731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6732f_int2 = CAST(f_char1 AS SIGNED INT), 6733f_charbig = 'just inserted' 6734 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6735DELETE FROM t0_aux 6736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6739'just inserted' FROM t0_template 6740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6741CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 6742BEGIN 6743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6744f_charbig = 'updated by trigger' 6745 WHERE f_int1 = - old.f_int1; 6746END| 6747DELETE FROM t0_aux 6748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6749 6750# check trigger-7 success: 1 6751DROP TRIGGER trg_1; 6752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6753f_int2 = CAST(f_char1 AS SIGNED INT), 6754f_charbig = 'just inserted' 6755 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6756DELETE FROM t0_aux 6757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6760'just inserted' FROM t0_template 6761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6762CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 6763BEGIN 6764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6765f_charbig = 'updated by trigger' 6766 WHERE f_int1 = - old.f_int1; 6767END| 6768DELETE FROM t0_aux 6769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6770 6771# check trigger-8 success: 1 6772DROP TRIGGER trg_1; 6773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6774f_int2 = CAST(f_char1 AS SIGNED INT), 6775f_charbig = 'just inserted' 6776 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6777DELETE FROM t0_aux 6778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6779DELETE FROM t1 6780WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6781CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6782BEGIN 6783SET new.f_int1 = old.f_int1 + @max_row, 6784new.f_int2 = old.f_int2 - @max_row, 6785new.f_charbig = '####updated per update trigger####'; 6786END| 6787UPDATE t1 6788SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6789f_charbig = '####updated per update statement itself####'; 6790 6791# check trigger-9 success: 1 6792DROP TRIGGER trg_2; 6793UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6794f_int2 = CAST(f_char1 AS SIGNED INT), 6795f_charbig = CONCAT('===',f_char1,'==='); 6796CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6797BEGIN 6798SET new.f_int1 = new.f_int1 + @max_row, 6799new.f_int2 = new.f_int2 - @max_row, 6800new.f_charbig = '####updated per update trigger####'; 6801END| 6802UPDATE t1 6803SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6804f_charbig = '####updated per update statement itself####'; 6805 6806# check trigger-10 success: 1 6807DROP TRIGGER trg_2; 6808UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6809f_int2 = CAST(f_char1 AS SIGNED INT), 6810f_charbig = CONCAT('===',f_char1,'==='); 6811CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6812BEGIN 6813SET new.f_int1 = @my_max1 + @counter, 6814new.f_int2 = @my_min2 - @counter, 6815new.f_charbig = '####updated per insert trigger####'; 6816SET @counter = @counter + 1; 6817END| 6818SET @counter = 1; 6819SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6820INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6821SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6822CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6823WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6824ORDER BY f_int1; 6825DROP TRIGGER trg_3; 6826 6827# check trigger-11 success: 1 6828DELETE FROM t1 6829WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6830AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6831AND f_charbig = '####updated per insert trigger####'; 6832CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6833BEGIN 6834SET new.f_int1 = @my_max1 + @counter, 6835new.f_int2 = @my_min2 - @counter, 6836new.f_charbig = '####updated per insert trigger####'; 6837SET @counter = @counter + 1; 6838END| 6839SET @counter = 1; 6840SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6841INSERT INTO t1 (f_char1, f_char2, f_charbig) 6842SELECT CAST(f_int1 AS CHAR), 6843CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6844WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6845ORDER BY f_int1; 6846DROP TRIGGER trg_3; 6847 6848# check trigger-12 success: 1 6849DELETE FROM t1 6850WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6851AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6852AND f_charbig = '####updated per insert trigger####'; 6853ANALYZE TABLE t1; 6854Table Op Msg_type Msg_text 6855test.t1 analyze status OK 6856CHECK TABLE t1 EXTENDED; 6857Table Op Msg_type Msg_text 6858test.t1 check status OK 6859CHECKSUM TABLE t1 EXTENDED; 6860Table Checksum 6861test.t1 <some_value> 6862OPTIMIZE TABLE t1; 6863Table Op Msg_type Msg_text 6864test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 6865test.t1 optimize status OK 6866# check layout success: 1 6867REPAIR TABLE t1 EXTENDED; 6868Table Op Msg_type Msg_text 6869test.t1 repair status OK 6870# check layout success: 1 6871TRUNCATE t1; 6872 6873# check TRUNCATE success: 1 6874# check layout success: 1 6875# End usability test (inc/partition_check.inc) 6876DROP TABLE t1; 6877CREATE TABLE t1 ( 6878f_int1 INTEGER DEFAULT 0, 6879f_int2 INTEGER DEFAULT 0, 6880f_char1 CHAR(20), 6881f_char2 CHAR(20), 6882f_charbig VARCHAR(1000) 6883 6884) 6885PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 6886(PARTITION part1 VALUES LESS THAN (0) 6887(SUBPARTITION subpart11, SUBPARTITION subpart12), 6888PARTITION part2 VALUES LESS THAN (5) 6889(SUBPARTITION subpart21, SUBPARTITION subpart22), 6890PARTITION part3 VALUES LESS THAN (10) 6891(SUBPARTITION subpart31, SUBPARTITION subpart32), 6892PARTITION part4 VALUES LESS THAN (2147483646) 6893(SUBPARTITION subpart41, SUBPARTITION subpart42)); 6894INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6895SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6896WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 6897ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 6898INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6899SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6900WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 6901# Start usability test (inc/partition_check.inc) 6902create_command 6903SHOW CREATE TABLE t1; 6904Table Create Table 6905t1 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 PARTITION BY RANGE (`f_int1`) 6914SUBPARTITION 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)) 6927 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 6932INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6933SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6934CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 6935WHERE f_int1 IN (2,3); 6936ERROR 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 6939INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6940SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6941CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6942WHERE f_int1 IN (2,3); 6943DELETE FROM t1 WHERE f_charbig = 'delete me'; 6944INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6945SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6946CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6947WHERE f_int1 IN (2,3); 6948DELETE FROM t1 WHERE f_charbig = 'delete me'; 6949# check read via f_int1 success: 1 6950# check read via f_int2 success: 1 6951 6952# check multiple-1 success: 1 6953DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 6954 6955# check multiple-2 success: 1 6956INSERT INTO t1 SELECT * FROM t0_template 6957WHERE MOD(f_int1,3) = 0; 6958 6959# check multiple-3 success: 1 6960UPDATE t1 SET f_int1 = f_int1 + @max_row 6961WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 6962AND @max_row_div2 + @max_row_div4; 6963 6964# check multiple-4 success: 1 6965DELETE FROM t1 6966WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 6967AND @max_row_div2 + @max_row_div4 + @max_row; 6968 6969# check multiple-5 success: 1 6970SELECT COUNT(*) INTO @try_count FROM t0_template 6971WHERE MOD(f_int1,3) = 0 6972AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6973SELECT COUNT(*) INTO @clash_count 6974FROM t1 INNER JOIN t0_template USING(f_int1) 6975WHERE MOD(f_int1,3) = 0 6976AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6977SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 6978INSERT INTO t1 6979SET f_int1 = @cur_value , f_int2 = @cur_value, 6980f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6981f_charbig = '#SINGLE#'; 6982 6983# check single-1 success: 1 6984SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 6985INSERT INTO t1 6986SET f_int1 = @cur_value , f_int2 = @cur_value, 6987f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6988f_charbig = '#SINGLE#'; 6989 6990# check single-2 success: 1 6991SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 6992SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 6993UPDATE t1 SET f_int1 = @cur_value2 6994WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 6995 6996# check single-3 success: 1 6997SET @cur_value1= -1; 6998SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 6999UPDATE t1 SET f_int1 = @cur_value1 7000WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 7001 7002# check single-4 success: 1 7003SELECT MAX(f_int1) INTO @cur_value FROM t1; 7004DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 7005 7006# check single-5 success: 1 7007DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 7008 7009# check single-6 success: 1 7010INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 7011ERROR HY000: Table has no partition for value 2147483647 7012DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 7013INSERT t1 SET f_int1 = 0 , f_int2 = 0, 7014f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 7015f_charbig = '#NULL#'; 7016INSERT INTO t1 7017SET f_int1 = NULL , f_int2 = -@max_row, 7018f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 7019f_charbig = '#NULL#'; 7020ERROR 23000: Column 'f_int1' cannot be null 7021# check null success: 1 7022DELETE FROM t1 7023WHERE f_int1 = 0 AND f_int2 = 0 7024AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 7025AND f_charbig = '#NULL#'; 7026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7027SELECT f_int1, f_int1, '', '', 'was inserted' 7028 FROM t0_template source_tab 7029WHERE MOD(f_int1,3) = 0 7030AND f_int1 BETWEEN @max_row_div2 AND @max_row 7031ON DUPLICATE KEY 7032UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 7033f_int2 = 2 * @max_row + source_tab.f_int1, 7034f_charbig = 'was updated'; 7035 7036# check unique-1-a success: 1 7037 7038# check unique-1-b success: 1 7039DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7040UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7041f_int2 = CAST(f_char1 AS SIGNED INT), 7042f_charbig = CONCAT('===',f_char1,'===') 7043WHERE f_charbig = 'was updated'; 7044REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7045SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 7046 FROM t0_template source_tab 7047WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7048 7049# check replace success: 1 7050DELETE FROM t1 7051WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 7052DELETE FROM t1 7053WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 7054f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 7055UPDATE t1 SET f_int2 = f_int1, 7056f_char1 = CAST(f_int1 AS CHAR), 7057f_char2 = CAST(f_int1 AS CHAR), 7058f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 7059WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 7060SET AUTOCOMMIT= 0; 7061INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7062SELECT f_int1, f_int1, '', '', 'was inserted' 7063FROM t0_template source_tab 7064WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7065 7066# check transactions-1 success: 1 7067COMMIT WORK; 7068 7069# check transactions-2 success: 1 7070ROLLBACK WORK; 7071 7072# check transactions-3 success: 1 7073DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7074COMMIT WORK; 7075ROLLBACK WORK; 7076 7077# check transactions-4 success: 1 7078INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7079SELECT f_int1, f_int1, '', '', 'was inserted' 7080FROM t0_template source_tab 7081WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7082 7083# check transactions-5 success: 1 7084ROLLBACK WORK; 7085 7086# check transactions-6 success: 1 7087# INFO: Storage engine used for t1 seems to be transactional. 7088COMMIT; 7089 7090# check transactions-7 success: 1 7091DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7092COMMIT WORK; 7093SET @@session.sql_mode = 'traditional'; 7094SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 7095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7096SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 7097'', '', 'was inserted' FROM t0_template 7098WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7099ERROR 22012: Division by 0 7100COMMIT; 7101 7102# check transactions-8 success: 1 7103# INFO: Storage engine used for t1 seems to be able to revert 7104# changes made by the failing statement. 7105SET @@session.sql_mode = ''; 7106SET AUTOCOMMIT= 1; 7107DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7108COMMIT WORK; 7109UPDATE t1 SET f_charbig = REPEAT('b', 1000); 7110 7111# check special-1 success: 1 7112UPDATE t1 SET f_charbig = ''; 7113 7114# check special-2 success: 1 7115UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 7116INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7117SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 7118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7119INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7120SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7121'just inserted' FROM t0_template 7122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7123CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 7124BEGIN 7125UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7126f_charbig = 'updated by trigger' 7127 WHERE f_int1 = new.f_int1; 7128END| 7129INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7130SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7132 7133# check trigger-1 success: 1 7134DROP TRIGGER trg_1; 7135UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7136f_int2 = CAST(f_char1 AS SIGNED INT), 7137f_charbig = 'just inserted' 7138 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7139DELETE FROM t0_aux 7140WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7141INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7142SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7143'just inserted' FROM t0_template 7144WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7145CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 7146BEGIN 7147UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7148f_charbig = 'updated by trigger' 7149 WHERE f_int1 = new.f_int1; 7150END| 7151INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7152SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7153WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7154 7155# check trigger-2 success: 1 7156DROP TRIGGER trg_1; 7157UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7158f_int2 = CAST(f_char1 AS SIGNED INT), 7159f_charbig = 'just inserted' 7160 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7161DELETE FROM t0_aux 7162WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7164SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7165'just inserted' FROM t0_template 7166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7167CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7168BEGIN 7169UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7170f_charbig = 'updated by trigger' 7171 WHERE f_int1 = new.f_int1; 7172END| 7173UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7174WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7175 7176# check trigger-3 success: 1 7177DROP TRIGGER trg_1; 7178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7179f_int2 = CAST(f_char1 AS SIGNED INT), 7180f_charbig = 'just inserted' 7181 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7182DELETE FROM t0_aux 7183WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7184INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7185SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7186'just inserted' FROM t0_template 7187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7188CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7189BEGIN 7190UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7191f_charbig = 'updated by trigger' 7192 WHERE f_int1 = - old.f_int1; 7193END| 7194UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7195WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7196 7197# check trigger-4 success: 1 7198DROP TRIGGER trg_1; 7199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7200f_int2 = CAST(f_char1 AS SIGNED INT), 7201f_charbig = 'just inserted' 7202 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7203DELETE FROM t0_aux 7204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7207'just inserted' FROM t0_template 7208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7209CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7210BEGIN 7211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7212f_charbig = 'updated by trigger' 7213 WHERE f_int1 = new.f_int1; 7214END| 7215UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7216WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7217 7218# check trigger-5 success: 1 7219DROP TRIGGER trg_1; 7220UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7221f_int2 = CAST(f_char1 AS SIGNED INT), 7222f_charbig = 'just inserted' 7223 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7224DELETE FROM t0_aux 7225WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7226INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7227SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7228'just inserted' FROM t0_template 7229WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7230CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7231BEGIN 7232UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7233f_charbig = 'updated by trigger' 7234 WHERE f_int1 = - old.f_int1; 7235END| 7236UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7237WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7238 7239# check trigger-6 success: 1 7240DROP TRIGGER trg_1; 7241UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7242f_int2 = CAST(f_char1 AS SIGNED INT), 7243f_charbig = 'just inserted' 7244 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7245DELETE FROM t0_aux 7246WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7247INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7248SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7249'just inserted' FROM t0_template 7250WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7251CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 7252BEGIN 7253UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7254f_charbig = 'updated by trigger' 7255 WHERE f_int1 = - old.f_int1; 7256END| 7257DELETE FROM t0_aux 7258WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7259 7260# check trigger-7 success: 1 7261DROP TRIGGER trg_1; 7262UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7263f_int2 = CAST(f_char1 AS SIGNED INT), 7264f_charbig = 'just inserted' 7265 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7266DELETE FROM t0_aux 7267WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7268INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7269SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7270'just inserted' FROM t0_template 7271WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7272CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 7273BEGIN 7274UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7275f_charbig = 'updated by trigger' 7276 WHERE f_int1 = - old.f_int1; 7277END| 7278DELETE FROM t0_aux 7279WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7280 7281# check trigger-8 success: 1 7282DROP TRIGGER trg_1; 7283UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7284f_int2 = CAST(f_char1 AS SIGNED INT), 7285f_charbig = 'just inserted' 7286 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7287DELETE FROM t0_aux 7288WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7289DELETE FROM t1 7290WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7291CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7292BEGIN 7293SET new.f_int1 = old.f_int1 + @max_row, 7294new.f_int2 = old.f_int2 - @max_row, 7295new.f_charbig = '####updated per update trigger####'; 7296END| 7297UPDATE t1 7298SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7299f_charbig = '####updated per update statement itself####'; 7300 7301# check trigger-9 success: 1 7302DROP TRIGGER trg_2; 7303UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7304f_int2 = CAST(f_char1 AS SIGNED INT), 7305f_charbig = CONCAT('===',f_char1,'==='); 7306CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7307BEGIN 7308SET new.f_int1 = new.f_int1 + @max_row, 7309new.f_int2 = new.f_int2 - @max_row, 7310new.f_charbig = '####updated per update trigger####'; 7311END| 7312UPDATE t1 7313SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7314f_charbig = '####updated per update statement itself####'; 7315 7316# check trigger-10 success: 1 7317DROP TRIGGER trg_2; 7318UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7319f_int2 = CAST(f_char1 AS SIGNED INT), 7320f_charbig = CONCAT('===',f_char1,'==='); 7321CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7322BEGIN 7323SET new.f_int1 = @my_max1 + @counter, 7324new.f_int2 = @my_min2 - @counter, 7325new.f_charbig = '####updated per insert trigger####'; 7326SET @counter = @counter + 1; 7327END| 7328SET @counter = 1; 7329SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7330INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7331SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7332CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7334ORDER BY f_int1; 7335DROP TRIGGER trg_3; 7336 7337# check trigger-11 success: 1 7338DELETE FROM t1 7339WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7340AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7341AND f_charbig = '####updated per insert trigger####'; 7342CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7343BEGIN 7344SET new.f_int1 = @my_max1 + @counter, 7345new.f_int2 = @my_min2 - @counter, 7346new.f_charbig = '####updated per insert trigger####'; 7347SET @counter = @counter + 1; 7348END| 7349SET @counter = 1; 7350SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7351INSERT INTO t1 (f_char1, f_char2, f_charbig) 7352SELECT CAST(f_int1 AS CHAR), 7353CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7355ORDER BY f_int1; 7356DROP TRIGGER trg_3; 7357 7358# check trigger-12 success: 1 7359DELETE FROM t1 7360WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7361AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7362AND f_charbig = '####updated per insert trigger####'; 7363ANALYZE TABLE t1; 7364Table Op Msg_type Msg_text 7365test.t1 analyze status OK 7366CHECK TABLE t1 EXTENDED; 7367Table Op Msg_type Msg_text 7368test.t1 check status OK 7369CHECKSUM TABLE t1 EXTENDED; 7370Table Checksum 7371test.t1 <some_value> 7372OPTIMIZE TABLE t1; 7373Table Op Msg_type Msg_text 7374test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 7375test.t1 optimize status OK 7376# check layout success: 1 7377REPAIR TABLE t1 EXTENDED; 7378Table Op Msg_type Msg_text 7379test.t1 repair status OK 7380# check layout success: 1 7381TRUNCATE t1; 7382 7383# check TRUNCATE success: 1 7384# check layout success: 1 7385# End usability test (inc/partition_check.inc) 7386DROP TABLE t1; 7387CREATE TABLE t1 ( 7388f_int1 INTEGER DEFAULT 0, 7389f_int2 INTEGER DEFAULT 0, 7390f_char1 CHAR(20), 7391f_char2 CHAR(20), 7392f_charbig VARCHAR(1000) 7393 7394) 7395PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 7396(PARTITION part1 VALUES IN (0) 7397(SUBPARTITION sp11, SUBPARTITION sp12), 7398PARTITION part2 VALUES IN (1) 7399(SUBPARTITION sp21, SUBPARTITION sp22), 7400PARTITION part3 VALUES IN (2) 7401(SUBPARTITION sp31, SUBPARTITION sp32), 7402PARTITION part4 VALUES IN (NULL) 7403(SUBPARTITION sp41, SUBPARTITION sp42)); 7404INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7405SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7406WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 7407ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 7408INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7409SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7410WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 7411# Start usability test (inc/partition_check.inc) 7412create_command 7413SHOW CREATE TABLE t1; 7414Table Create Table 7415t1 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 PARTITION BY LIST (abs(`f_int1` MOD 3)) 7424SUBPARTITION 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)) 7437 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 7442INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7443SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7444CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 7445WHERE f_int1 IN (2,3); 7446ERROR 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 7449INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7450SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7451CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7452WHERE f_int1 IN (2,3); 7453DELETE FROM t1 WHERE f_charbig = 'delete me'; 7454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7455SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7456CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7457WHERE f_int1 IN (2,3); 7458DELETE FROM t1 WHERE f_charbig = 'delete me'; 7459# check read via f_int1 success: 1 7460# check read via f_int2 success: 1 7461 7462# check multiple-1 success: 1 7463DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 7464 7465# check multiple-2 success: 1 7466INSERT INTO t1 SELECT * FROM t0_template 7467WHERE MOD(f_int1,3) = 0; 7468 7469# check multiple-3 success: 1 7470UPDATE t1 SET f_int1 = f_int1 + @max_row 7471WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 7472AND @max_row_div2 + @max_row_div4; 7473 7474# check multiple-4 success: 1 7475DELETE FROM t1 7476WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 7477AND @max_row_div2 + @max_row_div4 + @max_row; 7478 7479# check multiple-5 success: 1 7480SELECT COUNT(*) INTO @try_count FROM t0_template 7481WHERE MOD(f_int1,3) = 0 7482AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7483SELECT COUNT(*) INTO @clash_count 7484FROM t1 INNER JOIN t0_template USING(f_int1) 7485WHERE MOD(f_int1,3) = 0 7486AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7487SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 7488INSERT INTO t1 7489SET f_int1 = @cur_value , f_int2 = @cur_value, 7490f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7491f_charbig = '#SINGLE#'; 7492 7493# check single-1 success: 1 7494SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 7495INSERT INTO t1 7496SET f_int1 = @cur_value , f_int2 = @cur_value, 7497f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7498f_charbig = '#SINGLE#'; 7499 7500# check single-2 success: 1 7501SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 7502SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 7503UPDATE t1 SET f_int1 = @cur_value2 7504WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 7505 7506# check single-3 success: 1 7507SET @cur_value1= -1; 7508SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 7509UPDATE t1 SET f_int1 = @cur_value1 7510WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 7511 7512# check single-4 success: 1 7513SELECT MAX(f_int1) INTO @cur_value FROM t1; 7514DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 7515 7516# check single-5 success: 1 7517DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 7518 7519# check single-6 success: 1 7520INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 7521 7522# check single-7 success: 1 7523DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 7524DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 7525INSERT t1 SET f_int1 = 0 , f_int2 = 0, 7526f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 7527f_charbig = '#NULL#'; 7528INSERT INTO t1 7529SET f_int1 = NULL , f_int2 = -@max_row, 7530f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 7531f_charbig = '#NULL#'; 7532ERROR 23000: Column 'f_int1' cannot be null 7533# check null success: 1 7534DELETE FROM t1 7535WHERE f_int1 = 0 AND f_int2 = 0 7536AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 7537AND f_charbig = '#NULL#'; 7538INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7539SELECT f_int1, f_int1, '', '', 'was inserted' 7540 FROM t0_template source_tab 7541WHERE MOD(f_int1,3) = 0 7542AND f_int1 BETWEEN @max_row_div2 AND @max_row 7543ON DUPLICATE KEY 7544UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 7545f_int2 = 2 * @max_row + source_tab.f_int1, 7546f_charbig = 'was updated'; 7547 7548# check unique-1-a success: 1 7549 7550# check unique-1-b success: 1 7551DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7552UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7553f_int2 = CAST(f_char1 AS SIGNED INT), 7554f_charbig = CONCAT('===',f_char1,'===') 7555WHERE f_charbig = 'was updated'; 7556REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7557SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 7558 FROM t0_template source_tab 7559WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7560 7561# check replace success: 1 7562DELETE FROM t1 7563WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 7564DELETE FROM t1 7565WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 7566f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 7567UPDATE t1 SET f_int2 = f_int1, 7568f_char1 = CAST(f_int1 AS CHAR), 7569f_char2 = CAST(f_int1 AS CHAR), 7570f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 7571WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 7572SET AUTOCOMMIT= 0; 7573INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7574SELECT f_int1, f_int1, '', '', 'was inserted' 7575FROM t0_template source_tab 7576WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7577 7578# check transactions-1 success: 1 7579COMMIT WORK; 7580 7581# check transactions-2 success: 1 7582ROLLBACK WORK; 7583 7584# check transactions-3 success: 1 7585DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7586COMMIT WORK; 7587ROLLBACK WORK; 7588 7589# check transactions-4 success: 1 7590INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7591SELECT f_int1, f_int1, '', '', 'was inserted' 7592FROM t0_template source_tab 7593WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7594 7595# check transactions-5 success: 1 7596ROLLBACK WORK; 7597 7598# check transactions-6 success: 1 7599# INFO: Storage engine used for t1 seems to be transactional. 7600COMMIT; 7601 7602# check transactions-7 success: 1 7603DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7604COMMIT WORK; 7605SET @@session.sql_mode = 'traditional'; 7606SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 7607INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7608SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 7609'', '', 'was inserted' FROM t0_template 7610WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7611ERROR 22012: Division by 0 7612COMMIT; 7613 7614# check transactions-8 success: 1 7615# INFO: Storage engine used for t1 seems to be able to revert 7616# changes made by the failing statement. 7617SET @@session.sql_mode = ''; 7618SET AUTOCOMMIT= 1; 7619DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7620COMMIT WORK; 7621UPDATE t1 SET f_charbig = REPEAT('b', 1000); 7622 7623# check special-1 success: 1 7624UPDATE t1 SET f_charbig = ''; 7625 7626# check special-2 success: 1 7627UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 7628INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7629SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 7630WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7633'just inserted' FROM t0_template 7634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7635CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 7636BEGIN 7637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7638f_charbig = 'updated by trigger' 7639 WHERE f_int1 = new.f_int1; 7640END| 7641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7642SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7644 7645# check trigger-1 success: 1 7646DROP TRIGGER trg_1; 7647UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7648f_int2 = CAST(f_char1 AS SIGNED INT), 7649f_charbig = 'just inserted' 7650 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7651DELETE FROM t0_aux 7652WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7653INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7654SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7655'just inserted' FROM t0_template 7656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7657CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 7658BEGIN 7659UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7660f_charbig = 'updated by trigger' 7661 WHERE f_int1 = new.f_int1; 7662END| 7663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7664SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7665WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7666 7667# check trigger-2 success: 1 7668DROP TRIGGER trg_1; 7669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7670f_int2 = CAST(f_char1 AS SIGNED INT), 7671f_charbig = 'just inserted' 7672 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7673DELETE FROM t0_aux 7674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7677'just inserted' FROM t0_template 7678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7679CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7680BEGIN 7681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7682f_charbig = 'updated by trigger' 7683 WHERE f_int1 = new.f_int1; 7684END| 7685UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7687 7688# check trigger-3 success: 1 7689DROP TRIGGER trg_1; 7690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7691f_int2 = CAST(f_char1 AS SIGNED INT), 7692f_charbig = 'just inserted' 7693 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7694DELETE FROM t0_aux 7695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7698'just inserted' FROM t0_template 7699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7700CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7701BEGIN 7702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7703f_charbig = 'updated by trigger' 7704 WHERE f_int1 = - old.f_int1; 7705END| 7706UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7708 7709# check trigger-4 success: 1 7710DROP TRIGGER trg_1; 7711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7712f_int2 = CAST(f_char1 AS SIGNED INT), 7713f_charbig = 'just inserted' 7714 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7715DELETE FROM t0_aux 7716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7719'just inserted' FROM t0_template 7720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7721CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7722BEGIN 7723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7724f_charbig = 'updated by trigger' 7725 WHERE f_int1 = new.f_int1; 7726END| 7727UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7729 7730# check trigger-5 success: 1 7731DROP TRIGGER trg_1; 7732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7733f_int2 = CAST(f_char1 AS SIGNED INT), 7734f_charbig = 'just inserted' 7735 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7736DELETE FROM t0_aux 7737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7740'just inserted' FROM t0_template 7741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7742CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7743BEGIN 7744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7745f_charbig = 'updated by trigger' 7746 WHERE f_int1 = - old.f_int1; 7747END| 7748UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7750 7751# check trigger-6 success: 1 7752DROP TRIGGER trg_1; 7753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7754f_int2 = CAST(f_char1 AS SIGNED INT), 7755f_charbig = 'just inserted' 7756 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7757DELETE FROM t0_aux 7758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7759INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7760SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7761'just inserted' FROM t0_template 7762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7763CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 7764BEGIN 7765UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7766f_charbig = 'updated by trigger' 7767 WHERE f_int1 = - old.f_int1; 7768END| 7769DELETE FROM t0_aux 7770WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7771 7772# check trigger-7 success: 1 7773DROP TRIGGER trg_1; 7774UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7775f_int2 = CAST(f_char1 AS SIGNED INT), 7776f_charbig = 'just inserted' 7777 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7778DELETE FROM t0_aux 7779WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7780INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7781SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7782'just inserted' FROM t0_template 7783WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7784CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 7785BEGIN 7786UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7787f_charbig = 'updated by trigger' 7788 WHERE f_int1 = - old.f_int1; 7789END| 7790DELETE FROM t0_aux 7791WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7792 7793# check trigger-8 success: 1 7794DROP TRIGGER trg_1; 7795UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7796f_int2 = CAST(f_char1 AS SIGNED INT), 7797f_charbig = 'just inserted' 7798 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7799DELETE FROM t0_aux 7800WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7801DELETE FROM t1 7802WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7803CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7804BEGIN 7805SET new.f_int1 = old.f_int1 + @max_row, 7806new.f_int2 = old.f_int2 - @max_row, 7807new.f_charbig = '####updated per update trigger####'; 7808END| 7809UPDATE t1 7810SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7811f_charbig = '####updated per update statement itself####'; 7812 7813# check trigger-9 success: 1 7814DROP TRIGGER trg_2; 7815UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7816f_int2 = CAST(f_char1 AS SIGNED INT), 7817f_charbig = CONCAT('===',f_char1,'==='); 7818CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7819BEGIN 7820SET new.f_int1 = new.f_int1 + @max_row, 7821new.f_int2 = new.f_int2 - @max_row, 7822new.f_charbig = '####updated per update trigger####'; 7823END| 7824UPDATE t1 7825SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7826f_charbig = '####updated per update statement itself####'; 7827 7828# check trigger-10 success: 1 7829DROP TRIGGER trg_2; 7830UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7831f_int2 = CAST(f_char1 AS SIGNED INT), 7832f_charbig = CONCAT('===',f_char1,'==='); 7833CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7834BEGIN 7835SET new.f_int1 = @my_max1 + @counter, 7836new.f_int2 = @my_min2 - @counter, 7837new.f_charbig = '####updated per insert trigger####'; 7838SET @counter = @counter + 1; 7839END| 7840SET @counter = 1; 7841SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7842INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7843SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7844CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7846ORDER BY f_int1; 7847DROP TRIGGER trg_3; 7848 7849# check trigger-11 success: 1 7850DELETE FROM t1 7851WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7852AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7853AND f_charbig = '####updated per insert trigger####'; 7854CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7855BEGIN 7856SET new.f_int1 = @my_max1 + @counter, 7857new.f_int2 = @my_min2 - @counter, 7858new.f_charbig = '####updated per insert trigger####'; 7859SET @counter = @counter + 1; 7860END| 7861SET @counter = 1; 7862SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7863INSERT INTO t1 (f_char1, f_char2, f_charbig) 7864SELECT CAST(f_int1 AS CHAR), 7865CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7866WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7867ORDER BY f_int1; 7868DROP TRIGGER trg_3; 7869 7870# check trigger-12 success: 1 7871DELETE FROM t1 7872WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7873AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7874AND f_charbig = '####updated per insert trigger####'; 7875ANALYZE TABLE t1; 7876Table Op Msg_type Msg_text 7877test.t1 analyze status OK 7878CHECK TABLE t1 EXTENDED; 7879Table Op Msg_type Msg_text 7880test.t1 check status OK 7881CHECKSUM TABLE t1 EXTENDED; 7882Table Checksum 7883test.t1 <some_value> 7884OPTIMIZE TABLE t1; 7885Table Op Msg_type Msg_text 7886test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 7887test.t1 optimize status OK 7888# check layout success: 1 7889REPAIR TABLE t1 EXTENDED; 7890Table Op Msg_type Msg_text 7891test.t1 repair status OK 7892# check layout success: 1 7893TRUNCATE t1; 7894 7895# check TRUNCATE success: 1 7896# check layout success: 1 7897# End usability test (inc/partition_check.inc) 7898DROP TABLE t1; 7899CREATE TABLE t1 ( 7900f_int1 INTEGER DEFAULT 0, 7901f_int2 INTEGER DEFAULT 0, 7902f_char1 CHAR(20), 7903f_char2 CHAR(20), 7904f_charbig VARCHAR(1000) 7905 7906) 7907PARTITION BY LIST(ABS(MOD(f_int1,2))) 7908SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 7909(PARTITION part1 VALUES IN (0), 7910PARTITION part2 VALUES IN (1), 7911PARTITION part3 VALUES IN (NULL)); 7912INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7913SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7914WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 7915ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1); 7916INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7917SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7918WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 7919# Start usability test (inc/partition_check.inc) 7920create_command 7921SHOW CREATE TABLE t1; 7922Table Create Table 7923t1 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 PARTITION BY LIST (abs(`f_int1` MOD 2)) 7932SUBPARTITION BY KEY (`f_int1`) 7933SUBPARTITIONS 3 7934(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB, 7935 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB, 7936 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB) 7937 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 7942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7943SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7944CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 7945WHERE f_int1 IN (2,3); 7946ERROR 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 7949INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7950SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7951CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7952WHERE f_int1 IN (2,3); 7953DELETE FROM t1 WHERE f_charbig = 'delete me'; 7954INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7955SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7956CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7957WHERE f_int1 IN (2,3); 7958DELETE FROM t1 WHERE f_charbig = 'delete me'; 7959# check read via f_int1 success: 1 7960# check read via f_int2 success: 1 7961 7962# check multiple-1 success: 1 7963DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 7964 7965# check multiple-2 success: 1 7966INSERT INTO t1 SELECT * FROM t0_template 7967WHERE MOD(f_int1,3) = 0; 7968 7969# check multiple-3 success: 1 7970UPDATE t1 SET f_int1 = f_int1 + @max_row 7971WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 7972AND @max_row_div2 + @max_row_div4; 7973 7974# check multiple-4 success: 1 7975DELETE FROM t1 7976WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 7977AND @max_row_div2 + @max_row_div4 + @max_row; 7978 7979# check multiple-5 success: 1 7980SELECT COUNT(*) INTO @try_count FROM t0_template 7981WHERE MOD(f_int1,3) = 0 7982AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7983SELECT COUNT(*) INTO @clash_count 7984FROM t1 INNER JOIN t0_template USING(f_int1) 7985WHERE MOD(f_int1,3) = 0 7986AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7987SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 7988INSERT INTO t1 7989SET f_int1 = @cur_value , f_int2 = @cur_value, 7990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7991f_charbig = '#SINGLE#'; 7992 7993# check single-1 success: 1 7994SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 7995INSERT INTO t1 7996SET f_int1 = @cur_value , f_int2 = @cur_value, 7997f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7998f_charbig = '#SINGLE#'; 7999 8000# check single-2 success: 1 8001SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 8002SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 8003UPDATE t1 SET f_int1 = @cur_value2 8004WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 8005 8006# check single-3 success: 1 8007SET @cur_value1= -1; 8008SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 8009UPDATE t1 SET f_int1 = @cur_value1 8010WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 8011 8012# check single-4 success: 1 8013SELECT MAX(f_int1) INTO @cur_value FROM t1; 8014DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 8015 8016# check single-5 success: 1 8017DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 8018 8019# check single-6 success: 1 8020INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 8021 8022# check single-7 success: 1 8023DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 8024DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 8025INSERT t1 SET f_int1 = 0 , f_int2 = 0, 8026f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 8027f_charbig = '#NULL#'; 8028INSERT INTO t1 8029SET f_int1 = NULL , f_int2 = -@max_row, 8030f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 8031f_charbig = '#NULL#'; 8032ERROR 23000: Column 'f_int1' cannot be null 8033# check null success: 1 8034DELETE FROM t1 8035WHERE f_int1 = 0 AND f_int2 = 0 8036AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 8037AND f_charbig = '#NULL#'; 8038INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8039SELECT f_int1, f_int1, '', '', 'was inserted' 8040 FROM t0_template source_tab 8041WHERE MOD(f_int1,3) = 0 8042AND f_int1 BETWEEN @max_row_div2 AND @max_row 8043ON DUPLICATE KEY 8044UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 8045f_int2 = 2 * @max_row + source_tab.f_int1, 8046f_charbig = 'was updated'; 8047 8048# check unique-1-a success: 1 8049 8050# check unique-1-b success: 1 8051DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8052UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8053f_int2 = CAST(f_char1 AS SIGNED INT), 8054f_charbig = CONCAT('===',f_char1,'===') 8055WHERE f_charbig = 'was updated'; 8056REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8057SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 8058 FROM t0_template source_tab 8059WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8060 8061# check replace success: 1 8062DELETE FROM t1 8063WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 8064DELETE FROM t1 8065WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 8066f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 8067UPDATE t1 SET f_int2 = f_int1, 8068f_char1 = CAST(f_int1 AS CHAR), 8069f_char2 = CAST(f_int1 AS CHAR), 8070f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 8071WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 8072SET AUTOCOMMIT= 0; 8073INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8074SELECT f_int1, f_int1, '', '', 'was inserted' 8075FROM t0_template source_tab 8076WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8077 8078# check transactions-1 success: 1 8079COMMIT WORK; 8080 8081# check transactions-2 success: 1 8082ROLLBACK WORK; 8083 8084# check transactions-3 success: 1 8085DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8086COMMIT WORK; 8087ROLLBACK WORK; 8088 8089# check transactions-4 success: 1 8090INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8091SELECT f_int1, f_int1, '', '', 'was inserted' 8092FROM t0_template source_tab 8093WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8094 8095# check transactions-5 success: 1 8096ROLLBACK WORK; 8097 8098# check transactions-6 success: 1 8099# INFO: Storage engine used for t1 seems to be transactional. 8100COMMIT; 8101 8102# check transactions-7 success: 1 8103DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8104COMMIT WORK; 8105SET @@session.sql_mode = 'traditional'; 8106SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 8107INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8108SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 8109'', '', 'was inserted' FROM t0_template 8110WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8111ERROR 22012: Division by 0 8112COMMIT; 8113 8114# check transactions-8 success: 1 8115# INFO: Storage engine used for t1 seems to be able to revert 8116# changes made by the failing statement. 8117SET @@session.sql_mode = ''; 8118SET AUTOCOMMIT= 1; 8119DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8120COMMIT WORK; 8121UPDATE t1 SET f_charbig = REPEAT('b', 1000); 8122 8123# check special-1 success: 1 8124UPDATE t1 SET f_charbig = ''; 8125 8126# check special-2 success: 1 8127UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 8128INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8129SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 8130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8131INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8132SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8133'just inserted' FROM t0_template 8134WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8135CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 8136BEGIN 8137UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8138f_charbig = 'updated by trigger' 8139 WHERE f_int1 = new.f_int1; 8140END| 8141INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8142SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8144 8145# check trigger-1 success: 1 8146DROP TRIGGER trg_1; 8147UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8148f_int2 = CAST(f_char1 AS SIGNED INT), 8149f_charbig = 'just inserted' 8150 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8151DELETE FROM t0_aux 8152WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8153INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8154SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8155'just inserted' FROM t0_template 8156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8157CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 8158BEGIN 8159UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8160f_charbig = 'updated by trigger' 8161 WHERE f_int1 = new.f_int1; 8162END| 8163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8164SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8165WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8166 8167# check trigger-2 success: 1 8168DROP TRIGGER trg_1; 8169UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8170f_int2 = CAST(f_char1 AS SIGNED INT), 8171f_charbig = 'just inserted' 8172 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8173DELETE FROM t0_aux 8174WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8175INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8176SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8177'just inserted' FROM t0_template 8178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8179CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8180BEGIN 8181UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8182f_charbig = 'updated by trigger' 8183 WHERE f_int1 = new.f_int1; 8184END| 8185UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8186WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8187 8188# check trigger-3 success: 1 8189DROP TRIGGER trg_1; 8190UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8191f_int2 = CAST(f_char1 AS SIGNED INT), 8192f_charbig = 'just inserted' 8193 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8194DELETE FROM t0_aux 8195WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8196INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8197SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8198'just inserted' FROM t0_template 8199WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8200CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8201BEGIN 8202UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8203f_charbig = 'updated by trigger' 8204 WHERE f_int1 = - old.f_int1; 8205END| 8206UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8207WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8208 8209# check trigger-4 success: 1 8210DROP TRIGGER trg_1; 8211UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8212f_int2 = CAST(f_char1 AS SIGNED INT), 8213f_charbig = 'just inserted' 8214 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8215DELETE FROM t0_aux 8216WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8217INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8218SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8219'just inserted' FROM t0_template 8220WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8221CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8222BEGIN 8223UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8224f_charbig = 'updated by trigger' 8225 WHERE f_int1 = new.f_int1; 8226END| 8227UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8228WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8229 8230# check trigger-5 success: 1 8231DROP TRIGGER trg_1; 8232UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8233f_int2 = CAST(f_char1 AS SIGNED INT), 8234f_charbig = 'just inserted' 8235 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8236DELETE FROM t0_aux 8237WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8238INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8239SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8240'just inserted' FROM t0_template 8241WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8242CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8243BEGIN 8244UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8245f_charbig = 'updated by trigger' 8246 WHERE f_int1 = - old.f_int1; 8247END| 8248UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8249WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8250 8251# check trigger-6 success: 1 8252DROP TRIGGER trg_1; 8253UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8254f_int2 = CAST(f_char1 AS SIGNED INT), 8255f_charbig = 'just inserted' 8256 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8257DELETE FROM t0_aux 8258WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8259INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8260SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8261'just inserted' FROM t0_template 8262WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8263CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 8264BEGIN 8265UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8266f_charbig = 'updated by trigger' 8267 WHERE f_int1 = - old.f_int1; 8268END| 8269DELETE FROM t0_aux 8270WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8271 8272# check trigger-7 success: 1 8273DROP TRIGGER trg_1; 8274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8275f_int2 = CAST(f_char1 AS SIGNED INT), 8276f_charbig = 'just inserted' 8277 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8278DELETE FROM t0_aux 8279WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8280INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8281SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8282'just inserted' FROM t0_template 8283WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8284CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 8285BEGIN 8286UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8287f_charbig = 'updated by trigger' 8288 WHERE f_int1 = - old.f_int1; 8289END| 8290DELETE FROM t0_aux 8291WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8292 8293# check trigger-8 success: 1 8294DROP TRIGGER trg_1; 8295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8296f_int2 = CAST(f_char1 AS SIGNED INT), 8297f_charbig = 'just inserted' 8298 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8299DELETE FROM t0_aux 8300WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8301DELETE FROM t1 8302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8303CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8304BEGIN 8305SET new.f_int1 = old.f_int1 + @max_row, 8306new.f_int2 = old.f_int2 - @max_row, 8307new.f_charbig = '####updated per update trigger####'; 8308END| 8309UPDATE t1 8310SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8311f_charbig = '####updated per update statement itself####'; 8312 8313# check trigger-9 success: 1 8314DROP TRIGGER trg_2; 8315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8316f_int2 = CAST(f_char1 AS SIGNED INT), 8317f_charbig = CONCAT('===',f_char1,'==='); 8318CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8319BEGIN 8320SET new.f_int1 = new.f_int1 + @max_row, 8321new.f_int2 = new.f_int2 - @max_row, 8322new.f_charbig = '####updated per update trigger####'; 8323END| 8324UPDATE t1 8325SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8326f_charbig = '####updated per update statement itself####'; 8327 8328# check trigger-10 success: 1 8329DROP TRIGGER trg_2; 8330UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8331f_int2 = CAST(f_char1 AS SIGNED INT), 8332f_charbig = CONCAT('===',f_char1,'==='); 8333CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8334BEGIN 8335SET new.f_int1 = @my_max1 + @counter, 8336new.f_int2 = @my_min2 - @counter, 8337new.f_charbig = '####updated per insert trigger####'; 8338SET @counter = @counter + 1; 8339END| 8340SET @counter = 1; 8341SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8342INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8343SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8344CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8346ORDER BY f_int1; 8347DROP TRIGGER trg_3; 8348 8349# check trigger-11 success: 1 8350DELETE FROM t1 8351WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8352AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8353AND f_charbig = '####updated per insert trigger####'; 8354CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8355BEGIN 8356SET new.f_int1 = @my_max1 + @counter, 8357new.f_int2 = @my_min2 - @counter, 8358new.f_charbig = '####updated per insert trigger####'; 8359SET @counter = @counter + 1; 8360END| 8361SET @counter = 1; 8362SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8363INSERT INTO t1 (f_char1, f_char2, f_charbig) 8364SELECT CAST(f_int1 AS CHAR), 8365CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8366WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8367ORDER BY f_int1; 8368DROP TRIGGER trg_3; 8369 8370# check trigger-12 success: 1 8371DELETE FROM t1 8372WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8373AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8374AND f_charbig = '####updated per insert trigger####'; 8375ANALYZE TABLE t1; 8376Table Op Msg_type Msg_text 8377test.t1 analyze status OK 8378CHECK TABLE t1 EXTENDED; 8379Table Op Msg_type Msg_text 8380test.t1 check status OK 8381CHECKSUM TABLE t1 EXTENDED; 8382Table Checksum 8383test.t1 <some_value> 8384OPTIMIZE TABLE t1; 8385Table Op Msg_type Msg_text 8386test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 8387test.t1 optimize status OK 8388# check layout success: 1 8389REPAIR TABLE t1 EXTENDED; 8390Table Op Msg_type Msg_text 8391test.t1 repair status OK 8392# check layout success: 1 8393TRUNCATE t1; 8394 8395# check TRUNCATE success: 1 8396# check layout success: 1 8397# End usability test (inc/partition_check.inc) 8398DROP TABLE t1; 8399# 1.1.4 UNIQUE INDEX consisting of two columns 8400DROP TABLE IF EXISTS t1; 8401CREATE TABLE t1 ( 8402f_int1 INTEGER DEFAULT 0, 8403f_int2 INTEGER DEFAULT 0, 8404f_char1 CHAR(20), 8405f_char2 CHAR(20), 8406f_charbig VARCHAR(1000) 8407 8408) 8409PARTITION BY HASH(f_int1) PARTITIONS 2; 8410INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8411SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8412WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 8413ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 8414INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8415SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8416WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 8417# Start usability test (inc/partition_check.inc) 8418create_command 8419SHOW CREATE TABLE t1; 8420Table Create Table 8421t1 CREATE TABLE `t1` ( 8422 `f_int1` int(11) DEFAULT 0, 8423 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY HASH (`f_int1`) 8430PARTITIONS 2 8431 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 8436INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8437SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8438CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 8439WHERE f_int1 IN (2,3); 8440ERROR 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 8443INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8444SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8445CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8446WHERE f_int1 IN (2,3); 8447DELETE FROM t1 WHERE f_charbig = 'delete me'; 8448INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8449SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8450CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8451WHERE f_int1 IN (2,3); 8452DELETE FROM t1 WHERE f_charbig = 'delete me'; 8453# check read via f_int1 success: 1 8454# check read via f_int2 success: 1 8455 8456# check multiple-1 success: 1 8457DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 8458 8459# check multiple-2 success: 1 8460INSERT INTO t1 SELECT * FROM t0_template 8461WHERE MOD(f_int1,3) = 0; 8462 8463# check multiple-3 success: 1 8464UPDATE t1 SET f_int1 = f_int1 + @max_row 8465WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 8466AND @max_row_div2 + @max_row_div4; 8467 8468# check multiple-4 success: 1 8469DELETE FROM t1 8470WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 8471AND @max_row_div2 + @max_row_div4 + @max_row; 8472 8473# check multiple-5 success: 1 8474SELECT COUNT(*) INTO @try_count FROM t0_template 8475WHERE MOD(f_int1,3) = 0 8476AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8477SELECT COUNT(*) INTO @clash_count 8478FROM t1 INNER JOIN t0_template USING(f_int1) 8479WHERE MOD(f_int1,3) = 0 8480AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8481SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 8482INSERT INTO t1 8483SET f_int1 = @cur_value , f_int2 = @cur_value, 8484f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8485f_charbig = '#SINGLE#'; 8486 8487# check single-1 success: 1 8488SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 8489INSERT INTO t1 8490SET f_int1 = @cur_value , f_int2 = @cur_value, 8491f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8492f_charbig = '#SINGLE#'; 8493 8494# check single-2 success: 1 8495SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 8496SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 8497UPDATE t1 SET f_int1 = @cur_value2 8498WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 8499 8500# check single-3 success: 1 8501SET @cur_value1= -1; 8502SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 8503UPDATE t1 SET f_int1 = @cur_value1 8504WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 8505 8506# check single-4 success: 1 8507SELECT MAX(f_int1) INTO @cur_value FROM t1; 8508DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 8509 8510# check single-5 success: 1 8511DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 8512 8513# check single-6 success: 1 8514INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 8515 8516# check single-7 success: 1 8517DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 8518DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 8519INSERT t1 SET f_int1 = 0 , f_int2 = 0, 8520f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 8521f_charbig = '#NULL#'; 8522INSERT INTO t1 8523SET f_int1 = NULL , f_int2 = -@max_row, 8524f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 8525f_charbig = '#NULL#'; 8526# check null success: 1 8527 8528# check null-1 success: 1 8529UPDATE t1 SET f_int1 = -@max_row 8530WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 8531AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 8532 8533# check null-2 success: 1 8534UPDATE t1 SET f_int1 = NULL 8535WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 8536AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 8537 8538# check null-3 success: 1 8539DELETE FROM t1 8540WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 8541AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 8542 8543# check null-4 success: 1 8544DELETE FROM t1 8545WHERE f_int1 = 0 AND f_int2 = 0 8546AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 8547AND f_charbig = '#NULL#'; 8548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8549SELECT f_int1, f_int1, '', '', 'was inserted' 8550 FROM t0_template source_tab 8551WHERE MOD(f_int1,3) = 0 8552AND f_int1 BETWEEN @max_row_div2 AND @max_row 8553ON DUPLICATE KEY 8554UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 8555f_int2 = 2 * @max_row + source_tab.f_int1, 8556f_charbig = 'was updated'; 8557 8558# check unique-1-a success: 1 8559 8560# check unique-1-b success: 1 8561DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8562UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8563f_int2 = CAST(f_char1 AS SIGNED INT), 8564f_charbig = CONCAT('===',f_char1,'===') 8565WHERE f_charbig = 'was updated'; 8566REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8567SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 8568 FROM t0_template source_tab 8569WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8570 8571# check replace success: 1 8572DELETE FROM t1 8573WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 8574DELETE FROM t1 8575WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 8576f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 8577UPDATE t1 SET f_int2 = f_int1, 8578f_char1 = CAST(f_int1 AS CHAR), 8579f_char2 = CAST(f_int1 AS CHAR), 8580f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 8581WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 8582SET AUTOCOMMIT= 0; 8583INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8584SELECT f_int1, f_int1, '', '', 'was inserted' 8585FROM t0_template source_tab 8586WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8587 8588# check transactions-1 success: 1 8589COMMIT WORK; 8590 8591# check transactions-2 success: 1 8592ROLLBACK WORK; 8593 8594# check transactions-3 success: 1 8595DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8596COMMIT WORK; 8597ROLLBACK WORK; 8598 8599# check transactions-4 success: 1 8600INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8601SELECT f_int1, f_int1, '', '', 'was inserted' 8602FROM t0_template source_tab 8603WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8604 8605# check transactions-5 success: 1 8606ROLLBACK WORK; 8607 8608# check transactions-6 success: 1 8609# INFO: Storage engine used for t1 seems to be transactional. 8610COMMIT; 8611 8612# check transactions-7 success: 1 8613DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8614COMMIT WORK; 8615SET @@session.sql_mode = 'traditional'; 8616SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 8617INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8618SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 8619'', '', 'was inserted' FROM t0_template 8620WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8621ERROR 22012: Division by 0 8622COMMIT; 8623 8624# check transactions-8 success: 1 8625# INFO: Storage engine used for t1 seems to be able to revert 8626# changes made by the failing statement. 8627SET @@session.sql_mode = ''; 8628SET AUTOCOMMIT= 1; 8629DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8630COMMIT WORK; 8631UPDATE t1 SET f_charbig = REPEAT('b', 1000); 8632 8633# check special-1 success: 1 8634UPDATE t1 SET f_charbig = ''; 8635 8636# check special-2 success: 1 8637UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 8638INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8639SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 8640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8642SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8643'just inserted' FROM t0_template 8644WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8645CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 8646BEGIN 8647UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8648f_charbig = 'updated by trigger' 8649 WHERE f_int1 = new.f_int1; 8650END| 8651INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8652SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8654 8655# check trigger-1 success: 1 8656DROP TRIGGER trg_1; 8657UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8658f_int2 = CAST(f_char1 AS SIGNED INT), 8659f_charbig = 'just inserted' 8660 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8661DELETE FROM t0_aux 8662WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8664SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8665'just inserted' FROM t0_template 8666WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8667CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 8668BEGIN 8669UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8670f_charbig = 'updated by trigger' 8671 WHERE f_int1 = new.f_int1; 8672END| 8673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8674SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8676 8677# check trigger-2 success: 1 8678DROP TRIGGER trg_1; 8679UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8680f_int2 = CAST(f_char1 AS SIGNED INT), 8681f_charbig = 'just inserted' 8682 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8683DELETE FROM t0_aux 8684WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8685INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8686SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8687'just inserted' FROM t0_template 8688WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8689CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8690BEGIN 8691UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8692f_charbig = 'updated by trigger' 8693 WHERE f_int1 = new.f_int1; 8694END| 8695UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8696WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8697 8698# check trigger-3 success: 1 8699DROP TRIGGER trg_1; 8700UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8701f_int2 = CAST(f_char1 AS SIGNED INT), 8702f_charbig = 'just inserted' 8703 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8704DELETE FROM t0_aux 8705WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8706INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8707SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8708'just inserted' FROM t0_template 8709WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8710CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8711BEGIN 8712UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8713f_charbig = 'updated by trigger' 8714 WHERE f_int1 = - old.f_int1; 8715END| 8716UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8717WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8718 8719# check trigger-4 success: 1 8720DROP TRIGGER trg_1; 8721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8722f_int2 = CAST(f_char1 AS SIGNED INT), 8723f_charbig = 'just inserted' 8724 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8725DELETE FROM t0_aux 8726WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8727INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8728SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8729'just inserted' FROM t0_template 8730WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8731CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8732BEGIN 8733UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8734f_charbig = 'updated by trigger' 8735 WHERE f_int1 = new.f_int1; 8736END| 8737UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8738WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8739 8740# check trigger-5 success: 1 8741DROP TRIGGER trg_1; 8742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8743f_int2 = CAST(f_char1 AS SIGNED INT), 8744f_charbig = 'just inserted' 8745 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8746DELETE FROM t0_aux 8747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8750'just inserted' FROM t0_template 8751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8752CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8753BEGIN 8754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8755f_charbig = 'updated by trigger' 8756 WHERE f_int1 = - old.f_int1; 8757END| 8758UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8760 8761# check trigger-6 success: 1 8762DROP TRIGGER trg_1; 8763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8764f_int2 = CAST(f_char1 AS SIGNED INT), 8765f_charbig = 'just inserted' 8766 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8767DELETE FROM t0_aux 8768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8771'just inserted' FROM t0_template 8772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8773CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 8774BEGIN 8775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8776f_charbig = 'updated by trigger' 8777 WHERE f_int1 = - old.f_int1; 8778END| 8779DELETE FROM t0_aux 8780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8781 8782# check trigger-7 success: 1 8783DROP TRIGGER trg_1; 8784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8785f_int2 = CAST(f_char1 AS SIGNED INT), 8786f_charbig = 'just inserted' 8787 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8788DELETE FROM t0_aux 8789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8790INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8791SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8792'just inserted' FROM t0_template 8793WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8794CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 8795BEGIN 8796UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8797f_charbig = 'updated by trigger' 8798 WHERE f_int1 = - old.f_int1; 8799END| 8800DELETE FROM t0_aux 8801WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8802 8803# check trigger-8 success: 1 8804DROP TRIGGER trg_1; 8805UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8806f_int2 = CAST(f_char1 AS SIGNED INT), 8807f_charbig = 'just inserted' 8808 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8809DELETE FROM t0_aux 8810WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8811DELETE FROM t1 8812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8813CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8814BEGIN 8815SET new.f_int1 = old.f_int1 + @max_row, 8816new.f_int2 = old.f_int2 - @max_row, 8817new.f_charbig = '####updated per update trigger####'; 8818END| 8819UPDATE t1 8820SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8821f_charbig = '####updated per update statement itself####'; 8822 8823# check trigger-9 success: 1 8824DROP TRIGGER trg_2; 8825UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8826f_int2 = CAST(f_char1 AS SIGNED INT), 8827f_charbig = CONCAT('===',f_char1,'==='); 8828CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8829BEGIN 8830SET new.f_int1 = new.f_int1 + @max_row, 8831new.f_int2 = new.f_int2 - @max_row, 8832new.f_charbig = '####updated per update trigger####'; 8833END| 8834UPDATE t1 8835SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8836f_charbig = '####updated per update statement itself####'; 8837 8838# check trigger-10 success: 1 8839DROP TRIGGER trg_2; 8840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8841f_int2 = CAST(f_char1 AS SIGNED INT), 8842f_charbig = CONCAT('===',f_char1,'==='); 8843CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8844BEGIN 8845SET new.f_int1 = @my_max1 + @counter, 8846new.f_int2 = @my_min2 - @counter, 8847new.f_charbig = '####updated per insert trigger####'; 8848SET @counter = @counter + 1; 8849END| 8850SET @counter = 1; 8851SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8852INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8853SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8854CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8855WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8856ORDER BY f_int1; 8857DROP TRIGGER trg_3; 8858 8859# check trigger-11 success: 1 8860DELETE FROM t1 8861WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8862AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8863AND f_charbig = '####updated per insert trigger####'; 8864CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8865BEGIN 8866SET new.f_int1 = @my_max1 + @counter, 8867new.f_int2 = @my_min2 - @counter, 8868new.f_charbig = '####updated per insert trigger####'; 8869SET @counter = @counter + 1; 8870END| 8871SET @counter = 1; 8872SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8873INSERT INTO t1 (f_char1, f_char2, f_charbig) 8874SELECT CAST(f_int1 AS CHAR), 8875CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8876WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8877ORDER BY f_int1; 8878DROP TRIGGER trg_3; 8879 8880# check trigger-12 success: 1 8881DELETE FROM t1 8882WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8883AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8884AND f_charbig = '####updated per insert trigger####'; 8885ANALYZE TABLE t1; 8886Table Op Msg_type Msg_text 8887test.t1 analyze status OK 8888CHECK TABLE t1 EXTENDED; 8889Table Op Msg_type Msg_text 8890test.t1 check status OK 8891CHECKSUM TABLE t1 EXTENDED; 8892Table Checksum 8893test.t1 <some_value> 8894OPTIMIZE TABLE t1; 8895Table Op Msg_type Msg_text 8896test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 8897test.t1 optimize status OK 8898# check layout success: 1 8899REPAIR TABLE t1 EXTENDED; 8900Table Op Msg_type Msg_text 8901test.t1 repair status OK 8902# check layout success: 1 8903TRUNCATE t1; 8904 8905# check TRUNCATE success: 1 8906# check layout success: 1 8907# End usability test (inc/partition_check.inc) 8908DROP TABLE t1; 8909CREATE TABLE t1 ( 8910f_int1 INTEGER DEFAULT 0, 8911f_int2 INTEGER DEFAULT 0, 8912f_char1 CHAR(20), 8913f_char2 CHAR(20), 8914f_charbig VARCHAR(1000) 8915 8916) 8917PARTITION BY KEY(f_int1) PARTITIONS 5; 8918INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8919SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8920WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 8921ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 8922INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8923SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8924WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 8925# Start usability test (inc/partition_check.inc) 8926create_command 8927SHOW CREATE TABLE t1; 8928Table Create Table 8929t1 CREATE TABLE `t1` ( 8930 `f_int1` int(11) DEFAULT 0, 8931 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY KEY (`f_int1`) 8938PARTITIONS 5 8939 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 8944INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8945SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8946CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 8947WHERE f_int1 IN (2,3); 8948ERROR 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 8951INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8952SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8953CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8954WHERE f_int1 IN (2,3); 8955DELETE FROM t1 WHERE f_charbig = 'delete me'; 8956INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8957SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8958CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8959WHERE f_int1 IN (2,3); 8960DELETE FROM t1 WHERE f_charbig = 'delete me'; 8961# check read via f_int1 success: 1 8962# check read via f_int2 success: 1 8963 8964# check multiple-1 success: 1 8965DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 8966 8967# check multiple-2 success: 1 8968INSERT INTO t1 SELECT * FROM t0_template 8969WHERE MOD(f_int1,3) = 0; 8970 8971# check multiple-3 success: 1 8972UPDATE t1 SET f_int1 = f_int1 + @max_row 8973WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 8974AND @max_row_div2 + @max_row_div4; 8975 8976# check multiple-4 success: 1 8977DELETE FROM t1 8978WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 8979AND @max_row_div2 + @max_row_div4 + @max_row; 8980 8981# check multiple-5 success: 1 8982SELECT COUNT(*) INTO @try_count FROM t0_template 8983WHERE MOD(f_int1,3) = 0 8984AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8985SELECT COUNT(*) INTO @clash_count 8986FROM t1 INNER JOIN t0_template USING(f_int1) 8987WHERE MOD(f_int1,3) = 0 8988AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8989SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 8990INSERT INTO t1 8991SET f_int1 = @cur_value , f_int2 = @cur_value, 8992f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8993f_charbig = '#SINGLE#'; 8994 8995# check single-1 success: 1 8996SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 8997INSERT INTO t1 8998SET f_int1 = @cur_value , f_int2 = @cur_value, 8999f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9000f_charbig = '#SINGLE#'; 9001 9002# check single-2 success: 1 9003SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 9004SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 9005UPDATE t1 SET f_int1 = @cur_value2 9006WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 9007 9008# check single-3 success: 1 9009SET @cur_value1= -1; 9010SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 9011UPDATE t1 SET f_int1 = @cur_value1 9012WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 9013 9014# check single-4 success: 1 9015SELECT MAX(f_int1) INTO @cur_value FROM t1; 9016DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 9017 9018# check single-5 success: 1 9019DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 9020 9021# check single-6 success: 1 9022INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 9023 9024# check single-7 success: 1 9025DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 9026DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 9027INSERT t1 SET f_int1 = 0 , f_int2 = 0, 9028f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 9029f_charbig = '#NULL#'; 9030INSERT INTO t1 9031SET f_int1 = NULL , f_int2 = -@max_row, 9032f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 9033f_charbig = '#NULL#'; 9034# check null success: 1 9035 9036# check null-1 success: 1 9037UPDATE t1 SET f_int1 = -@max_row 9038WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9039AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9040 9041# check null-2 success: 1 9042UPDATE t1 SET f_int1 = NULL 9043WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9044AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9045 9046# check null-3 success: 1 9047DELETE FROM t1 9048WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9049AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9050 9051# check null-4 success: 1 9052DELETE FROM t1 9053WHERE f_int1 = 0 AND f_int2 = 0 9054AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 9055AND f_charbig = '#NULL#'; 9056INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9057SELECT f_int1, f_int1, '', '', 'was inserted' 9058 FROM t0_template source_tab 9059WHERE MOD(f_int1,3) = 0 9060AND f_int1 BETWEEN @max_row_div2 AND @max_row 9061ON DUPLICATE KEY 9062UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 9063f_int2 = 2 * @max_row + source_tab.f_int1, 9064f_charbig = 'was updated'; 9065 9066# check unique-1-a success: 1 9067 9068# check unique-1-b success: 1 9069DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9070UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9071f_int2 = CAST(f_char1 AS SIGNED INT), 9072f_charbig = CONCAT('===',f_char1,'===') 9073WHERE f_charbig = 'was updated'; 9074REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9075SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 9076 FROM t0_template source_tab 9077WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9078 9079# check replace success: 1 9080DELETE FROM t1 9081WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 9082DELETE FROM t1 9083WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 9084f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 9085UPDATE t1 SET f_int2 = f_int1, 9086f_char1 = CAST(f_int1 AS CHAR), 9087f_char2 = CAST(f_int1 AS CHAR), 9088f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 9089WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 9090SET AUTOCOMMIT= 0; 9091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9092SELECT f_int1, f_int1, '', '', 'was inserted' 9093FROM t0_template source_tab 9094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9095 9096# check transactions-1 success: 1 9097COMMIT WORK; 9098 9099# check transactions-2 success: 1 9100ROLLBACK WORK; 9101 9102# check transactions-3 success: 1 9103DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9104COMMIT WORK; 9105ROLLBACK WORK; 9106 9107# check transactions-4 success: 1 9108INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9109SELECT f_int1, f_int1, '', '', 'was inserted' 9110FROM t0_template source_tab 9111WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9112 9113# check transactions-5 success: 1 9114ROLLBACK WORK; 9115 9116# check transactions-6 success: 1 9117# INFO: Storage engine used for t1 seems to be transactional. 9118COMMIT; 9119 9120# check transactions-7 success: 1 9121DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9122COMMIT WORK; 9123SET @@session.sql_mode = 'traditional'; 9124SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 9125INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9126SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 9127'', '', 'was inserted' FROM t0_template 9128WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9129ERROR 22012: Division by 0 9130COMMIT; 9131 9132# check transactions-8 success: 1 9133# INFO: Storage engine used for t1 seems to be able to revert 9134# changes made by the failing statement. 9135SET @@session.sql_mode = ''; 9136SET AUTOCOMMIT= 1; 9137DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9138COMMIT WORK; 9139UPDATE t1 SET f_charbig = REPEAT('b', 1000); 9140 9141# check special-1 success: 1 9142UPDATE t1 SET f_charbig = ''; 9143 9144# check special-2 success: 1 9145UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 9146INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9147SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 9148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9151'just inserted' FROM t0_template 9152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9153CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 9154BEGIN 9155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9156f_charbig = 'updated by trigger' 9157 WHERE f_int1 = new.f_int1; 9158END| 9159INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9160SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9161WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9162 9163# check trigger-1 success: 1 9164DROP TRIGGER trg_1; 9165UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9166f_int2 = CAST(f_char1 AS SIGNED INT), 9167f_charbig = 'just inserted' 9168 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9169DELETE FROM t0_aux 9170WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9171INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9172SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9173'just inserted' FROM t0_template 9174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9175CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 9176BEGIN 9177UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9178f_charbig = 'updated by trigger' 9179 WHERE f_int1 = new.f_int1; 9180END| 9181INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9182SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9183WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9184 9185# check trigger-2 success: 1 9186DROP TRIGGER trg_1; 9187UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9188f_int2 = CAST(f_char1 AS SIGNED INT), 9189f_charbig = 'just inserted' 9190 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9191DELETE FROM t0_aux 9192WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9193INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9194SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9195'just inserted' FROM t0_template 9196WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9197CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9198BEGIN 9199UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9200f_charbig = 'updated by trigger' 9201 WHERE f_int1 = new.f_int1; 9202END| 9203UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9204WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9205 9206# check trigger-3 success: 1 9207DROP TRIGGER trg_1; 9208UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9209f_int2 = CAST(f_char1 AS SIGNED INT), 9210f_charbig = 'just inserted' 9211 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9212DELETE FROM t0_aux 9213WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9214INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9215SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9216'just inserted' FROM t0_template 9217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9218CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9219BEGIN 9220UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9221f_charbig = 'updated by trigger' 9222 WHERE f_int1 = - old.f_int1; 9223END| 9224UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9225WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9226 9227# check trigger-4 success: 1 9228DROP TRIGGER trg_1; 9229UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9230f_int2 = CAST(f_char1 AS SIGNED INT), 9231f_charbig = 'just inserted' 9232 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9233DELETE FROM t0_aux 9234WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9235INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9236SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9237'just inserted' FROM t0_template 9238WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9239CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9240BEGIN 9241UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9242f_charbig = 'updated by trigger' 9243 WHERE f_int1 = new.f_int1; 9244END| 9245UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9246WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9247 9248# check trigger-5 success: 1 9249DROP TRIGGER trg_1; 9250UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9251f_int2 = CAST(f_char1 AS SIGNED INT), 9252f_charbig = 'just inserted' 9253 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9254DELETE FROM t0_aux 9255WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9256INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9257SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9258'just inserted' FROM t0_template 9259WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9260CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9261BEGIN 9262UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9263f_charbig = 'updated by trigger' 9264 WHERE f_int1 = - old.f_int1; 9265END| 9266UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9267WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9268 9269# check trigger-6 success: 1 9270DROP TRIGGER trg_1; 9271UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9272f_int2 = CAST(f_char1 AS SIGNED INT), 9273f_charbig = 'just inserted' 9274 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9275DELETE FROM t0_aux 9276WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9277INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9278SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9279'just inserted' FROM t0_template 9280WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9281CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 9282BEGIN 9283UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9284f_charbig = 'updated by trigger' 9285 WHERE f_int1 = - old.f_int1; 9286END| 9287DELETE FROM t0_aux 9288WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9289 9290# check trigger-7 success: 1 9291DROP TRIGGER trg_1; 9292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9293f_int2 = CAST(f_char1 AS SIGNED INT), 9294f_charbig = 'just inserted' 9295 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9296DELETE FROM t0_aux 9297WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9298INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9299SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9300'just inserted' FROM t0_template 9301WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9302CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 9303BEGIN 9304UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9305f_charbig = 'updated by trigger' 9306 WHERE f_int1 = - old.f_int1; 9307END| 9308DELETE FROM t0_aux 9309WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9310 9311# check trigger-8 success: 1 9312DROP TRIGGER trg_1; 9313UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9314f_int2 = CAST(f_char1 AS SIGNED INT), 9315f_charbig = 'just inserted' 9316 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9317DELETE FROM t0_aux 9318WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9319DELETE FROM t1 9320WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9321CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9322BEGIN 9323SET new.f_int1 = old.f_int1 + @max_row, 9324new.f_int2 = old.f_int2 - @max_row, 9325new.f_charbig = '####updated per update trigger####'; 9326END| 9327UPDATE t1 9328SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9329f_charbig = '####updated per update statement itself####'; 9330 9331# check trigger-9 success: 1 9332DROP TRIGGER trg_2; 9333UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9334f_int2 = CAST(f_char1 AS SIGNED INT), 9335f_charbig = CONCAT('===',f_char1,'==='); 9336CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9337BEGIN 9338SET new.f_int1 = new.f_int1 + @max_row, 9339new.f_int2 = new.f_int2 - @max_row, 9340new.f_charbig = '####updated per update trigger####'; 9341END| 9342UPDATE t1 9343SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9344f_charbig = '####updated per update statement itself####'; 9345 9346# check trigger-10 success: 1 9347DROP TRIGGER trg_2; 9348UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9349f_int2 = CAST(f_char1 AS SIGNED INT), 9350f_charbig = CONCAT('===',f_char1,'==='); 9351CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9352BEGIN 9353SET new.f_int1 = @my_max1 + @counter, 9354new.f_int2 = @my_min2 - @counter, 9355new.f_charbig = '####updated per insert trigger####'; 9356SET @counter = @counter + 1; 9357END| 9358SET @counter = 1; 9359SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9360INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9361SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9362CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9364ORDER BY f_int1; 9365DROP TRIGGER trg_3; 9366 9367# check trigger-11 success: 1 9368DELETE FROM t1 9369WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9370AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9371AND f_charbig = '####updated per insert trigger####'; 9372CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9373BEGIN 9374SET new.f_int1 = @my_max1 + @counter, 9375new.f_int2 = @my_min2 - @counter, 9376new.f_charbig = '####updated per insert trigger####'; 9377SET @counter = @counter + 1; 9378END| 9379SET @counter = 1; 9380SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9381INSERT INTO t1 (f_char1, f_char2, f_charbig) 9382SELECT CAST(f_int1 AS CHAR), 9383CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9384WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9385ORDER BY f_int1; 9386DROP TRIGGER trg_3; 9387 9388# check trigger-12 success: 1 9389DELETE FROM t1 9390WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9391AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9392AND f_charbig = '####updated per insert trigger####'; 9393ANALYZE TABLE t1; 9394Table Op Msg_type Msg_text 9395test.t1 analyze status OK 9396CHECK TABLE t1 EXTENDED; 9397Table Op Msg_type Msg_text 9398test.t1 check status OK 9399CHECKSUM TABLE t1 EXTENDED; 9400Table Checksum 9401test.t1 <some_value> 9402OPTIMIZE TABLE t1; 9403Table Op Msg_type Msg_text 9404test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 9405test.t1 optimize status OK 9406# check layout success: 1 9407REPAIR TABLE t1 EXTENDED; 9408Table Op Msg_type Msg_text 9409test.t1 repair status OK 9410# check layout success: 1 9411TRUNCATE t1; 9412 9413# check TRUNCATE success: 1 9414# check layout success: 1 9415# End usability test (inc/partition_check.inc) 9416DROP TABLE t1; 9417CREATE TABLE t1 ( 9418f_int1 INTEGER DEFAULT 0, 9419f_int2 INTEGER DEFAULT 0, 9420f_char1 CHAR(20), 9421f_char2 CHAR(20), 9422f_charbig VARCHAR(1000) 9423 9424) 9425PARTITION BY LIST(MOD(f_int1,4)) 9426(PARTITION part_3 VALUES IN (-3), 9427PARTITION part_2 VALUES IN (-2), 9428PARTITION part_1 VALUES IN (-1), 9429PARTITION part_N VALUES IN (NULL), 9430PARTITION part0 VALUES IN (0), 9431PARTITION part1 VALUES IN (1), 9432PARTITION part2 VALUES IN (2), 9433PARTITION part3 VALUES IN (3)); 9434INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9435SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9436WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 9437ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 9438INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9439SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9440WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 9441# Start usability test (inc/partition_check.inc) 9442create_command 9443SHOW CREATE TABLE t1; 9444Table Create Table 9445t1 CREATE TABLE `t1` ( 9446 `f_int1` int(11) DEFAULT 0, 9447 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (`f_int1` MOD 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) 9462 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 9467INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9468SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9469CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 9470WHERE f_int1 IN (2,3); 9471ERROR 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 9474INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9475SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9476CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9477WHERE f_int1 IN (2,3); 9478DELETE FROM t1 WHERE f_charbig = 'delete me'; 9479INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9480SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9481CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9482WHERE f_int1 IN (2,3); 9483DELETE FROM t1 WHERE f_charbig = 'delete me'; 9484# check read via f_int1 success: 1 9485# check read via f_int2 success: 1 9486 9487# check multiple-1 success: 1 9488DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 9489 9490# check multiple-2 success: 1 9491INSERT INTO t1 SELECT * FROM t0_template 9492WHERE MOD(f_int1,3) = 0; 9493 9494# check multiple-3 success: 1 9495UPDATE t1 SET f_int1 = f_int1 + @max_row 9496WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 9497AND @max_row_div2 + @max_row_div4; 9498 9499# check multiple-4 success: 1 9500DELETE FROM t1 9501WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 9502AND @max_row_div2 + @max_row_div4 + @max_row; 9503 9504# check multiple-5 success: 1 9505SELECT COUNT(*) INTO @try_count FROM t0_template 9506WHERE MOD(f_int1,3) = 0 9507AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9508SELECT COUNT(*) INTO @clash_count 9509FROM t1 INNER JOIN t0_template USING(f_int1) 9510WHERE MOD(f_int1,3) = 0 9511AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9512SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 9513INSERT INTO t1 9514SET f_int1 = @cur_value , f_int2 = @cur_value, 9515f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9516f_charbig = '#SINGLE#'; 9517 9518# check single-1 success: 1 9519SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 9520INSERT INTO t1 9521SET f_int1 = @cur_value , f_int2 = @cur_value, 9522f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9523f_charbig = '#SINGLE#'; 9524 9525# check single-2 success: 1 9526SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 9527SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 9528UPDATE t1 SET f_int1 = @cur_value2 9529WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 9530 9531# check single-3 success: 1 9532SET @cur_value1= -1; 9533SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 9534UPDATE t1 SET f_int1 = @cur_value1 9535WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 9536 9537# check single-4 success: 1 9538SELECT MAX(f_int1) INTO @cur_value FROM t1; 9539DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 9540 9541# check single-5 success: 1 9542DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 9543 9544# check single-6 success: 1 9545INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 9546 9547# check single-7 success: 1 9548DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 9549DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 9550INSERT t1 SET f_int1 = 0 , f_int2 = 0, 9551f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 9552f_charbig = '#NULL#'; 9553INSERT INTO t1 9554SET f_int1 = NULL , f_int2 = -@max_row, 9555f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 9556f_charbig = '#NULL#'; 9557# check null success: 1 9558 9559# check null-1 success: 1 9560UPDATE t1 SET f_int1 = -@max_row 9561WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9562AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9563 9564# check null-2 success: 1 9565UPDATE t1 SET f_int1 = NULL 9566WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9567AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9568 9569# check null-3 success: 1 9570DELETE FROM t1 9571WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 9572AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 9573 9574# check null-4 success: 1 9575DELETE FROM t1 9576WHERE f_int1 = 0 AND f_int2 = 0 9577AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 9578AND f_charbig = '#NULL#'; 9579INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9580SELECT f_int1, f_int1, '', '', 'was inserted' 9581 FROM t0_template source_tab 9582WHERE MOD(f_int1,3) = 0 9583AND f_int1 BETWEEN @max_row_div2 AND @max_row 9584ON DUPLICATE KEY 9585UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 9586f_int2 = 2 * @max_row + source_tab.f_int1, 9587f_charbig = 'was updated'; 9588 9589# check unique-1-a success: 1 9590 9591# check unique-1-b success: 1 9592DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9593UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9594f_int2 = CAST(f_char1 AS SIGNED INT), 9595f_charbig = CONCAT('===',f_char1,'===') 9596WHERE f_charbig = 'was updated'; 9597REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9598SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 9599 FROM t0_template source_tab 9600WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9601 9602# check replace success: 1 9603DELETE FROM t1 9604WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 9605DELETE FROM t1 9606WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 9607f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 9608UPDATE t1 SET f_int2 = f_int1, 9609f_char1 = CAST(f_int1 AS CHAR), 9610f_char2 = CAST(f_int1 AS CHAR), 9611f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 9612WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 9613SET AUTOCOMMIT= 0; 9614INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9615SELECT f_int1, f_int1, '', '', 'was inserted' 9616FROM t0_template source_tab 9617WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9618 9619# check transactions-1 success: 1 9620COMMIT WORK; 9621 9622# check transactions-2 success: 1 9623ROLLBACK WORK; 9624 9625# check transactions-3 success: 1 9626DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9627COMMIT WORK; 9628ROLLBACK WORK; 9629 9630# check transactions-4 success: 1 9631INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9632SELECT f_int1, f_int1, '', '', 'was inserted' 9633FROM t0_template source_tab 9634WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9635 9636# check transactions-5 success: 1 9637ROLLBACK WORK; 9638 9639# check transactions-6 success: 1 9640# INFO: Storage engine used for t1 seems to be transactional. 9641COMMIT; 9642 9643# check transactions-7 success: 1 9644DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9645COMMIT WORK; 9646SET @@session.sql_mode = 'traditional'; 9647SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 9648INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9649SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 9650'', '', 'was inserted' FROM t0_template 9651WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9652ERROR 22012: Division by 0 9653COMMIT; 9654 9655# check transactions-8 success: 1 9656# INFO: Storage engine used for t1 seems to be able to revert 9657# changes made by the failing statement. 9658SET @@session.sql_mode = ''; 9659SET AUTOCOMMIT= 1; 9660DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9661COMMIT WORK; 9662UPDATE t1 SET f_charbig = REPEAT('b', 1000); 9663 9664# check special-1 success: 1 9665UPDATE t1 SET f_charbig = ''; 9666 9667# check special-2 success: 1 9668UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 9669INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9670SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 9671WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9672INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9673SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9674'just inserted' FROM t0_template 9675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9676CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 9677BEGIN 9678UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9679f_charbig = 'updated by trigger' 9680 WHERE f_int1 = new.f_int1; 9681END| 9682INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9683SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9684WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9685 9686# check trigger-1 success: 1 9687DROP TRIGGER trg_1; 9688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9689f_int2 = CAST(f_char1 AS SIGNED INT), 9690f_charbig = 'just inserted' 9691 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9692DELETE FROM t0_aux 9693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9696'just inserted' FROM t0_template 9697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9698CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 9699BEGIN 9700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9701f_charbig = 'updated by trigger' 9702 WHERE f_int1 = new.f_int1; 9703END| 9704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9705SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9706WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9707 9708# check trigger-2 success: 1 9709DROP TRIGGER trg_1; 9710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9711f_int2 = CAST(f_char1 AS SIGNED INT), 9712f_charbig = 'just inserted' 9713 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9714DELETE FROM t0_aux 9715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9718'just inserted' FROM t0_template 9719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9720CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9721BEGIN 9722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9723f_charbig = 'updated by trigger' 9724 WHERE f_int1 = new.f_int1; 9725END| 9726UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9728 9729# check trigger-3 success: 1 9730DROP TRIGGER trg_1; 9731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9732f_int2 = CAST(f_char1 AS SIGNED INT), 9733f_charbig = 'just inserted' 9734 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9735DELETE FROM t0_aux 9736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9739'just inserted' FROM t0_template 9740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9741CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9742BEGIN 9743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9744f_charbig = 'updated by trigger' 9745 WHERE f_int1 = - old.f_int1; 9746END| 9747UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9749 9750# check trigger-4 success: 1 9751DROP TRIGGER trg_1; 9752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9753f_int2 = CAST(f_char1 AS SIGNED INT), 9754f_charbig = 'just inserted' 9755 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9756DELETE FROM t0_aux 9757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9760'just inserted' FROM t0_template 9761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9762CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9763BEGIN 9764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9765f_charbig = 'updated by trigger' 9766 WHERE f_int1 = new.f_int1; 9767END| 9768UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9770 9771# check trigger-5 success: 1 9772DROP TRIGGER trg_1; 9773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9774f_int2 = CAST(f_char1 AS SIGNED INT), 9775f_charbig = 'just inserted' 9776 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9777DELETE FROM t0_aux 9778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9779INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9780SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9781'just inserted' FROM t0_template 9782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9783CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9784BEGIN 9785UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9786f_charbig = 'updated by trigger' 9787 WHERE f_int1 = - old.f_int1; 9788END| 9789UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9790WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9791 9792# check trigger-6 success: 1 9793DROP TRIGGER trg_1; 9794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9795f_int2 = CAST(f_char1 AS SIGNED INT), 9796f_charbig = 'just inserted' 9797 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9798DELETE FROM t0_aux 9799WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9800INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9801SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9802'just inserted' FROM t0_template 9803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9804CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 9805BEGIN 9806UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9807f_charbig = 'updated by trigger' 9808 WHERE f_int1 = - old.f_int1; 9809END| 9810DELETE FROM t0_aux 9811WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9812 9813# check trigger-7 success: 1 9814DROP TRIGGER trg_1; 9815UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9816f_int2 = CAST(f_char1 AS SIGNED INT), 9817f_charbig = 'just inserted' 9818 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9819DELETE FROM t0_aux 9820WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9821INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9822SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9823'just inserted' FROM t0_template 9824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9825CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 9826BEGIN 9827UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9828f_charbig = 'updated by trigger' 9829 WHERE f_int1 = - old.f_int1; 9830END| 9831DELETE FROM t0_aux 9832WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9833 9834# check trigger-8 success: 1 9835DROP TRIGGER trg_1; 9836UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9837f_int2 = CAST(f_char1 AS SIGNED INT), 9838f_charbig = 'just inserted' 9839 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9840DELETE FROM t0_aux 9841WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9842DELETE FROM t1 9843WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9844CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9845BEGIN 9846SET new.f_int1 = old.f_int1 + @max_row, 9847new.f_int2 = old.f_int2 - @max_row, 9848new.f_charbig = '####updated per update trigger####'; 9849END| 9850UPDATE t1 9851SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9852f_charbig = '####updated per update statement itself####'; 9853 9854# check trigger-9 success: 1 9855DROP TRIGGER trg_2; 9856UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9857f_int2 = CAST(f_char1 AS SIGNED INT), 9858f_charbig = CONCAT('===',f_char1,'==='); 9859CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9860BEGIN 9861SET new.f_int1 = new.f_int1 + @max_row, 9862new.f_int2 = new.f_int2 - @max_row, 9863new.f_charbig = '####updated per update trigger####'; 9864END| 9865UPDATE t1 9866SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9867f_charbig = '####updated per update statement itself####'; 9868 9869# check trigger-10 success: 1 9870DROP TRIGGER trg_2; 9871UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9872f_int2 = CAST(f_char1 AS SIGNED INT), 9873f_charbig = CONCAT('===',f_char1,'==='); 9874CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9875BEGIN 9876SET new.f_int1 = @my_max1 + @counter, 9877new.f_int2 = @my_min2 - @counter, 9878new.f_charbig = '####updated per insert trigger####'; 9879SET @counter = @counter + 1; 9880END| 9881SET @counter = 1; 9882SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9883INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9884SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9885CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9886WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9887ORDER BY f_int1; 9888DROP TRIGGER trg_3; 9889 9890# check trigger-11 success: 1 9891DELETE FROM t1 9892WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9893AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9894AND f_charbig = '####updated per insert trigger####'; 9895CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9896BEGIN 9897SET new.f_int1 = @my_max1 + @counter, 9898new.f_int2 = @my_min2 - @counter, 9899new.f_charbig = '####updated per insert trigger####'; 9900SET @counter = @counter + 1; 9901END| 9902SET @counter = 1; 9903SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9904INSERT INTO t1 (f_char1, f_char2, f_charbig) 9905SELECT CAST(f_int1 AS CHAR), 9906CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9907WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9908ORDER BY f_int1; 9909DROP TRIGGER trg_3; 9910 9911# check trigger-12 success: 1 9912DELETE FROM t1 9913WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9914AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9915AND f_charbig = '####updated per insert trigger####'; 9916ANALYZE TABLE t1; 9917Table Op Msg_type Msg_text 9918test.t1 analyze status OK 9919CHECK TABLE t1 EXTENDED; 9920Table Op Msg_type Msg_text 9921test.t1 check status OK 9922CHECKSUM TABLE t1 EXTENDED; 9923Table Checksum 9924test.t1 <some_value> 9925OPTIMIZE TABLE t1; 9926Table Op Msg_type Msg_text 9927test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 9928test.t1 optimize status OK 9929# check layout success: 1 9930REPAIR TABLE t1 EXTENDED; 9931Table Op Msg_type Msg_text 9932test.t1 repair status OK 9933# check layout success: 1 9934TRUNCATE t1; 9935 9936# check TRUNCATE success: 1 9937# check layout success: 1 9938# End usability test (inc/partition_check.inc) 9939DROP TABLE t1; 9940CREATE TABLE t1 ( 9941f_int1 INTEGER DEFAULT 0, 9942f_int2 INTEGER DEFAULT 0, 9943f_char1 CHAR(20), 9944f_char2 CHAR(20), 9945f_charbig VARCHAR(1000) 9946 9947) 9948PARTITION BY RANGE(f_int1) 9949(PARTITION parta VALUES LESS THAN (0), 9950PARTITION partb VALUES LESS THAN (5), 9951PARTITION partc VALUES LESS THAN (10), 9952PARTITION partd VALUES LESS THAN (10 + 5), 9953PARTITION parte VALUES LESS THAN (20), 9954PARTITION partf VALUES LESS THAN (2147483646)); 9955INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9956SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9957WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 9958ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 9959INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9960SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9961WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 9962# Start usability test (inc/partition_check.inc) 9963create_command 9964SHOW CREATE TABLE t1; 9965Table Create Table 9966t1 CREATE TABLE `t1` ( 9967 `f_int1` int(11) DEFAULT 0, 9968 `f_int2` int(11) DEFAULT 0, 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 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) 9981 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 9986INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9987SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9988CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 9989WHERE f_int1 IN (2,3); 9990ERROR 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 9993INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9994SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9995CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9996WHERE f_int1 IN (2,3); 9997DELETE FROM t1 WHERE f_charbig = 'delete me'; 9998INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9999SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10000CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10001WHERE f_int1 IN (2,3); 10002DELETE FROM t1 WHERE f_charbig = 'delete me'; 10003# check read via f_int1 success: 1 10004# check read via f_int2 success: 1 10005 10006# check multiple-1 success: 1 10007DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 10008 10009# check multiple-2 success: 1 10010INSERT INTO t1 SELECT * FROM t0_template 10011WHERE MOD(f_int1,3) = 0; 10012 10013# check multiple-3 success: 1 10014UPDATE t1 SET f_int1 = f_int1 + @max_row 10015WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 10016AND @max_row_div2 + @max_row_div4; 10017 10018# check multiple-4 success: 1 10019DELETE FROM t1 10020WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 10021AND @max_row_div2 + @max_row_div4 + @max_row; 10022 10023# check multiple-5 success: 1 10024SELECT COUNT(*) INTO @try_count FROM t0_template 10025WHERE MOD(f_int1,3) = 0 10026AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10027SELECT COUNT(*) INTO @clash_count 10028FROM t1 INNER JOIN t0_template USING(f_int1) 10029WHERE MOD(f_int1,3) = 0 10030AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10031SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 10032INSERT INTO t1 10033SET f_int1 = @cur_value , f_int2 = @cur_value, 10034f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10035f_charbig = '#SINGLE#'; 10036 10037# check single-1 success: 1 10038SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 10039INSERT INTO t1 10040SET f_int1 = @cur_value , f_int2 = @cur_value, 10041f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10042f_charbig = '#SINGLE#'; 10043 10044# check single-2 success: 1 10045SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 10046SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 10047UPDATE t1 SET f_int1 = @cur_value2 10048WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 10049 10050# check single-3 success: 1 10051SET @cur_value1= -1; 10052SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 10053UPDATE t1 SET f_int1 = @cur_value1 10054WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 10055 10056# check single-4 success: 1 10057SELECT MAX(f_int1) INTO @cur_value FROM t1; 10058DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 10059 10060# check single-5 success: 1 10061DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 10062 10063# check single-6 success: 1 10064INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 10065ERROR HY000: Table has no partition for value 2147483647 10066DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 10067INSERT t1 SET f_int1 = 0 , f_int2 = 0, 10068f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 10069f_charbig = '#NULL#'; 10070INSERT INTO t1 10071SET f_int1 = NULL , f_int2 = -@max_row, 10072f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 10073f_charbig = '#NULL#'; 10074# check null success: 1 10075 10076# check null-1 success: 1 10077UPDATE t1 SET f_int1 = -@max_row 10078WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10079AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10080 10081# check null-2 success: 1 10082UPDATE t1 SET f_int1 = NULL 10083WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10084AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10085 10086# check null-3 success: 1 10087DELETE FROM t1 10088WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10089AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10090 10091# check null-4 success: 1 10092DELETE FROM t1 10093WHERE f_int1 = 0 AND f_int2 = 0 10094AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 10095AND f_charbig = '#NULL#'; 10096INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10097SELECT f_int1, f_int1, '', '', 'was inserted' 10098 FROM t0_template source_tab 10099WHERE MOD(f_int1,3) = 0 10100AND f_int1 BETWEEN @max_row_div2 AND @max_row 10101ON DUPLICATE KEY 10102UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 10103f_int2 = 2 * @max_row + source_tab.f_int1, 10104f_charbig = 'was updated'; 10105 10106# check unique-1-a success: 1 10107 10108# check unique-1-b success: 1 10109DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10111f_int2 = CAST(f_char1 AS SIGNED INT), 10112f_charbig = CONCAT('===',f_char1,'===') 10113WHERE f_charbig = 'was updated'; 10114REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10115SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 10116 FROM t0_template source_tab 10117WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10118 10119# check replace success: 1 10120DELETE FROM t1 10121WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 10122DELETE FROM t1 10123WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 10124f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 10125UPDATE t1 SET f_int2 = f_int1, 10126f_char1 = CAST(f_int1 AS CHAR), 10127f_char2 = CAST(f_int1 AS CHAR), 10128f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 10129WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 10130SET AUTOCOMMIT= 0; 10131INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10132SELECT f_int1, f_int1, '', '', 'was inserted' 10133FROM t0_template source_tab 10134WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10135 10136# check transactions-1 success: 1 10137COMMIT WORK; 10138 10139# check transactions-2 success: 1 10140ROLLBACK WORK; 10141 10142# check transactions-3 success: 1 10143DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10144COMMIT WORK; 10145ROLLBACK WORK; 10146 10147# check transactions-4 success: 1 10148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10149SELECT f_int1, f_int1, '', '', 'was inserted' 10150FROM t0_template source_tab 10151WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10152 10153# check transactions-5 success: 1 10154ROLLBACK WORK; 10155 10156# check transactions-6 success: 1 10157# INFO: Storage engine used for t1 seems to be transactional. 10158COMMIT; 10159 10160# check transactions-7 success: 1 10161DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10162COMMIT WORK; 10163SET @@session.sql_mode = 'traditional'; 10164SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 10165INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10166SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 10167'', '', 'was inserted' FROM t0_template 10168WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10169ERROR 22012: Division by 0 10170COMMIT; 10171 10172# check transactions-8 success: 1 10173# INFO: Storage engine used for t1 seems to be able to revert 10174# changes made by the failing statement. 10175SET @@session.sql_mode = ''; 10176SET AUTOCOMMIT= 1; 10177DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10178COMMIT WORK; 10179UPDATE t1 SET f_charbig = REPEAT('b', 1000); 10180 10181# check special-1 success: 1 10182UPDATE t1 SET f_charbig = ''; 10183 10184# check special-2 success: 1 10185UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 10186INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10187SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 10188WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10189INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10190SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10191'just inserted' FROM t0_template 10192WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10193CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 10194BEGIN 10195UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10196f_charbig = 'updated by trigger' 10197 WHERE f_int1 = new.f_int1; 10198END| 10199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10200SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10201WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10202 10203# check trigger-1 success: 1 10204DROP TRIGGER trg_1; 10205UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10206f_int2 = CAST(f_char1 AS SIGNED INT), 10207f_charbig = 'just inserted' 10208 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10209DELETE FROM t0_aux 10210WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10211INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10212SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10213'just inserted' FROM t0_template 10214WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10215CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 10216BEGIN 10217UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10218f_charbig = 'updated by trigger' 10219 WHERE f_int1 = new.f_int1; 10220END| 10221INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10222SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10224 10225# check trigger-2 success: 1 10226DROP TRIGGER trg_1; 10227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10228f_int2 = CAST(f_char1 AS SIGNED INT), 10229f_charbig = 'just inserted' 10230 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10231DELETE FROM t0_aux 10232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10235'just inserted' FROM t0_template 10236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10237CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10238BEGIN 10239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10240f_charbig = 'updated by trigger' 10241 WHERE f_int1 = new.f_int1; 10242END| 10243UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10245 10246# check trigger-3 success: 1 10247DROP TRIGGER trg_1; 10248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10249f_int2 = CAST(f_char1 AS SIGNED INT), 10250f_charbig = 'just inserted' 10251 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10252DELETE FROM t0_aux 10253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10255SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10256'just inserted' FROM t0_template 10257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10258CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10259BEGIN 10260UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10261f_charbig = 'updated by trigger' 10262 WHERE f_int1 = - old.f_int1; 10263END| 10264UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10265WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10266 10267# check trigger-4 success: 1 10268DROP TRIGGER trg_1; 10269UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10270f_int2 = CAST(f_char1 AS SIGNED INT), 10271f_charbig = 'just inserted' 10272 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10273DELETE FROM t0_aux 10274WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10275INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10276SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10277'just inserted' FROM t0_template 10278WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10279CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10280BEGIN 10281UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10282f_charbig = 'updated by trigger' 10283 WHERE f_int1 = new.f_int1; 10284END| 10285UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10286WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10287 10288# check trigger-5 success: 1 10289DROP TRIGGER trg_1; 10290UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10291f_int2 = CAST(f_char1 AS SIGNED INT), 10292f_charbig = 'just inserted' 10293 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10294DELETE FROM t0_aux 10295WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10296INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10297SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10298'just inserted' FROM t0_template 10299WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10300CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10301BEGIN 10302UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10303f_charbig = 'updated by trigger' 10304 WHERE f_int1 = - old.f_int1; 10305END| 10306UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10307WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10308 10309# check trigger-6 success: 1 10310DROP TRIGGER trg_1; 10311UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10312f_int2 = CAST(f_char1 AS SIGNED INT), 10313f_charbig = 'just inserted' 10314 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10315DELETE FROM t0_aux 10316WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10317INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10318SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10319'just inserted' FROM t0_template 10320WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10321CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 10322BEGIN 10323UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10324f_charbig = 'updated by trigger' 10325 WHERE f_int1 = - old.f_int1; 10326END| 10327DELETE FROM t0_aux 10328WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10329 10330# check trigger-7 success: 1 10331DROP TRIGGER trg_1; 10332UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10333f_int2 = CAST(f_char1 AS SIGNED INT), 10334f_charbig = 'just inserted' 10335 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10336DELETE FROM t0_aux 10337WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10338INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10339SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10340'just inserted' FROM t0_template 10341WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10342CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 10343BEGIN 10344UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10345f_charbig = 'updated by trigger' 10346 WHERE f_int1 = - old.f_int1; 10347END| 10348DELETE FROM t0_aux 10349WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10350 10351# check trigger-8 success: 1 10352DROP TRIGGER trg_1; 10353UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10354f_int2 = CAST(f_char1 AS SIGNED INT), 10355f_charbig = 'just inserted' 10356 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10357DELETE FROM t0_aux 10358WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10359DELETE FROM t1 10360WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10361CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10362BEGIN 10363SET new.f_int1 = old.f_int1 + @max_row, 10364new.f_int2 = old.f_int2 - @max_row, 10365new.f_charbig = '####updated per update trigger####'; 10366END| 10367UPDATE t1 10368SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10369f_charbig = '####updated per update statement itself####'; 10370 10371# check trigger-9 success: 1 10372DROP TRIGGER trg_2; 10373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10374f_int2 = CAST(f_char1 AS SIGNED INT), 10375f_charbig = CONCAT('===',f_char1,'==='); 10376CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10377BEGIN 10378SET new.f_int1 = new.f_int1 + @max_row, 10379new.f_int2 = new.f_int2 - @max_row, 10380new.f_charbig = '####updated per update trigger####'; 10381END| 10382UPDATE t1 10383SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10384f_charbig = '####updated per update statement itself####'; 10385 10386# check trigger-10 success: 1 10387DROP TRIGGER trg_2; 10388UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10389f_int2 = CAST(f_char1 AS SIGNED INT), 10390f_charbig = CONCAT('===',f_char1,'==='); 10391CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10392BEGIN 10393SET new.f_int1 = @my_max1 + @counter, 10394new.f_int2 = @my_min2 - @counter, 10395new.f_charbig = '####updated per insert trigger####'; 10396SET @counter = @counter + 1; 10397END| 10398SET @counter = 1; 10399SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10400INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10401SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10402CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10404ORDER BY f_int1; 10405DROP TRIGGER trg_3; 10406 10407# check trigger-11 success: 1 10408DELETE FROM t1 10409WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10410AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10411AND f_charbig = '####updated per insert trigger####'; 10412CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10413BEGIN 10414SET new.f_int1 = @my_max1 + @counter, 10415new.f_int2 = @my_min2 - @counter, 10416new.f_charbig = '####updated per insert trigger####'; 10417SET @counter = @counter + 1; 10418END| 10419SET @counter = 1; 10420SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10421INSERT INTO t1 (f_char1, f_char2, f_charbig) 10422SELECT CAST(f_int1 AS CHAR), 10423CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10424WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10425ORDER BY f_int1; 10426DROP TRIGGER trg_3; 10427 10428# check trigger-12 success: 1 10429DELETE FROM t1 10430WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10431AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10432AND f_charbig = '####updated per insert trigger####'; 10433ANALYZE TABLE t1; 10434Table Op Msg_type Msg_text 10435test.t1 analyze status OK 10436CHECK TABLE t1 EXTENDED; 10437Table Op Msg_type Msg_text 10438test.t1 check status OK 10439CHECKSUM TABLE t1 EXTENDED; 10440Table Checksum 10441test.t1 <some_value> 10442OPTIMIZE TABLE t1; 10443Table Op Msg_type Msg_text 10444test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 10445test.t1 optimize status OK 10446# check layout success: 1 10447REPAIR TABLE t1 EXTENDED; 10448Table Op Msg_type Msg_text 10449test.t1 repair status OK 10450# check layout success: 1 10451TRUNCATE t1; 10452 10453# check TRUNCATE success: 1 10454# check layout success: 1 10455# End usability test (inc/partition_check.inc) 10456DROP TABLE t1; 10457CREATE TABLE t1 ( 10458f_int1 INTEGER DEFAULT 0, 10459f_int2 INTEGER DEFAULT 0, 10460f_char1 CHAR(20), 10461f_char2 CHAR(20), 10462f_charbig VARCHAR(1000) 10463 10464) 10465PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 10466(PARTITION parta VALUES LESS THAN (0), 10467PARTITION partb VALUES LESS THAN (5), 10468PARTITION partc VALUES LESS THAN (10), 10469PARTITION partd VALUES LESS THAN (2147483646)); 10470INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10471SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10472WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 10473ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 10474INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10475SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10476WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 10477# Start usability test (inc/partition_check.inc) 10478create_command 10479SHOW CREATE TABLE t1; 10480Table Create Table 10481t1 CREATE TABLE `t1` ( 10482 `f_int1` int(11) DEFAULT 0, 10483 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY RANGE (`f_int1` DIV 2) 10490SUBPARTITION BY HASH (`f_int1`) 10491SUBPARTITIONS 2 10492(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB, 10493 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB, 10494 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB, 10495 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB) 10496 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 10501INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10502SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10503CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 10504WHERE f_int1 IN (2,3); 10505ERROR 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 10508INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10509SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10510CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10511WHERE f_int1 IN (2,3); 10512DELETE FROM t1 WHERE f_charbig = 'delete me'; 10513INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10514SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10515CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10516WHERE f_int1 IN (2,3); 10517DELETE FROM t1 WHERE f_charbig = 'delete me'; 10518# check read via f_int1 success: 1 10519# check read via f_int2 success: 1 10520 10521# check multiple-1 success: 1 10522DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 10523 10524# check multiple-2 success: 1 10525INSERT INTO t1 SELECT * FROM t0_template 10526WHERE MOD(f_int1,3) = 0; 10527 10528# check multiple-3 success: 1 10529UPDATE t1 SET f_int1 = f_int1 + @max_row 10530WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 10531AND @max_row_div2 + @max_row_div4; 10532 10533# check multiple-4 success: 1 10534DELETE FROM t1 10535WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 10536AND @max_row_div2 + @max_row_div4 + @max_row; 10537 10538# check multiple-5 success: 1 10539SELECT COUNT(*) INTO @try_count FROM t0_template 10540WHERE MOD(f_int1,3) = 0 10541AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10542SELECT COUNT(*) INTO @clash_count 10543FROM t1 INNER JOIN t0_template USING(f_int1) 10544WHERE MOD(f_int1,3) = 0 10545AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10546SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 10547INSERT INTO t1 10548SET f_int1 = @cur_value , f_int2 = @cur_value, 10549f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10550f_charbig = '#SINGLE#'; 10551 10552# check single-1 success: 1 10553SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 10554INSERT INTO t1 10555SET f_int1 = @cur_value , f_int2 = @cur_value, 10556f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10557f_charbig = '#SINGLE#'; 10558 10559# check single-2 success: 1 10560SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 10561SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 10562UPDATE t1 SET f_int1 = @cur_value2 10563WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 10564 10565# check single-3 success: 1 10566SET @cur_value1= -1; 10567SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 10568UPDATE t1 SET f_int1 = @cur_value1 10569WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 10570 10571# check single-4 success: 1 10572SELECT MAX(f_int1) INTO @cur_value FROM t1; 10573DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 10574 10575# check single-5 success: 1 10576DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 10577 10578# check single-6 success: 1 10579INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 10580 10581# check single-7 success: 1 10582DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 10583DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 10584INSERT t1 SET f_int1 = 0 , f_int2 = 0, 10585f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 10586f_charbig = '#NULL#'; 10587INSERT INTO t1 10588SET f_int1 = NULL , f_int2 = -@max_row, 10589f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 10590f_charbig = '#NULL#'; 10591# check null success: 1 10592 10593# check null-1 success: 1 10594UPDATE t1 SET f_int1 = -@max_row 10595WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10596AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10597 10598# check null-2 success: 1 10599UPDATE t1 SET f_int1 = NULL 10600WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10601AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10602 10603# check null-3 success: 1 10604DELETE FROM t1 10605WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 10606AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 10607 10608# check null-4 success: 1 10609DELETE FROM t1 10610WHERE f_int1 = 0 AND f_int2 = 0 10611AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 10612AND f_charbig = '#NULL#'; 10613INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10614SELECT f_int1, f_int1, '', '', 'was inserted' 10615 FROM t0_template source_tab 10616WHERE MOD(f_int1,3) = 0 10617AND f_int1 BETWEEN @max_row_div2 AND @max_row 10618ON DUPLICATE KEY 10619UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 10620f_int2 = 2 * @max_row + source_tab.f_int1, 10621f_charbig = 'was updated'; 10622 10623# check unique-1-a success: 1 10624 10625# check unique-1-b success: 1 10626DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10628f_int2 = CAST(f_char1 AS SIGNED INT), 10629f_charbig = CONCAT('===',f_char1,'===') 10630WHERE f_charbig = 'was updated'; 10631REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10632SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 10633 FROM t0_template source_tab 10634WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10635 10636# check replace success: 1 10637DELETE FROM t1 10638WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 10639DELETE FROM t1 10640WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 10641f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 10642UPDATE t1 SET f_int2 = f_int1, 10643f_char1 = CAST(f_int1 AS CHAR), 10644f_char2 = CAST(f_int1 AS CHAR), 10645f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 10646WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 10647SET AUTOCOMMIT= 0; 10648INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10649SELECT f_int1, f_int1, '', '', 'was inserted' 10650FROM t0_template source_tab 10651WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10652 10653# check transactions-1 success: 1 10654COMMIT WORK; 10655 10656# check transactions-2 success: 1 10657ROLLBACK WORK; 10658 10659# check transactions-3 success: 1 10660DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10661COMMIT WORK; 10662ROLLBACK WORK; 10663 10664# check transactions-4 success: 1 10665INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10666SELECT f_int1, f_int1, '', '', 'was inserted' 10667FROM t0_template source_tab 10668WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10669 10670# check transactions-5 success: 1 10671ROLLBACK WORK; 10672 10673# check transactions-6 success: 1 10674# INFO: Storage engine used for t1 seems to be transactional. 10675COMMIT; 10676 10677# check transactions-7 success: 1 10678DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10679COMMIT WORK; 10680SET @@session.sql_mode = 'traditional'; 10681SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 10682INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10683SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 10684'', '', 'was inserted' FROM t0_template 10685WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10686ERROR 22012: Division by 0 10687COMMIT; 10688 10689# check transactions-8 success: 1 10690# INFO: Storage engine used for t1 seems to be able to revert 10691# changes made by the failing statement. 10692SET @@session.sql_mode = ''; 10693SET AUTOCOMMIT= 1; 10694DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10695COMMIT WORK; 10696UPDATE t1 SET f_charbig = REPEAT('b', 1000); 10697 10698# check special-1 success: 1 10699UPDATE t1 SET f_charbig = ''; 10700 10701# check special-2 success: 1 10702UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 10703INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10704SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 10705WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10706INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10707SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10708'just inserted' FROM t0_template 10709WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10710CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 10711BEGIN 10712UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10713f_charbig = 'updated by trigger' 10714 WHERE f_int1 = new.f_int1; 10715END| 10716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10717SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10719 10720# check trigger-1 success: 1 10721DROP TRIGGER trg_1; 10722UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10723f_int2 = CAST(f_char1 AS SIGNED INT), 10724f_charbig = 'just inserted' 10725 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10726DELETE FROM t0_aux 10727WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10728INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10729SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10730'just inserted' FROM t0_template 10731WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10732CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 10733BEGIN 10734UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10735f_charbig = 'updated by trigger' 10736 WHERE f_int1 = new.f_int1; 10737END| 10738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10739SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10741 10742# check trigger-2 success: 1 10743DROP TRIGGER trg_1; 10744UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10745f_int2 = CAST(f_char1 AS SIGNED INT), 10746f_charbig = 'just inserted' 10747 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10748DELETE FROM t0_aux 10749WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10750INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10751SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10752'just inserted' FROM t0_template 10753WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10754CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10755BEGIN 10756UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10757f_charbig = 'updated by trigger' 10758 WHERE f_int1 = new.f_int1; 10759END| 10760UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10761WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10762 10763# check trigger-3 success: 1 10764DROP TRIGGER trg_1; 10765UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10766f_int2 = CAST(f_char1 AS SIGNED INT), 10767f_charbig = 'just inserted' 10768 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10769DELETE FROM t0_aux 10770WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10771INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10772SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10773'just inserted' FROM t0_template 10774WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10775CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10776BEGIN 10777UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10778f_charbig = 'updated by trigger' 10779 WHERE f_int1 = - old.f_int1; 10780END| 10781UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10782WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10783 10784# check trigger-4 success: 1 10785DROP TRIGGER trg_1; 10786UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10787f_int2 = CAST(f_char1 AS SIGNED INT), 10788f_charbig = 'just inserted' 10789 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10790DELETE FROM t0_aux 10791WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10792INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10793SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10794'just inserted' FROM t0_template 10795WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10796CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10797BEGIN 10798UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10799f_charbig = 'updated by trigger' 10800 WHERE f_int1 = new.f_int1; 10801END| 10802UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10803WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10804 10805# check trigger-5 success: 1 10806DROP TRIGGER trg_1; 10807UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10808f_int2 = CAST(f_char1 AS SIGNED INT), 10809f_charbig = 'just inserted' 10810 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10811DELETE FROM t0_aux 10812WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10813INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10814SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10815'just inserted' FROM t0_template 10816WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10817CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10818BEGIN 10819UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10820f_charbig = 'updated by trigger' 10821 WHERE f_int1 = - old.f_int1; 10822END| 10823UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10824WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10825 10826# check trigger-6 success: 1 10827DROP TRIGGER trg_1; 10828UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10829f_int2 = CAST(f_char1 AS SIGNED INT), 10830f_charbig = 'just inserted' 10831 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10832DELETE FROM t0_aux 10833WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10834INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10835SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10836'just inserted' FROM t0_template 10837WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10838CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 10839BEGIN 10840UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10841f_charbig = 'updated by trigger' 10842 WHERE f_int1 = - old.f_int1; 10843END| 10844DELETE FROM t0_aux 10845WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10846 10847# check trigger-7 success: 1 10848DROP TRIGGER trg_1; 10849UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10850f_int2 = CAST(f_char1 AS SIGNED INT), 10851f_charbig = 'just inserted' 10852 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10853DELETE FROM t0_aux 10854WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10855INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10856SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10857'just inserted' FROM t0_template 10858WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10859CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 10860BEGIN 10861UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10862f_charbig = 'updated by trigger' 10863 WHERE f_int1 = - old.f_int1; 10864END| 10865DELETE FROM t0_aux 10866WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10867 10868# check trigger-8 success: 1 10869DROP TRIGGER trg_1; 10870UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10871f_int2 = CAST(f_char1 AS SIGNED INT), 10872f_charbig = 'just inserted' 10873 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10874DELETE FROM t0_aux 10875WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10876DELETE FROM t1 10877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10878CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10879BEGIN 10880SET new.f_int1 = old.f_int1 + @max_row, 10881new.f_int2 = old.f_int2 - @max_row, 10882new.f_charbig = '####updated per update trigger####'; 10883END| 10884UPDATE t1 10885SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10886f_charbig = '####updated per update statement itself####'; 10887 10888# check trigger-9 success: 1 10889DROP TRIGGER trg_2; 10890UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10891f_int2 = CAST(f_char1 AS SIGNED INT), 10892f_charbig = CONCAT('===',f_char1,'==='); 10893CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10894BEGIN 10895SET new.f_int1 = new.f_int1 + @max_row, 10896new.f_int2 = new.f_int2 - @max_row, 10897new.f_charbig = '####updated per update trigger####'; 10898END| 10899UPDATE t1 10900SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10901f_charbig = '####updated per update statement itself####'; 10902 10903# check trigger-10 success: 1 10904DROP TRIGGER trg_2; 10905UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10906f_int2 = CAST(f_char1 AS SIGNED INT), 10907f_charbig = CONCAT('===',f_char1,'==='); 10908CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10909BEGIN 10910SET new.f_int1 = @my_max1 + @counter, 10911new.f_int2 = @my_min2 - @counter, 10912new.f_charbig = '####updated per insert trigger####'; 10913SET @counter = @counter + 1; 10914END| 10915SET @counter = 1; 10916SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10918SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10919CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10920WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10921ORDER BY f_int1; 10922DROP TRIGGER trg_3; 10923 10924# check trigger-11 success: 1 10925DELETE FROM t1 10926WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10927AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10928AND f_charbig = '####updated per insert trigger####'; 10929CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10930BEGIN 10931SET new.f_int1 = @my_max1 + @counter, 10932new.f_int2 = @my_min2 - @counter, 10933new.f_charbig = '####updated per insert trigger####'; 10934SET @counter = @counter + 1; 10935END| 10936SET @counter = 1; 10937SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10938INSERT INTO t1 (f_char1, f_char2, f_charbig) 10939SELECT CAST(f_int1 AS CHAR), 10940CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10941WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10942ORDER BY f_int1; 10943DROP TRIGGER trg_3; 10944 10945# check trigger-12 success: 1 10946DELETE FROM t1 10947WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10948AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10949AND f_charbig = '####updated per insert trigger####'; 10950ANALYZE TABLE t1; 10951Table Op Msg_type Msg_text 10952test.t1 analyze status OK 10953CHECK TABLE t1 EXTENDED; 10954Table Op Msg_type Msg_text 10955test.t1 check status OK 10956CHECKSUM TABLE t1 EXTENDED; 10957Table Checksum 10958test.t1 <some_value> 10959OPTIMIZE TABLE t1; 10960Table Op Msg_type Msg_text 10961test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 10962test.t1 optimize status OK 10963# check layout success: 1 10964REPAIR TABLE t1 EXTENDED; 10965Table Op Msg_type Msg_text 10966test.t1 repair status OK 10967# check layout success: 1 10968TRUNCATE t1; 10969 10970# check TRUNCATE success: 1 10971# check layout success: 1 10972# End usability test (inc/partition_check.inc) 10973DROP TABLE t1; 10974CREATE TABLE t1 ( 10975f_int1 INTEGER DEFAULT 0, 10976f_int2 INTEGER DEFAULT 0, 10977f_char1 CHAR(20), 10978f_char2 CHAR(20), 10979f_charbig VARCHAR(1000) 10980 10981) 10982PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 10983(PARTITION part1 VALUES LESS THAN (0) 10984(SUBPARTITION subpart11, SUBPARTITION subpart12), 10985PARTITION part2 VALUES LESS THAN (5) 10986(SUBPARTITION subpart21, SUBPARTITION subpart22), 10987PARTITION part3 VALUES LESS THAN (10) 10988(SUBPARTITION subpart31, SUBPARTITION subpart32), 10989PARTITION part4 VALUES LESS THAN (2147483646) 10990(SUBPARTITION subpart41, SUBPARTITION subpart42)); 10991INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10992SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10993WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 10994ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 10995INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10996SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10997WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 10998# Start usability test (inc/partition_check.inc) 10999create_command 11000SHOW CREATE TABLE t1; 11001Table Create Table 11002t1 CREATE TABLE `t1` ( 11003 `f_int1` int(11) DEFAULT 0, 11004 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY RANGE (`f_int1`) 11011SUBPARTITION 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)) 11024 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 11029INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11030SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11031CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 11032WHERE f_int1 IN (2,3); 11033ERROR 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 11036INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11037SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11038CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11039WHERE f_int1 IN (2,3); 11040DELETE FROM t1 WHERE f_charbig = 'delete me'; 11041INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11042SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11043CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11044WHERE f_int1 IN (2,3); 11045DELETE FROM t1 WHERE f_charbig = 'delete me'; 11046# check read via f_int1 success: 1 11047# check read via f_int2 success: 1 11048 11049# check multiple-1 success: 1 11050DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 11051 11052# check multiple-2 success: 1 11053INSERT INTO t1 SELECT * FROM t0_template 11054WHERE MOD(f_int1,3) = 0; 11055 11056# check multiple-3 success: 1 11057UPDATE t1 SET f_int1 = f_int1 + @max_row 11058WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 11059AND @max_row_div2 + @max_row_div4; 11060 11061# check multiple-4 success: 1 11062DELETE FROM t1 11063WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 11064AND @max_row_div2 + @max_row_div4 + @max_row; 11065 11066# check multiple-5 success: 1 11067SELECT COUNT(*) INTO @try_count FROM t0_template 11068WHERE MOD(f_int1,3) = 0 11069AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11070SELECT COUNT(*) INTO @clash_count 11071FROM t1 INNER JOIN t0_template USING(f_int1) 11072WHERE MOD(f_int1,3) = 0 11073AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11074SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 11075INSERT INTO t1 11076SET f_int1 = @cur_value , f_int2 = @cur_value, 11077f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11078f_charbig = '#SINGLE#'; 11079 11080# check single-1 success: 1 11081SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 11082INSERT INTO t1 11083SET f_int1 = @cur_value , f_int2 = @cur_value, 11084f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11085f_charbig = '#SINGLE#'; 11086 11087# check single-2 success: 1 11088SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 11089SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 11090UPDATE t1 SET f_int1 = @cur_value2 11091WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 11092 11093# check single-3 success: 1 11094SET @cur_value1= -1; 11095SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 11096UPDATE t1 SET f_int1 = @cur_value1 11097WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 11098 11099# check single-4 success: 1 11100SELECT MAX(f_int1) INTO @cur_value FROM t1; 11101DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 11102 11103# check single-5 success: 1 11104DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 11105 11106# check single-6 success: 1 11107INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 11108ERROR HY000: Table has no partition for value 2147483647 11109DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 11110INSERT t1 SET f_int1 = 0 , f_int2 = 0, 11111f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 11112f_charbig = '#NULL#'; 11113INSERT INTO t1 11114SET f_int1 = NULL , f_int2 = -@max_row, 11115f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 11116f_charbig = '#NULL#'; 11117# check null success: 1 11118 11119# check null-1 success: 1 11120UPDATE t1 SET f_int1 = -@max_row 11121WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11122AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11123 11124# check null-2 success: 1 11125UPDATE t1 SET f_int1 = NULL 11126WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11127AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11128 11129# check null-3 success: 1 11130DELETE FROM t1 11131WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11132AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11133 11134# check null-4 success: 1 11135DELETE FROM t1 11136WHERE f_int1 = 0 AND f_int2 = 0 11137AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 11138AND f_charbig = '#NULL#'; 11139INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11140SELECT f_int1, f_int1, '', '', 'was inserted' 11141 FROM t0_template source_tab 11142WHERE MOD(f_int1,3) = 0 11143AND f_int1 BETWEEN @max_row_div2 AND @max_row 11144ON DUPLICATE KEY 11145UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 11146f_int2 = 2 * @max_row + source_tab.f_int1, 11147f_charbig = 'was updated'; 11148 11149# check unique-1-a success: 1 11150 11151# check unique-1-b success: 1 11152DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11153UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11154f_int2 = CAST(f_char1 AS SIGNED INT), 11155f_charbig = CONCAT('===',f_char1,'===') 11156WHERE f_charbig = 'was updated'; 11157REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11158SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 11159 FROM t0_template source_tab 11160WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11161 11162# check replace success: 1 11163DELETE FROM t1 11164WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 11165DELETE FROM t1 11166WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 11167f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 11168UPDATE t1 SET f_int2 = f_int1, 11169f_char1 = CAST(f_int1 AS CHAR), 11170f_char2 = CAST(f_int1 AS CHAR), 11171f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 11172WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 11173SET AUTOCOMMIT= 0; 11174INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11175SELECT f_int1, f_int1, '', '', 'was inserted' 11176FROM t0_template source_tab 11177WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11178 11179# check transactions-1 success: 1 11180COMMIT WORK; 11181 11182# check transactions-2 success: 1 11183ROLLBACK WORK; 11184 11185# check transactions-3 success: 1 11186DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11187COMMIT WORK; 11188ROLLBACK WORK; 11189 11190# check transactions-4 success: 1 11191INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11192SELECT f_int1, f_int1, '', '', 'was inserted' 11193FROM t0_template source_tab 11194WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11195 11196# check transactions-5 success: 1 11197ROLLBACK WORK; 11198 11199# check transactions-6 success: 1 11200# INFO: Storage engine used for t1 seems to be transactional. 11201COMMIT; 11202 11203# check transactions-7 success: 1 11204DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11205COMMIT WORK; 11206SET @@session.sql_mode = 'traditional'; 11207SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 11208INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11209SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 11210'', '', 'was inserted' FROM t0_template 11211WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11212ERROR 22012: Division by 0 11213COMMIT; 11214 11215# check transactions-8 success: 1 11216# INFO: Storage engine used for t1 seems to be able to revert 11217# changes made by the failing statement. 11218SET @@session.sql_mode = ''; 11219SET AUTOCOMMIT= 1; 11220DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11221COMMIT WORK; 11222UPDATE t1 SET f_charbig = REPEAT('b', 1000); 11223 11224# check special-1 success: 1 11225UPDATE t1 SET f_charbig = ''; 11226 11227# check special-2 success: 1 11228UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 11229INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11230SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 11231WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11232INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11233SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11234'just inserted' FROM t0_template 11235WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11236CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 11237BEGIN 11238UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11239f_charbig = 'updated by trigger' 11240 WHERE f_int1 = new.f_int1; 11241END| 11242INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11243SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11245 11246# check trigger-1 success: 1 11247DROP TRIGGER trg_1; 11248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11249f_int2 = CAST(f_char1 AS SIGNED INT), 11250f_charbig = 'just inserted' 11251 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11252DELETE FROM t0_aux 11253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11255SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11256'just inserted' FROM t0_template 11257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11258CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 11259BEGIN 11260UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11261f_charbig = 'updated by trigger' 11262 WHERE f_int1 = new.f_int1; 11263END| 11264INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11265SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11266WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11267 11268# check trigger-2 success: 1 11269DROP TRIGGER trg_1; 11270UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11271f_int2 = CAST(f_char1 AS SIGNED INT), 11272f_charbig = 'just inserted' 11273 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11274DELETE FROM t0_aux 11275WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11276INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11277SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11278'just inserted' FROM t0_template 11279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11280CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11281BEGIN 11282UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11283f_charbig = 'updated by trigger' 11284 WHERE f_int1 = new.f_int1; 11285END| 11286UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11287WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11288 11289# check trigger-3 success: 1 11290DROP TRIGGER trg_1; 11291UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11292f_int2 = CAST(f_char1 AS SIGNED INT), 11293f_charbig = 'just inserted' 11294 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11295DELETE FROM t0_aux 11296WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11297INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11298SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11299'just inserted' FROM t0_template 11300WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11301CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11302BEGIN 11303UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11304f_charbig = 'updated by trigger' 11305 WHERE f_int1 = - old.f_int1; 11306END| 11307UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11308WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11309 11310# check trigger-4 success: 1 11311DROP TRIGGER trg_1; 11312UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11313f_int2 = CAST(f_char1 AS SIGNED INT), 11314f_charbig = 'just inserted' 11315 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11316DELETE FROM t0_aux 11317WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11318INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11319SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11320'just inserted' FROM t0_template 11321WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11322CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11323BEGIN 11324UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11325f_charbig = 'updated by trigger' 11326 WHERE f_int1 = new.f_int1; 11327END| 11328UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11329WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11330 11331# check trigger-5 success: 1 11332DROP TRIGGER trg_1; 11333UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11334f_int2 = CAST(f_char1 AS SIGNED INT), 11335f_charbig = 'just inserted' 11336 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11337DELETE FROM t0_aux 11338WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11339INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11340SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11341'just inserted' FROM t0_template 11342WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11343CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11344BEGIN 11345UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11346f_charbig = 'updated by trigger' 11347 WHERE f_int1 = - old.f_int1; 11348END| 11349UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11350WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11351 11352# check trigger-6 success: 1 11353DROP TRIGGER trg_1; 11354UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11355f_int2 = CAST(f_char1 AS SIGNED INT), 11356f_charbig = 'just inserted' 11357 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11358DELETE FROM t0_aux 11359WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11360INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11361SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11362'just inserted' FROM t0_template 11363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11364CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 11365BEGIN 11366UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11367f_charbig = 'updated by trigger' 11368 WHERE f_int1 = - old.f_int1; 11369END| 11370DELETE FROM t0_aux 11371WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11372 11373# check trigger-7 success: 1 11374DROP TRIGGER trg_1; 11375UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11376f_int2 = CAST(f_char1 AS SIGNED INT), 11377f_charbig = 'just inserted' 11378 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11379DELETE FROM t0_aux 11380WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11381INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11382SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11383'just inserted' FROM t0_template 11384WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11385CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 11386BEGIN 11387UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11388f_charbig = 'updated by trigger' 11389 WHERE f_int1 = - old.f_int1; 11390END| 11391DELETE FROM t0_aux 11392WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11393 11394# check trigger-8 success: 1 11395DROP TRIGGER trg_1; 11396UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11397f_int2 = CAST(f_char1 AS SIGNED INT), 11398f_charbig = 'just inserted' 11399 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11400DELETE FROM t0_aux 11401WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11402DELETE FROM t1 11403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11404CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11405BEGIN 11406SET new.f_int1 = old.f_int1 + @max_row, 11407new.f_int2 = old.f_int2 - @max_row, 11408new.f_charbig = '####updated per update trigger####'; 11409END| 11410UPDATE t1 11411SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11412f_charbig = '####updated per update statement itself####'; 11413 11414# check trigger-9 success: 1 11415DROP TRIGGER trg_2; 11416UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11417f_int2 = CAST(f_char1 AS SIGNED INT), 11418f_charbig = CONCAT('===',f_char1,'==='); 11419CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11420BEGIN 11421SET new.f_int1 = new.f_int1 + @max_row, 11422new.f_int2 = new.f_int2 - @max_row, 11423new.f_charbig = '####updated per update trigger####'; 11424END| 11425UPDATE t1 11426SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11427f_charbig = '####updated per update statement itself####'; 11428 11429# check trigger-10 success: 1 11430DROP TRIGGER trg_2; 11431UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11432f_int2 = CAST(f_char1 AS SIGNED INT), 11433f_charbig = CONCAT('===',f_char1,'==='); 11434CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11435BEGIN 11436SET new.f_int1 = @my_max1 + @counter, 11437new.f_int2 = @my_min2 - @counter, 11438new.f_charbig = '####updated per insert trigger####'; 11439SET @counter = @counter + 1; 11440END| 11441SET @counter = 1; 11442SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11443INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11444SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11445CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11446WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11447ORDER BY f_int1; 11448DROP TRIGGER trg_3; 11449 11450# check trigger-11 success: 1 11451DELETE FROM t1 11452WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11453AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11454AND f_charbig = '####updated per insert trigger####'; 11455CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11456BEGIN 11457SET new.f_int1 = @my_max1 + @counter, 11458new.f_int2 = @my_min2 - @counter, 11459new.f_charbig = '####updated per insert trigger####'; 11460SET @counter = @counter + 1; 11461END| 11462SET @counter = 1; 11463SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11464INSERT INTO t1 (f_char1, f_char2, f_charbig) 11465SELECT CAST(f_int1 AS CHAR), 11466CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11468ORDER BY f_int1; 11469DROP TRIGGER trg_3; 11470 11471# check trigger-12 success: 1 11472DELETE FROM t1 11473WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11474AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11475AND f_charbig = '####updated per insert trigger####'; 11476ANALYZE TABLE t1; 11477Table Op Msg_type Msg_text 11478test.t1 analyze status OK 11479CHECK TABLE t1 EXTENDED; 11480Table Op Msg_type Msg_text 11481test.t1 check status OK 11482CHECKSUM TABLE t1 EXTENDED; 11483Table Checksum 11484test.t1 <some_value> 11485OPTIMIZE TABLE t1; 11486Table Op Msg_type Msg_text 11487test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 11488test.t1 optimize status OK 11489# check layout success: 1 11490REPAIR TABLE t1 EXTENDED; 11491Table Op Msg_type Msg_text 11492test.t1 repair status OK 11493# check layout success: 1 11494TRUNCATE t1; 11495 11496# check TRUNCATE success: 1 11497# check layout success: 1 11498# End usability test (inc/partition_check.inc) 11499DROP TABLE t1; 11500CREATE TABLE t1 ( 11501f_int1 INTEGER DEFAULT 0, 11502f_int2 INTEGER DEFAULT 0, 11503f_char1 CHAR(20), 11504f_char2 CHAR(20), 11505f_charbig VARCHAR(1000) 11506 11507) 11508PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 11509(PARTITION part1 VALUES IN (0) 11510(SUBPARTITION sp11, SUBPARTITION sp12), 11511PARTITION part2 VALUES IN (1) 11512(SUBPARTITION sp21, SUBPARTITION sp22), 11513PARTITION part3 VALUES IN (2) 11514(SUBPARTITION sp31, SUBPARTITION sp32), 11515PARTITION part4 VALUES IN (NULL) 11516(SUBPARTITION sp41, SUBPARTITION sp42)); 11517INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11518SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11519WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 11520ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 11521INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11522SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 11524# Start usability test (inc/partition_check.inc) 11525create_command 11526SHOW CREATE TABLE t1; 11527Table Create Table 11528t1 CREATE TABLE `t1` ( 11529 `f_int1` int(11) DEFAULT 0, 11530 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (abs(`f_int1` MOD 3)) 11537SUBPARTITION 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)) 11550 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 11555INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11556SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11557CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 11558WHERE f_int1 IN (2,3); 11559ERROR 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 11562INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11563SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11564CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11565WHERE f_int1 IN (2,3); 11566DELETE FROM t1 WHERE f_charbig = 'delete me'; 11567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11568SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11569CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11570WHERE f_int1 IN (2,3); 11571DELETE FROM t1 WHERE f_charbig = 'delete me'; 11572# check read via f_int1 success: 1 11573# check read via f_int2 success: 1 11574 11575# check multiple-1 success: 1 11576DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 11577 11578# check multiple-2 success: 1 11579INSERT INTO t1 SELECT * FROM t0_template 11580WHERE MOD(f_int1,3) = 0; 11581 11582# check multiple-3 success: 1 11583UPDATE t1 SET f_int1 = f_int1 + @max_row 11584WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 11585AND @max_row_div2 + @max_row_div4; 11586 11587# check multiple-4 success: 1 11588DELETE FROM t1 11589WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 11590AND @max_row_div2 + @max_row_div4 + @max_row; 11591 11592# check multiple-5 success: 1 11593SELECT COUNT(*) INTO @try_count FROM t0_template 11594WHERE MOD(f_int1,3) = 0 11595AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11596SELECT COUNT(*) INTO @clash_count 11597FROM t1 INNER JOIN t0_template USING(f_int1) 11598WHERE MOD(f_int1,3) = 0 11599AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11600SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 11601INSERT INTO t1 11602SET f_int1 = @cur_value , f_int2 = @cur_value, 11603f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11604f_charbig = '#SINGLE#'; 11605 11606# check single-1 success: 1 11607SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 11608INSERT INTO t1 11609SET f_int1 = @cur_value , f_int2 = @cur_value, 11610f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11611f_charbig = '#SINGLE#'; 11612 11613# check single-2 success: 1 11614SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 11615SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 11616UPDATE t1 SET f_int1 = @cur_value2 11617WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 11618 11619# check single-3 success: 1 11620SET @cur_value1= -1; 11621SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 11622UPDATE t1 SET f_int1 = @cur_value1 11623WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 11624 11625# check single-4 success: 1 11626SELECT MAX(f_int1) INTO @cur_value FROM t1; 11627DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 11628 11629# check single-5 success: 1 11630DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 11631 11632# check single-6 success: 1 11633INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 11634 11635# check single-7 success: 1 11636DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 11637DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 11638INSERT t1 SET f_int1 = 0 , f_int2 = 0, 11639f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 11640f_charbig = '#NULL#'; 11641INSERT INTO t1 11642SET f_int1 = NULL , f_int2 = -@max_row, 11643f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 11644f_charbig = '#NULL#'; 11645# check null success: 1 11646 11647# check null-1 success: 1 11648UPDATE t1 SET f_int1 = -@max_row 11649WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11650AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11651 11652# check null-2 success: 1 11653UPDATE t1 SET f_int1 = NULL 11654WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11655AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11656 11657# check null-3 success: 1 11658DELETE FROM t1 11659WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 11660AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 11661 11662# check null-4 success: 1 11663DELETE FROM t1 11664WHERE f_int1 = 0 AND f_int2 = 0 11665AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 11666AND f_charbig = '#NULL#'; 11667INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11668SELECT f_int1, f_int1, '', '', 'was inserted' 11669 FROM t0_template source_tab 11670WHERE MOD(f_int1,3) = 0 11671AND f_int1 BETWEEN @max_row_div2 AND @max_row 11672ON DUPLICATE KEY 11673UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 11674f_int2 = 2 * @max_row + source_tab.f_int1, 11675f_charbig = 'was updated'; 11676 11677# check unique-1-a success: 1 11678 11679# check unique-1-b success: 1 11680DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11681UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11682f_int2 = CAST(f_char1 AS SIGNED INT), 11683f_charbig = CONCAT('===',f_char1,'===') 11684WHERE f_charbig = 'was updated'; 11685REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11686SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 11687 FROM t0_template source_tab 11688WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11689 11690# check replace success: 1 11691DELETE FROM t1 11692WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 11693DELETE FROM t1 11694WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 11695f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 11696UPDATE t1 SET f_int2 = f_int1, 11697f_char1 = CAST(f_int1 AS CHAR), 11698f_char2 = CAST(f_int1 AS CHAR), 11699f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 11700WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 11701SET AUTOCOMMIT= 0; 11702INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11703SELECT f_int1, f_int1, '', '', 'was inserted' 11704FROM t0_template source_tab 11705WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11706 11707# check transactions-1 success: 1 11708COMMIT WORK; 11709 11710# check transactions-2 success: 1 11711ROLLBACK WORK; 11712 11713# check transactions-3 success: 1 11714DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11715COMMIT WORK; 11716ROLLBACK WORK; 11717 11718# check transactions-4 success: 1 11719INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11720SELECT f_int1, f_int1, '', '', 'was inserted' 11721FROM t0_template source_tab 11722WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11723 11724# check transactions-5 success: 1 11725ROLLBACK WORK; 11726 11727# check transactions-6 success: 1 11728# INFO: Storage engine used for t1 seems to be transactional. 11729COMMIT; 11730 11731# check transactions-7 success: 1 11732DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11733COMMIT WORK; 11734SET @@session.sql_mode = 'traditional'; 11735SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 11736INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11737SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 11738'', '', 'was inserted' FROM t0_template 11739WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11740ERROR 22012: Division by 0 11741COMMIT; 11742 11743# check transactions-8 success: 1 11744# INFO: Storage engine used for t1 seems to be able to revert 11745# changes made by the failing statement. 11746SET @@session.sql_mode = ''; 11747SET AUTOCOMMIT= 1; 11748DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11749COMMIT WORK; 11750UPDATE t1 SET f_charbig = REPEAT('b', 1000); 11751 11752# check special-1 success: 1 11753UPDATE t1 SET f_charbig = ''; 11754 11755# check special-2 success: 1 11756UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 11757INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11758SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 11759WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11760INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11761SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11762'just inserted' FROM t0_template 11763WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11764CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 11765BEGIN 11766UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11767f_charbig = 'updated by trigger' 11768 WHERE f_int1 = new.f_int1; 11769END| 11770INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11771SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11773 11774# check trigger-1 success: 1 11775DROP TRIGGER trg_1; 11776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11777f_int2 = CAST(f_char1 AS SIGNED INT), 11778f_charbig = 'just inserted' 11779 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11780DELETE FROM t0_aux 11781WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11782INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11783SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11784'just inserted' FROM t0_template 11785WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11786CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 11787BEGIN 11788UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11789f_charbig = 'updated by trigger' 11790 WHERE f_int1 = new.f_int1; 11791END| 11792INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11793SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11794WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11795 11796# check trigger-2 success: 1 11797DROP TRIGGER trg_1; 11798UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11799f_int2 = CAST(f_char1 AS SIGNED INT), 11800f_charbig = 'just inserted' 11801 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11802DELETE FROM t0_aux 11803WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11804INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11805SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11806'just inserted' FROM t0_template 11807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11808CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11809BEGIN 11810UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11811f_charbig = 'updated by trigger' 11812 WHERE f_int1 = new.f_int1; 11813END| 11814UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11815WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11816 11817# check trigger-3 success: 1 11818DROP TRIGGER trg_1; 11819UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11820f_int2 = CAST(f_char1 AS SIGNED INT), 11821f_charbig = 'just inserted' 11822 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11823DELETE FROM t0_aux 11824WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11825INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11826SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11827'just inserted' FROM t0_template 11828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11829CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11830BEGIN 11831UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11832f_charbig = 'updated by trigger' 11833 WHERE f_int1 = - old.f_int1; 11834END| 11835UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11836WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11837 11838# check trigger-4 success: 1 11839DROP TRIGGER trg_1; 11840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11841f_int2 = CAST(f_char1 AS SIGNED INT), 11842f_charbig = 'just inserted' 11843 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11844DELETE FROM t0_aux 11845WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11846INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11847SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11848'just inserted' FROM t0_template 11849WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11850CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11851BEGIN 11852UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11853f_charbig = 'updated by trigger' 11854 WHERE f_int1 = new.f_int1; 11855END| 11856UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11857WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11858 11859# check trigger-5 success: 1 11860DROP TRIGGER trg_1; 11861UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11862f_int2 = CAST(f_char1 AS SIGNED INT), 11863f_charbig = 'just inserted' 11864 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11865DELETE FROM t0_aux 11866WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11867INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11868SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11869'just inserted' FROM t0_template 11870WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11871CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11872BEGIN 11873UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11874f_charbig = 'updated by trigger' 11875 WHERE f_int1 = - old.f_int1; 11876END| 11877UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11878WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11879 11880# check trigger-6 success: 1 11881DROP TRIGGER trg_1; 11882UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11883f_int2 = CAST(f_char1 AS SIGNED INT), 11884f_charbig = 'just inserted' 11885 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11886DELETE FROM t0_aux 11887WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11888INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11889SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11890'just inserted' FROM t0_template 11891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11892CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 11893BEGIN 11894UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11895f_charbig = 'updated by trigger' 11896 WHERE f_int1 = - old.f_int1; 11897END| 11898DELETE FROM t0_aux 11899WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11900 11901# check trigger-7 success: 1 11902DROP TRIGGER trg_1; 11903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11904f_int2 = CAST(f_char1 AS SIGNED INT), 11905f_charbig = 'just inserted' 11906 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11907DELETE FROM t0_aux 11908WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11909INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11910SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11911'just inserted' FROM t0_template 11912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11913CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 11914BEGIN 11915UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11916f_charbig = 'updated by trigger' 11917 WHERE f_int1 = - old.f_int1; 11918END| 11919DELETE FROM t0_aux 11920WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11921 11922# check trigger-8 success: 1 11923DROP TRIGGER trg_1; 11924UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11925f_int2 = CAST(f_char1 AS SIGNED INT), 11926f_charbig = 'just inserted' 11927 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11928DELETE FROM t0_aux 11929WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11930DELETE FROM t1 11931WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11932CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11933BEGIN 11934SET new.f_int1 = old.f_int1 + @max_row, 11935new.f_int2 = old.f_int2 - @max_row, 11936new.f_charbig = '####updated per update trigger####'; 11937END| 11938UPDATE t1 11939SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11940f_charbig = '####updated per update statement itself####'; 11941 11942# check trigger-9 success: 1 11943DROP TRIGGER trg_2; 11944UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11945f_int2 = CAST(f_char1 AS SIGNED INT), 11946f_charbig = CONCAT('===',f_char1,'==='); 11947CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11948BEGIN 11949SET new.f_int1 = new.f_int1 + @max_row, 11950new.f_int2 = new.f_int2 - @max_row, 11951new.f_charbig = '####updated per update trigger####'; 11952END| 11953UPDATE t1 11954SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11955f_charbig = '####updated per update statement itself####'; 11956 11957# check trigger-10 success: 1 11958DROP TRIGGER trg_2; 11959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11960f_int2 = CAST(f_char1 AS SIGNED INT), 11961f_charbig = CONCAT('===',f_char1,'==='); 11962CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11963BEGIN 11964SET new.f_int1 = @my_max1 + @counter, 11965new.f_int2 = @my_min2 - @counter, 11966new.f_charbig = '####updated per insert trigger####'; 11967SET @counter = @counter + 1; 11968END| 11969SET @counter = 1; 11970SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11971INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11972SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11973CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11974WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11975ORDER BY f_int1; 11976DROP TRIGGER trg_3; 11977 11978# check trigger-11 success: 1 11979DELETE FROM t1 11980WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11981AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11982AND f_charbig = '####updated per insert trigger####'; 11983CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11984BEGIN 11985SET new.f_int1 = @my_max1 + @counter, 11986new.f_int2 = @my_min2 - @counter, 11987new.f_charbig = '####updated per insert trigger####'; 11988SET @counter = @counter + 1; 11989END| 11990SET @counter = 1; 11991SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11992INSERT INTO t1 (f_char1, f_char2, f_charbig) 11993SELECT CAST(f_int1 AS CHAR), 11994CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11995WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11996ORDER BY f_int1; 11997DROP TRIGGER trg_3; 11998 11999# check trigger-12 success: 1 12000DELETE FROM t1 12001WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12002AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12003AND f_charbig = '####updated per insert trigger####'; 12004ANALYZE TABLE t1; 12005Table Op Msg_type Msg_text 12006test.t1 analyze status OK 12007CHECK TABLE t1 EXTENDED; 12008Table Op Msg_type Msg_text 12009test.t1 check status OK 12010CHECKSUM TABLE t1 EXTENDED; 12011Table Checksum 12012test.t1 <some_value> 12013OPTIMIZE TABLE t1; 12014Table Op Msg_type Msg_text 12015test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 12016test.t1 optimize status OK 12017# check layout success: 1 12018REPAIR TABLE t1 EXTENDED; 12019Table Op Msg_type Msg_text 12020test.t1 repair status OK 12021# check layout success: 1 12022TRUNCATE t1; 12023 12024# check TRUNCATE success: 1 12025# check layout success: 1 12026# End usability test (inc/partition_check.inc) 12027DROP TABLE t1; 12028CREATE TABLE t1 ( 12029f_int1 INTEGER DEFAULT 0, 12030f_int2 INTEGER DEFAULT 0, 12031f_char1 CHAR(20), 12032f_char2 CHAR(20), 12033f_charbig VARCHAR(1000) 12034 12035) 12036PARTITION BY LIST(ABS(MOD(f_int1,2))) 12037SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 12038(PARTITION part1 VALUES IN (0), 12039PARTITION part2 VALUES IN (1), 12040PARTITION part3 VALUES IN (NULL)); 12041INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12042SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12043WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 12044ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2); 12045INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12046SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12047WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 12048# Start usability test (inc/partition_check.inc) 12049create_command 12050SHOW CREATE TABLE t1; 12051Table Create Table 12052t1 CREATE TABLE `t1` ( 12053 `f_int1` int(11) DEFAULT 0, 12054 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (abs(`f_int1` MOD 2)) 12061SUBPARTITION BY KEY (`f_int1`) 12062SUBPARTITIONS 3 12063(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB, 12064 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB, 12065 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB) 12066 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 12071INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12072SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12073CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 12074WHERE f_int1 IN (2,3); 12075ERROR 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 12078INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12079SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12080CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12081WHERE f_int1 IN (2,3); 12082DELETE FROM t1 WHERE f_charbig = 'delete me'; 12083INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12084SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12085CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12086WHERE f_int1 IN (2,3); 12087DELETE FROM t1 WHERE f_charbig = 'delete me'; 12088# check read via f_int1 success: 1 12089# check read via f_int2 success: 1 12090 12091# check multiple-1 success: 1 12092DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 12093 12094# check multiple-2 success: 1 12095INSERT INTO t1 SELECT * FROM t0_template 12096WHERE MOD(f_int1,3) = 0; 12097 12098# check multiple-3 success: 1 12099UPDATE t1 SET f_int1 = f_int1 + @max_row 12100WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 12101AND @max_row_div2 + @max_row_div4; 12102 12103# check multiple-4 success: 1 12104DELETE FROM t1 12105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 12106AND @max_row_div2 + @max_row_div4 + @max_row; 12107 12108# check multiple-5 success: 1 12109SELECT COUNT(*) INTO @try_count FROM t0_template 12110WHERE MOD(f_int1,3) = 0 12111AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12112SELECT COUNT(*) INTO @clash_count 12113FROM t1 INNER JOIN t0_template USING(f_int1) 12114WHERE MOD(f_int1,3) = 0 12115AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12116SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 12117INSERT INTO t1 12118SET f_int1 = @cur_value , f_int2 = @cur_value, 12119f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12120f_charbig = '#SINGLE#'; 12121 12122# check single-1 success: 1 12123SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 12124INSERT INTO t1 12125SET f_int1 = @cur_value , f_int2 = @cur_value, 12126f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12127f_charbig = '#SINGLE#'; 12128 12129# check single-2 success: 1 12130SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 12131SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 12132UPDATE t1 SET f_int1 = @cur_value2 12133WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 12134 12135# check single-3 success: 1 12136SET @cur_value1= -1; 12137SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 12138UPDATE t1 SET f_int1 = @cur_value1 12139WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 12140 12141# check single-4 success: 1 12142SELECT MAX(f_int1) INTO @cur_value FROM t1; 12143DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 12144 12145# check single-5 success: 1 12146DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 12147 12148# check single-6 success: 1 12149INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 12150 12151# check single-7 success: 1 12152DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 12153DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 12154INSERT t1 SET f_int1 = 0 , f_int2 = 0, 12155f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 12156f_charbig = '#NULL#'; 12157INSERT INTO t1 12158SET f_int1 = NULL , f_int2 = -@max_row, 12159f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 12160f_charbig = '#NULL#'; 12161# check null success: 1 12162 12163# check null-1 success: 1 12164UPDATE t1 SET f_int1 = -@max_row 12165WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12166AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12167 12168# check null-2 success: 1 12169UPDATE t1 SET f_int1 = NULL 12170WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12171AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12172 12173# check null-3 success: 1 12174DELETE FROM t1 12175WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12176AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12177 12178# check null-4 success: 1 12179DELETE FROM t1 12180WHERE f_int1 = 0 AND f_int2 = 0 12181AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 12182AND f_charbig = '#NULL#'; 12183INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12184SELECT f_int1, f_int1, '', '', 'was inserted' 12185 FROM t0_template source_tab 12186WHERE MOD(f_int1,3) = 0 12187AND f_int1 BETWEEN @max_row_div2 AND @max_row 12188ON DUPLICATE KEY 12189UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 12190f_int2 = 2 * @max_row + source_tab.f_int1, 12191f_charbig = 'was updated'; 12192 12193# check unique-1-a success: 1 12194 12195# check unique-1-b success: 1 12196DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12198f_int2 = CAST(f_char1 AS SIGNED INT), 12199f_charbig = CONCAT('===',f_char1,'===') 12200WHERE f_charbig = 'was updated'; 12201REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12202SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 12203 FROM t0_template source_tab 12204WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12205 12206# check replace success: 1 12207DELETE FROM t1 12208WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 12209DELETE FROM t1 12210WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 12211f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 12212UPDATE t1 SET f_int2 = f_int1, 12213f_char1 = CAST(f_int1 AS CHAR), 12214f_char2 = CAST(f_int1 AS CHAR), 12215f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 12216WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 12217SET AUTOCOMMIT= 0; 12218INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12219SELECT f_int1, f_int1, '', '', 'was inserted' 12220FROM t0_template source_tab 12221WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12222 12223# check transactions-1 success: 1 12224COMMIT WORK; 12225 12226# check transactions-2 success: 1 12227ROLLBACK WORK; 12228 12229# check transactions-3 success: 1 12230DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12231COMMIT WORK; 12232ROLLBACK WORK; 12233 12234# check transactions-4 success: 1 12235INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12236SELECT f_int1, f_int1, '', '', 'was inserted' 12237FROM t0_template source_tab 12238WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12239 12240# check transactions-5 success: 1 12241ROLLBACK WORK; 12242 12243# check transactions-6 success: 1 12244# INFO: Storage engine used for t1 seems to be transactional. 12245COMMIT; 12246 12247# check transactions-7 success: 1 12248DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12249COMMIT WORK; 12250SET @@session.sql_mode = 'traditional'; 12251SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 12252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12253SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 12254'', '', 'was inserted' FROM t0_template 12255WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12256ERROR 22012: Division by 0 12257COMMIT; 12258 12259# check transactions-8 success: 1 12260# INFO: Storage engine used for t1 seems to be able to revert 12261# changes made by the failing statement. 12262SET @@session.sql_mode = ''; 12263SET AUTOCOMMIT= 1; 12264DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12265COMMIT WORK; 12266UPDATE t1 SET f_charbig = REPEAT('b', 1000); 12267 12268# check special-1 success: 1 12269UPDATE t1 SET f_charbig = ''; 12270 12271# check special-2 success: 1 12272UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 12273INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12274SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 12275WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12276INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12277SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12278'just inserted' FROM t0_template 12279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12280CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 12281BEGIN 12282UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12283f_charbig = 'updated by trigger' 12284 WHERE f_int1 = new.f_int1; 12285END| 12286INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12287SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12289 12290# check trigger-1 success: 1 12291DROP TRIGGER trg_1; 12292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12293f_int2 = CAST(f_char1 AS SIGNED INT), 12294f_charbig = 'just inserted' 12295 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12296DELETE FROM t0_aux 12297WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12298INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12299SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12300'just inserted' FROM t0_template 12301WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12302CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 12303BEGIN 12304UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12305f_charbig = 'updated by trigger' 12306 WHERE f_int1 = new.f_int1; 12307END| 12308INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12309SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12311 12312# check trigger-2 success: 1 12313DROP TRIGGER trg_1; 12314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12315f_int2 = CAST(f_char1 AS SIGNED INT), 12316f_charbig = 'just inserted' 12317 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12318DELETE FROM t0_aux 12319WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12320INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12321SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12322'just inserted' FROM t0_template 12323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12324CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12325BEGIN 12326UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12327f_charbig = 'updated by trigger' 12328 WHERE f_int1 = new.f_int1; 12329END| 12330UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12331WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12332 12333# check trigger-3 success: 1 12334DROP TRIGGER trg_1; 12335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12336f_int2 = CAST(f_char1 AS SIGNED INT), 12337f_charbig = 'just inserted' 12338 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12339DELETE FROM t0_aux 12340WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12341INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12342SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12343'just inserted' FROM t0_template 12344WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12345CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12346BEGIN 12347UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12348f_charbig = 'updated by trigger' 12349 WHERE f_int1 = - old.f_int1; 12350END| 12351UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12352WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12353 12354# check trigger-4 success: 1 12355DROP TRIGGER trg_1; 12356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12357f_int2 = CAST(f_char1 AS SIGNED INT), 12358f_charbig = 'just inserted' 12359 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12360DELETE FROM t0_aux 12361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12363SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12364'just inserted' FROM t0_template 12365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12366CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12367BEGIN 12368UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12369f_charbig = 'updated by trigger' 12370 WHERE f_int1 = new.f_int1; 12371END| 12372UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12373WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12374 12375# check trigger-5 success: 1 12376DROP TRIGGER trg_1; 12377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12378f_int2 = CAST(f_char1 AS SIGNED INT), 12379f_charbig = 'just inserted' 12380 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12381DELETE FROM t0_aux 12382WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12383INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12384SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12385'just inserted' FROM t0_template 12386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12387CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12388BEGIN 12389UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12390f_charbig = 'updated by trigger' 12391 WHERE f_int1 = - old.f_int1; 12392END| 12393UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12394WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12395 12396# check trigger-6 success: 1 12397DROP TRIGGER trg_1; 12398UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12399f_int2 = CAST(f_char1 AS SIGNED INT), 12400f_charbig = 'just inserted' 12401 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12402DELETE FROM t0_aux 12403WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12404INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12405SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12406'just inserted' FROM t0_template 12407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12408CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 12409BEGIN 12410UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12411f_charbig = 'updated by trigger' 12412 WHERE f_int1 = - old.f_int1; 12413END| 12414DELETE FROM t0_aux 12415WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12416 12417# check trigger-7 success: 1 12418DROP TRIGGER trg_1; 12419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12420f_int2 = CAST(f_char1 AS SIGNED INT), 12421f_charbig = 'just inserted' 12422 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12423DELETE FROM t0_aux 12424WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12427'just inserted' FROM t0_template 12428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12429CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 12430BEGIN 12431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12432f_charbig = 'updated by trigger' 12433 WHERE f_int1 = - old.f_int1; 12434END| 12435DELETE FROM t0_aux 12436WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12437 12438# check trigger-8 success: 1 12439DROP TRIGGER trg_1; 12440UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12441f_int2 = CAST(f_char1 AS SIGNED INT), 12442f_charbig = 'just inserted' 12443 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12444DELETE FROM t0_aux 12445WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12446DELETE FROM t1 12447WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12448CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12449BEGIN 12450SET new.f_int1 = old.f_int1 + @max_row, 12451new.f_int2 = old.f_int2 - @max_row, 12452new.f_charbig = '####updated per update trigger####'; 12453END| 12454UPDATE t1 12455SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12456f_charbig = '####updated per update statement itself####'; 12457 12458# check trigger-9 success: 1 12459DROP TRIGGER trg_2; 12460UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12461f_int2 = CAST(f_char1 AS SIGNED INT), 12462f_charbig = CONCAT('===',f_char1,'==='); 12463CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12464BEGIN 12465SET new.f_int1 = new.f_int1 + @max_row, 12466new.f_int2 = new.f_int2 - @max_row, 12467new.f_charbig = '####updated per update trigger####'; 12468END| 12469UPDATE t1 12470SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12471f_charbig = '####updated per update statement itself####'; 12472 12473# check trigger-10 success: 1 12474DROP TRIGGER trg_2; 12475UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12476f_int2 = CAST(f_char1 AS SIGNED INT), 12477f_charbig = CONCAT('===',f_char1,'==='); 12478CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12479BEGIN 12480SET new.f_int1 = @my_max1 + @counter, 12481new.f_int2 = @my_min2 - @counter, 12482new.f_charbig = '####updated per insert trigger####'; 12483SET @counter = @counter + 1; 12484END| 12485SET @counter = 1; 12486SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12487INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12488SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12489CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12490WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12491ORDER BY f_int1; 12492DROP TRIGGER trg_3; 12493 12494# check trigger-11 success: 1 12495DELETE FROM t1 12496WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12497AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12498AND f_charbig = '####updated per insert trigger####'; 12499CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12500BEGIN 12501SET new.f_int1 = @my_max1 + @counter, 12502new.f_int2 = @my_min2 - @counter, 12503new.f_charbig = '####updated per insert trigger####'; 12504SET @counter = @counter + 1; 12505END| 12506SET @counter = 1; 12507SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12508INSERT INTO t1 (f_char1, f_char2, f_charbig) 12509SELECT CAST(f_int1 AS CHAR), 12510CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12511WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12512ORDER BY f_int1; 12513DROP TRIGGER trg_3; 12514 12515# check trigger-12 success: 1 12516DELETE FROM t1 12517WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12518AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12519AND f_charbig = '####updated per insert trigger####'; 12520ANALYZE TABLE t1; 12521Table Op Msg_type Msg_text 12522test.t1 analyze status OK 12523CHECK TABLE t1 EXTENDED; 12524Table Op Msg_type Msg_text 12525test.t1 check status OK 12526CHECKSUM TABLE t1 EXTENDED; 12527Table Checksum 12528test.t1 <some_value> 12529OPTIMIZE TABLE t1; 12530Table Op Msg_type Msg_text 12531test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 12532test.t1 optimize status OK 12533# check layout success: 1 12534REPAIR TABLE t1 EXTENDED; 12535Table Op Msg_type Msg_text 12536test.t1 repair status OK 12537# check layout success: 1 12538TRUNCATE t1; 12539 12540# check TRUNCATE success: 1 12541# check layout success: 1 12542# End usability test (inc/partition_check.inc) 12543DROP TABLE t1; 12544DROP TABLE IF EXISTS t1; 12545CREATE TABLE t1 ( 12546f_int1 INTEGER DEFAULT 0, 12547f_int2 INTEGER DEFAULT 0, 12548f_char1 CHAR(20), 12549f_char2 CHAR(20), 12550f_charbig VARCHAR(1000) 12551 12552) 12553PARTITION BY HASH(f_int1) PARTITIONS 2; 12554INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12555SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12556WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 12557ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 12558INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12559SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12560WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 12561# Start usability test (inc/partition_check.inc) 12562create_command 12563SHOW CREATE TABLE t1; 12564Table Create Table 12565t1 CREATE TABLE `t1` ( 12566 `f_int1` int(11) DEFAULT 0, 12567 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY HASH (`f_int1`) 12574PARTITIONS 2 12575 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 12580INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12581SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12582CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 12583WHERE f_int1 IN (2,3); 12584ERROR 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 12587INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12588SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12589CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12590WHERE f_int1 IN (2,3); 12591DELETE FROM t1 WHERE f_charbig = 'delete me'; 12592INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12593SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12594CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12595WHERE f_int1 IN (2,3); 12596DELETE FROM t1 WHERE f_charbig = 'delete me'; 12597# check read via f_int1 success: 1 12598# check read via f_int2 success: 1 12599 12600# check multiple-1 success: 1 12601DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 12602 12603# check multiple-2 success: 1 12604INSERT INTO t1 SELECT * FROM t0_template 12605WHERE MOD(f_int1,3) = 0; 12606 12607# check multiple-3 success: 1 12608UPDATE t1 SET f_int1 = f_int1 + @max_row 12609WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 12610AND @max_row_div2 + @max_row_div4; 12611 12612# check multiple-4 success: 1 12613DELETE FROM t1 12614WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 12615AND @max_row_div2 + @max_row_div4 + @max_row; 12616 12617# check multiple-5 success: 1 12618SELECT COUNT(*) INTO @try_count FROM t0_template 12619WHERE MOD(f_int1,3) = 0 12620AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12621SELECT COUNT(*) INTO @clash_count 12622FROM t1 INNER JOIN t0_template USING(f_int1) 12623WHERE MOD(f_int1,3) = 0 12624AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12625SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 12626INSERT INTO t1 12627SET f_int1 = @cur_value , f_int2 = @cur_value, 12628f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12629f_charbig = '#SINGLE#'; 12630 12631# check single-1 success: 1 12632SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 12633INSERT INTO t1 12634SET f_int1 = @cur_value , f_int2 = @cur_value, 12635f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12636f_charbig = '#SINGLE#'; 12637 12638# check single-2 success: 1 12639SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 12640SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 12641UPDATE t1 SET f_int1 = @cur_value2 12642WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 12643 12644# check single-3 success: 1 12645SET @cur_value1= -1; 12646SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 12647UPDATE t1 SET f_int1 = @cur_value1 12648WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 12649 12650# check single-4 success: 1 12651SELECT MAX(f_int1) INTO @cur_value FROM t1; 12652DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 12653 12654# check single-5 success: 1 12655DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 12656 12657# check single-6 success: 1 12658INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 12659 12660# check single-7 success: 1 12661DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 12662DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 12663INSERT t1 SET f_int1 = 0 , f_int2 = 0, 12664f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 12665f_charbig = '#NULL#'; 12666INSERT INTO t1 12667SET f_int1 = NULL , f_int2 = -@max_row, 12668f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 12669f_charbig = '#NULL#'; 12670# check null success: 1 12671 12672# check null-1 success: 1 12673UPDATE t1 SET f_int1 = -@max_row 12674WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12675AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12676 12677# check null-2 success: 1 12678UPDATE t1 SET f_int1 = NULL 12679WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12680AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12681 12682# check null-3 success: 1 12683DELETE FROM t1 12684WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12685AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12686 12687# check null-4 success: 1 12688DELETE FROM t1 12689WHERE f_int1 = 0 AND f_int2 = 0 12690AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 12691AND f_charbig = '#NULL#'; 12692INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12693SELECT f_int1, f_int1, '', '', 'was inserted' 12694 FROM t0_template source_tab 12695WHERE MOD(f_int1,3) = 0 12696AND f_int1 BETWEEN @max_row_div2 AND @max_row 12697ON DUPLICATE KEY 12698UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 12699f_int2 = 2 * @max_row + source_tab.f_int1, 12700f_charbig = 'was updated'; 12701 12702# check unique-1-a success: 1 12703 12704# check unique-1-b success: 1 12705DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12706UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12707f_int2 = CAST(f_char1 AS SIGNED INT), 12708f_charbig = CONCAT('===',f_char1,'===') 12709WHERE f_charbig = 'was updated'; 12710REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12711SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 12712 FROM t0_template source_tab 12713WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12714 12715# check replace success: 1 12716DELETE FROM t1 12717WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 12718DELETE FROM t1 12719WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 12720f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 12721UPDATE t1 SET f_int2 = f_int1, 12722f_char1 = CAST(f_int1 AS CHAR), 12723f_char2 = CAST(f_int1 AS CHAR), 12724f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 12725WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 12726SET AUTOCOMMIT= 0; 12727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12728SELECT f_int1, f_int1, '', '', 'was inserted' 12729FROM t0_template source_tab 12730WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12731 12732# check transactions-1 success: 1 12733COMMIT WORK; 12734 12735# check transactions-2 success: 1 12736ROLLBACK WORK; 12737 12738# check transactions-3 success: 1 12739DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12740COMMIT WORK; 12741ROLLBACK WORK; 12742 12743# check transactions-4 success: 1 12744INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12745SELECT f_int1, f_int1, '', '', 'was inserted' 12746FROM t0_template source_tab 12747WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12748 12749# check transactions-5 success: 1 12750ROLLBACK WORK; 12751 12752# check transactions-6 success: 1 12753# INFO: Storage engine used for t1 seems to be transactional. 12754COMMIT; 12755 12756# check transactions-7 success: 1 12757DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12758COMMIT WORK; 12759SET @@session.sql_mode = 'traditional'; 12760SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 12761INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12762SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 12763'', '', 'was inserted' FROM t0_template 12764WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12765ERROR 22012: Division by 0 12766COMMIT; 12767 12768# check transactions-8 success: 1 12769# INFO: Storage engine used for t1 seems to be able to revert 12770# changes made by the failing statement. 12771SET @@session.sql_mode = ''; 12772SET AUTOCOMMIT= 1; 12773DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12774COMMIT WORK; 12775UPDATE t1 SET f_charbig = REPEAT('b', 1000); 12776 12777# check special-1 success: 1 12778UPDATE t1 SET f_charbig = ''; 12779 12780# check special-2 success: 1 12781UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 12782INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12783SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 12784WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12785INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12786SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12787'just inserted' FROM t0_template 12788WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12789CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 12790BEGIN 12791UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12792f_charbig = 'updated by trigger' 12793 WHERE f_int1 = new.f_int1; 12794END| 12795INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12796SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12797WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12798 12799# check trigger-1 success: 1 12800DROP TRIGGER trg_1; 12801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12802f_int2 = CAST(f_char1 AS SIGNED INT), 12803f_charbig = 'just inserted' 12804 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12805DELETE FROM t0_aux 12806WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12807INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12808SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12809'just inserted' FROM t0_template 12810WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12811CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 12812BEGIN 12813UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12814f_charbig = 'updated by trigger' 12815 WHERE f_int1 = new.f_int1; 12816END| 12817INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12818SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12820 12821# check trigger-2 success: 1 12822DROP TRIGGER trg_1; 12823UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12824f_int2 = CAST(f_char1 AS SIGNED INT), 12825f_charbig = 'just inserted' 12826 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12827DELETE FROM t0_aux 12828WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12829INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12830SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12831'just inserted' FROM t0_template 12832WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12833CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12834BEGIN 12835UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12836f_charbig = 'updated by trigger' 12837 WHERE f_int1 = new.f_int1; 12838END| 12839UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12840WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12841 12842# check trigger-3 success: 1 12843DROP TRIGGER trg_1; 12844UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12845f_int2 = CAST(f_char1 AS SIGNED INT), 12846f_charbig = 'just inserted' 12847 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12848DELETE FROM t0_aux 12849WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12850INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12851SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12852'just inserted' FROM t0_template 12853WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12854CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12855BEGIN 12856UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12857f_charbig = 'updated by trigger' 12858 WHERE f_int1 = - old.f_int1; 12859END| 12860UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12861WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12862 12863# check trigger-4 success: 1 12864DROP TRIGGER trg_1; 12865UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12866f_int2 = CAST(f_char1 AS SIGNED INT), 12867f_charbig = 'just inserted' 12868 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12869DELETE FROM t0_aux 12870WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12871INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12872SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12873'just inserted' FROM t0_template 12874WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12875CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12876BEGIN 12877UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12878f_charbig = 'updated by trigger' 12879 WHERE f_int1 = new.f_int1; 12880END| 12881UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12882WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12883 12884# check trigger-5 success: 1 12885DROP TRIGGER trg_1; 12886UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12887f_int2 = CAST(f_char1 AS SIGNED INT), 12888f_charbig = 'just inserted' 12889 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12890DELETE FROM t0_aux 12891WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12892INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12893SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12894'just inserted' FROM t0_template 12895WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12896CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12897BEGIN 12898UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12899f_charbig = 'updated by trigger' 12900 WHERE f_int1 = - old.f_int1; 12901END| 12902UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12903WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12904 12905# check trigger-6 success: 1 12906DROP TRIGGER trg_1; 12907UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12908f_int2 = CAST(f_char1 AS SIGNED INT), 12909f_charbig = 'just inserted' 12910 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12911DELETE FROM t0_aux 12912WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12913INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12914SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12915'just inserted' FROM t0_template 12916WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12917CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 12918BEGIN 12919UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12920f_charbig = 'updated by trigger' 12921 WHERE f_int1 = - old.f_int1; 12922END| 12923DELETE FROM t0_aux 12924WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12925 12926# check trigger-7 success: 1 12927DROP TRIGGER trg_1; 12928UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12929f_int2 = CAST(f_char1 AS SIGNED INT), 12930f_charbig = 'just inserted' 12931 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12932DELETE FROM t0_aux 12933WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12934INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12935SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12936'just inserted' FROM t0_template 12937WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12938CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 12939BEGIN 12940UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12941f_charbig = 'updated by trigger' 12942 WHERE f_int1 = - old.f_int1; 12943END| 12944DELETE FROM t0_aux 12945WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12946 12947# check trigger-8 success: 1 12948DROP TRIGGER trg_1; 12949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12950f_int2 = CAST(f_char1 AS SIGNED INT), 12951f_charbig = 'just inserted' 12952 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12953DELETE FROM t0_aux 12954WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12955DELETE FROM t1 12956WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12957CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12958BEGIN 12959SET new.f_int1 = old.f_int1 + @max_row, 12960new.f_int2 = old.f_int2 - @max_row, 12961new.f_charbig = '####updated per update trigger####'; 12962END| 12963UPDATE t1 12964SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12965f_charbig = '####updated per update statement itself####'; 12966 12967# check trigger-9 success: 1 12968DROP TRIGGER trg_2; 12969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12970f_int2 = CAST(f_char1 AS SIGNED INT), 12971f_charbig = CONCAT('===',f_char1,'==='); 12972CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12973BEGIN 12974SET new.f_int1 = new.f_int1 + @max_row, 12975new.f_int2 = new.f_int2 - @max_row, 12976new.f_charbig = '####updated per update trigger####'; 12977END| 12978UPDATE t1 12979SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12980f_charbig = '####updated per update statement itself####'; 12981 12982# check trigger-10 success: 1 12983DROP TRIGGER trg_2; 12984UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12985f_int2 = CAST(f_char1 AS SIGNED INT), 12986f_charbig = CONCAT('===',f_char1,'==='); 12987CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12988BEGIN 12989SET new.f_int1 = @my_max1 + @counter, 12990new.f_int2 = @my_min2 - @counter, 12991new.f_charbig = '####updated per insert trigger####'; 12992SET @counter = @counter + 1; 12993END| 12994SET @counter = 1; 12995SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12997SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12998CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12999WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13000ORDER BY f_int1; 13001DROP TRIGGER trg_3; 13002 13003# check trigger-11 success: 1 13004DELETE FROM t1 13005WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13006AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13007AND f_charbig = '####updated per insert trigger####'; 13008CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13009BEGIN 13010SET new.f_int1 = @my_max1 + @counter, 13011new.f_int2 = @my_min2 - @counter, 13012new.f_charbig = '####updated per insert trigger####'; 13013SET @counter = @counter + 1; 13014END| 13015SET @counter = 1; 13016SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13017INSERT INTO t1 (f_char1, f_char2, f_charbig) 13018SELECT CAST(f_int1 AS CHAR), 13019CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13020WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13021ORDER BY f_int1; 13022DROP TRIGGER trg_3; 13023 13024# check trigger-12 success: 1 13025DELETE FROM t1 13026WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13027AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13028AND f_charbig = '####updated per insert trigger####'; 13029ANALYZE TABLE t1; 13030Table Op Msg_type Msg_text 13031test.t1 analyze status OK 13032CHECK TABLE t1 EXTENDED; 13033Table Op Msg_type Msg_text 13034test.t1 check status OK 13035CHECKSUM TABLE t1 EXTENDED; 13036Table Checksum 13037test.t1 <some_value> 13038OPTIMIZE TABLE t1; 13039Table Op Msg_type Msg_text 13040test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 13041test.t1 optimize status OK 13042# check layout success: 1 13043REPAIR TABLE t1 EXTENDED; 13044Table Op Msg_type Msg_text 13045test.t1 repair status OK 13046# check layout success: 1 13047TRUNCATE t1; 13048 13049# check TRUNCATE success: 1 13050# check layout success: 1 13051# End usability test (inc/partition_check.inc) 13052DROP TABLE t1; 13053CREATE TABLE t1 ( 13054f_int1 INTEGER DEFAULT 0, 13055f_int2 INTEGER DEFAULT 0, 13056f_char1 CHAR(20), 13057f_char2 CHAR(20), 13058f_charbig VARCHAR(1000) 13059 13060) 13061PARTITION BY KEY(f_int1) PARTITIONS 5; 13062INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13063SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13064WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 13065ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 13066INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13067SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13068WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 13069# Start usability test (inc/partition_check.inc) 13070create_command 13071SHOW CREATE TABLE t1; 13072Table Create Table 13073t1 CREATE TABLE `t1` ( 13074 `f_int1` int(11) DEFAULT 0, 13075 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY KEY (`f_int1`) 13082PARTITIONS 5 13083 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 13088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13089SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13090CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 13091WHERE f_int1 IN (2,3); 13092ERROR 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 13095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13096SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13097CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13098WHERE f_int1 IN (2,3); 13099DELETE FROM t1 WHERE f_charbig = 'delete me'; 13100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13101SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13102CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13103WHERE f_int1 IN (2,3); 13104DELETE FROM t1 WHERE f_charbig = 'delete me'; 13105# check read via f_int1 success: 1 13106# check read via f_int2 success: 1 13107 13108# check multiple-1 success: 1 13109DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 13110 13111# check multiple-2 success: 1 13112INSERT INTO t1 SELECT * FROM t0_template 13113WHERE MOD(f_int1,3) = 0; 13114 13115# check multiple-3 success: 1 13116UPDATE t1 SET f_int1 = f_int1 + @max_row 13117WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 13118AND @max_row_div2 + @max_row_div4; 13119 13120# check multiple-4 success: 1 13121DELETE FROM t1 13122WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 13123AND @max_row_div2 + @max_row_div4 + @max_row; 13124 13125# check multiple-5 success: 1 13126SELECT COUNT(*) INTO @try_count FROM t0_template 13127WHERE MOD(f_int1,3) = 0 13128AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13129SELECT COUNT(*) INTO @clash_count 13130FROM t1 INNER JOIN t0_template USING(f_int1) 13131WHERE MOD(f_int1,3) = 0 13132AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13133SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 13134INSERT INTO t1 13135SET f_int1 = @cur_value , f_int2 = @cur_value, 13136f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13137f_charbig = '#SINGLE#'; 13138 13139# check single-1 success: 1 13140SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 13141INSERT INTO t1 13142SET f_int1 = @cur_value , f_int2 = @cur_value, 13143f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13144f_charbig = '#SINGLE#'; 13145 13146# check single-2 success: 1 13147SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 13148SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 13149UPDATE t1 SET f_int1 = @cur_value2 13150WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 13151 13152# check single-3 success: 1 13153SET @cur_value1= -1; 13154SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 13155UPDATE t1 SET f_int1 = @cur_value1 13156WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 13157 13158# check single-4 success: 1 13159SELECT MAX(f_int1) INTO @cur_value FROM t1; 13160DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 13161 13162# check single-5 success: 1 13163DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 13164 13165# check single-6 success: 1 13166INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 13167 13168# check single-7 success: 1 13169DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 13170DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 13171INSERT t1 SET f_int1 = 0 , f_int2 = 0, 13172f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 13173f_charbig = '#NULL#'; 13174INSERT INTO t1 13175SET f_int1 = NULL , f_int2 = -@max_row, 13176f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 13177f_charbig = '#NULL#'; 13178# check null success: 1 13179 13180# check null-1 success: 1 13181UPDATE t1 SET f_int1 = -@max_row 13182WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13183AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13184 13185# check null-2 success: 1 13186UPDATE t1 SET f_int1 = NULL 13187WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13188AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13189 13190# check null-3 success: 1 13191DELETE FROM t1 13192WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13193AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13194 13195# check null-4 success: 1 13196DELETE FROM t1 13197WHERE f_int1 = 0 AND f_int2 = 0 13198AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 13199AND f_charbig = '#NULL#'; 13200INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13201SELECT f_int1, f_int1, '', '', 'was inserted' 13202 FROM t0_template source_tab 13203WHERE MOD(f_int1,3) = 0 13204AND f_int1 BETWEEN @max_row_div2 AND @max_row 13205ON DUPLICATE KEY 13206UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 13207f_int2 = 2 * @max_row + source_tab.f_int1, 13208f_charbig = 'was updated'; 13209 13210# check unique-1-a success: 1 13211 13212# check unique-1-b success: 1 13213DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13215f_int2 = CAST(f_char1 AS SIGNED INT), 13216f_charbig = CONCAT('===',f_char1,'===') 13217WHERE f_charbig = 'was updated'; 13218REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13219SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 13220 FROM t0_template source_tab 13221WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13222 13223# check replace success: 1 13224DELETE FROM t1 13225WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 13226DELETE FROM t1 13227WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 13228f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 13229UPDATE t1 SET f_int2 = f_int1, 13230f_char1 = CAST(f_int1 AS CHAR), 13231f_char2 = CAST(f_int1 AS CHAR), 13232f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 13233WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 13234SET AUTOCOMMIT= 0; 13235INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13236SELECT f_int1, f_int1, '', '', 'was inserted' 13237FROM t0_template source_tab 13238WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13239 13240# check transactions-1 success: 1 13241COMMIT WORK; 13242 13243# check transactions-2 success: 1 13244ROLLBACK WORK; 13245 13246# check transactions-3 success: 1 13247DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13248COMMIT WORK; 13249ROLLBACK WORK; 13250 13251# check transactions-4 success: 1 13252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13253SELECT f_int1, f_int1, '', '', 'was inserted' 13254FROM t0_template source_tab 13255WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13256 13257# check transactions-5 success: 1 13258ROLLBACK WORK; 13259 13260# check transactions-6 success: 1 13261# INFO: Storage engine used for t1 seems to be transactional. 13262COMMIT; 13263 13264# check transactions-7 success: 1 13265DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13266COMMIT WORK; 13267SET @@session.sql_mode = 'traditional'; 13268SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 13269INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13270SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 13271'', '', 'was inserted' FROM t0_template 13272WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13273ERROR 22012: Division by 0 13274COMMIT; 13275 13276# check transactions-8 success: 1 13277# INFO: Storage engine used for t1 seems to be able to revert 13278# changes made by the failing statement. 13279SET @@session.sql_mode = ''; 13280SET AUTOCOMMIT= 1; 13281DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13282COMMIT WORK; 13283UPDATE t1 SET f_charbig = REPEAT('b', 1000); 13284 13285# check special-1 success: 1 13286UPDATE t1 SET f_charbig = ''; 13287 13288# check special-2 success: 1 13289UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 13290INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13291SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 13292WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13293INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13294SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13295'just inserted' FROM t0_template 13296WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13297CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 13298BEGIN 13299UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13300f_charbig = 'updated by trigger' 13301 WHERE f_int1 = new.f_int1; 13302END| 13303INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13304SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13305WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13306 13307# check trigger-1 success: 1 13308DROP TRIGGER trg_1; 13309UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13310f_int2 = CAST(f_char1 AS SIGNED INT), 13311f_charbig = 'just inserted' 13312 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13313DELETE FROM t0_aux 13314WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13315INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13316SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13317'just inserted' FROM t0_template 13318WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13319CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 13320BEGIN 13321UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13322f_charbig = 'updated by trigger' 13323 WHERE f_int1 = new.f_int1; 13324END| 13325INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13326SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13328 13329# check trigger-2 success: 1 13330DROP TRIGGER trg_1; 13331UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13332f_int2 = CAST(f_char1 AS SIGNED INT), 13333f_charbig = 'just inserted' 13334 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13335DELETE FROM t0_aux 13336WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13337INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13338SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13339'just inserted' FROM t0_template 13340WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13341CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13342BEGIN 13343UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13344f_charbig = 'updated by trigger' 13345 WHERE f_int1 = new.f_int1; 13346END| 13347UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13348WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13349 13350# check trigger-3 success: 1 13351DROP TRIGGER trg_1; 13352UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13353f_int2 = CAST(f_char1 AS SIGNED INT), 13354f_charbig = 'just inserted' 13355 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13356DELETE FROM t0_aux 13357WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13358INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13359SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13360'just inserted' FROM t0_template 13361WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13362CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13363BEGIN 13364UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13365f_charbig = 'updated by trigger' 13366 WHERE f_int1 = - old.f_int1; 13367END| 13368UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13369WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13370 13371# check trigger-4 success: 1 13372DROP TRIGGER trg_1; 13373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13374f_int2 = CAST(f_char1 AS SIGNED INT), 13375f_charbig = 'just inserted' 13376 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13377DELETE FROM t0_aux 13378WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13379INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13380SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13381'just inserted' FROM t0_template 13382WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13383CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13384BEGIN 13385UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13386f_charbig = 'updated by trigger' 13387 WHERE f_int1 = new.f_int1; 13388END| 13389UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13390WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13391 13392# check trigger-5 success: 1 13393DROP TRIGGER trg_1; 13394UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13395f_int2 = CAST(f_char1 AS SIGNED INT), 13396f_charbig = 'just inserted' 13397 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13398DELETE FROM t0_aux 13399WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13400INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13401SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13402'just inserted' FROM t0_template 13403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13404CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13405BEGIN 13406UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13407f_charbig = 'updated by trigger' 13408 WHERE f_int1 = - old.f_int1; 13409END| 13410UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13411WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13412 13413# check trigger-6 success: 1 13414DROP TRIGGER trg_1; 13415UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13416f_int2 = CAST(f_char1 AS SIGNED INT), 13417f_charbig = 'just inserted' 13418 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13419DELETE FROM t0_aux 13420WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13421INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13422SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13423'just inserted' FROM t0_template 13424WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13425CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 13426BEGIN 13427UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13428f_charbig = 'updated by trigger' 13429 WHERE f_int1 = - old.f_int1; 13430END| 13431DELETE FROM t0_aux 13432WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13433 13434# check trigger-7 success: 1 13435DROP TRIGGER trg_1; 13436UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13437f_int2 = CAST(f_char1 AS SIGNED INT), 13438f_charbig = 'just inserted' 13439 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13440DELETE FROM t0_aux 13441WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13442INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13443SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13444'just inserted' FROM t0_template 13445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13446CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 13447BEGIN 13448UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13449f_charbig = 'updated by trigger' 13450 WHERE f_int1 = - old.f_int1; 13451END| 13452DELETE FROM t0_aux 13453WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13454 13455# check trigger-8 success: 1 13456DROP TRIGGER trg_1; 13457UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13458f_int2 = CAST(f_char1 AS SIGNED INT), 13459f_charbig = 'just inserted' 13460 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13461DELETE FROM t0_aux 13462WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13463DELETE FROM t1 13464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13465CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13466BEGIN 13467SET new.f_int1 = old.f_int1 + @max_row, 13468new.f_int2 = old.f_int2 - @max_row, 13469new.f_charbig = '####updated per update trigger####'; 13470END| 13471UPDATE t1 13472SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13473f_charbig = '####updated per update statement itself####'; 13474 13475# check trigger-9 success: 1 13476DROP TRIGGER trg_2; 13477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13478f_int2 = CAST(f_char1 AS SIGNED INT), 13479f_charbig = CONCAT('===',f_char1,'==='); 13480CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13481BEGIN 13482SET new.f_int1 = new.f_int1 + @max_row, 13483new.f_int2 = new.f_int2 - @max_row, 13484new.f_charbig = '####updated per update trigger####'; 13485END| 13486UPDATE t1 13487SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13488f_charbig = '####updated per update statement itself####'; 13489 13490# check trigger-10 success: 1 13491DROP TRIGGER trg_2; 13492UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13493f_int2 = CAST(f_char1 AS SIGNED INT), 13494f_charbig = CONCAT('===',f_char1,'==='); 13495CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13496BEGIN 13497SET new.f_int1 = @my_max1 + @counter, 13498new.f_int2 = @my_min2 - @counter, 13499new.f_charbig = '####updated per insert trigger####'; 13500SET @counter = @counter + 1; 13501END| 13502SET @counter = 1; 13503SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13505SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13506CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13508ORDER BY f_int1; 13509DROP TRIGGER trg_3; 13510 13511# check trigger-11 success: 1 13512DELETE FROM t1 13513WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13514AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13515AND f_charbig = '####updated per insert trigger####'; 13516CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13517BEGIN 13518SET new.f_int1 = @my_max1 + @counter, 13519new.f_int2 = @my_min2 - @counter, 13520new.f_charbig = '####updated per insert trigger####'; 13521SET @counter = @counter + 1; 13522END| 13523SET @counter = 1; 13524SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13525INSERT INTO t1 (f_char1, f_char2, f_charbig) 13526SELECT CAST(f_int1 AS CHAR), 13527CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13529ORDER BY f_int1; 13530DROP TRIGGER trg_3; 13531 13532# check trigger-12 success: 1 13533DELETE FROM t1 13534WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13535AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13536AND f_charbig = '####updated per insert trigger####'; 13537ANALYZE TABLE t1; 13538Table Op Msg_type Msg_text 13539test.t1 analyze status OK 13540CHECK TABLE t1 EXTENDED; 13541Table Op Msg_type Msg_text 13542test.t1 check status OK 13543CHECKSUM TABLE t1 EXTENDED; 13544Table Checksum 13545test.t1 <some_value> 13546OPTIMIZE TABLE t1; 13547Table Op Msg_type Msg_text 13548test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 13549test.t1 optimize status OK 13550# check layout success: 1 13551REPAIR TABLE t1 EXTENDED; 13552Table Op Msg_type Msg_text 13553test.t1 repair status OK 13554# check layout success: 1 13555TRUNCATE t1; 13556 13557# check TRUNCATE success: 1 13558# check layout success: 1 13559# End usability test (inc/partition_check.inc) 13560DROP TABLE t1; 13561CREATE TABLE t1 ( 13562f_int1 INTEGER DEFAULT 0, 13563f_int2 INTEGER DEFAULT 0, 13564f_char1 CHAR(20), 13565f_char2 CHAR(20), 13566f_charbig VARCHAR(1000) 13567 13568) 13569PARTITION BY LIST(MOD(f_int1,4)) 13570(PARTITION part_3 VALUES IN (-3), 13571PARTITION part_2 VALUES IN (-2), 13572PARTITION part_1 VALUES IN (-1), 13573PARTITION part_N VALUES IN (NULL), 13574PARTITION part0 VALUES IN (0), 13575PARTITION part1 VALUES IN (1), 13576PARTITION part2 VALUES IN (2), 13577PARTITION part3 VALUES IN (3)); 13578INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13579SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13580WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 13581ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 13582INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13583SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13584WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 13585# Start usability test (inc/partition_check.inc) 13586create_command 13587SHOW CREATE TABLE t1; 13588Table Create Table 13589t1 CREATE TABLE `t1` ( 13590 `f_int1` int(11) DEFAULT 0, 13591 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (`f_int1` MOD 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) 13606 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 13611INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13612SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13613CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 13614WHERE f_int1 IN (2,3); 13615ERROR 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 13618INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13619SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13620CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13621WHERE f_int1 IN (2,3); 13622DELETE FROM t1 WHERE f_charbig = 'delete me'; 13623INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13624SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13625CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13626WHERE f_int1 IN (2,3); 13627DELETE FROM t1 WHERE f_charbig = 'delete me'; 13628# check read via f_int1 success: 1 13629# check read via f_int2 success: 1 13630 13631# check multiple-1 success: 1 13632DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 13633 13634# check multiple-2 success: 1 13635INSERT INTO t1 SELECT * FROM t0_template 13636WHERE MOD(f_int1,3) = 0; 13637 13638# check multiple-3 success: 1 13639UPDATE t1 SET f_int1 = f_int1 + @max_row 13640WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 13641AND @max_row_div2 + @max_row_div4; 13642 13643# check multiple-4 success: 1 13644DELETE FROM t1 13645WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 13646AND @max_row_div2 + @max_row_div4 + @max_row; 13647 13648# check multiple-5 success: 1 13649SELECT COUNT(*) INTO @try_count FROM t0_template 13650WHERE MOD(f_int1,3) = 0 13651AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13652SELECT COUNT(*) INTO @clash_count 13653FROM t1 INNER JOIN t0_template USING(f_int1) 13654WHERE MOD(f_int1,3) = 0 13655AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13656SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 13657INSERT INTO t1 13658SET f_int1 = @cur_value , f_int2 = @cur_value, 13659f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13660f_charbig = '#SINGLE#'; 13661 13662# check single-1 success: 1 13663SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 13664INSERT INTO t1 13665SET f_int1 = @cur_value , f_int2 = @cur_value, 13666f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13667f_charbig = '#SINGLE#'; 13668 13669# check single-2 success: 1 13670SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 13671SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 13672UPDATE t1 SET f_int1 = @cur_value2 13673WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 13674 13675# check single-3 success: 1 13676SET @cur_value1= -1; 13677SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 13678UPDATE t1 SET f_int1 = @cur_value1 13679WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 13680 13681# check single-4 success: 1 13682SELECT MAX(f_int1) INTO @cur_value FROM t1; 13683DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 13684 13685# check single-5 success: 1 13686DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 13687 13688# check single-6 success: 1 13689INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 13690 13691# check single-7 success: 1 13692DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 13693DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 13694INSERT t1 SET f_int1 = 0 , f_int2 = 0, 13695f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 13696f_charbig = '#NULL#'; 13697INSERT INTO t1 13698SET f_int1 = NULL , f_int2 = -@max_row, 13699f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 13700f_charbig = '#NULL#'; 13701# check null success: 1 13702 13703# check null-1 success: 1 13704UPDATE t1 SET f_int1 = -@max_row 13705WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13706AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13707 13708# check null-2 success: 1 13709UPDATE t1 SET f_int1 = NULL 13710WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13711AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13712 13713# check null-3 success: 1 13714DELETE FROM t1 13715WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13716AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13717 13718# check null-4 success: 1 13719DELETE FROM t1 13720WHERE f_int1 = 0 AND f_int2 = 0 13721AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 13722AND f_charbig = '#NULL#'; 13723INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13724SELECT f_int1, f_int1, '', '', 'was inserted' 13725 FROM t0_template source_tab 13726WHERE MOD(f_int1,3) = 0 13727AND f_int1 BETWEEN @max_row_div2 AND @max_row 13728ON DUPLICATE KEY 13729UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 13730f_int2 = 2 * @max_row + source_tab.f_int1, 13731f_charbig = 'was updated'; 13732 13733# check unique-1-a success: 1 13734 13735# check unique-1-b success: 1 13736DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13737UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13738f_int2 = CAST(f_char1 AS SIGNED INT), 13739f_charbig = CONCAT('===',f_char1,'===') 13740WHERE f_charbig = 'was updated'; 13741REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13742SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 13743 FROM t0_template source_tab 13744WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13745 13746# check replace success: 1 13747DELETE FROM t1 13748WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 13749DELETE FROM t1 13750WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 13751f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 13752UPDATE t1 SET f_int2 = f_int1, 13753f_char1 = CAST(f_int1 AS CHAR), 13754f_char2 = CAST(f_int1 AS CHAR), 13755f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 13756WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 13757SET AUTOCOMMIT= 0; 13758INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13759SELECT f_int1, f_int1, '', '', 'was inserted' 13760FROM t0_template source_tab 13761WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13762 13763# check transactions-1 success: 1 13764COMMIT WORK; 13765 13766# check transactions-2 success: 1 13767ROLLBACK WORK; 13768 13769# check transactions-3 success: 1 13770DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13771COMMIT WORK; 13772ROLLBACK WORK; 13773 13774# check transactions-4 success: 1 13775INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13776SELECT f_int1, f_int1, '', '', 'was inserted' 13777FROM t0_template source_tab 13778WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13779 13780# check transactions-5 success: 1 13781ROLLBACK WORK; 13782 13783# check transactions-6 success: 1 13784# INFO: Storage engine used for t1 seems to be transactional. 13785COMMIT; 13786 13787# check transactions-7 success: 1 13788DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13789COMMIT WORK; 13790SET @@session.sql_mode = 'traditional'; 13791SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 13792INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13793SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 13794'', '', 'was inserted' FROM t0_template 13795WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13796ERROR 22012: Division by 0 13797COMMIT; 13798 13799# check transactions-8 success: 1 13800# INFO: Storage engine used for t1 seems to be able to revert 13801# changes made by the failing statement. 13802SET @@session.sql_mode = ''; 13803SET AUTOCOMMIT= 1; 13804DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13805COMMIT WORK; 13806UPDATE t1 SET f_charbig = REPEAT('b', 1000); 13807 13808# check special-1 success: 1 13809UPDATE t1 SET f_charbig = ''; 13810 13811# check special-2 success: 1 13812UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 13813INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13814SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 13815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13816INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13817SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13818'just inserted' FROM t0_template 13819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13820CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 13821BEGIN 13822UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13823f_charbig = 'updated by trigger' 13824 WHERE f_int1 = new.f_int1; 13825END| 13826INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13827SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13829 13830# check trigger-1 success: 1 13831DROP TRIGGER trg_1; 13832UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13833f_int2 = CAST(f_char1 AS SIGNED INT), 13834f_charbig = 'just inserted' 13835 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13836DELETE FROM t0_aux 13837WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13838INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13839SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13840'just inserted' FROM t0_template 13841WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13842CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 13843BEGIN 13844UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13845f_charbig = 'updated by trigger' 13846 WHERE f_int1 = new.f_int1; 13847END| 13848INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13849SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13850WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13851 13852# check trigger-2 success: 1 13853DROP TRIGGER trg_1; 13854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13855f_int2 = CAST(f_char1 AS SIGNED INT), 13856f_charbig = 'just inserted' 13857 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13858DELETE FROM t0_aux 13859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13862'just inserted' FROM t0_template 13863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13864CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13865BEGIN 13866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13867f_charbig = 'updated by trigger' 13868 WHERE f_int1 = new.f_int1; 13869END| 13870UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13872 13873# check trigger-3 success: 1 13874DROP TRIGGER trg_1; 13875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13876f_int2 = CAST(f_char1 AS SIGNED INT), 13877f_charbig = 'just inserted' 13878 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13879DELETE FROM t0_aux 13880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13881INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13882SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13883'just inserted' FROM t0_template 13884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13885CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13886BEGIN 13887UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13888f_charbig = 'updated by trigger' 13889 WHERE f_int1 = - old.f_int1; 13890END| 13891UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13892WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13893 13894# check trigger-4 success: 1 13895DROP TRIGGER trg_1; 13896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13897f_int2 = CAST(f_char1 AS SIGNED INT), 13898f_charbig = 'just inserted' 13899 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13900DELETE FROM t0_aux 13901WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13902INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13903SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13904'just inserted' FROM t0_template 13905WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13906CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13907BEGIN 13908UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13909f_charbig = 'updated by trigger' 13910 WHERE f_int1 = new.f_int1; 13911END| 13912UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13913WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13914 13915# check trigger-5 success: 1 13916DROP TRIGGER trg_1; 13917UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13918f_int2 = CAST(f_char1 AS SIGNED INT), 13919f_charbig = 'just inserted' 13920 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13921DELETE FROM t0_aux 13922WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13923INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13924SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13925'just inserted' FROM t0_template 13926WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13927CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13928BEGIN 13929UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13930f_charbig = 'updated by trigger' 13931 WHERE f_int1 = - old.f_int1; 13932END| 13933UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13934WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13935 13936# check trigger-6 success: 1 13937DROP TRIGGER trg_1; 13938UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13939f_int2 = CAST(f_char1 AS SIGNED INT), 13940f_charbig = 'just inserted' 13941 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13942DELETE FROM t0_aux 13943WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13944INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13945SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13946'just inserted' FROM t0_template 13947WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13948CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 13949BEGIN 13950UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13951f_charbig = 'updated by trigger' 13952 WHERE f_int1 = - old.f_int1; 13953END| 13954DELETE FROM t0_aux 13955WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13956 13957# check trigger-7 success: 1 13958DROP TRIGGER trg_1; 13959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13960f_int2 = CAST(f_char1 AS SIGNED INT), 13961f_charbig = 'just inserted' 13962 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13963DELETE FROM t0_aux 13964WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13965INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13966SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13967'just inserted' FROM t0_template 13968WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13969CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 13970BEGIN 13971UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13972f_charbig = 'updated by trigger' 13973 WHERE f_int1 = - old.f_int1; 13974END| 13975DELETE FROM t0_aux 13976WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13977 13978# check trigger-8 success: 1 13979DROP TRIGGER trg_1; 13980UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13981f_int2 = CAST(f_char1 AS SIGNED INT), 13982f_charbig = 'just inserted' 13983 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13984DELETE FROM t0_aux 13985WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13986DELETE FROM t1 13987WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13988CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13989BEGIN 13990SET new.f_int1 = old.f_int1 + @max_row, 13991new.f_int2 = old.f_int2 - @max_row, 13992new.f_charbig = '####updated per update trigger####'; 13993END| 13994UPDATE t1 13995SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13996f_charbig = '####updated per update statement itself####'; 13997 13998# check trigger-9 success: 1 13999DROP TRIGGER trg_2; 14000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14001f_int2 = CAST(f_char1 AS SIGNED INT), 14002f_charbig = CONCAT('===',f_char1,'==='); 14003CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14004BEGIN 14005SET new.f_int1 = new.f_int1 + @max_row, 14006new.f_int2 = new.f_int2 - @max_row, 14007new.f_charbig = '####updated per update trigger####'; 14008END| 14009UPDATE t1 14010SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14011f_charbig = '####updated per update statement itself####'; 14012 14013# check trigger-10 success: 1 14014DROP TRIGGER trg_2; 14015UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14016f_int2 = CAST(f_char1 AS SIGNED INT), 14017f_charbig = CONCAT('===',f_char1,'==='); 14018CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14019BEGIN 14020SET new.f_int1 = @my_max1 + @counter, 14021new.f_int2 = @my_min2 - @counter, 14022new.f_charbig = '####updated per insert trigger####'; 14023SET @counter = @counter + 1; 14024END| 14025SET @counter = 1; 14026SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14027INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14028SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14029CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14031ORDER BY f_int1; 14032DROP TRIGGER trg_3; 14033 14034# check trigger-11 success: 1 14035DELETE FROM t1 14036WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14037AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14038AND f_charbig = '####updated per insert trigger####'; 14039CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14040BEGIN 14041SET new.f_int1 = @my_max1 + @counter, 14042new.f_int2 = @my_min2 - @counter, 14043new.f_charbig = '####updated per insert trigger####'; 14044SET @counter = @counter + 1; 14045END| 14046SET @counter = 1; 14047SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14048INSERT INTO t1 (f_char1, f_char2, f_charbig) 14049SELECT CAST(f_int1 AS CHAR), 14050CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14052ORDER BY f_int1; 14053DROP TRIGGER trg_3; 14054 14055# check trigger-12 success: 1 14056DELETE FROM t1 14057WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14058AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14059AND f_charbig = '####updated per insert trigger####'; 14060ANALYZE TABLE t1; 14061Table Op Msg_type Msg_text 14062test.t1 analyze status OK 14063CHECK TABLE t1 EXTENDED; 14064Table Op Msg_type Msg_text 14065test.t1 check status OK 14066CHECKSUM TABLE t1 EXTENDED; 14067Table Checksum 14068test.t1 <some_value> 14069OPTIMIZE TABLE t1; 14070Table Op Msg_type Msg_text 14071test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 14072test.t1 optimize status OK 14073# check layout success: 1 14074REPAIR TABLE t1 EXTENDED; 14075Table Op Msg_type Msg_text 14076test.t1 repair status OK 14077# check layout success: 1 14078TRUNCATE t1; 14079 14080# check TRUNCATE success: 1 14081# check layout success: 1 14082# End usability test (inc/partition_check.inc) 14083DROP TABLE t1; 14084CREATE TABLE t1 ( 14085f_int1 INTEGER DEFAULT 0, 14086f_int2 INTEGER DEFAULT 0, 14087f_char1 CHAR(20), 14088f_char2 CHAR(20), 14089f_charbig VARCHAR(1000) 14090 14091) 14092PARTITION BY RANGE(f_int1) 14093(PARTITION parta VALUES LESS THAN (0), 14094PARTITION partb VALUES LESS THAN (5), 14095PARTITION partc VALUES LESS THAN (10), 14096PARTITION partd VALUES LESS THAN (10 + 5), 14097PARTITION parte VALUES LESS THAN (20), 14098PARTITION partf VALUES LESS THAN (2147483646)); 14099INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14100SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14101WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 14102ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 14103INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14104SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14105WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 14106# Start usability test (inc/partition_check.inc) 14107create_command 14108SHOW CREATE TABLE t1; 14109Table Create Table 14110t1 CREATE TABLE `t1` ( 14111 `f_int1` int(11) DEFAULT 0, 14112 `f_int2` int(11) DEFAULT 0, 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 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) 14125 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 14130INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14131SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14132CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 14133WHERE f_int1 IN (2,3); 14134ERROR 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 14137INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14138SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14139CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14140WHERE f_int1 IN (2,3); 14141DELETE FROM t1 WHERE f_charbig = 'delete me'; 14142INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14143SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14144CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14145WHERE f_int1 IN (2,3); 14146DELETE FROM t1 WHERE f_charbig = 'delete me'; 14147# check read via f_int1 success: 1 14148# check read via f_int2 success: 1 14149 14150# check multiple-1 success: 1 14151DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 14152 14153# check multiple-2 success: 1 14154INSERT INTO t1 SELECT * FROM t0_template 14155WHERE MOD(f_int1,3) = 0; 14156 14157# check multiple-3 success: 1 14158UPDATE t1 SET f_int1 = f_int1 + @max_row 14159WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 14160AND @max_row_div2 + @max_row_div4; 14161 14162# check multiple-4 success: 1 14163DELETE FROM t1 14164WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 14165AND @max_row_div2 + @max_row_div4 + @max_row; 14166 14167# check multiple-5 success: 1 14168SELECT COUNT(*) INTO @try_count FROM t0_template 14169WHERE MOD(f_int1,3) = 0 14170AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14171SELECT COUNT(*) INTO @clash_count 14172FROM t1 INNER JOIN t0_template USING(f_int1) 14173WHERE MOD(f_int1,3) = 0 14174AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14175SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 14176INSERT INTO t1 14177SET f_int1 = @cur_value , f_int2 = @cur_value, 14178f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14179f_charbig = '#SINGLE#'; 14180 14181# check single-1 success: 1 14182SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 14183INSERT INTO t1 14184SET f_int1 = @cur_value , f_int2 = @cur_value, 14185f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14186f_charbig = '#SINGLE#'; 14187 14188# check single-2 success: 1 14189SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 14190SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 14191UPDATE t1 SET f_int1 = @cur_value2 14192WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 14193 14194# check single-3 success: 1 14195SET @cur_value1= -1; 14196SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 14197UPDATE t1 SET f_int1 = @cur_value1 14198WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 14199 14200# check single-4 success: 1 14201SELECT MAX(f_int1) INTO @cur_value FROM t1; 14202DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 14203 14204# check single-5 success: 1 14205DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 14206 14207# check single-6 success: 1 14208INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 14209ERROR HY000: Table has no partition for value 2147483647 14210DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 14211INSERT t1 SET f_int1 = 0 , f_int2 = 0, 14212f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 14213f_charbig = '#NULL#'; 14214INSERT INTO t1 14215SET f_int1 = NULL , f_int2 = -@max_row, 14216f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 14217f_charbig = '#NULL#'; 14218# check null success: 1 14219 14220# check null-1 success: 1 14221UPDATE t1 SET f_int1 = -@max_row 14222WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14223AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14224 14225# check null-2 success: 1 14226UPDATE t1 SET f_int1 = NULL 14227WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14228AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14229 14230# check null-3 success: 1 14231DELETE FROM t1 14232WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14233AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14234 14235# check null-4 success: 1 14236DELETE FROM t1 14237WHERE f_int1 = 0 AND f_int2 = 0 14238AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 14239AND f_charbig = '#NULL#'; 14240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14241SELECT f_int1, f_int1, '', '', 'was inserted' 14242 FROM t0_template source_tab 14243WHERE MOD(f_int1,3) = 0 14244AND f_int1 BETWEEN @max_row_div2 AND @max_row 14245ON DUPLICATE KEY 14246UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 14247f_int2 = 2 * @max_row + source_tab.f_int1, 14248f_charbig = 'was updated'; 14249 14250# check unique-1-a success: 1 14251 14252# check unique-1-b success: 1 14253DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14254UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14255f_int2 = CAST(f_char1 AS SIGNED INT), 14256f_charbig = CONCAT('===',f_char1,'===') 14257WHERE f_charbig = 'was updated'; 14258REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14259SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 14260 FROM t0_template source_tab 14261WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14262 14263# check replace success: 1 14264DELETE FROM t1 14265WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 14266DELETE FROM t1 14267WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 14268f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 14269UPDATE t1 SET f_int2 = f_int1, 14270f_char1 = CAST(f_int1 AS CHAR), 14271f_char2 = CAST(f_int1 AS CHAR), 14272f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 14273WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 14274SET AUTOCOMMIT= 0; 14275INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14276SELECT f_int1, f_int1, '', '', 'was inserted' 14277FROM t0_template source_tab 14278WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14279 14280# check transactions-1 success: 1 14281COMMIT WORK; 14282 14283# check transactions-2 success: 1 14284ROLLBACK WORK; 14285 14286# check transactions-3 success: 1 14287DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14288COMMIT WORK; 14289ROLLBACK WORK; 14290 14291# check transactions-4 success: 1 14292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14293SELECT f_int1, f_int1, '', '', 'was inserted' 14294FROM t0_template source_tab 14295WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14296 14297# check transactions-5 success: 1 14298ROLLBACK WORK; 14299 14300# check transactions-6 success: 1 14301# INFO: Storage engine used for t1 seems to be transactional. 14302COMMIT; 14303 14304# check transactions-7 success: 1 14305DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14306COMMIT WORK; 14307SET @@session.sql_mode = 'traditional'; 14308SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 14309INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14310SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 14311'', '', 'was inserted' FROM t0_template 14312WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14313ERROR 22012: Division by 0 14314COMMIT; 14315 14316# check transactions-8 success: 1 14317# INFO: Storage engine used for t1 seems to be able to revert 14318# changes made by the failing statement. 14319SET @@session.sql_mode = ''; 14320SET AUTOCOMMIT= 1; 14321DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14322COMMIT WORK; 14323UPDATE t1 SET f_charbig = REPEAT('b', 1000); 14324 14325# check special-1 success: 1 14326UPDATE t1 SET f_charbig = ''; 14327 14328# check special-2 success: 1 14329UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 14330INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14331SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 14332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14333INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14334SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14335'just inserted' FROM t0_template 14336WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14337CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 14338BEGIN 14339UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14340f_charbig = 'updated by trigger' 14341 WHERE f_int1 = new.f_int1; 14342END| 14343INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14344SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14346 14347# check trigger-1 success: 1 14348DROP TRIGGER trg_1; 14349UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14350f_int2 = CAST(f_char1 AS SIGNED INT), 14351f_charbig = 'just inserted' 14352 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14353DELETE FROM t0_aux 14354WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14355INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14356SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14357'just inserted' FROM t0_template 14358WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14359CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 14360BEGIN 14361UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14362f_charbig = 'updated by trigger' 14363 WHERE f_int1 = new.f_int1; 14364END| 14365INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14366SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14367WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14368 14369# check trigger-2 success: 1 14370DROP TRIGGER trg_1; 14371UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14372f_int2 = CAST(f_char1 AS SIGNED INT), 14373f_charbig = 'just inserted' 14374 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14375DELETE FROM t0_aux 14376WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14377INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14378SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14379'just inserted' FROM t0_template 14380WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14381CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14382BEGIN 14383UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14384f_charbig = 'updated by trigger' 14385 WHERE f_int1 = new.f_int1; 14386END| 14387UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14388WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14389 14390# check trigger-3 success: 1 14391DROP TRIGGER trg_1; 14392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14393f_int2 = CAST(f_char1 AS SIGNED INT), 14394f_charbig = 'just inserted' 14395 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14396DELETE FROM t0_aux 14397WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14400'just inserted' FROM t0_template 14401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14402CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14403BEGIN 14404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14405f_charbig = 'updated by trigger' 14406 WHERE f_int1 = - old.f_int1; 14407END| 14408UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14409WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14410 14411# check trigger-4 success: 1 14412DROP TRIGGER trg_1; 14413UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14414f_int2 = CAST(f_char1 AS SIGNED INT), 14415f_charbig = 'just inserted' 14416 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14417DELETE FROM t0_aux 14418WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14419INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14420SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14421'just inserted' FROM t0_template 14422WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14423CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14424BEGIN 14425UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14426f_charbig = 'updated by trigger' 14427 WHERE f_int1 = new.f_int1; 14428END| 14429UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14430WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14431 14432# check trigger-5 success: 1 14433DROP TRIGGER trg_1; 14434UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14435f_int2 = CAST(f_char1 AS SIGNED INT), 14436f_charbig = 'just inserted' 14437 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14438DELETE FROM t0_aux 14439WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14440INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14441SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14442'just inserted' FROM t0_template 14443WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14444CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14445BEGIN 14446UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14447f_charbig = 'updated by trigger' 14448 WHERE f_int1 = - old.f_int1; 14449END| 14450UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14451WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14452 14453# check trigger-6 success: 1 14454DROP TRIGGER trg_1; 14455UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14456f_int2 = CAST(f_char1 AS SIGNED INT), 14457f_charbig = 'just inserted' 14458 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14459DELETE FROM t0_aux 14460WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14461INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14462SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14463'just inserted' FROM t0_template 14464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14465CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 14466BEGIN 14467UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14468f_charbig = 'updated by trigger' 14469 WHERE f_int1 = - old.f_int1; 14470END| 14471DELETE FROM t0_aux 14472WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14473 14474# check trigger-7 success: 1 14475DROP TRIGGER trg_1; 14476UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14477f_int2 = CAST(f_char1 AS SIGNED INT), 14478f_charbig = 'just inserted' 14479 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14480DELETE FROM t0_aux 14481WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14482INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14483SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14484'just inserted' FROM t0_template 14485WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14486CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 14487BEGIN 14488UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14489f_charbig = 'updated by trigger' 14490 WHERE f_int1 = - old.f_int1; 14491END| 14492DELETE FROM t0_aux 14493WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14494 14495# check trigger-8 success: 1 14496DROP TRIGGER trg_1; 14497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14498f_int2 = CAST(f_char1 AS SIGNED INT), 14499f_charbig = 'just inserted' 14500 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14501DELETE FROM t0_aux 14502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14503DELETE FROM t1 14504WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14505CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14506BEGIN 14507SET new.f_int1 = old.f_int1 + @max_row, 14508new.f_int2 = old.f_int2 - @max_row, 14509new.f_charbig = '####updated per update trigger####'; 14510END| 14511UPDATE t1 14512SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14513f_charbig = '####updated per update statement itself####'; 14514 14515# check trigger-9 success: 1 14516DROP TRIGGER trg_2; 14517UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14518f_int2 = CAST(f_char1 AS SIGNED INT), 14519f_charbig = CONCAT('===',f_char1,'==='); 14520CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14521BEGIN 14522SET new.f_int1 = new.f_int1 + @max_row, 14523new.f_int2 = new.f_int2 - @max_row, 14524new.f_charbig = '####updated per update trigger####'; 14525END| 14526UPDATE t1 14527SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14528f_charbig = '####updated per update statement itself####'; 14529 14530# check trigger-10 success: 1 14531DROP TRIGGER trg_2; 14532UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14533f_int2 = CAST(f_char1 AS SIGNED INT), 14534f_charbig = CONCAT('===',f_char1,'==='); 14535CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14536BEGIN 14537SET new.f_int1 = @my_max1 + @counter, 14538new.f_int2 = @my_min2 - @counter, 14539new.f_charbig = '####updated per insert trigger####'; 14540SET @counter = @counter + 1; 14541END| 14542SET @counter = 1; 14543SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14544INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14545SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14546CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14547WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14548ORDER BY f_int1; 14549DROP TRIGGER trg_3; 14550 14551# check trigger-11 success: 1 14552DELETE FROM t1 14553WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14554AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14555AND f_charbig = '####updated per insert trigger####'; 14556CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14557BEGIN 14558SET new.f_int1 = @my_max1 + @counter, 14559new.f_int2 = @my_min2 - @counter, 14560new.f_charbig = '####updated per insert trigger####'; 14561SET @counter = @counter + 1; 14562END| 14563SET @counter = 1; 14564SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14565INSERT INTO t1 (f_char1, f_char2, f_charbig) 14566SELECT CAST(f_int1 AS CHAR), 14567CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14569ORDER BY f_int1; 14570DROP TRIGGER trg_3; 14571 14572# check trigger-12 success: 1 14573DELETE FROM t1 14574WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14575AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14576AND f_charbig = '####updated per insert trigger####'; 14577ANALYZE TABLE t1; 14578Table Op Msg_type Msg_text 14579test.t1 analyze status OK 14580CHECK TABLE t1 EXTENDED; 14581Table Op Msg_type Msg_text 14582test.t1 check status OK 14583CHECKSUM TABLE t1 EXTENDED; 14584Table Checksum 14585test.t1 <some_value> 14586OPTIMIZE TABLE t1; 14587Table Op Msg_type Msg_text 14588test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 14589test.t1 optimize status OK 14590# check layout success: 1 14591REPAIR TABLE t1 EXTENDED; 14592Table Op Msg_type Msg_text 14593test.t1 repair status OK 14594# check layout success: 1 14595TRUNCATE t1; 14596 14597# check TRUNCATE success: 1 14598# check layout success: 1 14599# End usability test (inc/partition_check.inc) 14600DROP TABLE t1; 14601CREATE TABLE t1 ( 14602f_int1 INTEGER DEFAULT 0, 14603f_int2 INTEGER DEFAULT 0, 14604f_char1 CHAR(20), 14605f_char2 CHAR(20), 14606f_charbig VARCHAR(1000) 14607 14608) 14609PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 14610(PARTITION parta VALUES LESS THAN (0), 14611PARTITION partb VALUES LESS THAN (5), 14612PARTITION partc VALUES LESS THAN (10), 14613PARTITION partd VALUES LESS THAN (2147483646)); 14614INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14615SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14616WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 14617ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 14618INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14619SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14620WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 14621# Start usability test (inc/partition_check.inc) 14622create_command 14623SHOW CREATE TABLE t1; 14624Table Create Table 14625t1 CREATE TABLE `t1` ( 14626 `f_int1` int(11) DEFAULT 0, 14627 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY RANGE (`f_int1` DIV 2) 14634SUBPARTITION BY HASH (`f_int1`) 14635SUBPARTITIONS 2 14636(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB, 14637 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB, 14638 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB, 14639 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB) 14640 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 14645INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14646SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14647CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 14648WHERE f_int1 IN (2,3); 14649ERROR 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 14652INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14653SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14654CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14655WHERE f_int1 IN (2,3); 14656DELETE FROM t1 WHERE f_charbig = 'delete me'; 14657INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14658SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14659CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14660WHERE f_int1 IN (2,3); 14661DELETE FROM t1 WHERE f_charbig = 'delete me'; 14662# check read via f_int1 success: 1 14663# check read via f_int2 success: 1 14664 14665# check multiple-1 success: 1 14666DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 14667 14668# check multiple-2 success: 1 14669INSERT INTO t1 SELECT * FROM t0_template 14670WHERE MOD(f_int1,3) = 0; 14671 14672# check multiple-3 success: 1 14673UPDATE t1 SET f_int1 = f_int1 + @max_row 14674WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 14675AND @max_row_div2 + @max_row_div4; 14676 14677# check multiple-4 success: 1 14678DELETE FROM t1 14679WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 14680AND @max_row_div2 + @max_row_div4 + @max_row; 14681 14682# check multiple-5 success: 1 14683SELECT COUNT(*) INTO @try_count FROM t0_template 14684WHERE MOD(f_int1,3) = 0 14685AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14686SELECT COUNT(*) INTO @clash_count 14687FROM t1 INNER JOIN t0_template USING(f_int1) 14688WHERE MOD(f_int1,3) = 0 14689AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14690SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 14691INSERT INTO t1 14692SET f_int1 = @cur_value , f_int2 = @cur_value, 14693f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14694f_charbig = '#SINGLE#'; 14695 14696# check single-1 success: 1 14697SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 14698INSERT INTO t1 14699SET f_int1 = @cur_value , f_int2 = @cur_value, 14700f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14701f_charbig = '#SINGLE#'; 14702 14703# check single-2 success: 1 14704SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 14705SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 14706UPDATE t1 SET f_int1 = @cur_value2 14707WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 14708 14709# check single-3 success: 1 14710SET @cur_value1= -1; 14711SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 14712UPDATE t1 SET f_int1 = @cur_value1 14713WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 14714 14715# check single-4 success: 1 14716SELECT MAX(f_int1) INTO @cur_value FROM t1; 14717DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 14718 14719# check single-5 success: 1 14720DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 14721 14722# check single-6 success: 1 14723INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 14724 14725# check single-7 success: 1 14726DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 14727DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 14728INSERT t1 SET f_int1 = 0 , f_int2 = 0, 14729f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 14730f_charbig = '#NULL#'; 14731INSERT INTO t1 14732SET f_int1 = NULL , f_int2 = -@max_row, 14733f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 14734f_charbig = '#NULL#'; 14735# check null success: 1 14736 14737# check null-1 success: 1 14738UPDATE t1 SET f_int1 = -@max_row 14739WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14740AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14741 14742# check null-2 success: 1 14743UPDATE t1 SET f_int1 = NULL 14744WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14745AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14746 14747# check null-3 success: 1 14748DELETE FROM t1 14749WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14750AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14751 14752# check null-4 success: 1 14753DELETE FROM t1 14754WHERE f_int1 = 0 AND f_int2 = 0 14755AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 14756AND f_charbig = '#NULL#'; 14757INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14758SELECT f_int1, f_int1, '', '', 'was inserted' 14759 FROM t0_template source_tab 14760WHERE MOD(f_int1,3) = 0 14761AND f_int1 BETWEEN @max_row_div2 AND @max_row 14762ON DUPLICATE KEY 14763UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 14764f_int2 = 2 * @max_row + source_tab.f_int1, 14765f_charbig = 'was updated'; 14766 14767# check unique-1-a success: 1 14768 14769# check unique-1-b success: 1 14770DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14772f_int2 = CAST(f_char1 AS SIGNED INT), 14773f_charbig = CONCAT('===',f_char1,'===') 14774WHERE f_charbig = 'was updated'; 14775REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14776SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 14777 FROM t0_template source_tab 14778WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14779 14780# check replace success: 1 14781DELETE FROM t1 14782WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 14783DELETE FROM t1 14784WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 14785f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 14786UPDATE t1 SET f_int2 = f_int1, 14787f_char1 = CAST(f_int1 AS CHAR), 14788f_char2 = CAST(f_int1 AS CHAR), 14789f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 14790WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 14791SET AUTOCOMMIT= 0; 14792INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14793SELECT f_int1, f_int1, '', '', 'was inserted' 14794FROM t0_template source_tab 14795WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14796 14797# check transactions-1 success: 1 14798COMMIT WORK; 14799 14800# check transactions-2 success: 1 14801ROLLBACK WORK; 14802 14803# check transactions-3 success: 1 14804DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14805COMMIT WORK; 14806ROLLBACK WORK; 14807 14808# check transactions-4 success: 1 14809INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14810SELECT f_int1, f_int1, '', '', 'was inserted' 14811FROM t0_template source_tab 14812WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14813 14814# check transactions-5 success: 1 14815ROLLBACK WORK; 14816 14817# check transactions-6 success: 1 14818# INFO: Storage engine used for t1 seems to be transactional. 14819COMMIT; 14820 14821# check transactions-7 success: 1 14822DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14823COMMIT WORK; 14824SET @@session.sql_mode = 'traditional'; 14825SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 14826INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14827SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 14828'', '', 'was inserted' FROM t0_template 14829WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14830ERROR 22012: Division by 0 14831COMMIT; 14832 14833# check transactions-8 success: 1 14834# INFO: Storage engine used for t1 seems to be able to revert 14835# changes made by the failing statement. 14836SET @@session.sql_mode = ''; 14837SET AUTOCOMMIT= 1; 14838DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14839COMMIT WORK; 14840UPDATE t1 SET f_charbig = REPEAT('b', 1000); 14841 14842# check special-1 success: 1 14843UPDATE t1 SET f_charbig = ''; 14844 14845# check special-2 success: 1 14846UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 14847INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14848SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 14849WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14850INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14851SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14852'just inserted' FROM t0_template 14853WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14854CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 14855BEGIN 14856UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14857f_charbig = 'updated by trigger' 14858 WHERE f_int1 = new.f_int1; 14859END| 14860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14861SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14862WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14863 14864# check trigger-1 success: 1 14865DROP TRIGGER trg_1; 14866UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14867f_int2 = CAST(f_char1 AS SIGNED INT), 14868f_charbig = 'just inserted' 14869 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14870DELETE FROM t0_aux 14871WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14872INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14873SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14874'just inserted' FROM t0_template 14875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14876CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 14877BEGIN 14878UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14879f_charbig = 'updated by trigger' 14880 WHERE f_int1 = new.f_int1; 14881END| 14882INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14883SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14885 14886# check trigger-2 success: 1 14887DROP TRIGGER trg_1; 14888UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14889f_int2 = CAST(f_char1 AS SIGNED INT), 14890f_charbig = 'just inserted' 14891 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14892DELETE FROM t0_aux 14893WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14894INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14895SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14896'just inserted' FROM t0_template 14897WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14898CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14899BEGIN 14900UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14901f_charbig = 'updated by trigger' 14902 WHERE f_int1 = new.f_int1; 14903END| 14904UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14905WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14906 14907# check trigger-3 success: 1 14908DROP TRIGGER trg_1; 14909UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14910f_int2 = CAST(f_char1 AS SIGNED INT), 14911f_charbig = 'just inserted' 14912 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14913DELETE FROM t0_aux 14914WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14915INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14916SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14917'just inserted' FROM t0_template 14918WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14919CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14920BEGIN 14921UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14922f_charbig = 'updated by trigger' 14923 WHERE f_int1 = - old.f_int1; 14924END| 14925UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14926WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14927 14928# check trigger-4 success: 1 14929DROP TRIGGER trg_1; 14930UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14931f_int2 = CAST(f_char1 AS SIGNED INT), 14932f_charbig = 'just inserted' 14933 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14934DELETE FROM t0_aux 14935WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14936INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14937SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14938'just inserted' FROM t0_template 14939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14940CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14941BEGIN 14942UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14943f_charbig = 'updated by trigger' 14944 WHERE f_int1 = new.f_int1; 14945END| 14946UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14947WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14948 14949# check trigger-5 success: 1 14950DROP TRIGGER trg_1; 14951UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14952f_int2 = CAST(f_char1 AS SIGNED INT), 14953f_charbig = 'just inserted' 14954 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14955DELETE FROM t0_aux 14956WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14957INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14958SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14959'just inserted' FROM t0_template 14960WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14961CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14962BEGIN 14963UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14964f_charbig = 'updated by trigger' 14965 WHERE f_int1 = - old.f_int1; 14966END| 14967UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14968WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14969 14970# check trigger-6 success: 1 14971DROP TRIGGER trg_1; 14972UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14973f_int2 = CAST(f_char1 AS SIGNED INT), 14974f_charbig = 'just inserted' 14975 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14976DELETE FROM t0_aux 14977WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14978INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14979SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14980'just inserted' FROM t0_template 14981WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14982CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 14983BEGIN 14984UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14985f_charbig = 'updated by trigger' 14986 WHERE f_int1 = - old.f_int1; 14987END| 14988DELETE FROM t0_aux 14989WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14990 14991# check trigger-7 success: 1 14992DROP TRIGGER trg_1; 14993UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14994f_int2 = CAST(f_char1 AS SIGNED INT), 14995f_charbig = 'just inserted' 14996 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14997DELETE FROM t0_aux 14998WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14999INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15000SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15001'just inserted' FROM t0_template 15002WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15003CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 15004BEGIN 15005UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15006f_charbig = 'updated by trigger' 15007 WHERE f_int1 = - old.f_int1; 15008END| 15009DELETE FROM t0_aux 15010WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15011 15012# check trigger-8 success: 1 15013DROP TRIGGER trg_1; 15014UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15015f_int2 = CAST(f_char1 AS SIGNED INT), 15016f_charbig = 'just inserted' 15017 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15018DELETE FROM t0_aux 15019WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15020DELETE FROM t1 15021WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15022CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15023BEGIN 15024SET new.f_int1 = old.f_int1 + @max_row, 15025new.f_int2 = old.f_int2 - @max_row, 15026new.f_charbig = '####updated per update trigger####'; 15027END| 15028UPDATE t1 15029SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15030f_charbig = '####updated per update statement itself####'; 15031 15032# check trigger-9 success: 1 15033DROP TRIGGER trg_2; 15034UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15035f_int2 = CAST(f_char1 AS SIGNED INT), 15036f_charbig = CONCAT('===',f_char1,'==='); 15037CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15038BEGIN 15039SET new.f_int1 = new.f_int1 + @max_row, 15040new.f_int2 = new.f_int2 - @max_row, 15041new.f_charbig = '####updated per update trigger####'; 15042END| 15043UPDATE t1 15044SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15045f_charbig = '####updated per update statement itself####'; 15046 15047# check trigger-10 success: 1 15048DROP TRIGGER trg_2; 15049UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15050f_int2 = CAST(f_char1 AS SIGNED INT), 15051f_charbig = CONCAT('===',f_char1,'==='); 15052CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15053BEGIN 15054SET new.f_int1 = @my_max1 + @counter, 15055new.f_int2 = @my_min2 - @counter, 15056new.f_charbig = '####updated per insert trigger####'; 15057SET @counter = @counter + 1; 15058END| 15059SET @counter = 1; 15060SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15061INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15062SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15063CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15064WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15065ORDER BY f_int1; 15066DROP TRIGGER trg_3; 15067 15068# check trigger-11 success: 1 15069DELETE FROM t1 15070WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15071AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15072AND f_charbig = '####updated per insert trigger####'; 15073CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15074BEGIN 15075SET new.f_int1 = @my_max1 + @counter, 15076new.f_int2 = @my_min2 - @counter, 15077new.f_charbig = '####updated per insert trigger####'; 15078SET @counter = @counter + 1; 15079END| 15080SET @counter = 1; 15081SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15082INSERT INTO t1 (f_char1, f_char2, f_charbig) 15083SELECT CAST(f_int1 AS CHAR), 15084CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15085WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15086ORDER BY f_int1; 15087DROP TRIGGER trg_3; 15088 15089# check trigger-12 success: 1 15090DELETE FROM t1 15091WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15092AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15093AND f_charbig = '####updated per insert trigger####'; 15094ANALYZE TABLE t1; 15095Table Op Msg_type Msg_text 15096test.t1 analyze status OK 15097CHECK TABLE t1 EXTENDED; 15098Table Op Msg_type Msg_text 15099test.t1 check status OK 15100CHECKSUM TABLE t1 EXTENDED; 15101Table Checksum 15102test.t1 <some_value> 15103OPTIMIZE TABLE t1; 15104Table Op Msg_type Msg_text 15105test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 15106test.t1 optimize status OK 15107# check layout success: 1 15108REPAIR TABLE t1 EXTENDED; 15109Table Op Msg_type Msg_text 15110test.t1 repair status OK 15111# check layout success: 1 15112TRUNCATE t1; 15113 15114# check TRUNCATE success: 1 15115# check layout success: 1 15116# End usability test (inc/partition_check.inc) 15117DROP TABLE t1; 15118CREATE TABLE t1 ( 15119f_int1 INTEGER DEFAULT 0, 15120f_int2 INTEGER DEFAULT 0, 15121f_char1 CHAR(20), 15122f_char2 CHAR(20), 15123f_charbig VARCHAR(1000) 15124 15125) 15126PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) 15127(PARTITION part1 VALUES LESS THAN (0) 15128(SUBPARTITION subpart11, SUBPARTITION subpart12), 15129PARTITION part2 VALUES LESS THAN (5) 15130(SUBPARTITION subpart21, SUBPARTITION subpart22), 15131PARTITION part3 VALUES LESS THAN (10) 15132(SUBPARTITION subpart31, SUBPARTITION subpart32), 15133PARTITION part4 VALUES LESS THAN (2147483646) 15134(SUBPARTITION subpart41, SUBPARTITION subpart42)); 15135INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15136SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15137WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 15138ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 15139INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15140SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15141WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 15142# Start usability test (inc/partition_check.inc) 15143create_command 15144SHOW CREATE TABLE t1; 15145Table Create Table 15146t1 CREATE TABLE `t1` ( 15147 `f_int1` int(11) DEFAULT 0, 15148 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY RANGE (`f_int1`) 15155SUBPARTITION 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)) 15168 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 15173INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15174SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15175CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 15176WHERE f_int1 IN (2,3); 15177ERROR 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 15180INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15181SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15182CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15183WHERE f_int1 IN (2,3); 15184DELETE FROM t1 WHERE f_charbig = 'delete me'; 15185INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15186SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15187CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15188WHERE f_int1 IN (2,3); 15189DELETE FROM t1 WHERE f_charbig = 'delete me'; 15190# check read via f_int1 success: 1 15191# check read via f_int2 success: 1 15192 15193# check multiple-1 success: 1 15194DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 15195 15196# check multiple-2 success: 1 15197INSERT INTO t1 SELECT * FROM t0_template 15198WHERE MOD(f_int1,3) = 0; 15199 15200# check multiple-3 success: 1 15201UPDATE t1 SET f_int1 = f_int1 + @max_row 15202WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 15203AND @max_row_div2 + @max_row_div4; 15204 15205# check multiple-4 success: 1 15206DELETE FROM t1 15207WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 15208AND @max_row_div2 + @max_row_div4 + @max_row; 15209 15210# check multiple-5 success: 1 15211SELECT COUNT(*) INTO @try_count FROM t0_template 15212WHERE MOD(f_int1,3) = 0 15213AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15214SELECT COUNT(*) INTO @clash_count 15215FROM t1 INNER JOIN t0_template USING(f_int1) 15216WHERE MOD(f_int1,3) = 0 15217AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15218SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 15219INSERT INTO t1 15220SET f_int1 = @cur_value , f_int2 = @cur_value, 15221f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15222f_charbig = '#SINGLE#'; 15223 15224# check single-1 success: 1 15225SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 15226INSERT INTO t1 15227SET f_int1 = @cur_value , f_int2 = @cur_value, 15228f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15229f_charbig = '#SINGLE#'; 15230 15231# check single-2 success: 1 15232SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 15233SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 15234UPDATE t1 SET f_int1 = @cur_value2 15235WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 15236 15237# check single-3 success: 1 15238SET @cur_value1= -1; 15239SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 15240UPDATE t1 SET f_int1 = @cur_value1 15241WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 15242 15243# check single-4 success: 1 15244SELECT MAX(f_int1) INTO @cur_value FROM t1; 15245DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 15246 15247# check single-5 success: 1 15248DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 15249 15250# check single-6 success: 1 15251INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 15252ERROR HY000: Table has no partition for value 2147483647 15253DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 15254INSERT t1 SET f_int1 = 0 , f_int2 = 0, 15255f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 15256f_charbig = '#NULL#'; 15257INSERT INTO t1 15258SET f_int1 = NULL , f_int2 = -@max_row, 15259f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 15260f_charbig = '#NULL#'; 15261# check null success: 1 15262 15263# check null-1 success: 1 15264UPDATE t1 SET f_int1 = -@max_row 15265WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15266AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15267 15268# check null-2 success: 1 15269UPDATE t1 SET f_int1 = NULL 15270WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15271AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15272 15273# check null-3 success: 1 15274DELETE FROM t1 15275WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15276AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15277 15278# check null-4 success: 1 15279DELETE FROM t1 15280WHERE f_int1 = 0 AND f_int2 = 0 15281AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 15282AND f_charbig = '#NULL#'; 15283INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15284SELECT f_int1, f_int1, '', '', 'was inserted' 15285 FROM t0_template source_tab 15286WHERE MOD(f_int1,3) = 0 15287AND f_int1 BETWEEN @max_row_div2 AND @max_row 15288ON DUPLICATE KEY 15289UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 15290f_int2 = 2 * @max_row + source_tab.f_int1, 15291f_charbig = 'was updated'; 15292 15293# check unique-1-a success: 1 15294 15295# check unique-1-b success: 1 15296DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15297UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15298f_int2 = CAST(f_char1 AS SIGNED INT), 15299f_charbig = CONCAT('===',f_char1,'===') 15300WHERE f_charbig = 'was updated'; 15301REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15302SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 15303 FROM t0_template source_tab 15304WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15305 15306# check replace success: 1 15307DELETE FROM t1 15308WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 15309DELETE FROM t1 15310WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 15311f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 15312UPDATE t1 SET f_int2 = f_int1, 15313f_char1 = CAST(f_int1 AS CHAR), 15314f_char2 = CAST(f_int1 AS CHAR), 15315f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 15316WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 15317SET AUTOCOMMIT= 0; 15318INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15319SELECT f_int1, f_int1, '', '', 'was inserted' 15320FROM t0_template source_tab 15321WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15322 15323# check transactions-1 success: 1 15324COMMIT WORK; 15325 15326# check transactions-2 success: 1 15327ROLLBACK WORK; 15328 15329# check transactions-3 success: 1 15330DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15331COMMIT WORK; 15332ROLLBACK WORK; 15333 15334# check transactions-4 success: 1 15335INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15336SELECT f_int1, f_int1, '', '', 'was inserted' 15337FROM t0_template source_tab 15338WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15339 15340# check transactions-5 success: 1 15341ROLLBACK WORK; 15342 15343# check transactions-6 success: 1 15344# INFO: Storage engine used for t1 seems to be transactional. 15345COMMIT; 15346 15347# check transactions-7 success: 1 15348DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15349COMMIT WORK; 15350SET @@session.sql_mode = 'traditional'; 15351SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 15352INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15353SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 15354'', '', 'was inserted' FROM t0_template 15355WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15356ERROR 22012: Division by 0 15357COMMIT; 15358 15359# check transactions-8 success: 1 15360# INFO: Storage engine used for t1 seems to be able to revert 15361# changes made by the failing statement. 15362SET @@session.sql_mode = ''; 15363SET AUTOCOMMIT= 1; 15364DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15365COMMIT WORK; 15366UPDATE t1 SET f_charbig = REPEAT('b', 1000); 15367 15368# check special-1 success: 1 15369UPDATE t1 SET f_charbig = ''; 15370 15371# check special-2 success: 1 15372UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 15373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15374SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 15375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15376INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15377SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15378'just inserted' FROM t0_template 15379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15380CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 15381BEGIN 15382UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15383f_charbig = 'updated by trigger' 15384 WHERE f_int1 = new.f_int1; 15385END| 15386INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15387SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15388WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15389 15390# check trigger-1 success: 1 15391DROP TRIGGER trg_1; 15392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15393f_int2 = CAST(f_char1 AS SIGNED INT), 15394f_charbig = 'just inserted' 15395 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15396DELETE FROM t0_aux 15397WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15400'just inserted' FROM t0_template 15401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15402CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 15403BEGIN 15404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15405f_charbig = 'updated by trigger' 15406 WHERE f_int1 = new.f_int1; 15407END| 15408INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15409SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15411 15412# check trigger-2 success: 1 15413DROP TRIGGER trg_1; 15414UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15415f_int2 = CAST(f_char1 AS SIGNED INT), 15416f_charbig = 'just inserted' 15417 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15418DELETE FROM t0_aux 15419WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15422'just inserted' FROM t0_template 15423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15424CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15425BEGIN 15426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15427f_charbig = 'updated by trigger' 15428 WHERE f_int1 = new.f_int1; 15429END| 15430UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15431WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15432 15433# check trigger-3 success: 1 15434DROP TRIGGER trg_1; 15435UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15436f_int2 = CAST(f_char1 AS SIGNED INT), 15437f_charbig = 'just inserted' 15438 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15439DELETE FROM t0_aux 15440WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15441INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15442SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15443'just inserted' FROM t0_template 15444WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15445CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15446BEGIN 15447UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15448f_charbig = 'updated by trigger' 15449 WHERE f_int1 = - old.f_int1; 15450END| 15451UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15452WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15453 15454# check trigger-4 success: 1 15455DROP TRIGGER trg_1; 15456UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15457f_int2 = CAST(f_char1 AS SIGNED INT), 15458f_charbig = 'just inserted' 15459 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15460DELETE FROM t0_aux 15461WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15462INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15463SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15464'just inserted' FROM t0_template 15465WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15466CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15467BEGIN 15468UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15469f_charbig = 'updated by trigger' 15470 WHERE f_int1 = new.f_int1; 15471END| 15472UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15473WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15474 15475# check trigger-5 success: 1 15476DROP TRIGGER trg_1; 15477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15478f_int2 = CAST(f_char1 AS SIGNED INT), 15479f_charbig = 'just inserted' 15480 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15481DELETE FROM t0_aux 15482WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15484SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15485'just inserted' FROM t0_template 15486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15487CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15488BEGIN 15489UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15490f_charbig = 'updated by trigger' 15491 WHERE f_int1 = - old.f_int1; 15492END| 15493UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15494WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15495 15496# check trigger-6 success: 1 15497DROP TRIGGER trg_1; 15498UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15499f_int2 = CAST(f_char1 AS SIGNED INT), 15500f_charbig = 'just inserted' 15501 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15502DELETE FROM t0_aux 15503WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15504INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15505SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15506'just inserted' FROM t0_template 15507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15508CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 15509BEGIN 15510UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15511f_charbig = 'updated by trigger' 15512 WHERE f_int1 = - old.f_int1; 15513END| 15514DELETE FROM t0_aux 15515WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15516 15517# check trigger-7 success: 1 15518DROP TRIGGER trg_1; 15519UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15520f_int2 = CAST(f_char1 AS SIGNED INT), 15521f_charbig = 'just inserted' 15522 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15523DELETE FROM t0_aux 15524WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15525INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15526SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15527'just inserted' FROM t0_template 15528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15529CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 15530BEGIN 15531UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15532f_charbig = 'updated by trigger' 15533 WHERE f_int1 = - old.f_int1; 15534END| 15535DELETE FROM t0_aux 15536WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15537 15538# check trigger-8 success: 1 15539DROP TRIGGER trg_1; 15540UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15541f_int2 = CAST(f_char1 AS SIGNED INT), 15542f_charbig = 'just inserted' 15543 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15544DELETE FROM t0_aux 15545WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15546DELETE FROM t1 15547WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15548CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15549BEGIN 15550SET new.f_int1 = old.f_int1 + @max_row, 15551new.f_int2 = old.f_int2 - @max_row, 15552new.f_charbig = '####updated per update trigger####'; 15553END| 15554UPDATE t1 15555SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15556f_charbig = '####updated per update statement itself####'; 15557 15558# check trigger-9 success: 1 15559DROP TRIGGER trg_2; 15560UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15561f_int2 = CAST(f_char1 AS SIGNED INT), 15562f_charbig = CONCAT('===',f_char1,'==='); 15563CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15564BEGIN 15565SET new.f_int1 = new.f_int1 + @max_row, 15566new.f_int2 = new.f_int2 - @max_row, 15567new.f_charbig = '####updated per update trigger####'; 15568END| 15569UPDATE t1 15570SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15571f_charbig = '####updated per update statement itself####'; 15572 15573# check trigger-10 success: 1 15574DROP TRIGGER trg_2; 15575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15576f_int2 = CAST(f_char1 AS SIGNED INT), 15577f_charbig = CONCAT('===',f_char1,'==='); 15578CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15579BEGIN 15580SET new.f_int1 = @my_max1 + @counter, 15581new.f_int2 = @my_min2 - @counter, 15582new.f_charbig = '####updated per insert trigger####'; 15583SET @counter = @counter + 1; 15584END| 15585SET @counter = 1; 15586SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15587INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15588SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15589CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15591ORDER BY f_int1; 15592DROP TRIGGER trg_3; 15593 15594# check trigger-11 success: 1 15595DELETE FROM t1 15596WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15597AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15598AND f_charbig = '####updated per insert trigger####'; 15599CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15600BEGIN 15601SET new.f_int1 = @my_max1 + @counter, 15602new.f_int2 = @my_min2 - @counter, 15603new.f_charbig = '####updated per insert trigger####'; 15604SET @counter = @counter + 1; 15605END| 15606SET @counter = 1; 15607SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15608INSERT INTO t1 (f_char1, f_char2, f_charbig) 15609SELECT CAST(f_int1 AS CHAR), 15610CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15612ORDER BY f_int1; 15613DROP TRIGGER trg_3; 15614 15615# check trigger-12 success: 1 15616DELETE FROM t1 15617WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15618AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15619AND f_charbig = '####updated per insert trigger####'; 15620ANALYZE TABLE t1; 15621Table Op Msg_type Msg_text 15622test.t1 analyze status OK 15623CHECK TABLE t1 EXTENDED; 15624Table Op Msg_type Msg_text 15625test.t1 check status OK 15626CHECKSUM TABLE t1 EXTENDED; 15627Table Checksum 15628test.t1 <some_value> 15629OPTIMIZE TABLE t1; 15630Table Op Msg_type Msg_text 15631test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 15632test.t1 optimize status OK 15633# check layout success: 1 15634REPAIR TABLE t1 EXTENDED; 15635Table Op Msg_type Msg_text 15636test.t1 repair status OK 15637# check layout success: 1 15638TRUNCATE t1; 15639 15640# check TRUNCATE success: 1 15641# check layout success: 1 15642# End usability test (inc/partition_check.inc) 15643DROP TABLE t1; 15644CREATE TABLE t1 ( 15645f_int1 INTEGER DEFAULT 0, 15646f_int2 INTEGER DEFAULT 0, 15647f_char1 CHAR(20), 15648f_char2 CHAR(20), 15649f_charbig VARCHAR(1000) 15650 15651) 15652PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) 15653(PARTITION part1 VALUES IN (0) 15654(SUBPARTITION sp11, SUBPARTITION sp12), 15655PARTITION part2 VALUES IN (1) 15656(SUBPARTITION sp21, SUBPARTITION sp22), 15657PARTITION part3 VALUES IN (2) 15658(SUBPARTITION sp31, SUBPARTITION sp32), 15659PARTITION part4 VALUES IN (NULL) 15660(SUBPARTITION sp41, SUBPARTITION sp42)); 15661INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15662SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15663WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 15664ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 15665INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15666SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15667WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 15668# Start usability test (inc/partition_check.inc) 15669create_command 15670SHOW CREATE TABLE t1; 15671Table Create Table 15672t1 CREATE TABLE `t1` ( 15673 `f_int1` int(11) DEFAULT 0, 15674 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (abs(`f_int1` MOD 3)) 15681SUBPARTITION 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)) 15694 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 15699INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15700SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15701CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 15702WHERE f_int1 IN (2,3); 15703ERROR 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 15706INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15707SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15708CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15709WHERE f_int1 IN (2,3); 15710DELETE FROM t1 WHERE f_charbig = 'delete me'; 15711INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15712SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15713CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15714WHERE f_int1 IN (2,3); 15715DELETE FROM t1 WHERE f_charbig = 'delete me'; 15716# check read via f_int1 success: 1 15717# check read via f_int2 success: 1 15718 15719# check multiple-1 success: 1 15720DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 15721 15722# check multiple-2 success: 1 15723INSERT INTO t1 SELECT * FROM t0_template 15724WHERE MOD(f_int1,3) = 0; 15725 15726# check multiple-3 success: 1 15727UPDATE t1 SET f_int1 = f_int1 + @max_row 15728WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 15729AND @max_row_div2 + @max_row_div4; 15730 15731# check multiple-4 success: 1 15732DELETE FROM t1 15733WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 15734AND @max_row_div2 + @max_row_div4 + @max_row; 15735 15736# check multiple-5 success: 1 15737SELECT COUNT(*) INTO @try_count FROM t0_template 15738WHERE MOD(f_int1,3) = 0 15739AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15740SELECT COUNT(*) INTO @clash_count 15741FROM t1 INNER JOIN t0_template USING(f_int1) 15742WHERE MOD(f_int1,3) = 0 15743AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15744SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 15745INSERT INTO t1 15746SET f_int1 = @cur_value , f_int2 = @cur_value, 15747f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15748f_charbig = '#SINGLE#'; 15749 15750# check single-1 success: 1 15751SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 15752INSERT INTO t1 15753SET f_int1 = @cur_value , f_int2 = @cur_value, 15754f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15755f_charbig = '#SINGLE#'; 15756 15757# check single-2 success: 1 15758SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 15759SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 15760UPDATE t1 SET f_int1 = @cur_value2 15761WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 15762 15763# check single-3 success: 1 15764SET @cur_value1= -1; 15765SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 15766UPDATE t1 SET f_int1 = @cur_value1 15767WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 15768 15769# check single-4 success: 1 15770SELECT MAX(f_int1) INTO @cur_value FROM t1; 15771DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 15772 15773# check single-5 success: 1 15774DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 15775 15776# check single-6 success: 1 15777INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 15778 15779# check single-7 success: 1 15780DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 15781DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 15782INSERT t1 SET f_int1 = 0 , f_int2 = 0, 15783f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 15784f_charbig = '#NULL#'; 15785INSERT INTO t1 15786SET f_int1 = NULL , f_int2 = -@max_row, 15787f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 15788f_charbig = '#NULL#'; 15789# check null success: 1 15790 15791# check null-1 success: 1 15792UPDATE t1 SET f_int1 = -@max_row 15793WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15794AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15795 15796# check null-2 success: 1 15797UPDATE t1 SET f_int1 = NULL 15798WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15799AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15800 15801# check null-3 success: 1 15802DELETE FROM t1 15803WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15804AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15805 15806# check null-4 success: 1 15807DELETE FROM t1 15808WHERE f_int1 = 0 AND f_int2 = 0 15809AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 15810AND f_charbig = '#NULL#'; 15811INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15812SELECT f_int1, f_int1, '', '', 'was inserted' 15813 FROM t0_template source_tab 15814WHERE MOD(f_int1,3) = 0 15815AND f_int1 BETWEEN @max_row_div2 AND @max_row 15816ON DUPLICATE KEY 15817UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 15818f_int2 = 2 * @max_row + source_tab.f_int1, 15819f_charbig = 'was updated'; 15820 15821# check unique-1-a success: 1 15822 15823# check unique-1-b success: 1 15824DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15825UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15826f_int2 = CAST(f_char1 AS SIGNED INT), 15827f_charbig = CONCAT('===',f_char1,'===') 15828WHERE f_charbig = 'was updated'; 15829REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15830SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 15831 FROM t0_template source_tab 15832WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15833 15834# check replace success: 1 15835DELETE FROM t1 15836WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 15837DELETE FROM t1 15838WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 15839f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 15840UPDATE t1 SET f_int2 = f_int1, 15841f_char1 = CAST(f_int1 AS CHAR), 15842f_char2 = CAST(f_int1 AS CHAR), 15843f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 15844WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 15845SET AUTOCOMMIT= 0; 15846INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15847SELECT f_int1, f_int1, '', '', 'was inserted' 15848FROM t0_template source_tab 15849WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15850 15851# check transactions-1 success: 1 15852COMMIT WORK; 15853 15854# check transactions-2 success: 1 15855ROLLBACK WORK; 15856 15857# check transactions-3 success: 1 15858DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15859COMMIT WORK; 15860ROLLBACK WORK; 15861 15862# check transactions-4 success: 1 15863INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15864SELECT f_int1, f_int1, '', '', 'was inserted' 15865FROM t0_template source_tab 15866WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15867 15868# check transactions-5 success: 1 15869ROLLBACK WORK; 15870 15871# check transactions-6 success: 1 15872# INFO: Storage engine used for t1 seems to be transactional. 15873COMMIT; 15874 15875# check transactions-7 success: 1 15876DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15877COMMIT WORK; 15878SET @@session.sql_mode = 'traditional'; 15879SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 15880INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15881SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 15882'', '', 'was inserted' FROM t0_template 15883WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15884ERROR 22012: Division by 0 15885COMMIT; 15886 15887# check transactions-8 success: 1 15888# INFO: Storage engine used for t1 seems to be able to revert 15889# changes made by the failing statement. 15890SET @@session.sql_mode = ''; 15891SET AUTOCOMMIT= 1; 15892DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15893COMMIT WORK; 15894UPDATE t1 SET f_charbig = REPEAT('b', 1000); 15895 15896# check special-1 success: 1 15897UPDATE t1 SET f_charbig = ''; 15898 15899# check special-2 success: 1 15900UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 15901INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15902SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 15903WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15904INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15905SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15906'just inserted' FROM t0_template 15907WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15908CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 15909BEGIN 15910UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15911f_charbig = 'updated by trigger' 15912 WHERE f_int1 = new.f_int1; 15913END| 15914INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15915SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15916WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15917 15918# check trigger-1 success: 1 15919DROP TRIGGER trg_1; 15920UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15921f_int2 = CAST(f_char1 AS SIGNED INT), 15922f_charbig = 'just inserted' 15923 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15924DELETE FROM t0_aux 15925WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15926INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15927SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15928'just inserted' FROM t0_template 15929WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15930CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 15931BEGIN 15932UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15933f_charbig = 'updated by trigger' 15934 WHERE f_int1 = new.f_int1; 15935END| 15936INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15937SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15938WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15939 15940# check trigger-2 success: 1 15941DROP TRIGGER trg_1; 15942UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15943f_int2 = CAST(f_char1 AS SIGNED INT), 15944f_charbig = 'just inserted' 15945 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15946DELETE FROM t0_aux 15947WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15948INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15949SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15950'just inserted' FROM t0_template 15951WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15952CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15953BEGIN 15954UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15955f_charbig = 'updated by trigger' 15956 WHERE f_int1 = new.f_int1; 15957END| 15958UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15959WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15960 15961# check trigger-3 success: 1 15962DROP TRIGGER trg_1; 15963UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15964f_int2 = CAST(f_char1 AS SIGNED INT), 15965f_charbig = 'just inserted' 15966 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15967DELETE FROM t0_aux 15968WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15969INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15970SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15971'just inserted' FROM t0_template 15972WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15973CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15974BEGIN 15975UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15976f_charbig = 'updated by trigger' 15977 WHERE f_int1 = - old.f_int1; 15978END| 15979UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15980WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15981 15982# check trigger-4 success: 1 15983DROP TRIGGER trg_1; 15984UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15985f_int2 = CAST(f_char1 AS SIGNED INT), 15986f_charbig = 'just inserted' 15987 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15988DELETE FROM t0_aux 15989WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15990INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15991SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15992'just inserted' FROM t0_template 15993WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15994CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15995BEGIN 15996UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15997f_charbig = 'updated by trigger' 15998 WHERE f_int1 = new.f_int1; 15999END| 16000UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16001WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16002 16003# check trigger-5 success: 1 16004DROP TRIGGER trg_1; 16005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16006f_int2 = CAST(f_char1 AS SIGNED INT), 16007f_charbig = 'just inserted' 16008 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16009DELETE FROM t0_aux 16010WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16011INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16012SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16013'just inserted' FROM t0_template 16014WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16015CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16016BEGIN 16017UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16018f_charbig = 'updated by trigger' 16019 WHERE f_int1 = - old.f_int1; 16020END| 16021UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16022WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16023 16024# check trigger-6 success: 1 16025DROP TRIGGER trg_1; 16026UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16027f_int2 = CAST(f_char1 AS SIGNED INT), 16028f_charbig = 'just inserted' 16029 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16030DELETE FROM t0_aux 16031WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16032INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16033SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16034'just inserted' FROM t0_template 16035WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16036CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 16037BEGIN 16038UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16039f_charbig = 'updated by trigger' 16040 WHERE f_int1 = - old.f_int1; 16041END| 16042DELETE FROM t0_aux 16043WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16044 16045# check trigger-7 success: 1 16046DROP TRIGGER trg_1; 16047UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16048f_int2 = CAST(f_char1 AS SIGNED INT), 16049f_charbig = 'just inserted' 16050 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16051DELETE FROM t0_aux 16052WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16053INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16054SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16055'just inserted' FROM t0_template 16056WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16057CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 16058BEGIN 16059UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16060f_charbig = 'updated by trigger' 16061 WHERE f_int1 = - old.f_int1; 16062END| 16063DELETE FROM t0_aux 16064WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16065 16066# check trigger-8 success: 1 16067DROP TRIGGER trg_1; 16068UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16069f_int2 = CAST(f_char1 AS SIGNED INT), 16070f_charbig = 'just inserted' 16071 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16072DELETE FROM t0_aux 16073WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16074DELETE FROM t1 16075WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16076CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16077BEGIN 16078SET new.f_int1 = old.f_int1 + @max_row, 16079new.f_int2 = old.f_int2 - @max_row, 16080new.f_charbig = '####updated per update trigger####'; 16081END| 16082UPDATE t1 16083SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16084f_charbig = '####updated per update statement itself####'; 16085 16086# check trigger-9 success: 1 16087DROP TRIGGER trg_2; 16088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16089f_int2 = CAST(f_char1 AS SIGNED INT), 16090f_charbig = CONCAT('===',f_char1,'==='); 16091CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16092BEGIN 16093SET new.f_int1 = new.f_int1 + @max_row, 16094new.f_int2 = new.f_int2 - @max_row, 16095new.f_charbig = '####updated per update trigger####'; 16096END| 16097UPDATE t1 16098SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16099f_charbig = '####updated per update statement itself####'; 16100 16101# check trigger-10 success: 1 16102DROP TRIGGER trg_2; 16103UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16104f_int2 = CAST(f_char1 AS SIGNED INT), 16105f_charbig = CONCAT('===',f_char1,'==='); 16106CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16107BEGIN 16108SET new.f_int1 = @my_max1 + @counter, 16109new.f_int2 = @my_min2 - @counter, 16110new.f_charbig = '####updated per insert trigger####'; 16111SET @counter = @counter + 1; 16112END| 16113SET @counter = 1; 16114SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16115INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16116SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16117CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16119ORDER BY f_int1; 16120DROP TRIGGER trg_3; 16121 16122# check trigger-11 success: 1 16123DELETE FROM t1 16124WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16125AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16126AND f_charbig = '####updated per insert trigger####'; 16127CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16128BEGIN 16129SET new.f_int1 = @my_max1 + @counter, 16130new.f_int2 = @my_min2 - @counter, 16131new.f_charbig = '####updated per insert trigger####'; 16132SET @counter = @counter + 1; 16133END| 16134SET @counter = 1; 16135SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16136INSERT INTO t1 (f_char1, f_char2, f_charbig) 16137SELECT CAST(f_int1 AS CHAR), 16138CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16140ORDER BY f_int1; 16141DROP TRIGGER trg_3; 16142 16143# check trigger-12 success: 1 16144DELETE FROM t1 16145WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16146AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16147AND f_charbig = '####updated per insert trigger####'; 16148ANALYZE TABLE t1; 16149Table Op Msg_type Msg_text 16150test.t1 analyze status OK 16151CHECK TABLE t1 EXTENDED; 16152Table Op Msg_type Msg_text 16153test.t1 check status OK 16154CHECKSUM TABLE t1 EXTENDED; 16155Table Checksum 16156test.t1 <some_value> 16157OPTIMIZE TABLE t1; 16158Table Op Msg_type Msg_text 16159test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 16160test.t1 optimize status OK 16161# check layout success: 1 16162REPAIR TABLE t1 EXTENDED; 16163Table Op Msg_type Msg_text 16164test.t1 repair status OK 16165# check layout success: 1 16166TRUNCATE t1; 16167 16168# check TRUNCATE success: 1 16169# check layout success: 1 16170# End usability test (inc/partition_check.inc) 16171DROP TABLE t1; 16172CREATE TABLE t1 ( 16173f_int1 INTEGER DEFAULT 0, 16174f_int2 INTEGER DEFAULT 0, 16175f_char1 CHAR(20), 16176f_char2 CHAR(20), 16177f_charbig VARCHAR(1000) 16178 16179) 16180PARTITION BY LIST(ABS(MOD(f_int1,2))) 16181SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 16182(PARTITION part1 VALUES IN (0), 16183PARTITION part2 VALUES IN (1), 16184PARTITION part3 VALUES IN (NULL)); 16185INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16186SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16187WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 16188ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1); 16189INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16190SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16191WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 16192# Start usability test (inc/partition_check.inc) 16193create_command 16194SHOW CREATE TABLE t1; 16195Table Create Table 16196t1 CREATE TABLE `t1` ( 16197 `f_int1` int(11) DEFAULT 0, 16198 `f_int2` int(11) DEFAULT 0, 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 PARTITION BY LIST (abs(`f_int1` MOD 2)) 16205SUBPARTITION BY KEY (`f_int1`) 16206SUBPARTITIONS 3 16207(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB, 16208 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB, 16209 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB) 16210 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 16215INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16216SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16217CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 16218WHERE f_int1 IN (2,3); 16219ERROR 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 16222INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16223SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16224CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16225WHERE f_int1 IN (2,3); 16226DELETE FROM t1 WHERE f_charbig = 'delete me'; 16227INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16228SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16229CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16230WHERE f_int1 IN (2,3); 16231DELETE FROM t1 WHERE f_charbig = 'delete me'; 16232# check read via f_int1 success: 1 16233# check read via f_int2 success: 1 16234 16235# check multiple-1 success: 1 16236DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 16237 16238# check multiple-2 success: 1 16239INSERT INTO t1 SELECT * FROM t0_template 16240WHERE MOD(f_int1,3) = 0; 16241 16242# check multiple-3 success: 1 16243UPDATE t1 SET f_int1 = f_int1 + @max_row 16244WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 16245AND @max_row_div2 + @max_row_div4; 16246 16247# check multiple-4 success: 1 16248DELETE FROM t1 16249WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 16250AND @max_row_div2 + @max_row_div4 + @max_row; 16251 16252# check multiple-5 success: 1 16253SELECT COUNT(*) INTO @try_count FROM t0_template 16254WHERE MOD(f_int1,3) = 0 16255AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16256SELECT COUNT(*) INTO @clash_count 16257FROM t1 INNER JOIN t0_template USING(f_int1) 16258WHERE MOD(f_int1,3) = 0 16259AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16260SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 16261INSERT INTO t1 16262SET f_int1 = @cur_value , f_int2 = @cur_value, 16263f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16264f_charbig = '#SINGLE#'; 16265 16266# check single-1 success: 1 16267SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 16268INSERT INTO t1 16269SET f_int1 = @cur_value , f_int2 = @cur_value, 16270f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16271f_charbig = '#SINGLE#'; 16272 16273# check single-2 success: 1 16274SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 16275SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 16276UPDATE t1 SET f_int1 = @cur_value2 16277WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 16278 16279# check single-3 success: 1 16280SET @cur_value1= -1; 16281SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 16282UPDATE t1 SET f_int1 = @cur_value1 16283WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 16284 16285# check single-4 success: 1 16286SELECT MAX(f_int1) INTO @cur_value FROM t1; 16287DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 16288 16289# check single-5 success: 1 16290DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 16291 16292# check single-6 success: 1 16293INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 16294 16295# check single-7 success: 1 16296DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 16297DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 16298INSERT t1 SET f_int1 = 0 , f_int2 = 0, 16299f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 16300f_charbig = '#NULL#'; 16301INSERT INTO t1 16302SET f_int1 = NULL , f_int2 = -@max_row, 16303f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 16304f_charbig = '#NULL#'; 16305# check null success: 1 16306 16307# check null-1 success: 1 16308UPDATE t1 SET f_int1 = -@max_row 16309WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16310AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16311 16312# check null-2 success: 1 16313UPDATE t1 SET f_int1 = NULL 16314WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16315AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16316 16317# check null-3 success: 1 16318DELETE FROM t1 16319WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16320AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16321 16322# check null-4 success: 1 16323DELETE FROM t1 16324WHERE f_int1 = 0 AND f_int2 = 0 16325AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 16326AND f_charbig = '#NULL#'; 16327INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16328SELECT f_int1, f_int1, '', '', 'was inserted' 16329 FROM t0_template source_tab 16330WHERE MOD(f_int1,3) = 0 16331AND f_int1 BETWEEN @max_row_div2 AND @max_row 16332ON DUPLICATE KEY 16333UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 16334f_int2 = 2 * @max_row + source_tab.f_int1, 16335f_charbig = 'was updated'; 16336 16337# check unique-1-a success: 1 16338 16339# check unique-1-b success: 1 16340DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16341UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16342f_int2 = CAST(f_char1 AS SIGNED INT), 16343f_charbig = CONCAT('===',f_char1,'===') 16344WHERE f_charbig = 'was updated'; 16345REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16346SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 16347 FROM t0_template source_tab 16348WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16349 16350# check replace success: 1 16351DELETE FROM t1 16352WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 16353DELETE FROM t1 16354WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 16355f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 16356UPDATE t1 SET f_int2 = f_int1, 16357f_char1 = CAST(f_int1 AS CHAR), 16358f_char2 = CAST(f_int1 AS CHAR), 16359f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 16360WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 16361SET AUTOCOMMIT= 0; 16362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16363SELECT f_int1, f_int1, '', '', 'was inserted' 16364FROM t0_template source_tab 16365WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16366 16367# check transactions-1 success: 1 16368COMMIT WORK; 16369 16370# check transactions-2 success: 1 16371ROLLBACK WORK; 16372 16373# check transactions-3 success: 1 16374DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16375COMMIT WORK; 16376ROLLBACK WORK; 16377 16378# check transactions-4 success: 1 16379INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16380SELECT f_int1, f_int1, '', '', 'was inserted' 16381FROM t0_template source_tab 16382WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16383 16384# check transactions-5 success: 1 16385ROLLBACK WORK; 16386 16387# check transactions-6 success: 1 16388# INFO: Storage engine used for t1 seems to be transactional. 16389COMMIT; 16390 16391# check transactions-7 success: 1 16392DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16393COMMIT WORK; 16394SET @@session.sql_mode = 'traditional'; 16395SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 16396INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16397SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 16398'', '', 'was inserted' FROM t0_template 16399WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16400ERROR 22012: Division by 0 16401COMMIT; 16402 16403# check transactions-8 success: 1 16404# INFO: Storage engine used for t1 seems to be able to revert 16405# changes made by the failing statement. 16406SET @@session.sql_mode = ''; 16407SET AUTOCOMMIT= 1; 16408DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16409COMMIT WORK; 16410UPDATE t1 SET f_charbig = REPEAT('b', 1000); 16411 16412# check special-1 success: 1 16413UPDATE t1 SET f_charbig = ''; 16414 16415# check special-2 success: 1 16416UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 16417INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16418SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 16419WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16422'just inserted' FROM t0_template 16423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16424CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 16425BEGIN 16426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16427f_charbig = 'updated by trigger' 16428 WHERE f_int1 = new.f_int1; 16429END| 16430INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16431SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16432WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16433 16434# check trigger-1 success: 1 16435DROP TRIGGER trg_1; 16436UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16437f_int2 = CAST(f_char1 AS SIGNED INT), 16438f_charbig = 'just inserted' 16439 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16440DELETE FROM t0_aux 16441WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16442INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16443SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16444'just inserted' FROM t0_template 16445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16446CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 16447BEGIN 16448UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16449f_charbig = 'updated by trigger' 16450 WHERE f_int1 = new.f_int1; 16451END| 16452INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16453SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16454WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16455 16456# check trigger-2 success: 1 16457DROP TRIGGER trg_1; 16458UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16459f_int2 = CAST(f_char1 AS SIGNED INT), 16460f_charbig = 'just inserted' 16461 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16462DELETE FROM t0_aux 16463WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16464INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16465SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16466'just inserted' FROM t0_template 16467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16468CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16469BEGIN 16470UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16471f_charbig = 'updated by trigger' 16472 WHERE f_int1 = new.f_int1; 16473END| 16474UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16475WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16476 16477# check trigger-3 success: 1 16478DROP TRIGGER trg_1; 16479UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16480f_int2 = CAST(f_char1 AS SIGNED INT), 16481f_charbig = 'just inserted' 16482 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16483DELETE FROM t0_aux 16484WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16485INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16486SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16487'just inserted' FROM t0_template 16488WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16489CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16490BEGIN 16491UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16492f_charbig = 'updated by trigger' 16493 WHERE f_int1 = - old.f_int1; 16494END| 16495UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16496WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16497 16498# check trigger-4 success: 1 16499DROP TRIGGER trg_1; 16500UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16501f_int2 = CAST(f_char1 AS SIGNED INT), 16502f_charbig = 'just inserted' 16503 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16504DELETE FROM t0_aux 16505WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16506INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16507SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16508'just inserted' FROM t0_template 16509WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16510CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16511BEGIN 16512UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16513f_charbig = 'updated by trigger' 16514 WHERE f_int1 = new.f_int1; 16515END| 16516UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16517WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16518 16519# check trigger-5 success: 1 16520DROP TRIGGER trg_1; 16521UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16522f_int2 = CAST(f_char1 AS SIGNED INT), 16523f_charbig = 'just inserted' 16524 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16525DELETE FROM t0_aux 16526WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16527INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16528SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16529'just inserted' FROM t0_template 16530WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16531CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16532BEGIN 16533UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16534f_charbig = 'updated by trigger' 16535 WHERE f_int1 = - old.f_int1; 16536END| 16537UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16538WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16539 16540# check trigger-6 success: 1 16541DROP TRIGGER trg_1; 16542UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16543f_int2 = CAST(f_char1 AS SIGNED INT), 16544f_charbig = 'just inserted' 16545 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16546DELETE FROM t0_aux 16547WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16548INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16549SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16550'just inserted' FROM t0_template 16551WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16552CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 16553BEGIN 16554UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16555f_charbig = 'updated by trigger' 16556 WHERE f_int1 = - old.f_int1; 16557END| 16558DELETE FROM t0_aux 16559WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16560 16561# check trigger-7 success: 1 16562DROP TRIGGER trg_1; 16563UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16564f_int2 = CAST(f_char1 AS SIGNED INT), 16565f_charbig = 'just inserted' 16566 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16567DELETE FROM t0_aux 16568WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16570SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16571'just inserted' FROM t0_template 16572WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16573CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 16574BEGIN 16575UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16576f_charbig = 'updated by trigger' 16577 WHERE f_int1 = - old.f_int1; 16578END| 16579DELETE FROM t0_aux 16580WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16581 16582# check trigger-8 success: 1 16583DROP TRIGGER trg_1; 16584UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16585f_int2 = CAST(f_char1 AS SIGNED INT), 16586f_charbig = 'just inserted' 16587 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16588DELETE FROM t0_aux 16589WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16590DELETE FROM t1 16591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16592CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16593BEGIN 16594SET new.f_int1 = old.f_int1 + @max_row, 16595new.f_int2 = old.f_int2 - @max_row, 16596new.f_charbig = '####updated per update trigger####'; 16597END| 16598UPDATE t1 16599SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16600f_charbig = '####updated per update statement itself####'; 16601 16602# check trigger-9 success: 1 16603DROP TRIGGER trg_2; 16604UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16605f_int2 = CAST(f_char1 AS SIGNED INT), 16606f_charbig = CONCAT('===',f_char1,'==='); 16607CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16608BEGIN 16609SET new.f_int1 = new.f_int1 + @max_row, 16610new.f_int2 = new.f_int2 - @max_row, 16611new.f_charbig = '####updated per update trigger####'; 16612END| 16613UPDATE t1 16614SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16615f_charbig = '####updated per update statement itself####'; 16616 16617# check trigger-10 success: 1 16618DROP TRIGGER trg_2; 16619UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16620f_int2 = CAST(f_char1 AS SIGNED INT), 16621f_charbig = CONCAT('===',f_char1,'==='); 16622CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16623BEGIN 16624SET new.f_int1 = @my_max1 + @counter, 16625new.f_int2 = @my_min2 - @counter, 16626new.f_charbig = '####updated per insert trigger####'; 16627SET @counter = @counter + 1; 16628END| 16629SET @counter = 1; 16630SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16631INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16632SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16633CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16635ORDER BY f_int1; 16636DROP TRIGGER trg_3; 16637 16638# check trigger-11 success: 1 16639DELETE FROM t1 16640WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16641AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16642AND f_charbig = '####updated per insert trigger####'; 16643CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16644BEGIN 16645SET new.f_int1 = @my_max1 + @counter, 16646new.f_int2 = @my_min2 - @counter, 16647new.f_charbig = '####updated per insert trigger####'; 16648SET @counter = @counter + 1; 16649END| 16650SET @counter = 1; 16651SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16652INSERT INTO t1 (f_char1, f_char2, f_charbig) 16653SELECT CAST(f_int1 AS CHAR), 16654CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16656ORDER BY f_int1; 16657DROP TRIGGER trg_3; 16658 16659# check trigger-12 success: 1 16660DELETE FROM t1 16661WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16662AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16663AND f_charbig = '####updated per insert trigger####'; 16664ANALYZE TABLE t1; 16665Table Op Msg_type Msg_text 16666test.t1 analyze status OK 16667CHECK TABLE t1 EXTENDED; 16668Table Op Msg_type Msg_text 16669test.t1 check status OK 16670CHECKSUM TABLE t1 EXTENDED; 16671Table Checksum 16672test.t1 <some_value> 16673OPTIMIZE TABLE t1; 16674Table Op Msg_type Msg_text 16675test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 16676test.t1 optimize status OK 16677# check layout success: 1 16678REPAIR TABLE t1 EXTENDED; 16679Table Op Msg_type Msg_text 16680test.t1 repair status OK 16681# check layout success: 1 16682TRUNCATE t1; 16683 16684# check TRUNCATE success: 1 16685# check layout success: 1 16686# End usability test (inc/partition_check.inc) 16687DROP TABLE t1; 16688DROP VIEW IF EXISTS v1; 16689DROP TABLE IF EXISTS t1; 16690DROP TABLE IF EXISTS t0_aux; 16691DROP TABLE IF EXISTS t0_definition; 16692DROP TABLE IF EXISTS t0_template; 16693