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, 15f_int2 INTEGER, 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, 31f_int2 INTEGER, 32f_char1 CHAR(20), 33f_char2 CHAR(20), 34f_charbig VARCHAR(1000) ) 35ENGINE = MEMORY; 36SET AUTOCOMMIT= 1; 37SET @@session.sql_mode= ''; 38Warnings: 39Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 40# End of basic preparations needed for all tests 41#----------------------------------------------- 42#------------------------------------------------------------------------ 43# 1.3 ALTER column f_int1 and f_int2 44# f_int1 or (f_int1 and f_int2) used in partitioning function 45#------------------------------------------------------------------------ 46# 1.3.1 no PRIMARY KEY or UNIQUE INDEX exists 47DROP TABLE IF EXISTS t1; 48CREATE TABLE t1 ( 49f_int1 INTEGER, 50f_int2 INTEGER, 51f_char1 CHAR(20), 52f_char2 CHAR(20), 53f_charbig VARCHAR(1000) 54 55) 56PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; 57INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 58SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 59WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 60ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 61INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 62SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 63WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 64# Start usability test (inc/partition_check.inc) 65create_command 66SHOW CREATE TABLE t1; 67Table Create Table 68t1 CREATE TABLE `t1` ( 69 `f_int1` bigint(20) DEFAULT NULL, 70 `f_int2` bigint(20) DEFAULT NULL, 71 `f_char1` char(20) DEFAULT NULL, 72 `f_char2` char(20) DEFAULT NULL, 73 `f_charbig` varchar(1000) DEFAULT NULL 74) ENGINE=InnoDB DEFAULT CHARSET=latin1 75/*!50100 PARTITION BY HASH (f_int1 + f_int2) 76PARTITIONS 2 */ 77 78# check prerequisites-1 success: 1 79# check COUNT(*) success: 1 80# check MIN/MAX(f_int1) success: 1 81# check MIN/MAX(f_int2) success: 1 82INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 83SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 84CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 85WHERE f_int1 IN (2,3); 86# check prerequisites-3 success: 1 87DELETE FROM t1 WHERE f_charbig = 'delete me'; 88# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 89# check read via f_int1 success: 1 90# check read via f_int2 success: 1 91 92# check multiple-1 success: 1 93DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 94 95# check multiple-2 success: 1 96INSERT INTO t1 SELECT * FROM t0_template 97WHERE MOD(f_int1,3) = 0; 98 99# check multiple-3 success: 1 100UPDATE t1 SET f_int1 = f_int1 + @max_row 101WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 102AND @max_row_div2 + @max_row_div4; 103 104# check multiple-4 success: 1 105DELETE FROM t1 106WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 107AND @max_row_div2 + @max_row_div4 + @max_row; 108 109# check multiple-5 success: 1 110SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 111INSERT INTO t1 112SET f_int1 = @cur_value , f_int2 = @cur_value, 113f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 114f_charbig = '#SINGLE#'; 115 116# check single-1 success: 1 117SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 118INSERT INTO t1 119SET f_int1 = @cur_value , f_int2 = @cur_value, 120f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 121f_charbig = '#SINGLE#'; 122 123# check single-2 success: 1 124SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 125SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 126UPDATE t1 SET f_int1 = @cur_value2 127WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 128 129# check single-3 success: 1 130SET @cur_value1= -1; 131SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 132UPDATE t1 SET f_int1 = @cur_value1 133WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 134 135# check single-4 success: 1 136SELECT MAX(f_int1) INTO @cur_value FROM t1; 137DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 138 139# check single-5 success: 1 140DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 141 142# check single-6 success: 1 143INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 144 145# check single-7 success: 1 146DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 147DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 148INSERT t1 SET f_int1 = 0 , f_int2 = 0, 149f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 150f_charbig = '#NULL#'; 151INSERT INTO t1 152SET f_int1 = NULL , f_int2 = -@max_row, 153f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 154f_charbig = '#NULL#'; 155# check null success: 1 156 157# check null-1 success: 1 158UPDATE t1 SET f_int1 = -@max_row 159WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 160AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 161 162# check null-2 success: 1 163UPDATE t1 SET f_int1 = NULL 164WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 165AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 166 167# check null-3 success: 1 168DELETE FROM t1 169WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 170AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 171 172# check null-4 success: 1 173DELETE FROM t1 174WHERE f_int1 = 0 AND f_int2 = 0 175AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 176AND f_charbig = '#NULL#'; 177SET AUTOCOMMIT= 0; 178INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 179SELECT f_int1, f_int1, '', '', 'was inserted' 180FROM t0_template source_tab 181WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 182 183# check transactions-1 success: 1 184COMMIT WORK; 185 186# check transactions-2 success: 1 187ROLLBACK WORK; 188 189# check transactions-3 success: 1 190DELETE FROM t1 WHERE f_charbig = 'was inserted'; 191COMMIT WORK; 192ROLLBACK WORK; 193 194# check transactions-4 success: 1 195INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 196SELECT f_int1, f_int1, '', '', 'was inserted' 197FROM t0_template source_tab 198WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 199 200# check transactions-5 success: 1 201ROLLBACK WORK; 202 203# check transactions-6 success: 1 204# INFO: Storage engine used for t1 seems to be transactional. 205COMMIT; 206 207# check transactions-7 success: 1 208DELETE FROM t1 WHERE f_charbig = 'was inserted'; 209COMMIT WORK; 210SET @@session.sql_mode = 'traditional'; 211Warnings: 212Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 213SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 214INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 215SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 216'', '', 'was inserted' FROM t0_template 217WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 218ERROR 22012: Division by 0 219COMMIT; 220 221# check transactions-8 success: 1 222# INFO: Storage engine used for t1 seems to be able to revert 223# changes made by the failing statement. 224SET @@session.sql_mode = ''; 225Warnings: 226Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 227SET AUTOCOMMIT= 1; 228DELETE FROM t1 WHERE f_charbig = 'was inserted'; 229COMMIT WORK; 230UPDATE t1 SET f_charbig = REPEAT('b', 1000); 231 232# check special-1 success: 1 233UPDATE t1 SET f_charbig = ''; 234 235# check special-2 success: 1 236UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 237INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 238SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 240INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 241SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 242'just inserted' FROM t0_template 243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 244CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 245BEGIN 246UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 247f_charbig = 'updated by trigger' 248 WHERE f_int1 = new.f_int1; 249END| 250INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 251SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 253 254# check trigger-1 success: 1 255DROP TRIGGER trg_1; 256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 257f_int2 = CAST(f_char1 AS SIGNED INT), 258f_charbig = 'just inserted' 259 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 260DELETE FROM t0_aux 261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 262INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 263SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 264'just inserted' FROM t0_template 265WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 266CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 267BEGIN 268UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 269f_charbig = 'updated by trigger' 270 WHERE f_int1 = new.f_int1; 271END| 272INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 273SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 274WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 275 276# check trigger-2 success: 1 277DROP TRIGGER trg_1; 278UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 279f_int2 = CAST(f_char1 AS SIGNED INT), 280f_charbig = 'just inserted' 281 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 282DELETE FROM t0_aux 283WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 284INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 285SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 286'just inserted' FROM t0_template 287WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 288CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 289BEGIN 290UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 291f_charbig = 'updated by trigger' 292 WHERE f_int1 = new.f_int1; 293END| 294UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 295WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 296 297# check trigger-3 success: 1 298DROP TRIGGER trg_1; 299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 300f_int2 = CAST(f_char1 AS SIGNED INT), 301f_charbig = 'just inserted' 302 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 303DELETE FROM t0_aux 304WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 305INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 306SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 307'just inserted' FROM t0_template 308WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 309CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 310BEGIN 311UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 312f_charbig = 'updated by trigger' 313 WHERE f_int1 = - old.f_int1; 314END| 315UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 316WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 317 318# check trigger-4 success: 1 319DROP TRIGGER trg_1; 320UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 321f_int2 = CAST(f_char1 AS SIGNED INT), 322f_charbig = 'just inserted' 323 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 324DELETE FROM t0_aux 325WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 326INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 327SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 328'just inserted' FROM t0_template 329WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 330CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 331BEGIN 332UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 333f_charbig = 'updated by trigger' 334 WHERE f_int1 = new.f_int1; 335END| 336UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 337WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 338 339# check trigger-5 success: 1 340DROP TRIGGER trg_1; 341UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 342f_int2 = CAST(f_char1 AS SIGNED INT), 343f_charbig = 'just inserted' 344 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 345DELETE FROM t0_aux 346WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 347INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 348SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 349'just inserted' FROM t0_template 350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 351CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 352BEGIN 353UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 354f_charbig = 'updated by trigger' 355 WHERE f_int1 = - old.f_int1; 356END| 357UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 358WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 359 360# check trigger-6 success: 1 361DROP TRIGGER trg_1; 362UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 363f_int2 = CAST(f_char1 AS SIGNED INT), 364f_charbig = 'just inserted' 365 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 366DELETE FROM t0_aux 367WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 368INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 369SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 370'just inserted' FROM t0_template 371WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 372CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 373BEGIN 374UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 375f_charbig = 'updated by trigger' 376 WHERE f_int1 = - old.f_int1; 377END| 378DELETE FROM t0_aux 379WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 380 381# check trigger-7 success: 1 382DROP TRIGGER trg_1; 383UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 384f_int2 = CAST(f_char1 AS SIGNED INT), 385f_charbig = 'just inserted' 386 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 387DELETE FROM t0_aux 388WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 389INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 390SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 391'just inserted' FROM t0_template 392WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 393CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 394BEGIN 395UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 396f_charbig = 'updated by trigger' 397 WHERE f_int1 = - old.f_int1; 398END| 399DELETE FROM t0_aux 400WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 401 402# check trigger-8 success: 1 403DROP TRIGGER trg_1; 404UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 405f_int2 = CAST(f_char1 AS SIGNED INT), 406f_charbig = 'just inserted' 407 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 408DELETE FROM t0_aux 409WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 410DELETE FROM t1 411WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 412CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 413BEGIN 414SET new.f_int1 = old.f_int1 + @max_row, 415new.f_int2 = old.f_int2 - @max_row, 416new.f_charbig = '####updated per update trigger####'; 417END| 418UPDATE t1 419SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 420f_charbig = '####updated per update statement itself####'; 421 422# check trigger-9 success: 1 423DROP TRIGGER trg_2; 424UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 425f_int2 = CAST(f_char1 AS SIGNED INT), 426f_charbig = CONCAT('===',f_char1,'==='); 427CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 428BEGIN 429SET new.f_int1 = new.f_int1 + @max_row, 430new.f_int2 = new.f_int2 - @max_row, 431new.f_charbig = '####updated per update trigger####'; 432END| 433UPDATE t1 434SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 435f_charbig = '####updated per update statement itself####'; 436 437# check trigger-10 success: 1 438DROP TRIGGER trg_2; 439UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 440f_int2 = CAST(f_char1 AS SIGNED INT), 441f_charbig = CONCAT('===',f_char1,'==='); 442CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 443BEGIN 444SET new.f_int1 = @my_max1 + @counter, 445new.f_int2 = @my_min2 - @counter, 446new.f_charbig = '####updated per insert trigger####'; 447SET @counter = @counter + 1; 448END| 449SET @counter = 1; 450SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 451INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 452SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 453CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 454WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 455ORDER BY f_int1; 456DROP TRIGGER trg_3; 457 458# check trigger-11 success: 1 459DELETE FROM t1 460WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 461AND f_int2 <> CAST(f_char1 AS SIGNED INT) 462AND f_charbig = '####updated per insert trigger####'; 463CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 464BEGIN 465SET new.f_int1 = @my_max1 + @counter, 466new.f_int2 = @my_min2 - @counter, 467new.f_charbig = '####updated per insert trigger####'; 468SET @counter = @counter + 1; 469END| 470SET @counter = 1; 471SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 472INSERT INTO t1 (f_char1, f_char2, f_charbig) 473SELECT CAST(f_int1 AS CHAR), 474CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 475WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 476ORDER BY f_int1; 477DROP TRIGGER trg_3; 478 479# check trigger-12 success: 1 480DELETE FROM t1 481WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 482AND f_int2 <> CAST(f_char1 AS SIGNED INT) 483AND f_charbig = '####updated per insert trigger####'; 484ANALYZE TABLE t1; 485Table Op Msg_type Msg_text 486test.t1 analyze status OK 487CHECK TABLE t1 EXTENDED; 488Table Op Msg_type Msg_text 489test.t1 check status OK 490CHECKSUM TABLE t1 EXTENDED; 491Table Checksum 492test.t1 <some_value> 493OPTIMIZE TABLE t1; 494Table Op Msg_type Msg_text 495test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 496test.t1 optimize status OK 497# check layout success: 1 498REPAIR TABLE t1 EXTENDED; 499Table Op Msg_type Msg_text 500test.t1 repair status OK 501# check layout success: 1 502TRUNCATE t1; 503 504# check TRUNCATE success: 1 505# check layout success: 1 506# End usability test (inc/partition_check.inc) 507DROP TABLE t1; 508CREATE TABLE t1 ( 509f_int1 INTEGER, 510f_int2 INTEGER, 511f_char1 CHAR(20), 512f_char2 CHAR(20), 513f_charbig VARCHAR(1000) 514 515) 516PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5; 517INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 518SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 519WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 520ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 521INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 522SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 524# Start usability test (inc/partition_check.inc) 525create_command 526SHOW CREATE TABLE t1; 527Table Create Table 528t1 CREATE TABLE `t1` ( 529 `f_int1` bigint(20) DEFAULT NULL, 530 `f_int2` bigint(20) DEFAULT NULL, 531 `f_char1` char(20) DEFAULT NULL, 532 `f_char2` char(20) DEFAULT NULL, 533 `f_charbig` varchar(1000) DEFAULT NULL 534) ENGINE=InnoDB DEFAULT CHARSET=latin1 535/*!50100 PARTITION BY KEY (f_int1,f_int2) 536PARTITIONS 5 */ 537 538# check prerequisites-1 success: 1 539# check COUNT(*) success: 1 540# check MIN/MAX(f_int1) success: 1 541# check MIN/MAX(f_int2) success: 1 542INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 543SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 544CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 545WHERE f_int1 IN (2,3); 546# check prerequisites-3 success: 1 547DELETE FROM t1 WHERE f_charbig = 'delete me'; 548# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 549# check read via f_int1 success: 1 550# check read via f_int2 success: 1 551 552# check multiple-1 success: 1 553DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 554 555# check multiple-2 success: 1 556INSERT INTO t1 SELECT * FROM t0_template 557WHERE MOD(f_int1,3) = 0; 558 559# check multiple-3 success: 1 560UPDATE t1 SET f_int1 = f_int1 + @max_row 561WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 562AND @max_row_div2 + @max_row_div4; 563 564# check multiple-4 success: 1 565DELETE FROM t1 566WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 567AND @max_row_div2 + @max_row_div4 + @max_row; 568 569# check multiple-5 success: 1 570SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 571INSERT INTO t1 572SET f_int1 = @cur_value , f_int2 = @cur_value, 573f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 574f_charbig = '#SINGLE#'; 575 576# check single-1 success: 1 577SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 578INSERT INTO t1 579SET f_int1 = @cur_value , f_int2 = @cur_value, 580f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 581f_charbig = '#SINGLE#'; 582 583# check single-2 success: 1 584SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 585SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 586UPDATE t1 SET f_int1 = @cur_value2 587WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 588 589# check single-3 success: 1 590SET @cur_value1= -1; 591SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 592UPDATE t1 SET f_int1 = @cur_value1 593WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 594 595# check single-4 success: 1 596SELECT MAX(f_int1) INTO @cur_value FROM t1; 597DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 598 599# check single-5 success: 1 600DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 601 602# check single-6 success: 1 603INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 604 605# check single-7 success: 1 606DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 607DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 608INSERT t1 SET f_int1 = 0 , f_int2 = 0, 609f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 610f_charbig = '#NULL#'; 611INSERT INTO t1 612SET f_int1 = NULL , f_int2 = -@max_row, 613f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 614f_charbig = '#NULL#'; 615# check null success: 1 616 617# check null-1 success: 1 618UPDATE t1 SET f_int1 = -@max_row 619WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 620AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 621 622# check null-2 success: 1 623UPDATE t1 SET f_int1 = NULL 624WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 625AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 626 627# check null-3 success: 1 628DELETE FROM t1 629WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 630AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 631 632# check null-4 success: 1 633DELETE FROM t1 634WHERE f_int1 = 0 AND f_int2 = 0 635AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 636AND f_charbig = '#NULL#'; 637SET AUTOCOMMIT= 0; 638INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 639SELECT f_int1, f_int1, '', '', 'was inserted' 640FROM t0_template source_tab 641WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 642 643# check transactions-1 success: 1 644COMMIT WORK; 645 646# check transactions-2 success: 1 647ROLLBACK WORK; 648 649# check transactions-3 success: 1 650DELETE FROM t1 WHERE f_charbig = 'was inserted'; 651COMMIT WORK; 652ROLLBACK WORK; 653 654# check transactions-4 success: 1 655INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 656SELECT f_int1, f_int1, '', '', 'was inserted' 657FROM t0_template source_tab 658WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 659 660# check transactions-5 success: 1 661ROLLBACK WORK; 662 663# check transactions-6 success: 1 664# INFO: Storage engine used for t1 seems to be transactional. 665COMMIT; 666 667# check transactions-7 success: 1 668DELETE FROM t1 WHERE f_charbig = 'was inserted'; 669COMMIT WORK; 670SET @@session.sql_mode = 'traditional'; 671Warnings: 672Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 673SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 674INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 675SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 676'', '', 'was inserted' FROM t0_template 677WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 678ERROR 22012: Division by 0 679COMMIT; 680 681# check transactions-8 success: 1 682# INFO: Storage engine used for t1 seems to be able to revert 683# changes made by the failing statement. 684SET @@session.sql_mode = ''; 685Warnings: 686Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 687SET AUTOCOMMIT= 1; 688DELETE FROM t1 WHERE f_charbig = 'was inserted'; 689COMMIT WORK; 690UPDATE t1 SET f_charbig = REPEAT('b', 1000); 691 692# check special-1 success: 1 693UPDATE t1 SET f_charbig = ''; 694 695# check special-2 success: 1 696UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 697INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 698SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 702'just inserted' FROM t0_template 703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 704CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 705BEGIN 706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 707f_charbig = 'updated by trigger' 708 WHERE f_int1 = new.f_int1; 709END| 710INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 711SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 712WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 713 714# check trigger-1 success: 1 715DROP TRIGGER trg_1; 716UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 717f_int2 = CAST(f_char1 AS SIGNED INT), 718f_charbig = 'just inserted' 719 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 720DELETE FROM t0_aux 721WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 722INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 723SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 724'just inserted' FROM t0_template 725WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 726CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 727BEGIN 728UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 729f_charbig = 'updated by trigger' 730 WHERE f_int1 = new.f_int1; 731END| 732INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 733SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 734WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 735 736# check trigger-2 success: 1 737DROP TRIGGER trg_1; 738UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 739f_int2 = CAST(f_char1 AS SIGNED INT), 740f_charbig = 'just inserted' 741 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 742DELETE FROM t0_aux 743WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 744INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 745SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 746'just inserted' FROM t0_template 747WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 748CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 749BEGIN 750UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 751f_charbig = 'updated by trigger' 752 WHERE f_int1 = new.f_int1; 753END| 754UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 755WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 756 757# check trigger-3 success: 1 758DROP TRIGGER trg_1; 759UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 760f_int2 = CAST(f_char1 AS SIGNED INT), 761f_charbig = 'just inserted' 762 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 763DELETE FROM t0_aux 764WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 765INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 766SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 767'just inserted' FROM t0_template 768WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 769CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 770BEGIN 771UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 772f_charbig = 'updated by trigger' 773 WHERE f_int1 = - old.f_int1; 774END| 775UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 776WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 777 778# check trigger-4 success: 1 779DROP TRIGGER trg_1; 780UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 781f_int2 = CAST(f_char1 AS SIGNED INT), 782f_charbig = 'just inserted' 783 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 784DELETE FROM t0_aux 785WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 786INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 787SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 788'just inserted' FROM t0_template 789WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 790CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 791BEGIN 792UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 793f_charbig = 'updated by trigger' 794 WHERE f_int1 = new.f_int1; 795END| 796UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 797WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 798 799# check trigger-5 success: 1 800DROP TRIGGER trg_1; 801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 802f_int2 = CAST(f_char1 AS SIGNED INT), 803f_charbig = 'just inserted' 804 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 805DELETE FROM t0_aux 806WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 807INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 808SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 809'just inserted' FROM t0_template 810WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 811CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 812BEGIN 813UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 814f_charbig = 'updated by trigger' 815 WHERE f_int1 = - old.f_int1; 816END| 817UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 818WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 819 820# check trigger-6 success: 1 821DROP TRIGGER trg_1; 822UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 823f_int2 = CAST(f_char1 AS SIGNED INT), 824f_charbig = 'just inserted' 825 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 826DELETE FROM t0_aux 827WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 828INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 829SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 830'just inserted' FROM t0_template 831WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 832CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 833BEGIN 834UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 835f_charbig = 'updated by trigger' 836 WHERE f_int1 = - old.f_int1; 837END| 838DELETE FROM t0_aux 839WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 840 841# check trigger-7 success: 1 842DROP TRIGGER trg_1; 843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 844f_int2 = CAST(f_char1 AS SIGNED INT), 845f_charbig = 'just inserted' 846 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 847DELETE FROM t0_aux 848WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 850SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 851'just inserted' FROM t0_template 852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 853CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 854BEGIN 855UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 856f_charbig = 'updated by trigger' 857 WHERE f_int1 = - old.f_int1; 858END| 859DELETE FROM t0_aux 860WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 861 862# check trigger-8 success: 1 863DROP TRIGGER trg_1; 864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 865f_int2 = CAST(f_char1 AS SIGNED INT), 866f_charbig = 'just inserted' 867 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 868DELETE FROM t0_aux 869WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 870DELETE FROM t1 871WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 872CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 873BEGIN 874SET new.f_int1 = old.f_int1 + @max_row, 875new.f_int2 = old.f_int2 - @max_row, 876new.f_charbig = '####updated per update trigger####'; 877END| 878UPDATE t1 879SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 880f_charbig = '####updated per update statement itself####'; 881 882# check trigger-9 success: 1 883DROP TRIGGER trg_2; 884UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 885f_int2 = CAST(f_char1 AS SIGNED INT), 886f_charbig = CONCAT('===',f_char1,'==='); 887CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 888BEGIN 889SET new.f_int1 = new.f_int1 + @max_row, 890new.f_int2 = new.f_int2 - @max_row, 891new.f_charbig = '####updated per update trigger####'; 892END| 893UPDATE t1 894SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 895f_charbig = '####updated per update statement itself####'; 896 897# check trigger-10 success: 1 898DROP TRIGGER trg_2; 899UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 900f_int2 = CAST(f_char1 AS SIGNED INT), 901f_charbig = CONCAT('===',f_char1,'==='); 902CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 903BEGIN 904SET new.f_int1 = @my_max1 + @counter, 905new.f_int2 = @my_min2 - @counter, 906new.f_charbig = '####updated per insert trigger####'; 907SET @counter = @counter + 1; 908END| 909SET @counter = 1; 910SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 913CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 914WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 915ORDER BY f_int1; 916DROP TRIGGER trg_3; 917 918# check trigger-11 success: 1 919DELETE FROM t1 920WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 921AND f_int2 <> CAST(f_char1 AS SIGNED INT) 922AND f_charbig = '####updated per insert trigger####'; 923CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 924BEGIN 925SET new.f_int1 = @my_max1 + @counter, 926new.f_int2 = @my_min2 - @counter, 927new.f_charbig = '####updated per insert trigger####'; 928SET @counter = @counter + 1; 929END| 930SET @counter = 1; 931SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 932INSERT INTO t1 (f_char1, f_char2, f_charbig) 933SELECT CAST(f_int1 AS CHAR), 934CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 935WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 936ORDER BY f_int1; 937DROP TRIGGER trg_3; 938 939# check trigger-12 success: 1 940DELETE FROM t1 941WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 942AND f_int2 <> CAST(f_char1 AS SIGNED INT) 943AND f_charbig = '####updated per insert trigger####'; 944ANALYZE TABLE t1; 945Table Op Msg_type Msg_text 946test.t1 analyze status OK 947CHECK TABLE t1 EXTENDED; 948Table Op Msg_type Msg_text 949test.t1 check status OK 950CHECKSUM TABLE t1 EXTENDED; 951Table Checksum 952test.t1 <some_value> 953OPTIMIZE TABLE t1; 954Table Op Msg_type Msg_text 955test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 956test.t1 optimize status OK 957# check layout success: 1 958REPAIR TABLE t1 EXTENDED; 959Table Op Msg_type Msg_text 960test.t1 repair status OK 961# check layout success: 1 962TRUNCATE t1; 963 964# check TRUNCATE success: 1 965# check layout success: 1 966# End usability test (inc/partition_check.inc) 967DROP TABLE t1; 968CREATE TABLE t1 ( 969f_int1 INTEGER, 970f_int2 INTEGER, 971f_char1 CHAR(20), 972f_char2 CHAR(20), 973f_charbig VARCHAR(1000) 974 975) 976PARTITION BY LIST(MOD(f_int1 + f_int2,4)) 977(PARTITION part_3 VALUES IN (-3), 978PARTITION part_2 VALUES IN (-2), 979PARTITION part_1 VALUES IN (-1), 980PARTITION part_N VALUES IN (NULL), 981PARTITION part0 VALUES IN (0), 982PARTITION part1 VALUES IN (1), 983PARTITION part2 VALUES IN (2), 984PARTITION part3 VALUES IN (3)); 985INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 986SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 987WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 988ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 989INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 990SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 991WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 992# Start usability test (inc/partition_check.inc) 993create_command 994SHOW CREATE TABLE t1; 995Table Create Table 996t1 CREATE TABLE `t1` ( 997 `f_int1` bigint(20) DEFAULT NULL, 998 `f_int2` bigint(20) DEFAULT NULL, 999 `f_char1` char(20) DEFAULT NULL, 1000 `f_char2` char(20) DEFAULT NULL, 1001 `f_charbig` varchar(1000) DEFAULT NULL 1002) ENGINE=InnoDB DEFAULT CHARSET=latin1 1003/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) 1004(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, 1005 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, 1006 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, 1007 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, 1008 PARTITION part0 VALUES IN (0) ENGINE = InnoDB, 1009 PARTITION part1 VALUES IN (1) ENGINE = InnoDB, 1010 PARTITION part2 VALUES IN (2) ENGINE = InnoDB, 1011 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */ 1012 1013# check prerequisites-1 success: 1 1014# check COUNT(*) success: 1 1015# check MIN/MAX(f_int1) success: 1 1016# check MIN/MAX(f_int2) success: 1 1017INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1018SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1019CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 1020WHERE f_int1 IN (2,3); 1021# check prerequisites-3 success: 1 1022DELETE FROM t1 WHERE f_charbig = 'delete me'; 1023# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 1024# check read via f_int1 success: 1 1025# check read via f_int2 success: 1 1026 1027# check multiple-1 success: 1 1028DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 1029 1030# check multiple-2 success: 1 1031INSERT INTO t1 SELECT * FROM t0_template 1032WHERE MOD(f_int1,3) = 0; 1033 1034# check multiple-3 success: 1 1035UPDATE t1 SET f_int1 = f_int1 + @max_row 1036WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 1037AND @max_row_div2 + @max_row_div4; 1038 1039# check multiple-4 success: 1 1040DELETE FROM t1 1041WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 1042AND @max_row_div2 + @max_row_div4 + @max_row; 1043 1044# check multiple-5 success: 1 1045SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 1046INSERT INTO t1 1047SET f_int1 = @cur_value , f_int2 = @cur_value, 1048f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1049f_charbig = '#SINGLE#'; 1050 1051# check single-1 success: 1 1052SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 1053INSERT INTO t1 1054SET f_int1 = @cur_value , f_int2 = @cur_value, 1055f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1056f_charbig = '#SINGLE#'; 1057 1058# check single-2 success: 1 1059SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 1060SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 1061UPDATE t1 SET f_int1 = @cur_value2 1062WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 1063 1064# check single-3 success: 1 1065SET @cur_value1= -1; 1066SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 1067UPDATE t1 SET f_int1 = @cur_value1 1068WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 1069 1070# check single-4 success: 1 1071SELECT MAX(f_int1) INTO @cur_value FROM t1; 1072DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 1073 1074# check single-5 success: 1 1075DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 1076 1077# check single-6 success: 1 1078INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 1079 1080# check single-7 success: 1 1081DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 1082DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 1083INSERT t1 SET f_int1 = 0 , f_int2 = 0, 1084f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 1085f_charbig = '#NULL#'; 1086INSERT INTO t1 1087SET f_int1 = NULL , f_int2 = -@max_row, 1088f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 1089f_charbig = '#NULL#'; 1090# check null success: 1 1091 1092# check null-1 success: 1 1093UPDATE t1 SET f_int1 = -@max_row 1094WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1095AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1096 1097# check null-2 success: 1 1098UPDATE t1 SET f_int1 = NULL 1099WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1100AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1101 1102# check null-3 success: 1 1103DELETE FROM t1 1104WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1105AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1106 1107# check null-4 success: 1 1108DELETE FROM t1 1109WHERE f_int1 = 0 AND f_int2 = 0 1110AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 1111AND f_charbig = '#NULL#'; 1112SET AUTOCOMMIT= 0; 1113INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1114SELECT f_int1, f_int1, '', '', 'was inserted' 1115FROM t0_template source_tab 1116WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1117 1118# check transactions-1 success: 1 1119COMMIT WORK; 1120 1121# check transactions-2 success: 1 1122ROLLBACK WORK; 1123 1124# check transactions-3 success: 1 1125DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1126COMMIT WORK; 1127ROLLBACK WORK; 1128 1129# check transactions-4 success: 1 1130INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1131SELECT f_int1, f_int1, '', '', 'was inserted' 1132FROM t0_template source_tab 1133WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1134 1135# check transactions-5 success: 1 1136ROLLBACK WORK; 1137 1138# check transactions-6 success: 1 1139# INFO: Storage engine used for t1 seems to be transactional. 1140COMMIT; 1141 1142# check transactions-7 success: 1 1143DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1144COMMIT WORK; 1145SET @@session.sql_mode = 'traditional'; 1146Warnings: 1147Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 1148SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 1149INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1150SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 1151'', '', 'was inserted' FROM t0_template 1152WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1153ERROR 22012: Division by 0 1154COMMIT; 1155 1156# check transactions-8 success: 1 1157# INFO: Storage engine used for t1 seems to be able to revert 1158# changes made by the failing statement. 1159SET @@session.sql_mode = ''; 1160Warnings: 1161Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 1162SET AUTOCOMMIT= 1; 1163DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1164COMMIT WORK; 1165UPDATE t1 SET f_charbig = REPEAT('b', 1000); 1166 1167# check special-1 success: 1 1168UPDATE t1 SET f_charbig = ''; 1169 1170# check special-2 success: 1 1171UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 1172INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1173SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 1174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1175INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1176SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1177'just inserted' FROM t0_template 1178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1179CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 1180BEGIN 1181UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1182f_charbig = 'updated by trigger' 1183 WHERE f_int1 = new.f_int1; 1184END| 1185INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1186SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1188 1189# check trigger-1 success: 1 1190DROP TRIGGER trg_1; 1191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1192f_int2 = CAST(f_char1 AS SIGNED INT), 1193f_charbig = 'just inserted' 1194 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1195DELETE FROM t0_aux 1196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1199'just inserted' FROM t0_template 1200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1201CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 1202BEGIN 1203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1204f_charbig = 'updated by trigger' 1205 WHERE f_int1 = new.f_int1; 1206END| 1207INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1208SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1209WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1210 1211# check trigger-2 success: 1 1212DROP TRIGGER trg_1; 1213UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1214f_int2 = CAST(f_char1 AS SIGNED INT), 1215f_charbig = 'just inserted' 1216 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1217DELETE FROM t0_aux 1218WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1219INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1220SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1221'just inserted' FROM t0_template 1222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1223CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1224BEGIN 1225UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1226f_charbig = 'updated by trigger' 1227 WHERE f_int1 = new.f_int1; 1228END| 1229UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1230WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1231 1232# check trigger-3 success: 1 1233DROP TRIGGER trg_1; 1234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1235f_int2 = CAST(f_char1 AS SIGNED INT), 1236f_charbig = 'just inserted' 1237 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1238DELETE FROM t0_aux 1239WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1240INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1241SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1242'just inserted' FROM t0_template 1243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1244CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1245BEGIN 1246UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1247f_charbig = 'updated by trigger' 1248 WHERE f_int1 = - old.f_int1; 1249END| 1250UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1251WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1252 1253# check trigger-4 success: 1 1254DROP TRIGGER trg_1; 1255UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1256f_int2 = CAST(f_char1 AS SIGNED INT), 1257f_charbig = 'just inserted' 1258 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1259DELETE FROM t0_aux 1260WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1261INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1262SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1263'just inserted' FROM t0_template 1264WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1265CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1266BEGIN 1267UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1268f_charbig = 'updated by trigger' 1269 WHERE f_int1 = new.f_int1; 1270END| 1271UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1272WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1273 1274# check trigger-5 success: 1 1275DROP TRIGGER trg_1; 1276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1277f_int2 = CAST(f_char1 AS SIGNED INT), 1278f_charbig = 'just inserted' 1279 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1280DELETE FROM t0_aux 1281WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1282INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1283SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1284'just inserted' FROM t0_template 1285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1286CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1287BEGIN 1288UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1289f_charbig = 'updated by trigger' 1290 WHERE f_int1 = - old.f_int1; 1291END| 1292UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1293WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1294 1295# check trigger-6 success: 1 1296DROP TRIGGER trg_1; 1297UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1298f_int2 = CAST(f_char1 AS SIGNED INT), 1299f_charbig = 'just inserted' 1300 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1301DELETE FROM t0_aux 1302WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1303INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1304SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1305'just inserted' FROM t0_template 1306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1307CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 1308BEGIN 1309UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1310f_charbig = 'updated by trigger' 1311 WHERE f_int1 = - old.f_int1; 1312END| 1313DELETE FROM t0_aux 1314WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1315 1316# check trigger-7 success: 1 1317DROP TRIGGER trg_1; 1318UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1319f_int2 = CAST(f_char1 AS SIGNED INT), 1320f_charbig = 'just inserted' 1321 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1322DELETE FROM t0_aux 1323WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1324INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1325SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1326'just inserted' FROM t0_template 1327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1328CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 1329BEGIN 1330UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1331f_charbig = 'updated by trigger' 1332 WHERE f_int1 = - old.f_int1; 1333END| 1334DELETE FROM t0_aux 1335WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1336 1337# check trigger-8 success: 1 1338DROP TRIGGER trg_1; 1339UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1340f_int2 = CAST(f_char1 AS SIGNED INT), 1341f_charbig = 'just inserted' 1342 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1343DELETE FROM t0_aux 1344WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1345DELETE FROM t1 1346WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1347CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1348BEGIN 1349SET new.f_int1 = old.f_int1 + @max_row, 1350new.f_int2 = old.f_int2 - @max_row, 1351new.f_charbig = '####updated per update trigger####'; 1352END| 1353UPDATE t1 1354SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1355f_charbig = '####updated per update statement itself####'; 1356 1357# check trigger-9 success: 1 1358DROP TRIGGER trg_2; 1359UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1360f_int2 = CAST(f_char1 AS SIGNED INT), 1361f_charbig = CONCAT('===',f_char1,'==='); 1362CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1363BEGIN 1364SET new.f_int1 = new.f_int1 + @max_row, 1365new.f_int2 = new.f_int2 - @max_row, 1366new.f_charbig = '####updated per update trigger####'; 1367END| 1368UPDATE t1 1369SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1370f_charbig = '####updated per update statement itself####'; 1371 1372# check trigger-10 success: 1 1373DROP TRIGGER trg_2; 1374UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1375f_int2 = CAST(f_char1 AS SIGNED INT), 1376f_charbig = CONCAT('===',f_char1,'==='); 1377CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1378BEGIN 1379SET new.f_int1 = @my_max1 + @counter, 1380new.f_int2 = @my_min2 - @counter, 1381new.f_charbig = '####updated per insert trigger####'; 1382SET @counter = @counter + 1; 1383END| 1384SET @counter = 1; 1385SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1386INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1387SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1388CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1389WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1390ORDER BY f_int1; 1391DROP TRIGGER trg_3; 1392 1393# check trigger-11 success: 1 1394DELETE FROM t1 1395WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1396AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1397AND f_charbig = '####updated per insert trigger####'; 1398CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1399BEGIN 1400SET new.f_int1 = @my_max1 + @counter, 1401new.f_int2 = @my_min2 - @counter, 1402new.f_charbig = '####updated per insert trigger####'; 1403SET @counter = @counter + 1; 1404END| 1405SET @counter = 1; 1406SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1407INSERT INTO t1 (f_char1, f_char2, f_charbig) 1408SELECT CAST(f_int1 AS CHAR), 1409CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1411ORDER BY f_int1; 1412DROP TRIGGER trg_3; 1413 1414# check trigger-12 success: 1 1415DELETE FROM t1 1416WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1417AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1418AND f_charbig = '####updated per insert trigger####'; 1419ANALYZE TABLE t1; 1420Table Op Msg_type Msg_text 1421test.t1 analyze status OK 1422CHECK TABLE t1 EXTENDED; 1423Table Op Msg_type Msg_text 1424test.t1 check status OK 1425CHECKSUM TABLE t1 EXTENDED; 1426Table Checksum 1427test.t1 <some_value> 1428OPTIMIZE TABLE t1; 1429Table Op Msg_type Msg_text 1430test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 1431test.t1 optimize status OK 1432# check layout success: 1 1433REPAIR TABLE t1 EXTENDED; 1434Table Op Msg_type Msg_text 1435test.t1 repair status OK 1436# check layout success: 1 1437TRUNCATE t1; 1438 1439# check TRUNCATE success: 1 1440# check layout success: 1 1441# End usability test (inc/partition_check.inc) 1442DROP TABLE t1; 1443CREATE TABLE t1 ( 1444f_int1 INTEGER, 1445f_int2 INTEGER, 1446f_char1 CHAR(20), 1447f_char2 CHAR(20), 1448f_charbig VARCHAR(1000) 1449 1450) 1451PARTITION BY RANGE((f_int1 + f_int2) DIV 2) 1452(PARTITION parta VALUES LESS THAN (0), 1453PARTITION partb VALUES LESS THAN (5), 1454PARTITION partc VALUES LESS THAN (10), 1455PARTITION partd VALUES LESS THAN (10 + 5), 1456PARTITION parte VALUES LESS THAN (20), 1457PARTITION partf VALUES LESS THAN (2147483646)); 1458INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1459SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1460WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 1461ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 1462INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1463SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1464WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 1465# Start usability test (inc/partition_check.inc) 1466create_command 1467SHOW CREATE TABLE t1; 1468Table Create Table 1469t1 CREATE TABLE `t1` ( 1470 `f_int1` bigint(20) DEFAULT NULL, 1471 `f_int2` bigint(20) DEFAULT NULL, 1472 `f_char1` char(20) DEFAULT NULL, 1473 `f_char2` char(20) DEFAULT NULL, 1474 `f_charbig` varchar(1000) DEFAULT NULL 1475) ENGINE=InnoDB DEFAULT CHARSET=latin1 1476/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) 1477(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 1478 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 1479 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 1480 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, 1481 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, 1482 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 1483 1484# check prerequisites-1 success: 1 1485# check COUNT(*) success: 1 1486# check MIN/MAX(f_int1) success: 1 1487# check MIN/MAX(f_int2) success: 1 1488INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1489SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1490CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 1491WHERE f_int1 IN (2,3); 1492# check prerequisites-3 success: 1 1493DELETE FROM t1 WHERE f_charbig = 'delete me'; 1494# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 1495# check read via f_int1 success: 1 1496# check read via f_int2 success: 1 1497 1498# check multiple-1 success: 1 1499DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 1500 1501# check multiple-2 success: 1 1502INSERT INTO t1 SELECT * FROM t0_template 1503WHERE MOD(f_int1,3) = 0; 1504 1505# check multiple-3 success: 1 1506UPDATE t1 SET f_int1 = f_int1 + @max_row 1507WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 1508AND @max_row_div2 + @max_row_div4; 1509 1510# check multiple-4 success: 1 1511DELETE FROM t1 1512WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 1513AND @max_row_div2 + @max_row_div4 + @max_row; 1514 1515# check multiple-5 success: 1 1516SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 1517INSERT INTO t1 1518SET f_int1 = @cur_value , f_int2 = @cur_value, 1519f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1520f_charbig = '#SINGLE#'; 1521 1522# check single-1 success: 1 1523SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 1524INSERT INTO t1 1525SET f_int1 = @cur_value , f_int2 = @cur_value, 1526f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1527f_charbig = '#SINGLE#'; 1528 1529# check single-2 success: 1 1530SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 1531SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 1532UPDATE t1 SET f_int1 = @cur_value2 1533WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 1534 1535# check single-3 success: 1 1536SET @cur_value1= -1; 1537SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 1538UPDATE t1 SET f_int1 = @cur_value1 1539WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 1540 1541# check single-4 success: 1 1542SELECT MAX(f_int1) INTO @cur_value FROM t1; 1543DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 1544 1545# check single-5 success: 1 1546DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 1547 1548# check single-6 success: 1 1549INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 1550ERROR HY000: Table has no partition for value 2147483647 1551DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 1552INSERT t1 SET f_int1 = 0 , f_int2 = 0, 1553f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 1554f_charbig = '#NULL#'; 1555INSERT INTO t1 1556SET f_int1 = NULL , f_int2 = -@max_row, 1557f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 1558f_charbig = '#NULL#'; 1559# check null success: 1 1560 1561# check null-1 success: 1 1562UPDATE t1 SET f_int1 = -@max_row 1563WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1564AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1565 1566# check null-2 success: 1 1567UPDATE t1 SET f_int1 = NULL 1568WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1569AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1570 1571# check null-3 success: 1 1572DELETE FROM t1 1573WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 1574AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 1575 1576# check null-4 success: 1 1577DELETE FROM t1 1578WHERE f_int1 = 0 AND f_int2 = 0 1579AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 1580AND f_charbig = '#NULL#'; 1581SET AUTOCOMMIT= 0; 1582INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1583SELECT f_int1, f_int1, '', '', 'was inserted' 1584FROM t0_template source_tab 1585WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1586 1587# check transactions-1 success: 1 1588COMMIT WORK; 1589 1590# check transactions-2 success: 1 1591ROLLBACK WORK; 1592 1593# check transactions-3 success: 1 1594DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1595COMMIT WORK; 1596ROLLBACK WORK; 1597 1598# check transactions-4 success: 1 1599INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1600SELECT f_int1, f_int1, '', '', 'was inserted' 1601FROM t0_template source_tab 1602WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1603 1604# check transactions-5 success: 1 1605ROLLBACK WORK; 1606 1607# check transactions-6 success: 1 1608# INFO: Storage engine used for t1 seems to be transactional. 1609COMMIT; 1610 1611# check transactions-7 success: 1 1612DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1613COMMIT WORK; 1614SET @@session.sql_mode = 'traditional'; 1615Warnings: 1616Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 1617SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 1618INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1619SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 1620'', '', 'was inserted' FROM t0_template 1621WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 1622ERROR 22012: Division by 0 1623COMMIT; 1624 1625# check transactions-8 success: 1 1626# INFO: Storage engine used for t1 seems to be able to revert 1627# changes made by the failing statement. 1628SET @@session.sql_mode = ''; 1629Warnings: 1630Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 1631SET AUTOCOMMIT= 1; 1632DELETE FROM t1 WHERE f_charbig = 'was inserted'; 1633COMMIT WORK; 1634UPDATE t1 SET f_charbig = REPEAT('b', 1000); 1635 1636# check special-1 success: 1 1637UPDATE t1 SET f_charbig = ''; 1638 1639# check special-2 success: 1 1640UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 1641INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1642SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 1643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1646'just inserted' FROM t0_template 1647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1648CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 1649BEGIN 1650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1651f_charbig = 'updated by trigger' 1652 WHERE f_int1 = new.f_int1; 1653END| 1654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1655SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1657 1658# check trigger-1 success: 1 1659DROP TRIGGER trg_1; 1660UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1661f_int2 = CAST(f_char1 AS SIGNED INT), 1662f_charbig = 'just inserted' 1663 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1664DELETE FROM t0_aux 1665WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1667SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1668'just inserted' FROM t0_template 1669WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1670CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 1671BEGIN 1672UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1673f_charbig = 'updated by trigger' 1674 WHERE f_int1 = new.f_int1; 1675END| 1676INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1677SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 1678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1679 1680# check trigger-2 success: 1 1681DROP TRIGGER trg_1; 1682UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1683f_int2 = CAST(f_char1 AS SIGNED INT), 1684f_charbig = 'just inserted' 1685 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1686DELETE FROM t0_aux 1687WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1688INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1689SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1690'just inserted' FROM t0_template 1691WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1692CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1693BEGIN 1694UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1695f_charbig = 'updated by trigger' 1696 WHERE f_int1 = new.f_int1; 1697END| 1698UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1699WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1700 1701# check trigger-3 success: 1 1702DROP TRIGGER trg_1; 1703UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1704f_int2 = CAST(f_char1 AS SIGNED INT), 1705f_charbig = 'just inserted' 1706 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1707DELETE FROM t0_aux 1708WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1709INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1710SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1711'just inserted' FROM t0_template 1712WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1713CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 1714BEGIN 1715UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1716f_charbig = 'updated by trigger' 1717 WHERE f_int1 = - old.f_int1; 1718END| 1719UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1720WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1721 1722# check trigger-4 success: 1 1723DROP TRIGGER trg_1; 1724UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1725f_int2 = CAST(f_char1 AS SIGNED INT), 1726f_charbig = 'just inserted' 1727 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1728DELETE FROM t0_aux 1729WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1730INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1731SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1732'just inserted' FROM t0_template 1733WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1734CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1735BEGIN 1736UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1737f_charbig = 'updated by trigger' 1738 WHERE f_int1 = new.f_int1; 1739END| 1740UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1741WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1742 1743# check trigger-5 success: 1 1744DROP TRIGGER trg_1; 1745UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1746f_int2 = CAST(f_char1 AS SIGNED INT), 1747f_charbig = 'just inserted' 1748 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1749DELETE FROM t0_aux 1750WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1751INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1752SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1753'just inserted' FROM t0_template 1754WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1755CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 1756BEGIN 1757UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1758f_charbig = 'updated by trigger' 1759 WHERE f_int1 = - old.f_int1; 1760END| 1761UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 1762WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1763 1764# check trigger-6 success: 1 1765DROP TRIGGER trg_1; 1766UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1767f_int2 = CAST(f_char1 AS SIGNED INT), 1768f_charbig = 'just inserted' 1769 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1770DELETE FROM t0_aux 1771WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1772INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1773SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1774'just inserted' FROM t0_template 1775WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1776CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 1777BEGIN 1778UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1779f_charbig = 'updated by trigger' 1780 WHERE f_int1 = - old.f_int1; 1781END| 1782DELETE FROM t0_aux 1783WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1784 1785# check trigger-7 success: 1 1786DROP TRIGGER trg_1; 1787UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1788f_int2 = CAST(f_char1 AS SIGNED INT), 1789f_charbig = 'just inserted' 1790 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1791DELETE FROM t0_aux 1792WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1793INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 1794SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 1795'just inserted' FROM t0_template 1796WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1797CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 1798BEGIN 1799UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 1800f_charbig = 'updated by trigger' 1801 WHERE f_int1 = - old.f_int1; 1802END| 1803DELETE FROM t0_aux 1804WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 1805 1806# check trigger-8 success: 1 1807DROP TRIGGER trg_1; 1808UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1809f_int2 = CAST(f_char1 AS SIGNED INT), 1810f_charbig = 'just inserted' 1811 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 1812DELETE FROM t0_aux 1813WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1814DELETE FROM t1 1815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 1816CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1817BEGIN 1818SET new.f_int1 = old.f_int1 + @max_row, 1819new.f_int2 = old.f_int2 - @max_row, 1820new.f_charbig = '####updated per update trigger####'; 1821END| 1822UPDATE t1 1823SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1824f_charbig = '####updated per update statement itself####'; 1825 1826# check trigger-9 success: 1 1827DROP TRIGGER trg_2; 1828UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1829f_int2 = CAST(f_char1 AS SIGNED INT), 1830f_charbig = CONCAT('===',f_char1,'==='); 1831CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 1832BEGIN 1833SET new.f_int1 = new.f_int1 + @max_row, 1834new.f_int2 = new.f_int2 - @max_row, 1835new.f_charbig = '####updated per update trigger####'; 1836END| 1837UPDATE t1 1838SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 1839f_charbig = '####updated per update statement itself####'; 1840 1841# check trigger-10 success: 1 1842DROP TRIGGER trg_2; 1843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 1844f_int2 = CAST(f_char1 AS SIGNED INT), 1845f_charbig = CONCAT('===',f_char1,'==='); 1846CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1847BEGIN 1848SET new.f_int1 = @my_max1 + @counter, 1849new.f_int2 = @my_min2 - @counter, 1850new.f_charbig = '####updated per insert trigger####'; 1851SET @counter = @counter + 1; 1852END| 1853SET @counter = 1; 1854SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1855INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1856SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1857CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1858WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1859ORDER BY f_int1; 1860DROP TRIGGER trg_3; 1861 1862# check trigger-11 success: 1 1863DELETE FROM t1 1864WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1865AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1866AND f_charbig = '####updated per insert trigger####'; 1867CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 1868BEGIN 1869SET new.f_int1 = @my_max1 + @counter, 1870new.f_int2 = @my_min2 - @counter, 1871new.f_charbig = '####updated per insert trigger####'; 1872SET @counter = @counter + 1; 1873END| 1874SET @counter = 1; 1875SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 1876INSERT INTO t1 (f_char1, f_char2, f_charbig) 1877SELECT CAST(f_int1 AS CHAR), 1878CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 1879WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 1880ORDER BY f_int1; 1881DROP TRIGGER trg_3; 1882 1883# check trigger-12 success: 1 1884DELETE FROM t1 1885WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 1886AND f_int2 <> CAST(f_char1 AS SIGNED INT) 1887AND f_charbig = '####updated per insert trigger####'; 1888ANALYZE TABLE t1; 1889Table Op Msg_type Msg_text 1890test.t1 analyze status OK 1891CHECK TABLE t1 EXTENDED; 1892Table Op Msg_type Msg_text 1893test.t1 check status OK 1894CHECKSUM TABLE t1 EXTENDED; 1895Table Checksum 1896test.t1 <some_value> 1897OPTIMIZE TABLE t1; 1898Table Op Msg_type Msg_text 1899test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 1900test.t1 optimize status OK 1901# check layout success: 1 1902REPAIR TABLE t1 EXTENDED; 1903Table Op Msg_type Msg_text 1904test.t1 repair status OK 1905# check layout success: 1 1906TRUNCATE t1; 1907 1908# check TRUNCATE success: 1 1909# check layout success: 1 1910# End usability test (inc/partition_check.inc) 1911DROP TABLE t1; 1912CREATE TABLE t1 ( 1913f_int1 INTEGER, 1914f_int2 INTEGER, 1915f_char1 CHAR(20), 1916f_char2 CHAR(20), 1917f_charbig VARCHAR(1000) 1918 1919) 1920PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 1921(PARTITION parta VALUES LESS THAN (0), 1922PARTITION partb VALUES LESS THAN (5), 1923PARTITION partc VALUES LESS THAN (10), 1924PARTITION partd VALUES LESS THAN (2147483646)); 1925INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1926SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1927WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 1928ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 1929INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 1930SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 1931WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 1932# Start usability test (inc/partition_check.inc) 1933create_command 1934SHOW CREATE TABLE t1; 1935Table Create Table 1936t1 CREATE TABLE `t1` ( 1937 `f_int1` bigint(20) DEFAULT NULL, 1938 `f_int2` bigint(20) DEFAULT NULL, 1939 `f_char1` char(20) DEFAULT NULL, 1940 `f_char2` char(20) DEFAULT NULL, 1941 `f_charbig` varchar(1000) DEFAULT NULL 1942) ENGINE=InnoDB DEFAULT CHARSET=latin1 1943/*!50100 PARTITION BY RANGE (f_int1) 1944SUBPARTITION BY HASH (f_int2) 1945SUBPARTITIONS 2 1946(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 1947 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 1948 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 1949 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 1950 1951# check prerequisites-1 success: 1 1952# check COUNT(*) success: 1 1953# check MIN/MAX(f_int1) success: 1 1954# check MIN/MAX(f_int2) success: 1 1955INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 1956SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 1957CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 1958WHERE f_int1 IN (2,3); 1959# check prerequisites-3 success: 1 1960DELETE FROM t1 WHERE f_charbig = 'delete me'; 1961# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 1962# check read via f_int1 success: 1 1963# check read via f_int2 success: 1 1964 1965# check multiple-1 success: 1 1966DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 1967 1968# check multiple-2 success: 1 1969INSERT INTO t1 SELECT * FROM t0_template 1970WHERE MOD(f_int1,3) = 0; 1971 1972# check multiple-3 success: 1 1973UPDATE t1 SET f_int1 = f_int1 + @max_row 1974WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 1975AND @max_row_div2 + @max_row_div4; 1976 1977# check multiple-4 success: 1 1978DELETE FROM t1 1979WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 1980AND @max_row_div2 + @max_row_div4 + @max_row; 1981 1982# check multiple-5 success: 1 1983SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 1984INSERT INTO t1 1985SET f_int1 = @cur_value , f_int2 = @cur_value, 1986f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1987f_charbig = '#SINGLE#'; 1988 1989# check single-1 success: 1 1990SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 1991INSERT INTO t1 1992SET f_int1 = @cur_value , f_int2 = @cur_value, 1993f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 1994f_charbig = '#SINGLE#'; 1995 1996# check single-2 success: 1 1997SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 1998SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 1999UPDATE t1 SET f_int1 = @cur_value2 2000WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 2001 2002# check single-3 success: 1 2003SET @cur_value1= -1; 2004SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 2005UPDATE t1 SET f_int1 = @cur_value1 2006WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 2007 2008# check single-4 success: 1 2009SELECT MAX(f_int1) INTO @cur_value FROM t1; 2010DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 2011 2012# check single-5 success: 1 2013DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 2014 2015# check single-6 success: 1 2016INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 2017ERROR HY000: Table has no partition for value 2147483647 2018DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 2019INSERT t1 SET f_int1 = 0 , f_int2 = 0, 2020f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 2021f_charbig = '#NULL#'; 2022INSERT INTO t1 2023SET f_int1 = NULL , f_int2 = -@max_row, 2024f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 2025f_charbig = '#NULL#'; 2026# check null success: 1 2027 2028# check null-1 success: 1 2029UPDATE t1 SET f_int1 = -@max_row 2030WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2031AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2032 2033# check null-2 success: 1 2034UPDATE t1 SET f_int1 = NULL 2035WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2036AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2037 2038# check null-3 success: 1 2039DELETE FROM t1 2040WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2041AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2042 2043# check null-4 success: 1 2044DELETE FROM t1 2045WHERE f_int1 = 0 AND f_int2 = 0 2046AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 2047AND f_charbig = '#NULL#'; 2048SET AUTOCOMMIT= 0; 2049INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2050SELECT f_int1, f_int1, '', '', 'was inserted' 2051FROM t0_template source_tab 2052WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2053 2054# check transactions-1 success: 1 2055COMMIT WORK; 2056 2057# check transactions-2 success: 1 2058ROLLBACK WORK; 2059 2060# check transactions-3 success: 1 2061DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2062COMMIT WORK; 2063ROLLBACK WORK; 2064 2065# check transactions-4 success: 1 2066INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2067SELECT f_int1, f_int1, '', '', 'was inserted' 2068FROM t0_template source_tab 2069WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2070 2071# check transactions-5 success: 1 2072ROLLBACK WORK; 2073 2074# check transactions-6 success: 1 2075# INFO: Storage engine used for t1 seems to be transactional. 2076COMMIT; 2077 2078# check transactions-7 success: 1 2079DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2080COMMIT WORK; 2081SET @@session.sql_mode = 'traditional'; 2082Warnings: 2083Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 2084SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 2085INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2086SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 2087'', '', 'was inserted' FROM t0_template 2088WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2089ERROR 22012: Division by 0 2090COMMIT; 2091 2092# check transactions-8 success: 1 2093# INFO: Storage engine used for t1 seems to be able to revert 2094# changes made by the failing statement. 2095SET @@session.sql_mode = ''; 2096Warnings: 2097Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 2098SET AUTOCOMMIT= 1; 2099DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2100COMMIT WORK; 2101UPDATE t1 SET f_charbig = REPEAT('b', 1000); 2102 2103# check special-1 success: 1 2104UPDATE t1 SET f_charbig = ''; 2105 2106# check special-2 success: 1 2107UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 2108INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2109SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 2110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2111INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2112SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2113'just inserted' FROM t0_template 2114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2115CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 2116BEGIN 2117UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2118f_charbig = 'updated by trigger' 2119 WHERE f_int1 = new.f_int1; 2120END| 2121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2122SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2123WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2124 2125# check trigger-1 success: 1 2126DROP TRIGGER trg_1; 2127UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2128f_int2 = CAST(f_char1 AS SIGNED INT), 2129f_charbig = 'just inserted' 2130 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2131DELETE FROM t0_aux 2132WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2133INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2134SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2135'just inserted' FROM t0_template 2136WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2137CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 2138BEGIN 2139UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2140f_charbig = 'updated by trigger' 2141 WHERE f_int1 = new.f_int1; 2142END| 2143INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2144SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2146 2147# check trigger-2 success: 1 2148DROP TRIGGER trg_1; 2149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2150f_int2 = CAST(f_char1 AS SIGNED INT), 2151f_charbig = 'just inserted' 2152 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2153DELETE FROM t0_aux 2154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2157'just inserted' FROM t0_template 2158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2159CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2160BEGIN 2161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2162f_charbig = 'updated by trigger' 2163 WHERE f_int1 = new.f_int1; 2164END| 2165UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2167 2168# check trigger-3 success: 1 2169DROP TRIGGER trg_1; 2170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2171f_int2 = CAST(f_char1 AS SIGNED INT), 2172f_charbig = 'just inserted' 2173 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2174DELETE FROM t0_aux 2175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2178'just inserted' FROM t0_template 2179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2180CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2181BEGIN 2182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2183f_charbig = 'updated by trigger' 2184 WHERE f_int1 = - old.f_int1; 2185END| 2186UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2188 2189# check trigger-4 success: 1 2190DROP TRIGGER trg_1; 2191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2192f_int2 = CAST(f_char1 AS SIGNED INT), 2193f_charbig = 'just inserted' 2194 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2195DELETE FROM t0_aux 2196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2199'just inserted' FROM t0_template 2200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2201CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2202BEGIN 2203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2204f_charbig = 'updated by trigger' 2205 WHERE f_int1 = new.f_int1; 2206END| 2207UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2208WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2209 2210# check trigger-5 success: 1 2211DROP TRIGGER trg_1; 2212UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2213f_int2 = CAST(f_char1 AS SIGNED INT), 2214f_charbig = 'just inserted' 2215 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2216DELETE FROM t0_aux 2217WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2218INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2219SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2220'just inserted' FROM t0_template 2221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2222CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2223BEGIN 2224UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2225f_charbig = 'updated by trigger' 2226 WHERE f_int1 = - old.f_int1; 2227END| 2228UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2229WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2230 2231# check trigger-6 success: 1 2232DROP TRIGGER trg_1; 2233UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2234f_int2 = CAST(f_char1 AS SIGNED INT), 2235f_charbig = 'just inserted' 2236 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2237DELETE FROM t0_aux 2238WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2239INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2240SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2241'just inserted' FROM t0_template 2242WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2243CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 2244BEGIN 2245UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2246f_charbig = 'updated by trigger' 2247 WHERE f_int1 = - old.f_int1; 2248END| 2249DELETE FROM t0_aux 2250WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2251 2252# check trigger-7 success: 1 2253DROP TRIGGER trg_1; 2254UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2255f_int2 = CAST(f_char1 AS SIGNED INT), 2256f_charbig = 'just inserted' 2257 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2258DELETE FROM t0_aux 2259WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2260INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2261SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2262'just inserted' FROM t0_template 2263WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2264CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 2265BEGIN 2266UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2267f_charbig = 'updated by trigger' 2268 WHERE f_int1 = - old.f_int1; 2269END| 2270DELETE FROM t0_aux 2271WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2272 2273# check trigger-8 success: 1 2274DROP TRIGGER trg_1; 2275UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2276f_int2 = CAST(f_char1 AS SIGNED INT), 2277f_charbig = 'just inserted' 2278 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2279DELETE FROM t0_aux 2280WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2281DELETE FROM t1 2282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2283CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2284BEGIN 2285SET new.f_int1 = old.f_int1 + @max_row, 2286new.f_int2 = old.f_int2 - @max_row, 2287new.f_charbig = '####updated per update trigger####'; 2288END| 2289UPDATE t1 2290SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2291f_charbig = '####updated per update statement itself####'; 2292 2293# check trigger-9 success: 1 2294DROP TRIGGER trg_2; 2295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2296f_int2 = CAST(f_char1 AS SIGNED INT), 2297f_charbig = CONCAT('===',f_char1,'==='); 2298CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2299BEGIN 2300SET new.f_int1 = new.f_int1 + @max_row, 2301new.f_int2 = new.f_int2 - @max_row, 2302new.f_charbig = '####updated per update trigger####'; 2303END| 2304UPDATE t1 2305SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2306f_charbig = '####updated per update statement itself####'; 2307 2308# check trigger-10 success: 1 2309DROP TRIGGER trg_2; 2310UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2311f_int2 = CAST(f_char1 AS SIGNED INT), 2312f_charbig = CONCAT('===',f_char1,'==='); 2313CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2314BEGIN 2315SET new.f_int1 = @my_max1 + @counter, 2316new.f_int2 = @my_min2 - @counter, 2317new.f_charbig = '####updated per insert trigger####'; 2318SET @counter = @counter + 1; 2319END| 2320SET @counter = 1; 2321SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2322INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2323SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2324CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2325WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2326ORDER BY f_int1; 2327DROP TRIGGER trg_3; 2328 2329# check trigger-11 success: 1 2330DELETE FROM t1 2331WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2332AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2333AND f_charbig = '####updated per insert trigger####'; 2334CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2335BEGIN 2336SET new.f_int1 = @my_max1 + @counter, 2337new.f_int2 = @my_min2 - @counter, 2338new.f_charbig = '####updated per insert trigger####'; 2339SET @counter = @counter + 1; 2340END| 2341SET @counter = 1; 2342SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2343INSERT INTO t1 (f_char1, f_char2, f_charbig) 2344SELECT CAST(f_int1 AS CHAR), 2345CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2346WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2347ORDER BY f_int1; 2348DROP TRIGGER trg_3; 2349 2350# check trigger-12 success: 1 2351DELETE FROM t1 2352WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2353AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2354AND f_charbig = '####updated per insert trigger####'; 2355ANALYZE TABLE t1; 2356Table Op Msg_type Msg_text 2357test.t1 analyze status OK 2358CHECK TABLE t1 EXTENDED; 2359Table Op Msg_type Msg_text 2360test.t1 check status OK 2361CHECKSUM TABLE t1 EXTENDED; 2362Table Checksum 2363test.t1 <some_value> 2364OPTIMIZE TABLE t1; 2365Table Op Msg_type Msg_text 2366test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 2367test.t1 optimize status OK 2368# check layout success: 1 2369REPAIR TABLE t1 EXTENDED; 2370Table Op Msg_type Msg_text 2371test.t1 repair status OK 2372# check layout success: 1 2373TRUNCATE t1; 2374 2375# check TRUNCATE success: 1 2376# check layout success: 1 2377# End usability test (inc/partition_check.inc) 2378DROP TABLE t1; 2379CREATE TABLE t1 ( 2380f_int1 INTEGER, 2381f_int2 INTEGER, 2382f_char1 CHAR(20), 2383f_char2 CHAR(20), 2384f_charbig VARCHAR(1000) 2385 2386) 2387PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) 2388(PARTITION part1 VALUES LESS THAN (0) 2389(SUBPARTITION subpart11, SUBPARTITION subpart12), 2390PARTITION part2 VALUES LESS THAN (5) 2391(SUBPARTITION subpart21, SUBPARTITION subpart22), 2392PARTITION part3 VALUES LESS THAN (10) 2393(SUBPARTITION subpart31, SUBPARTITION subpart32), 2394PARTITION part4 VALUES LESS THAN (2147483646) 2395(SUBPARTITION subpart41, SUBPARTITION subpart42)); 2396INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2397SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2398WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 2399ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 2400INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2401SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2402WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 2403# Start usability test (inc/partition_check.inc) 2404create_command 2405SHOW CREATE TABLE t1; 2406Table Create Table 2407t1 CREATE TABLE `t1` ( 2408 `f_int1` bigint(20) DEFAULT NULL, 2409 `f_int2` bigint(20) DEFAULT NULL, 2410 `f_char1` char(20) DEFAULT NULL, 2411 `f_char2` char(20) DEFAULT NULL, 2412 `f_charbig` varchar(1000) DEFAULT NULL 2413) ENGINE=InnoDB DEFAULT CHARSET=latin1 2414/*!50100 PARTITION BY RANGE (f_int1) 2415SUBPARTITION BY KEY (f_int2) 2416(PARTITION part1 VALUES LESS THAN (0) 2417 (SUBPARTITION subpart11 ENGINE = InnoDB, 2418 SUBPARTITION subpart12 ENGINE = InnoDB), 2419 PARTITION part2 VALUES LESS THAN (5) 2420 (SUBPARTITION subpart21 ENGINE = InnoDB, 2421 SUBPARTITION subpart22 ENGINE = InnoDB), 2422 PARTITION part3 VALUES LESS THAN (10) 2423 (SUBPARTITION subpart31 ENGINE = InnoDB, 2424 SUBPARTITION subpart32 ENGINE = InnoDB), 2425 PARTITION part4 VALUES LESS THAN (2147483646) 2426 (SUBPARTITION subpart41 ENGINE = InnoDB, 2427 SUBPARTITION subpart42 ENGINE = InnoDB)) */ 2428 2429# check prerequisites-1 success: 1 2430# check COUNT(*) success: 1 2431# check MIN/MAX(f_int1) success: 1 2432# check MIN/MAX(f_int2) success: 1 2433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2434SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2435CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 2436WHERE f_int1 IN (2,3); 2437# check prerequisites-3 success: 1 2438DELETE FROM t1 WHERE f_charbig = 'delete me'; 2439# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 2440# check read via f_int1 success: 1 2441# check read via f_int2 success: 1 2442 2443# check multiple-1 success: 1 2444DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 2445 2446# check multiple-2 success: 1 2447INSERT INTO t1 SELECT * FROM t0_template 2448WHERE MOD(f_int1,3) = 0; 2449 2450# check multiple-3 success: 1 2451UPDATE t1 SET f_int1 = f_int1 + @max_row 2452WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 2453AND @max_row_div2 + @max_row_div4; 2454 2455# check multiple-4 success: 1 2456DELETE FROM t1 2457WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 2458AND @max_row_div2 + @max_row_div4 + @max_row; 2459 2460# check multiple-5 success: 1 2461SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 2462INSERT INTO t1 2463SET f_int1 = @cur_value , f_int2 = @cur_value, 2464f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2465f_charbig = '#SINGLE#'; 2466 2467# check single-1 success: 1 2468SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 2469INSERT INTO t1 2470SET f_int1 = @cur_value , f_int2 = @cur_value, 2471f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2472f_charbig = '#SINGLE#'; 2473 2474# check single-2 success: 1 2475SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 2476SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 2477UPDATE t1 SET f_int1 = @cur_value2 2478WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 2479 2480# check single-3 success: 1 2481SET @cur_value1= -1; 2482SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 2483UPDATE t1 SET f_int1 = @cur_value1 2484WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 2485 2486# check single-4 success: 1 2487SELECT MAX(f_int1) INTO @cur_value FROM t1; 2488DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 2489 2490# check single-5 success: 1 2491DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 2492 2493# check single-6 success: 1 2494INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 2495ERROR HY000: Table has no partition for value 2147483647 2496DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 2497INSERT t1 SET f_int1 = 0 , f_int2 = 0, 2498f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 2499f_charbig = '#NULL#'; 2500INSERT INTO t1 2501SET f_int1 = NULL , f_int2 = -@max_row, 2502f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 2503f_charbig = '#NULL#'; 2504# check null success: 1 2505 2506# check null-1 success: 1 2507UPDATE t1 SET f_int1 = -@max_row 2508WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2509AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2510 2511# check null-2 success: 1 2512UPDATE t1 SET f_int1 = NULL 2513WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2514AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2515 2516# check null-3 success: 1 2517DELETE FROM t1 2518WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2519AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2520 2521# check null-4 success: 1 2522DELETE FROM t1 2523WHERE f_int1 = 0 AND f_int2 = 0 2524AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 2525AND f_charbig = '#NULL#'; 2526SET AUTOCOMMIT= 0; 2527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2528SELECT f_int1, f_int1, '', '', 'was inserted' 2529FROM t0_template source_tab 2530WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2531 2532# check transactions-1 success: 1 2533COMMIT WORK; 2534 2535# check transactions-2 success: 1 2536ROLLBACK WORK; 2537 2538# check transactions-3 success: 1 2539DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2540COMMIT WORK; 2541ROLLBACK WORK; 2542 2543# check transactions-4 success: 1 2544INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2545SELECT f_int1, f_int1, '', '', 'was inserted' 2546FROM t0_template source_tab 2547WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2548 2549# check transactions-5 success: 1 2550ROLLBACK WORK; 2551 2552# check transactions-6 success: 1 2553# INFO: Storage engine used for t1 seems to be transactional. 2554COMMIT; 2555 2556# check transactions-7 success: 1 2557DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2558COMMIT WORK; 2559SET @@session.sql_mode = 'traditional'; 2560Warnings: 2561Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 2562SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 2563INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2564SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 2565'', '', 'was inserted' FROM t0_template 2566WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 2567ERROR 22012: Division by 0 2568COMMIT; 2569 2570# check transactions-8 success: 1 2571# INFO: Storage engine used for t1 seems to be able to revert 2572# changes made by the failing statement. 2573SET @@session.sql_mode = ''; 2574Warnings: 2575Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 2576SET AUTOCOMMIT= 1; 2577DELETE FROM t1 WHERE f_charbig = 'was inserted'; 2578COMMIT WORK; 2579UPDATE t1 SET f_charbig = REPEAT('b', 1000); 2580 2581# check special-1 success: 1 2582UPDATE t1 SET f_charbig = ''; 2583 2584# check special-2 success: 1 2585UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 2586INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2587SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 2588WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2589INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2590SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2591'just inserted' FROM t0_template 2592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2593CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 2594BEGIN 2595UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2596f_charbig = 'updated by trigger' 2597 WHERE f_int1 = new.f_int1; 2598END| 2599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2600SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2601WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2602 2603# check trigger-1 success: 1 2604DROP TRIGGER trg_1; 2605UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2606f_int2 = CAST(f_char1 AS SIGNED INT), 2607f_charbig = 'just inserted' 2608 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2609DELETE FROM t0_aux 2610WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2611INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2612SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2613'just inserted' FROM t0_template 2614WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2615CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 2616BEGIN 2617UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2618f_charbig = 'updated by trigger' 2619 WHERE f_int1 = new.f_int1; 2620END| 2621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2622SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 2623WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2624 2625# check trigger-2 success: 1 2626DROP TRIGGER trg_1; 2627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2628f_int2 = CAST(f_char1 AS SIGNED INT), 2629f_charbig = 'just inserted' 2630 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2631DELETE FROM t0_aux 2632WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2634SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2635'just inserted' FROM t0_template 2636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2637CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2638BEGIN 2639UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2640f_charbig = 'updated by trigger' 2641 WHERE f_int1 = new.f_int1; 2642END| 2643UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2644WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2645 2646# check trigger-3 success: 1 2647DROP TRIGGER trg_1; 2648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2649f_int2 = CAST(f_char1 AS SIGNED INT), 2650f_charbig = 'just inserted' 2651 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2652DELETE FROM t0_aux 2653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2656'just inserted' FROM t0_template 2657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2658CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 2659BEGIN 2660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2661f_charbig = 'updated by trigger' 2662 WHERE f_int1 = - old.f_int1; 2663END| 2664UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2666 2667# check trigger-4 success: 1 2668DROP TRIGGER trg_1; 2669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2670f_int2 = CAST(f_char1 AS SIGNED INT), 2671f_charbig = 'just inserted' 2672 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2673DELETE FROM t0_aux 2674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2677'just inserted' FROM t0_template 2678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2679CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2680BEGIN 2681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2682f_charbig = 'updated by trigger' 2683 WHERE f_int1 = new.f_int1; 2684END| 2685UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2687 2688# check trigger-5 success: 1 2689DROP TRIGGER trg_1; 2690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2691f_int2 = CAST(f_char1 AS SIGNED INT), 2692f_charbig = 'just inserted' 2693 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2694DELETE FROM t0_aux 2695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2698'just inserted' FROM t0_template 2699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2700CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 2701BEGIN 2702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2703f_charbig = 'updated by trigger' 2704 WHERE f_int1 = - old.f_int1; 2705END| 2706UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 2707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2708 2709# check trigger-6 success: 1 2710DROP TRIGGER trg_1; 2711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2712f_int2 = CAST(f_char1 AS SIGNED INT), 2713f_charbig = 'just inserted' 2714 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2715DELETE FROM t0_aux 2716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2719'just inserted' FROM t0_template 2720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2721CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 2722BEGIN 2723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2724f_charbig = 'updated by trigger' 2725 WHERE f_int1 = - old.f_int1; 2726END| 2727DELETE FROM t0_aux 2728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2729 2730# check trigger-7 success: 1 2731DROP TRIGGER trg_1; 2732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2733f_int2 = CAST(f_char1 AS SIGNED INT), 2734f_charbig = 'just inserted' 2735 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2736DELETE FROM t0_aux 2737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 2739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 2740'just inserted' FROM t0_template 2741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2742CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 2743BEGIN 2744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 2745f_charbig = 'updated by trigger' 2746 WHERE f_int1 = - old.f_int1; 2747END| 2748DELETE FROM t0_aux 2749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 2750 2751# check trigger-8 success: 1 2752DROP TRIGGER trg_1; 2753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2754f_int2 = CAST(f_char1 AS SIGNED INT), 2755f_charbig = 'just inserted' 2756 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 2757DELETE FROM t0_aux 2758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2759DELETE FROM t1 2760WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 2761CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2762BEGIN 2763SET new.f_int1 = old.f_int1 + @max_row, 2764new.f_int2 = old.f_int2 - @max_row, 2765new.f_charbig = '####updated per update trigger####'; 2766END| 2767UPDATE t1 2768SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2769f_charbig = '####updated per update statement itself####'; 2770 2771# check trigger-9 success: 1 2772DROP TRIGGER trg_2; 2773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2774f_int2 = CAST(f_char1 AS SIGNED INT), 2775f_charbig = CONCAT('===',f_char1,'==='); 2776CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 2777BEGIN 2778SET new.f_int1 = new.f_int1 + @max_row, 2779new.f_int2 = new.f_int2 - @max_row, 2780new.f_charbig = '####updated per update trigger####'; 2781END| 2782UPDATE t1 2783SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 2784f_charbig = '####updated per update statement itself####'; 2785 2786# check trigger-10 success: 1 2787DROP TRIGGER trg_2; 2788UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 2789f_int2 = CAST(f_char1 AS SIGNED INT), 2790f_charbig = CONCAT('===',f_char1,'==='); 2791CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2792BEGIN 2793SET new.f_int1 = @my_max1 + @counter, 2794new.f_int2 = @my_min2 - @counter, 2795new.f_charbig = '####updated per insert trigger####'; 2796SET @counter = @counter + 1; 2797END| 2798SET @counter = 1; 2799SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2800INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2801SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2802CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2804ORDER BY f_int1; 2805DROP TRIGGER trg_3; 2806 2807# check trigger-11 success: 1 2808DELETE FROM t1 2809WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2810AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2811AND f_charbig = '####updated per insert trigger####'; 2812CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 2813BEGIN 2814SET new.f_int1 = @my_max1 + @counter, 2815new.f_int2 = @my_min2 - @counter, 2816new.f_charbig = '####updated per insert trigger####'; 2817SET @counter = @counter + 1; 2818END| 2819SET @counter = 1; 2820SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 2821INSERT INTO t1 (f_char1, f_char2, f_charbig) 2822SELECT CAST(f_int1 AS CHAR), 2823CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 2824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 2825ORDER BY f_int1; 2826DROP TRIGGER trg_3; 2827 2828# check trigger-12 success: 1 2829DELETE FROM t1 2830WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 2831AND f_int2 <> CAST(f_char1 AS SIGNED INT) 2832AND f_charbig = '####updated per insert trigger####'; 2833ANALYZE TABLE t1; 2834Table Op Msg_type Msg_text 2835test.t1 analyze status OK 2836CHECK TABLE t1 EXTENDED; 2837Table Op Msg_type Msg_text 2838test.t1 check status OK 2839CHECKSUM TABLE t1 EXTENDED; 2840Table Checksum 2841test.t1 <some_value> 2842OPTIMIZE TABLE t1; 2843Table Op Msg_type Msg_text 2844test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 2845test.t1 optimize status OK 2846# check layout success: 1 2847REPAIR TABLE t1 EXTENDED; 2848Table Op Msg_type Msg_text 2849test.t1 repair status OK 2850# check layout success: 1 2851TRUNCATE t1; 2852 2853# check TRUNCATE success: 1 2854# check layout success: 1 2855# End usability test (inc/partition_check.inc) 2856DROP TABLE t1; 2857CREATE TABLE t1 ( 2858f_int1 INTEGER, 2859f_int2 INTEGER, 2860f_char1 CHAR(20), 2861f_char2 CHAR(20), 2862f_charbig VARCHAR(1000) 2863 2864) 2865PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) 2866(PARTITION part1 VALUES IN (0) 2867(SUBPARTITION sp11, SUBPARTITION sp12), 2868PARTITION part2 VALUES IN (1) 2869(SUBPARTITION sp21, SUBPARTITION sp22), 2870PARTITION part3 VALUES IN (2) 2871(SUBPARTITION sp31, SUBPARTITION sp32), 2872PARTITION part4 VALUES IN (NULL) 2873(SUBPARTITION sp41, SUBPARTITION sp42)); 2874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 2875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 2876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 2877ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 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 @max_row_div2 AND @max_row; 2881# Start usability test (inc/partition_check.inc) 2882create_command 2883SHOW CREATE TABLE t1; 2884Table Create Table 2885t1 CREATE TABLE `t1` ( 2886 `f_int1` bigint(20) DEFAULT NULL, 2887 `f_int2` bigint(20) DEFAULT NULL, 2888 `f_char1` char(20) DEFAULT NULL, 2889 `f_char2` char(20) DEFAULT NULL, 2890 `f_charbig` varchar(1000) DEFAULT NULL 2891) ENGINE=InnoDB DEFAULT CHARSET=latin1 2892/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) 2893SUBPARTITION BY HASH (f_int2 + 1) 2894(PARTITION part1 VALUES IN (0) 2895 (SUBPARTITION sp11 ENGINE = InnoDB, 2896 SUBPARTITION sp12 ENGINE = InnoDB), 2897 PARTITION part2 VALUES IN (1) 2898 (SUBPARTITION sp21 ENGINE = InnoDB, 2899 SUBPARTITION sp22 ENGINE = InnoDB), 2900 PARTITION part3 VALUES IN (2) 2901 (SUBPARTITION sp31 ENGINE = InnoDB, 2902 SUBPARTITION sp32 ENGINE = InnoDB), 2903 PARTITION part4 VALUES IN (NULL) 2904 (SUBPARTITION sp41 ENGINE = InnoDB, 2905 SUBPARTITION sp42 ENGINE = InnoDB)) */ 2906 2907# check prerequisites-1 success: 1 2908# check COUNT(*) success: 1 2909# check MIN/MAX(f_int1) success: 1 2910# check MIN/MAX(f_int2) success: 1 2911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 2912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 2913CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 2914WHERE f_int1 IN (2,3); 2915# check prerequisites-3 success: 1 2916DELETE FROM t1 WHERE f_charbig = 'delete me'; 2917# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 2918# check read via f_int1 success: 1 2919# check read via f_int2 success: 1 2920 2921# check multiple-1 success: 1 2922DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 2923 2924# check multiple-2 success: 1 2925INSERT INTO t1 SELECT * FROM t0_template 2926WHERE MOD(f_int1,3) = 0; 2927 2928# check multiple-3 success: 1 2929UPDATE t1 SET f_int1 = f_int1 + @max_row 2930WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 2931AND @max_row_div2 + @max_row_div4; 2932 2933# check multiple-4 success: 1 2934DELETE FROM t1 2935WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 2936AND @max_row_div2 + @max_row_div4 + @max_row; 2937 2938# check multiple-5 success: 1 2939SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 2940INSERT INTO t1 2941SET f_int1 = @cur_value , f_int2 = @cur_value, 2942f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2943f_charbig = '#SINGLE#'; 2944 2945# check single-1 success: 1 2946SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 2947INSERT INTO t1 2948SET f_int1 = @cur_value , f_int2 = @cur_value, 2949f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 2950f_charbig = '#SINGLE#'; 2951 2952# check single-2 success: 1 2953SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 2954SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 2955UPDATE t1 SET f_int1 = @cur_value2 2956WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 2957 2958# check single-3 success: 1 2959SET @cur_value1= -1; 2960SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 2961UPDATE t1 SET f_int1 = @cur_value1 2962WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 2963 2964# check single-4 success: 1 2965SELECT MAX(f_int1) INTO @cur_value FROM t1; 2966DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 2967 2968# check single-5 success: 1 2969DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 2970 2971# check single-6 success: 1 2972INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 2973 2974# check single-7 success: 1 2975DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 2976DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 2977INSERT t1 SET f_int1 = 0 , f_int2 = 0, 2978f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 2979f_charbig = '#NULL#'; 2980INSERT INTO t1 2981SET f_int1 = NULL , f_int2 = -@max_row, 2982f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 2983f_charbig = '#NULL#'; 2984# check null success: 1 2985 2986# check null-1 success: 1 2987UPDATE t1 SET f_int1 = -@max_row 2988WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2989AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2990 2991# check null-2 success: 1 2992UPDATE t1 SET f_int1 = NULL 2993WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2994AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 2995 2996# check null-3 success: 1 2997DELETE FROM t1 2998WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 2999AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 3000 3001# check null-4 success: 1 3002DELETE FROM t1 3003WHERE f_int1 = 0 AND f_int2 = 0 3004AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 3005AND f_charbig = '#NULL#'; 3006SET AUTOCOMMIT= 0; 3007INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3008SELECT f_int1, f_int1, '', '', 'was inserted' 3009FROM t0_template source_tab 3010WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3011 3012# check transactions-1 success: 1 3013COMMIT WORK; 3014 3015# check transactions-2 success: 1 3016ROLLBACK WORK; 3017 3018# check transactions-3 success: 1 3019DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3020COMMIT WORK; 3021ROLLBACK WORK; 3022 3023# check transactions-4 success: 1 3024INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3025SELECT f_int1, f_int1, '', '', 'was inserted' 3026FROM t0_template source_tab 3027WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3028 3029# check transactions-5 success: 1 3030ROLLBACK WORK; 3031 3032# check transactions-6 success: 1 3033# INFO: Storage engine used for t1 seems to be transactional. 3034COMMIT; 3035 3036# check transactions-7 success: 1 3037DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3038COMMIT WORK; 3039SET @@session.sql_mode = 'traditional'; 3040Warnings: 3041Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 3042SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 3043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3044SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 3045'', '', 'was inserted' FROM t0_template 3046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3047ERROR 22012: Division by 0 3048COMMIT; 3049 3050# check transactions-8 success: 1 3051# INFO: Storage engine used for t1 seems to be able to revert 3052# changes made by the failing statement. 3053SET @@session.sql_mode = ''; 3054Warnings: 3055Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 3056SET AUTOCOMMIT= 1; 3057DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3058COMMIT WORK; 3059UPDATE t1 SET f_charbig = REPEAT('b', 1000); 3060 3061# check special-1 success: 1 3062UPDATE t1 SET f_charbig = ''; 3063 3064# check special-2 success: 1 3065UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 3066INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3067SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 3068WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3069INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3070SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3071'just inserted' FROM t0_template 3072WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3073CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 3074BEGIN 3075UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3076f_charbig = 'updated by trigger' 3077 WHERE f_int1 = new.f_int1; 3078END| 3079INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3080SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3081WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3082 3083# check trigger-1 success: 1 3084DROP TRIGGER trg_1; 3085UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3086f_int2 = CAST(f_char1 AS SIGNED INT), 3087f_charbig = 'just inserted' 3088 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3089DELETE FROM t0_aux 3090WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3091INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3092SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3093'just inserted' FROM t0_template 3094WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3095CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 3096BEGIN 3097UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3098f_charbig = 'updated by trigger' 3099 WHERE f_int1 = new.f_int1; 3100END| 3101INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3102SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3104 3105# check trigger-2 success: 1 3106DROP TRIGGER trg_1; 3107UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3108f_int2 = CAST(f_char1 AS SIGNED INT), 3109f_charbig = 'just inserted' 3110 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3111DELETE FROM t0_aux 3112WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3114SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3115'just inserted' FROM t0_template 3116WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3117CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3118BEGIN 3119UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3120f_charbig = 'updated by trigger' 3121 WHERE f_int1 = new.f_int1; 3122END| 3123UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3124WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3125 3126# check trigger-3 success: 1 3127DROP TRIGGER trg_1; 3128UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3129f_int2 = CAST(f_char1 AS SIGNED INT), 3130f_charbig = 'just inserted' 3131 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3132DELETE FROM t0_aux 3133WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3134INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3135SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3136'just inserted' FROM t0_template 3137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3138CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3139BEGIN 3140UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3141f_charbig = 'updated by trigger' 3142 WHERE f_int1 = - old.f_int1; 3143END| 3144UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3145WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3146 3147# check trigger-4 success: 1 3148DROP TRIGGER trg_1; 3149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3150f_int2 = CAST(f_char1 AS SIGNED INT), 3151f_charbig = 'just inserted' 3152 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3153DELETE FROM t0_aux 3154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3157'just inserted' FROM t0_template 3158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3159CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3160BEGIN 3161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3162f_charbig = 'updated by trigger' 3163 WHERE f_int1 = new.f_int1; 3164END| 3165UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3167 3168# check trigger-5 success: 1 3169DROP TRIGGER trg_1; 3170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3171f_int2 = CAST(f_char1 AS SIGNED INT), 3172f_charbig = 'just inserted' 3173 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3174DELETE FROM t0_aux 3175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3178'just inserted' FROM t0_template 3179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3180CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3181BEGIN 3182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3183f_charbig = 'updated by trigger' 3184 WHERE f_int1 = - old.f_int1; 3185END| 3186UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3188 3189# check trigger-6 success: 1 3190DROP TRIGGER trg_1; 3191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3192f_int2 = CAST(f_char1 AS SIGNED INT), 3193f_charbig = 'just inserted' 3194 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3195DELETE FROM t0_aux 3196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3199'just inserted' FROM t0_template 3200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3201CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 3202BEGIN 3203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3204f_charbig = 'updated by trigger' 3205 WHERE f_int1 = - old.f_int1; 3206END| 3207DELETE FROM t0_aux 3208WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3209 3210# check trigger-7 success: 1 3211DROP TRIGGER trg_1; 3212UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3213f_int2 = CAST(f_char1 AS SIGNED INT), 3214f_charbig = 'just inserted' 3215 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3216DELETE FROM t0_aux 3217WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3218INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3219SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3220'just inserted' FROM t0_template 3221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3222CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 3223BEGIN 3224UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3225f_charbig = 'updated by trigger' 3226 WHERE f_int1 = - old.f_int1; 3227END| 3228DELETE FROM t0_aux 3229WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3230 3231# check trigger-8 success: 1 3232DROP TRIGGER trg_1; 3233UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3234f_int2 = CAST(f_char1 AS SIGNED INT), 3235f_charbig = 'just inserted' 3236 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3237DELETE FROM t0_aux 3238WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3239DELETE FROM t1 3240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3241CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3242BEGIN 3243SET new.f_int1 = old.f_int1 + @max_row, 3244new.f_int2 = old.f_int2 - @max_row, 3245new.f_charbig = '####updated per update trigger####'; 3246END| 3247UPDATE t1 3248SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3249f_charbig = '####updated per update statement itself####'; 3250 3251# check trigger-9 success: 1 3252DROP TRIGGER trg_2; 3253UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3254f_int2 = CAST(f_char1 AS SIGNED INT), 3255f_charbig = CONCAT('===',f_char1,'==='); 3256CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3257BEGIN 3258SET new.f_int1 = new.f_int1 + @max_row, 3259new.f_int2 = new.f_int2 - @max_row, 3260new.f_charbig = '####updated per update trigger####'; 3261END| 3262UPDATE t1 3263SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3264f_charbig = '####updated per update statement itself####'; 3265 3266# check trigger-10 success: 1 3267DROP TRIGGER trg_2; 3268UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3269f_int2 = CAST(f_char1 AS SIGNED INT), 3270f_charbig = CONCAT('===',f_char1,'==='); 3271CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3272BEGIN 3273SET new.f_int1 = @my_max1 + @counter, 3274new.f_int2 = @my_min2 - @counter, 3275new.f_charbig = '####updated per insert trigger####'; 3276SET @counter = @counter + 1; 3277END| 3278SET @counter = 1; 3279SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3280INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3281SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3282CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3283WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3284ORDER BY f_int1; 3285DROP TRIGGER trg_3; 3286 3287# check trigger-11 success: 1 3288DELETE FROM t1 3289WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3290AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3291AND f_charbig = '####updated per insert trigger####'; 3292CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3293BEGIN 3294SET new.f_int1 = @my_max1 + @counter, 3295new.f_int2 = @my_min2 - @counter, 3296new.f_charbig = '####updated per insert trigger####'; 3297SET @counter = @counter + 1; 3298END| 3299SET @counter = 1; 3300SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3301INSERT INTO t1 (f_char1, f_char2, f_charbig) 3302SELECT CAST(f_int1 AS CHAR), 3303CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3304WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3305ORDER BY f_int1; 3306DROP TRIGGER trg_3; 3307 3308# check trigger-12 success: 1 3309DELETE FROM t1 3310WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3311AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3312AND f_charbig = '####updated per insert trigger####'; 3313ANALYZE TABLE t1; 3314Table Op Msg_type Msg_text 3315test.t1 analyze status OK 3316CHECK TABLE t1 EXTENDED; 3317Table Op Msg_type Msg_text 3318test.t1 check status OK 3319CHECKSUM TABLE t1 EXTENDED; 3320Table Checksum 3321test.t1 <some_value> 3322OPTIMIZE TABLE t1; 3323Table Op Msg_type Msg_text 3324test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 3325test.t1 optimize status OK 3326# check layout success: 1 3327REPAIR TABLE t1 EXTENDED; 3328Table Op Msg_type Msg_text 3329test.t1 repair status OK 3330# check layout success: 1 3331TRUNCATE t1; 3332 3333# check TRUNCATE success: 1 3334# check layout success: 1 3335# End usability test (inc/partition_check.inc) 3336DROP TABLE t1; 3337CREATE TABLE t1 ( 3338f_int1 INTEGER, 3339f_int2 INTEGER, 3340f_char1 CHAR(20), 3341f_char2 CHAR(20), 3342f_charbig VARCHAR(1000) 3343 3344) 3345PARTITION BY LIST(ABS(MOD(f_int1,2))) 3346SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 3347(PARTITION part1 VALUES IN (0), 3348PARTITION part2 VALUES IN (1), 3349PARTITION part3 VALUES IN (NULL)); 3350INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3351SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3352WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 3353ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 3354INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3355SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3356WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 3357# Start usability test (inc/partition_check.inc) 3358create_command 3359SHOW CREATE TABLE t1; 3360Table Create Table 3361t1 CREATE TABLE `t1` ( 3362 `f_int1` bigint(20) DEFAULT NULL, 3363 `f_int2` bigint(20) DEFAULT NULL, 3364 `f_char1` char(20) DEFAULT NULL, 3365 `f_char2` char(20) DEFAULT NULL, 3366 `f_charbig` varchar(1000) DEFAULT NULL 3367) ENGINE=InnoDB DEFAULT CHARSET=latin1 3368/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) 3369SUBPARTITION BY KEY (f_int2) 3370SUBPARTITIONS 3 3371(PARTITION part1 VALUES IN (0) ENGINE = InnoDB, 3372 PARTITION part2 VALUES IN (1) ENGINE = InnoDB, 3373 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */ 3374 3375# check prerequisites-1 success: 1 3376# check COUNT(*) success: 1 3377# check MIN/MAX(f_int1) success: 1 3378# check MIN/MAX(f_int2) success: 1 3379INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3380SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3381CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 3382WHERE f_int1 IN (2,3); 3383# check prerequisites-3 success: 1 3384DELETE FROM t1 WHERE f_charbig = 'delete me'; 3385# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE 3386# check read via f_int1 success: 1 3387# check read via f_int2 success: 1 3388 3389# check multiple-1 success: 1 3390DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 3391 3392# check multiple-2 success: 1 3393INSERT INTO t1 SELECT * FROM t0_template 3394WHERE MOD(f_int1,3) = 0; 3395 3396# check multiple-3 success: 1 3397UPDATE t1 SET f_int1 = f_int1 + @max_row 3398WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 3399AND @max_row_div2 + @max_row_div4; 3400 3401# check multiple-4 success: 1 3402DELETE FROM t1 3403WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 3404AND @max_row_div2 + @max_row_div4 + @max_row; 3405 3406# check multiple-5 success: 1 3407SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 3408INSERT INTO t1 3409SET f_int1 = @cur_value , f_int2 = @cur_value, 3410f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3411f_charbig = '#SINGLE#'; 3412 3413# check single-1 success: 1 3414SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 3415INSERT INTO t1 3416SET f_int1 = @cur_value , f_int2 = @cur_value, 3417f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3418f_charbig = '#SINGLE#'; 3419 3420# check single-2 success: 1 3421SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 3422SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 3423UPDATE t1 SET f_int1 = @cur_value2 3424WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 3425 3426# check single-3 success: 1 3427SET @cur_value1= -1; 3428SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 3429UPDATE t1 SET f_int1 = @cur_value1 3430WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 3431 3432# check single-4 success: 1 3433SELECT MAX(f_int1) INTO @cur_value FROM t1; 3434DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 3435 3436# check single-5 success: 1 3437DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 3438 3439# check single-6 success: 1 3440INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 3441 3442# check single-7 success: 1 3443DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 3444DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 3445INSERT t1 SET f_int1 = 0 , f_int2 = 0, 3446f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 3447f_charbig = '#NULL#'; 3448INSERT INTO t1 3449SET f_int1 = NULL , f_int2 = -@max_row, 3450f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 3451f_charbig = '#NULL#'; 3452# check null success: 1 3453 3454# check null-1 success: 1 3455UPDATE t1 SET f_int1 = -@max_row 3456WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 3457AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 3458 3459# check null-2 success: 1 3460UPDATE t1 SET f_int1 = NULL 3461WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 3462AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 3463 3464# check null-3 success: 1 3465DELETE FROM t1 3466WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 3467AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 3468 3469# check null-4 success: 1 3470DELETE FROM t1 3471WHERE f_int1 = 0 AND f_int2 = 0 3472AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 3473AND f_charbig = '#NULL#'; 3474SET AUTOCOMMIT= 0; 3475INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3476SELECT f_int1, f_int1, '', '', 'was inserted' 3477FROM t0_template source_tab 3478WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3479 3480# check transactions-1 success: 1 3481COMMIT WORK; 3482 3483# check transactions-2 success: 1 3484ROLLBACK WORK; 3485 3486# check transactions-3 success: 1 3487DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3488COMMIT WORK; 3489ROLLBACK WORK; 3490 3491# check transactions-4 success: 1 3492INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3493SELECT f_int1, f_int1, '', '', 'was inserted' 3494FROM t0_template source_tab 3495WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3496 3497# check transactions-5 success: 1 3498ROLLBACK WORK; 3499 3500# check transactions-6 success: 1 3501# INFO: Storage engine used for t1 seems to be transactional. 3502COMMIT; 3503 3504# check transactions-7 success: 1 3505DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3506COMMIT WORK; 3507SET @@session.sql_mode = 'traditional'; 3508Warnings: 3509Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 3510SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 3511INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3512SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 3513'', '', 'was inserted' FROM t0_template 3514WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3515ERROR 22012: Division by 0 3516COMMIT; 3517 3518# check transactions-8 success: 1 3519# INFO: Storage engine used for t1 seems to be able to revert 3520# changes made by the failing statement. 3521SET @@session.sql_mode = ''; 3522Warnings: 3523Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 3524SET AUTOCOMMIT= 1; 3525DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3526COMMIT WORK; 3527UPDATE t1 SET f_charbig = REPEAT('b', 1000); 3528 3529# check special-1 success: 1 3530UPDATE t1 SET f_charbig = ''; 3531 3532# check special-2 success: 1 3533UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 3534INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3535SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 3536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3537INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3538SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3539'just inserted' FROM t0_template 3540WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3541CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 3542BEGIN 3543UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3544f_charbig = 'updated by trigger' 3545 WHERE f_int1 = new.f_int1; 3546END| 3547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3548SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3550 3551# check trigger-1 success: 1 3552DROP TRIGGER trg_1; 3553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3554f_int2 = CAST(f_char1 AS SIGNED INT), 3555f_charbig = 'just inserted' 3556 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3557DELETE FROM t0_aux 3558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3559INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3560SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3561'just inserted' FROM t0_template 3562WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3563CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 3564BEGIN 3565UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3566f_charbig = 'updated by trigger' 3567 WHERE f_int1 = new.f_int1; 3568END| 3569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3570SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 3571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3572 3573# check trigger-2 success: 1 3574DROP TRIGGER trg_1; 3575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3576f_int2 = CAST(f_char1 AS SIGNED INT), 3577f_charbig = 'just inserted' 3578 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3579DELETE FROM t0_aux 3580WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3581INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3582SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3583'just inserted' FROM t0_template 3584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3585CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3586BEGIN 3587UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3588f_charbig = 'updated by trigger' 3589 WHERE f_int1 = new.f_int1; 3590END| 3591UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3592WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3593 3594# check trigger-3 success: 1 3595DROP TRIGGER trg_1; 3596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3597f_int2 = CAST(f_char1 AS SIGNED INT), 3598f_charbig = 'just inserted' 3599 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3600DELETE FROM t0_aux 3601WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3603SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3604'just inserted' FROM t0_template 3605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3606CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 3607BEGIN 3608UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3609f_charbig = 'updated by trigger' 3610 WHERE f_int1 = - old.f_int1; 3611END| 3612UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3613WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3614 3615# check trigger-4 success: 1 3616DROP TRIGGER trg_1; 3617UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3618f_int2 = CAST(f_char1 AS SIGNED INT), 3619f_charbig = 'just inserted' 3620 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3621DELETE FROM t0_aux 3622WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3624SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3625'just inserted' FROM t0_template 3626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3627CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3628BEGIN 3629UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3630f_charbig = 'updated by trigger' 3631 WHERE f_int1 = new.f_int1; 3632END| 3633UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3634WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3635 3636# check trigger-5 success: 1 3637DROP TRIGGER trg_1; 3638UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3639f_int2 = CAST(f_char1 AS SIGNED INT), 3640f_charbig = 'just inserted' 3641 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3642DELETE FROM t0_aux 3643WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3646'just inserted' FROM t0_template 3647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3648CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 3649BEGIN 3650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3651f_charbig = 'updated by trigger' 3652 WHERE f_int1 = - old.f_int1; 3653END| 3654UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 3655WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3656 3657# check trigger-6 success: 1 3658DROP TRIGGER trg_1; 3659UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3660f_int2 = CAST(f_char1 AS SIGNED INT), 3661f_charbig = 'just inserted' 3662 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3663DELETE FROM t0_aux 3664WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3665INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3666SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3667'just inserted' FROM t0_template 3668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3669CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 3670BEGIN 3671UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3672f_charbig = 'updated by trigger' 3673 WHERE f_int1 = - old.f_int1; 3674END| 3675DELETE FROM t0_aux 3676WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3677 3678# check trigger-7 success: 1 3679DROP TRIGGER trg_1; 3680UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3681f_int2 = CAST(f_char1 AS SIGNED INT), 3682f_charbig = 'just inserted' 3683 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3684DELETE FROM t0_aux 3685WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3686INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 3687SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 3688'just inserted' FROM t0_template 3689WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3690CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 3691BEGIN 3692UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 3693f_charbig = 'updated by trigger' 3694 WHERE f_int1 = - old.f_int1; 3695END| 3696DELETE FROM t0_aux 3697WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 3698 3699# check trigger-8 success: 1 3700DROP TRIGGER trg_1; 3701UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3702f_int2 = CAST(f_char1 AS SIGNED INT), 3703f_charbig = 'just inserted' 3704 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 3705DELETE FROM t0_aux 3706WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3707DELETE FROM t1 3708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 3709CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3710BEGIN 3711SET new.f_int1 = old.f_int1 + @max_row, 3712new.f_int2 = old.f_int2 - @max_row, 3713new.f_charbig = '####updated per update trigger####'; 3714END| 3715UPDATE t1 3716SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3717f_charbig = '####updated per update statement itself####'; 3718 3719# check trigger-9 success: 1 3720DROP TRIGGER trg_2; 3721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3722f_int2 = CAST(f_char1 AS SIGNED INT), 3723f_charbig = CONCAT('===',f_char1,'==='); 3724CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 3725BEGIN 3726SET new.f_int1 = new.f_int1 + @max_row, 3727new.f_int2 = new.f_int2 - @max_row, 3728new.f_charbig = '####updated per update trigger####'; 3729END| 3730UPDATE t1 3731SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 3732f_charbig = '####updated per update statement itself####'; 3733 3734# check trigger-10 success: 1 3735DROP TRIGGER trg_2; 3736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3737f_int2 = CAST(f_char1 AS SIGNED INT), 3738f_charbig = CONCAT('===',f_char1,'==='); 3739CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3740BEGIN 3741SET new.f_int1 = @my_max1 + @counter, 3742new.f_int2 = @my_min2 - @counter, 3743new.f_charbig = '####updated per insert trigger####'; 3744SET @counter = @counter + 1; 3745END| 3746SET @counter = 1; 3747SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3748INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3749SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3750CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3752ORDER BY f_int1; 3753DROP TRIGGER trg_3; 3754 3755# check trigger-11 success: 1 3756DELETE FROM t1 3757WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3758AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3759AND f_charbig = '####updated per insert trigger####'; 3760CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 3761BEGIN 3762SET new.f_int1 = @my_max1 + @counter, 3763new.f_int2 = @my_min2 - @counter, 3764new.f_charbig = '####updated per insert trigger####'; 3765SET @counter = @counter + 1; 3766END| 3767SET @counter = 1; 3768SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 3769INSERT INTO t1 (f_char1, f_char2, f_charbig) 3770SELECT CAST(f_int1 AS CHAR), 3771CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 3772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 3773ORDER BY f_int1; 3774DROP TRIGGER trg_3; 3775 3776# check trigger-12 success: 1 3777DELETE FROM t1 3778WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 3779AND f_int2 <> CAST(f_char1 AS SIGNED INT) 3780AND f_charbig = '####updated per insert trigger####'; 3781ANALYZE TABLE t1; 3782Table Op Msg_type Msg_text 3783test.t1 analyze status OK 3784CHECK TABLE t1 EXTENDED; 3785Table Op Msg_type Msg_text 3786test.t1 check status OK 3787CHECKSUM TABLE t1 EXTENDED; 3788Table Checksum 3789test.t1 <some_value> 3790OPTIMIZE TABLE t1; 3791Table Op Msg_type Msg_text 3792test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 3793test.t1 optimize status OK 3794# check layout success: 1 3795REPAIR TABLE t1 EXTENDED; 3796Table Op Msg_type Msg_text 3797test.t1 repair status OK 3798# check layout success: 1 3799TRUNCATE t1; 3800 3801# check TRUNCATE success: 1 3802# check layout success: 1 3803# End usability test (inc/partition_check.inc) 3804DROP TABLE t1; 3805# 1.3.2 PRIMARY KEY exists 3806DROP TABLE IF EXISTS t1; 3807CREATE TABLE t1 ( 3808f_int1 INTEGER, 3809f_int2 INTEGER, 3810f_char1 CHAR(20), 3811f_char2 CHAR(20), 3812f_charbig VARCHAR(1000) 3813, PRIMARY KEY (f_int1,f_int2) 3814) 3815PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; 3816INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3817SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3818WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 3819ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 3820INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 3821SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 3822WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 3823# Start usability test (inc/partition_check.inc) 3824create_command 3825SHOW CREATE TABLE t1; 3826Table Create Table 3827t1 CREATE TABLE `t1` ( 3828 `f_int1` bigint(20) NOT NULL, 3829 `f_int2` bigint(20) NOT NULL, 3830 `f_char1` char(20) DEFAULT NULL, 3831 `f_char2` char(20) DEFAULT NULL, 3832 `f_charbig` varchar(1000) DEFAULT NULL, 3833 PRIMARY KEY (`f_int1`,`f_int2`) 3834) ENGINE=InnoDB DEFAULT CHARSET=latin1 3835/*!50100 PARTITION BY HASH (f_int1 + f_int2) 3836PARTITIONS 2 */ 3837 3838# check prerequisites-1 success: 1 3839# check COUNT(*) success: 1 3840# check MIN/MAX(f_int1) success: 1 3841# check MIN/MAX(f_int2) success: 1 3842INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3843SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 3844CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 3845WHERE f_int1 IN (2,3); 3846ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 3847# check prerequisites-3 success: 1 3848# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 3849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3850SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3851CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3852WHERE f_int1 IN (2,3); 3853DELETE FROM t1 WHERE f_charbig = 'delete me'; 3854INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3855SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 3856CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 3857WHERE f_int1 IN (2,3); 3858DELETE FROM t1 WHERE f_charbig = 'delete me'; 3859# check read via f_int1 success: 1 3860# check read via f_int2 success: 1 3861 3862# check multiple-1 success: 1 3863DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 3864 3865# check multiple-2 success: 1 3866INSERT INTO t1 SELECT * FROM t0_template 3867WHERE MOD(f_int1,3) = 0; 3868 3869# check multiple-3 success: 1 3870UPDATE t1 SET f_int1 = f_int1 + @max_row 3871WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 3872AND @max_row_div2 + @max_row_div4; 3873 3874# check multiple-4 success: 1 3875DELETE FROM t1 3876WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 3877AND @max_row_div2 + @max_row_div4 + @max_row; 3878 3879# check multiple-5 success: 1 3880SELECT COUNT(*) INTO @try_count FROM t0_template 3881WHERE MOD(f_int1,3) = 0 3882AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3883SELECT COUNT(*) INTO @clash_count 3884FROM t1 INNER JOIN t0_template USING(f_int1) 3885WHERE MOD(f_int1,3) = 0 3886AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3887SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 3888INSERT INTO t1 3889SET f_int1 = @cur_value , f_int2 = @cur_value, 3890f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3891f_charbig = '#SINGLE#'; 3892 3893# check single-1 success: 1 3894SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 3895INSERT INTO t1 3896SET f_int1 = @cur_value , f_int2 = @cur_value, 3897f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 3898f_charbig = '#SINGLE#'; 3899 3900# check single-2 success: 1 3901SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 3902SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 3903UPDATE t1 SET f_int1 = @cur_value2 3904WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 3905 3906# check single-3 success: 1 3907SET @cur_value1= -1; 3908SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 3909UPDATE t1 SET f_int1 = @cur_value1 3910WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 3911 3912# check single-4 success: 1 3913SELECT MAX(f_int1) INTO @cur_value FROM t1; 3914DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 3915 3916# check single-5 success: 1 3917DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 3918 3919# check single-6 success: 1 3920INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 3921 3922# check single-7 success: 1 3923DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 3924DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 3925INSERT t1 SET f_int1 = 0 , f_int2 = 0, 3926f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 3927f_charbig = '#NULL#'; 3928INSERT INTO t1 3929SET f_int1 = NULL , f_int2 = -@max_row, 3930f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 3931f_charbig = '#NULL#'; 3932ERROR 23000: Column 'f_int1' cannot be null 3933# check null success: 1 3934DELETE FROM t1 3935WHERE f_int1 = 0 AND f_int2 = 0 3936AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 3937AND f_charbig = '#NULL#'; 3938INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3939SELECT f_int1, f_int1, '', '', 'was inserted' 3940 FROM t0_template source_tab 3941WHERE MOD(f_int1,3) = 0 3942AND f_int1 BETWEEN @max_row_div2 AND @max_row 3943ON DUPLICATE KEY 3944UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 3945f_int2 = 2 * @max_row + source_tab.f_int1, 3946f_charbig = 'was updated'; 3947 3948# check unique-1-a success: 1 3949 3950# check unique-1-b success: 1 3951DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 3953f_int2 = CAST(f_char1 AS SIGNED INT), 3954f_charbig = CONCAT('===',f_char1,'===') 3955WHERE f_charbig = 'was updated'; 3956REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3957SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 3958 FROM t0_template source_tab 3959WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 3960 3961# check replace success: 1 3962DELETE FROM t1 3963WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 3964DELETE FROM t1 3965WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 3966f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 3967UPDATE t1 SET f_int2 = f_int1, 3968f_char1 = CAST(f_int1 AS CHAR), 3969f_char2 = CAST(f_int1 AS CHAR), 3970f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 3971WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 3972SET AUTOCOMMIT= 0; 3973INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3974SELECT f_int1, f_int1, '', '', 'was inserted' 3975FROM t0_template source_tab 3976WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3977 3978# check transactions-1 success: 1 3979COMMIT WORK; 3980 3981# check transactions-2 success: 1 3982ROLLBACK WORK; 3983 3984# check transactions-3 success: 1 3985DELETE FROM t1 WHERE f_charbig = 'was inserted'; 3986COMMIT WORK; 3987ROLLBACK WORK; 3988 3989# check transactions-4 success: 1 3990INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 3991SELECT f_int1, f_int1, '', '', 'was inserted' 3992FROM t0_template source_tab 3993WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 3994 3995# check transactions-5 success: 1 3996ROLLBACK WORK; 3997 3998# check transactions-6 success: 1 3999# INFO: Storage engine used for t1 seems to be transactional. 4000COMMIT; 4001 4002# check transactions-7 success: 1 4003DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4004COMMIT WORK; 4005SET @@session.sql_mode = 'traditional'; 4006Warnings: 4007Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 4008SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 4009INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4010SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 4011'', '', 'was inserted' FROM t0_template 4012WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4013ERROR 22012: Division by 0 4014COMMIT; 4015 4016# check transactions-8 success: 1 4017# INFO: Storage engine used for t1 seems to be able to revert 4018# changes made by the failing statement. 4019SET @@session.sql_mode = ''; 4020Warnings: 4021Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 4022SET AUTOCOMMIT= 1; 4023DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4024COMMIT WORK; 4025UPDATE t1 SET f_charbig = REPEAT('b', 1000); 4026 4027# check special-1 success: 1 4028UPDATE t1 SET f_charbig = ''; 4029 4030# check special-2 success: 1 4031UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 4032INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4033SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 4034WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4035INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4036SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4037'just inserted' FROM t0_template 4038WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4039CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 4040BEGIN 4041UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4042f_charbig = 'updated by trigger' 4043 WHERE f_int1 = new.f_int1; 4044END| 4045INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4046SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4047WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4048 4049# check trigger-1 success: 1 4050DROP TRIGGER trg_1; 4051UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4052f_int2 = CAST(f_char1 AS SIGNED INT), 4053f_charbig = 'just inserted' 4054 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4055DELETE FROM t0_aux 4056WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4057INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4058SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4059'just inserted' FROM t0_template 4060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4061CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 4062BEGIN 4063UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4064f_charbig = 'updated by trigger' 4065 WHERE f_int1 = new.f_int1; 4066END| 4067INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4068SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4069WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4070 4071# check trigger-2 success: 1 4072DROP TRIGGER trg_1; 4073UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4074f_int2 = CAST(f_char1 AS SIGNED INT), 4075f_charbig = 'just inserted' 4076 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4077DELETE FROM t0_aux 4078WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4079INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4080SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4081'just inserted' FROM t0_template 4082WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4083CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4084BEGIN 4085UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4086f_charbig = 'updated by trigger' 4087 WHERE f_int1 = new.f_int1; 4088END| 4089UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4090WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4091 4092# check trigger-3 success: 1 4093DROP TRIGGER trg_1; 4094UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4095f_int2 = CAST(f_char1 AS SIGNED INT), 4096f_charbig = 'just inserted' 4097 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4098DELETE FROM t0_aux 4099WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4100INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4101SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4102'just inserted' FROM t0_template 4103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4104CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4105BEGIN 4106UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4107f_charbig = 'updated by trigger' 4108 WHERE f_int1 = - old.f_int1; 4109END| 4110UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4111WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4112 4113# check trigger-4 success: 1 4114DROP TRIGGER trg_1; 4115UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4116f_int2 = CAST(f_char1 AS SIGNED INT), 4117f_charbig = 'just inserted' 4118 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4119DELETE FROM t0_aux 4120WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4122SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4123'just inserted' FROM t0_template 4124WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4125CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4126BEGIN 4127UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4128f_charbig = 'updated by trigger' 4129 WHERE f_int1 = new.f_int1; 4130END| 4131UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4132WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4133 4134# check trigger-5 success: 1 4135DROP TRIGGER trg_1; 4136UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4137f_int2 = CAST(f_char1 AS SIGNED INT), 4138f_charbig = 'just inserted' 4139 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4140DELETE FROM t0_aux 4141WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4142INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4143SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4144'just inserted' FROM t0_template 4145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4146CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4147BEGIN 4148UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4149f_charbig = 'updated by trigger' 4150 WHERE f_int1 = - old.f_int1; 4151END| 4152UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4153WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4154 4155# check trigger-6 success: 1 4156DROP TRIGGER trg_1; 4157UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4158f_int2 = CAST(f_char1 AS SIGNED INT), 4159f_charbig = 'just inserted' 4160 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4161DELETE FROM t0_aux 4162WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4164SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4165'just inserted' FROM t0_template 4166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4167CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 4168BEGIN 4169UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4170f_charbig = 'updated by trigger' 4171 WHERE f_int1 = - old.f_int1; 4172END| 4173DELETE FROM t0_aux 4174WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4175 4176# check trigger-7 success: 1 4177DROP TRIGGER trg_1; 4178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4179f_int2 = CAST(f_char1 AS SIGNED INT), 4180f_charbig = 'just inserted' 4181 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4182DELETE FROM t0_aux 4183WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4184INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4185SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4186'just inserted' FROM t0_template 4187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4188CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 4189BEGIN 4190UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4191f_charbig = 'updated by trigger' 4192 WHERE f_int1 = - old.f_int1; 4193END| 4194DELETE FROM t0_aux 4195WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4196 4197# check trigger-8 success: 1 4198DROP TRIGGER trg_1; 4199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4200f_int2 = CAST(f_char1 AS SIGNED INT), 4201f_charbig = 'just inserted' 4202 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4203DELETE FROM t0_aux 4204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4205DELETE FROM t1 4206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4207CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4208BEGIN 4209SET new.f_int1 = old.f_int1 + @max_row, 4210new.f_int2 = old.f_int2 - @max_row, 4211new.f_charbig = '####updated per update trigger####'; 4212END| 4213UPDATE t1 4214SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4215f_charbig = '####updated per update statement itself####'; 4216 4217# check trigger-9 success: 1 4218DROP TRIGGER trg_2; 4219UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4220f_int2 = CAST(f_char1 AS SIGNED INT), 4221f_charbig = CONCAT('===',f_char1,'==='); 4222CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4223BEGIN 4224SET new.f_int1 = new.f_int1 + @max_row, 4225new.f_int2 = new.f_int2 - @max_row, 4226new.f_charbig = '####updated per update trigger####'; 4227END| 4228UPDATE t1 4229SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4230f_charbig = '####updated per update statement itself####'; 4231 4232# check trigger-10 success: 1 4233DROP TRIGGER trg_2; 4234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4235f_int2 = CAST(f_char1 AS SIGNED INT), 4236f_charbig = CONCAT('===',f_char1,'==='); 4237CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4238BEGIN 4239SET new.f_int1 = @my_max1 + @counter, 4240new.f_int2 = @my_min2 - @counter, 4241new.f_charbig = '####updated per insert trigger####'; 4242SET @counter = @counter + 1; 4243END| 4244SET @counter = 1; 4245SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4246INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4247SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4248CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4249WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4250ORDER BY f_int1; 4251DROP TRIGGER trg_3; 4252 4253# check trigger-11 success: 1 4254DELETE FROM t1 4255WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4256AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4257AND f_charbig = '####updated per insert trigger####'; 4258CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4259BEGIN 4260SET new.f_int1 = @my_max1 + @counter, 4261new.f_int2 = @my_min2 - @counter, 4262new.f_charbig = '####updated per insert trigger####'; 4263SET @counter = @counter + 1; 4264END| 4265SET @counter = 1; 4266SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4267INSERT INTO t1 (f_char1, f_char2, f_charbig) 4268SELECT CAST(f_int1 AS CHAR), 4269CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4270WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4271ORDER BY f_int1; 4272DROP TRIGGER trg_3; 4273 4274# check trigger-12 success: 1 4275DELETE FROM t1 4276WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4277AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4278AND f_charbig = '####updated per insert trigger####'; 4279ANALYZE TABLE t1; 4280Table Op Msg_type Msg_text 4281test.t1 analyze status OK 4282CHECK TABLE t1 EXTENDED; 4283Table Op Msg_type Msg_text 4284test.t1 check status OK 4285CHECKSUM TABLE t1 EXTENDED; 4286Table Checksum 4287test.t1 <some_value> 4288OPTIMIZE TABLE t1; 4289Table Op Msg_type Msg_text 4290test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 4291test.t1 optimize status OK 4292# check layout success: 1 4293REPAIR TABLE t1 EXTENDED; 4294Table Op Msg_type Msg_text 4295test.t1 repair status OK 4296# check layout success: 1 4297TRUNCATE t1; 4298 4299# check TRUNCATE success: 1 4300# check layout success: 1 4301# End usability test (inc/partition_check.inc) 4302DROP TABLE t1; 4303CREATE TABLE t1 ( 4304f_int1 INTEGER, 4305f_int2 INTEGER, 4306f_char1 CHAR(20), 4307f_char2 CHAR(20), 4308f_charbig VARCHAR(1000) 4309, PRIMARY KEY (f_int1,f_int2) 4310) 4311PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5; 4312INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4313SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4314WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 4315ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 4316INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4317SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4318WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 4319# Start usability test (inc/partition_check.inc) 4320create_command 4321SHOW CREATE TABLE t1; 4322Table Create Table 4323t1 CREATE TABLE `t1` ( 4324 `f_int1` bigint(20) NOT NULL, 4325 `f_int2` bigint(20) NOT NULL, 4326 `f_char1` char(20) DEFAULT NULL, 4327 `f_char2` char(20) DEFAULT NULL, 4328 `f_charbig` varchar(1000) DEFAULT NULL, 4329 PRIMARY KEY (`f_int1`,`f_int2`) 4330) ENGINE=InnoDB DEFAULT CHARSET=latin1 4331/*!50100 PARTITION BY KEY (f_int1,f_int2) 4332PARTITIONS 5 */ 4333 4334# check prerequisites-1 success: 1 4335# check COUNT(*) success: 1 4336# check MIN/MAX(f_int1) success: 1 4337# check MIN/MAX(f_int2) success: 1 4338INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4339SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4340CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 4341WHERE f_int1 IN (2,3); 4342ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 4343# check prerequisites-3 success: 1 4344# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 4345INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4346SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4347CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4348WHERE f_int1 IN (2,3); 4349DELETE FROM t1 WHERE f_charbig = 'delete me'; 4350INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4351SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4352CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4353WHERE f_int1 IN (2,3); 4354DELETE FROM t1 WHERE f_charbig = 'delete me'; 4355# check read via f_int1 success: 1 4356# check read via f_int2 success: 1 4357 4358# check multiple-1 success: 1 4359DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 4360 4361# check multiple-2 success: 1 4362INSERT INTO t1 SELECT * FROM t0_template 4363WHERE MOD(f_int1,3) = 0; 4364 4365# check multiple-3 success: 1 4366UPDATE t1 SET f_int1 = f_int1 + @max_row 4367WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 4368AND @max_row_div2 + @max_row_div4; 4369 4370# check multiple-4 success: 1 4371DELETE FROM t1 4372WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 4373AND @max_row_div2 + @max_row_div4 + @max_row; 4374 4375# check multiple-5 success: 1 4376SELECT COUNT(*) INTO @try_count FROM t0_template 4377WHERE MOD(f_int1,3) = 0 4378AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4379SELECT COUNT(*) INTO @clash_count 4380FROM t1 INNER JOIN t0_template USING(f_int1) 4381WHERE MOD(f_int1,3) = 0 4382AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4383SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 4384INSERT INTO t1 4385SET f_int1 = @cur_value , f_int2 = @cur_value, 4386f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4387f_charbig = '#SINGLE#'; 4388 4389# check single-1 success: 1 4390SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 4391INSERT INTO t1 4392SET f_int1 = @cur_value , f_int2 = @cur_value, 4393f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4394f_charbig = '#SINGLE#'; 4395 4396# check single-2 success: 1 4397SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 4398SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 4399UPDATE t1 SET f_int1 = @cur_value2 4400WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 4401 4402# check single-3 success: 1 4403SET @cur_value1= -1; 4404SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 4405UPDATE t1 SET f_int1 = @cur_value1 4406WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 4407 4408# check single-4 success: 1 4409SELECT MAX(f_int1) INTO @cur_value FROM t1; 4410DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 4411 4412# check single-5 success: 1 4413DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 4414 4415# check single-6 success: 1 4416INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 4417 4418# check single-7 success: 1 4419DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 4420DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 4421INSERT t1 SET f_int1 = 0 , f_int2 = 0, 4422f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 4423f_charbig = '#NULL#'; 4424INSERT INTO t1 4425SET f_int1 = NULL , f_int2 = -@max_row, 4426f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 4427f_charbig = '#NULL#'; 4428ERROR 23000: Column 'f_int1' cannot be null 4429# check null success: 1 4430DELETE FROM t1 4431WHERE f_int1 = 0 AND f_int2 = 0 4432AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 4433AND f_charbig = '#NULL#'; 4434INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4435SELECT f_int1, f_int1, '', '', 'was inserted' 4436 FROM t0_template source_tab 4437WHERE MOD(f_int1,3) = 0 4438AND f_int1 BETWEEN @max_row_div2 AND @max_row 4439ON DUPLICATE KEY 4440UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 4441f_int2 = 2 * @max_row + source_tab.f_int1, 4442f_charbig = 'was updated'; 4443 4444# check unique-1-a success: 1 4445 4446# check unique-1-b success: 1 4447DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4448UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4449f_int2 = CAST(f_char1 AS SIGNED INT), 4450f_charbig = CONCAT('===',f_char1,'===') 4451WHERE f_charbig = 'was updated'; 4452REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4453SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 4454 FROM t0_template source_tab 4455WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4456 4457# check replace success: 1 4458DELETE FROM t1 4459WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 4460DELETE FROM t1 4461WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 4462f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 4463UPDATE t1 SET f_int2 = f_int1, 4464f_char1 = CAST(f_int1 AS CHAR), 4465f_char2 = CAST(f_int1 AS CHAR), 4466f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 4467WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 4468SET AUTOCOMMIT= 0; 4469INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4470SELECT f_int1, f_int1, '', '', 'was inserted' 4471FROM t0_template source_tab 4472WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4473 4474# check transactions-1 success: 1 4475COMMIT WORK; 4476 4477# check transactions-2 success: 1 4478ROLLBACK WORK; 4479 4480# check transactions-3 success: 1 4481DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4482COMMIT WORK; 4483ROLLBACK WORK; 4484 4485# check transactions-4 success: 1 4486INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4487SELECT f_int1, f_int1, '', '', 'was inserted' 4488FROM t0_template source_tab 4489WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4490 4491# check transactions-5 success: 1 4492ROLLBACK WORK; 4493 4494# check transactions-6 success: 1 4495# INFO: Storage engine used for t1 seems to be transactional. 4496COMMIT; 4497 4498# check transactions-7 success: 1 4499DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4500COMMIT WORK; 4501SET @@session.sql_mode = 'traditional'; 4502Warnings: 4503Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 4504SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 4505INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4506SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 4507'', '', 'was inserted' FROM t0_template 4508WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4509ERROR 22012: Division by 0 4510COMMIT; 4511 4512# check transactions-8 success: 1 4513# INFO: Storage engine used for t1 seems to be able to revert 4514# changes made by the failing statement. 4515SET @@session.sql_mode = ''; 4516Warnings: 4517Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 4518SET AUTOCOMMIT= 1; 4519DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4520COMMIT WORK; 4521UPDATE t1 SET f_charbig = REPEAT('b', 1000); 4522 4523# check special-1 success: 1 4524UPDATE t1 SET f_charbig = ''; 4525 4526# check special-2 success: 1 4527UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 4528INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4529SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 4530WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4531INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4532SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4533'just inserted' FROM t0_template 4534WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4535CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 4536BEGIN 4537UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4538f_charbig = 'updated by trigger' 4539 WHERE f_int1 = new.f_int1; 4540END| 4541INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4542SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4543WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4544 4545# check trigger-1 success: 1 4546DROP TRIGGER trg_1; 4547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4548f_int2 = CAST(f_char1 AS SIGNED INT), 4549f_charbig = 'just inserted' 4550 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4551DELETE FROM t0_aux 4552WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4554SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4555'just inserted' FROM t0_template 4556WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4557CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 4558BEGIN 4559UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4560f_charbig = 'updated by trigger' 4561 WHERE f_int1 = new.f_int1; 4562END| 4563INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4564SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 4565WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4566 4567# check trigger-2 success: 1 4568DROP TRIGGER trg_1; 4569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4570f_int2 = CAST(f_char1 AS SIGNED INT), 4571f_charbig = 'just inserted' 4572 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4573DELETE FROM t0_aux 4574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4577'just inserted' FROM t0_template 4578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4579CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4580BEGIN 4581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4582f_charbig = 'updated by trigger' 4583 WHERE f_int1 = new.f_int1; 4584END| 4585UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4586WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4587 4588# check trigger-3 success: 1 4589DROP TRIGGER trg_1; 4590UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4591f_int2 = CAST(f_char1 AS SIGNED INT), 4592f_charbig = 'just inserted' 4593 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4594DELETE FROM t0_aux 4595WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4597SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4598'just inserted' FROM t0_template 4599WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4600CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 4601BEGIN 4602UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4603f_charbig = 'updated by trigger' 4604 WHERE f_int1 = - old.f_int1; 4605END| 4606UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4607WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4608 4609# check trigger-4 success: 1 4610DROP TRIGGER trg_1; 4611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4612f_int2 = CAST(f_char1 AS SIGNED INT), 4613f_charbig = 'just inserted' 4614 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4615DELETE FROM t0_aux 4616WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4619'just inserted' FROM t0_template 4620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4621CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4622BEGIN 4623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4624f_charbig = 'updated by trigger' 4625 WHERE f_int1 = new.f_int1; 4626END| 4627UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4628WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4629 4630# check trigger-5 success: 1 4631DROP TRIGGER trg_1; 4632UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4633f_int2 = CAST(f_char1 AS SIGNED INT), 4634f_charbig = 'just inserted' 4635 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4636DELETE FROM t0_aux 4637WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4638INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4639SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4640'just inserted' FROM t0_template 4641WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4642CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 4643BEGIN 4644UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4645f_charbig = 'updated by trigger' 4646 WHERE f_int1 = - old.f_int1; 4647END| 4648UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 4649WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4650 4651# check trigger-6 success: 1 4652DROP TRIGGER trg_1; 4653UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4654f_int2 = CAST(f_char1 AS SIGNED INT), 4655f_charbig = 'just inserted' 4656 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4657DELETE FROM t0_aux 4658WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4659INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4660SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4661'just inserted' FROM t0_template 4662WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4663CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 4664BEGIN 4665UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4666f_charbig = 'updated by trigger' 4667 WHERE f_int1 = - old.f_int1; 4668END| 4669DELETE FROM t0_aux 4670WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4671 4672# check trigger-7 success: 1 4673DROP TRIGGER trg_1; 4674UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4675f_int2 = CAST(f_char1 AS SIGNED INT), 4676f_charbig = 'just inserted' 4677 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4678DELETE FROM t0_aux 4679WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4680INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 4681SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 4682'just inserted' FROM t0_template 4683WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4684CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 4685BEGIN 4686UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 4687f_charbig = 'updated by trigger' 4688 WHERE f_int1 = - old.f_int1; 4689END| 4690DELETE FROM t0_aux 4691WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 4692 4693# check trigger-8 success: 1 4694DROP TRIGGER trg_1; 4695UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4696f_int2 = CAST(f_char1 AS SIGNED INT), 4697f_charbig = 'just inserted' 4698 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 4699DELETE FROM t0_aux 4700WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4701DELETE FROM t1 4702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 4703CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4704BEGIN 4705SET new.f_int1 = old.f_int1 + @max_row, 4706new.f_int2 = old.f_int2 - @max_row, 4707new.f_charbig = '####updated per update trigger####'; 4708END| 4709UPDATE t1 4710SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4711f_charbig = '####updated per update statement itself####'; 4712 4713# check trigger-9 success: 1 4714DROP TRIGGER trg_2; 4715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4716f_int2 = CAST(f_char1 AS SIGNED INT), 4717f_charbig = CONCAT('===',f_char1,'==='); 4718CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 4719BEGIN 4720SET new.f_int1 = new.f_int1 + @max_row, 4721new.f_int2 = new.f_int2 - @max_row, 4722new.f_charbig = '####updated per update trigger####'; 4723END| 4724UPDATE t1 4725SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 4726f_charbig = '####updated per update statement itself####'; 4727 4728# check trigger-10 success: 1 4729DROP TRIGGER trg_2; 4730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4731f_int2 = CAST(f_char1 AS SIGNED INT), 4732f_charbig = CONCAT('===',f_char1,'==='); 4733CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4734BEGIN 4735SET new.f_int1 = @my_max1 + @counter, 4736new.f_int2 = @my_min2 - @counter, 4737new.f_charbig = '####updated per insert trigger####'; 4738SET @counter = @counter + 1; 4739END| 4740SET @counter = 1; 4741SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4742INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4743SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4744CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4746ORDER BY f_int1; 4747DROP TRIGGER trg_3; 4748 4749# check trigger-11 success: 1 4750DELETE FROM t1 4751WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4752AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4753AND f_charbig = '####updated per insert trigger####'; 4754CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 4755BEGIN 4756SET new.f_int1 = @my_max1 + @counter, 4757new.f_int2 = @my_min2 - @counter, 4758new.f_charbig = '####updated per insert trigger####'; 4759SET @counter = @counter + 1; 4760END| 4761SET @counter = 1; 4762SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 4763INSERT INTO t1 (f_char1, f_char2, f_charbig) 4764SELECT CAST(f_int1 AS CHAR), 4765CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 4766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 4767ORDER BY f_int1; 4768DROP TRIGGER trg_3; 4769 4770# check trigger-12 success: 1 4771DELETE FROM t1 4772WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 4773AND f_int2 <> CAST(f_char1 AS SIGNED INT) 4774AND f_charbig = '####updated per insert trigger####'; 4775ANALYZE TABLE t1; 4776Table Op Msg_type Msg_text 4777test.t1 analyze status OK 4778CHECK TABLE t1 EXTENDED; 4779Table Op Msg_type Msg_text 4780test.t1 check status OK 4781CHECKSUM TABLE t1 EXTENDED; 4782Table Checksum 4783test.t1 <some_value> 4784OPTIMIZE TABLE t1; 4785Table Op Msg_type Msg_text 4786test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 4787test.t1 optimize status OK 4788# check layout success: 1 4789REPAIR TABLE t1 EXTENDED; 4790Table Op Msg_type Msg_text 4791test.t1 repair status OK 4792# check layout success: 1 4793TRUNCATE t1; 4794 4795# check TRUNCATE success: 1 4796# check layout success: 1 4797# End usability test (inc/partition_check.inc) 4798DROP TABLE t1; 4799CREATE TABLE t1 ( 4800f_int1 INTEGER, 4801f_int2 INTEGER, 4802f_char1 CHAR(20), 4803f_char2 CHAR(20), 4804f_charbig VARCHAR(1000) 4805, PRIMARY KEY (f_int1,f_int2) 4806) 4807PARTITION BY LIST(MOD(f_int1 + f_int2,4)) 4808(PARTITION part_3 VALUES IN (-3), 4809PARTITION part_2 VALUES IN (-2), 4810PARTITION part_1 VALUES IN (-1), 4811PARTITION part_N VALUES IN (NULL), 4812PARTITION part0 VALUES IN (0), 4813PARTITION part1 VALUES IN (1), 4814PARTITION part2 VALUES IN (2), 4815PARTITION part3 VALUES IN (3)); 4816INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4817SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4818WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 4819ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 4820INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 4821SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 4822WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 4823# Start usability test (inc/partition_check.inc) 4824create_command 4825SHOW CREATE TABLE t1; 4826Table Create Table 4827t1 CREATE TABLE `t1` ( 4828 `f_int1` bigint(20) NOT NULL, 4829 `f_int2` bigint(20) NOT NULL, 4830 `f_char1` char(20) DEFAULT NULL, 4831 `f_char2` char(20) DEFAULT NULL, 4832 `f_charbig` varchar(1000) DEFAULT NULL, 4833 PRIMARY KEY (`f_int1`,`f_int2`) 4834) ENGINE=InnoDB DEFAULT CHARSET=latin1 4835/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) 4836(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, 4837 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, 4838 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, 4839 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, 4840 PARTITION part0 VALUES IN (0) ENGINE = InnoDB, 4841 PARTITION part1 VALUES IN (1) ENGINE = InnoDB, 4842 PARTITION part2 VALUES IN (2) ENGINE = InnoDB, 4843 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */ 4844 4845# check prerequisites-1 success: 1 4846# check COUNT(*) success: 1 4847# check MIN/MAX(f_int1) success: 1 4848# check MIN/MAX(f_int2) success: 1 4849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4850SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 4851CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 4852WHERE f_int1 IN (2,3); 4853ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 4854# check prerequisites-3 success: 1 4855# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 4856INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4857SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4858CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4859WHERE f_int1 IN (2,3); 4860DELETE FROM t1 WHERE f_charbig = 'delete me'; 4861INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4862SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 4863CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 4864WHERE f_int1 IN (2,3); 4865DELETE FROM t1 WHERE f_charbig = 'delete me'; 4866# check read via f_int1 success: 1 4867# check read via f_int2 success: 1 4868 4869# check multiple-1 success: 1 4870DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 4871 4872# check multiple-2 success: 1 4873INSERT INTO t1 SELECT * FROM t0_template 4874WHERE MOD(f_int1,3) = 0; 4875 4876# check multiple-3 success: 1 4877UPDATE t1 SET f_int1 = f_int1 + @max_row 4878WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 4879AND @max_row_div2 + @max_row_div4; 4880 4881# check multiple-4 success: 1 4882DELETE FROM t1 4883WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 4884AND @max_row_div2 + @max_row_div4 + @max_row; 4885 4886# check multiple-5 success: 1 4887SELECT COUNT(*) INTO @try_count FROM t0_template 4888WHERE MOD(f_int1,3) = 0 4889AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4890SELECT COUNT(*) INTO @clash_count 4891FROM t1 INNER JOIN t0_template USING(f_int1) 4892WHERE MOD(f_int1,3) = 0 4893AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4894SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 4895INSERT INTO t1 4896SET f_int1 = @cur_value , f_int2 = @cur_value, 4897f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4898f_charbig = '#SINGLE#'; 4899 4900# check single-1 success: 1 4901SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 4902INSERT INTO t1 4903SET f_int1 = @cur_value , f_int2 = @cur_value, 4904f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 4905f_charbig = '#SINGLE#'; 4906 4907# check single-2 success: 1 4908SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 4909SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 4910UPDATE t1 SET f_int1 = @cur_value2 4911WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 4912 4913# check single-3 success: 1 4914SET @cur_value1= -1; 4915SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 4916UPDATE t1 SET f_int1 = @cur_value1 4917WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 4918 4919# check single-4 success: 1 4920SELECT MAX(f_int1) INTO @cur_value FROM t1; 4921DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 4922 4923# check single-5 success: 1 4924DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 4925 4926# check single-6 success: 1 4927INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 4928 4929# check single-7 success: 1 4930DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 4931DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 4932INSERT t1 SET f_int1 = 0 , f_int2 = 0, 4933f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 4934f_charbig = '#NULL#'; 4935INSERT INTO t1 4936SET f_int1 = NULL , f_int2 = -@max_row, 4937f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 4938f_charbig = '#NULL#'; 4939ERROR 23000: Column 'f_int1' cannot be null 4940# check null success: 1 4941DELETE FROM t1 4942WHERE f_int1 = 0 AND f_int2 = 0 4943AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 4944AND f_charbig = '#NULL#'; 4945INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4946SELECT f_int1, f_int1, '', '', 'was inserted' 4947 FROM t0_template source_tab 4948WHERE MOD(f_int1,3) = 0 4949AND f_int1 BETWEEN @max_row_div2 AND @max_row 4950ON DUPLICATE KEY 4951UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 4952f_int2 = 2 * @max_row + source_tab.f_int1, 4953f_charbig = 'was updated'; 4954 4955# check unique-1-a success: 1 4956 4957# check unique-1-b success: 1 4958DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 4960f_int2 = CAST(f_char1 AS SIGNED INT), 4961f_charbig = CONCAT('===',f_char1,'===') 4962WHERE f_charbig = 'was updated'; 4963REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4964SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 4965 FROM t0_template source_tab 4966WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 4967 4968# check replace success: 1 4969DELETE FROM t1 4970WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 4971DELETE FROM t1 4972WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 4973f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 4974UPDATE t1 SET f_int2 = f_int1, 4975f_char1 = CAST(f_int1 AS CHAR), 4976f_char2 = CAST(f_int1 AS CHAR), 4977f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 4978WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 4979SET AUTOCOMMIT= 0; 4980INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4981SELECT f_int1, f_int1, '', '', 'was inserted' 4982FROM t0_template source_tab 4983WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 4984 4985# check transactions-1 success: 1 4986COMMIT WORK; 4987 4988# check transactions-2 success: 1 4989ROLLBACK WORK; 4990 4991# check transactions-3 success: 1 4992DELETE FROM t1 WHERE f_charbig = 'was inserted'; 4993COMMIT WORK; 4994ROLLBACK WORK; 4995 4996# check transactions-4 success: 1 4997INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 4998SELECT f_int1, f_int1, '', '', 'was inserted' 4999FROM t0_template source_tab 5000WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5001 5002# check transactions-5 success: 1 5003ROLLBACK WORK; 5004 5005# check transactions-6 success: 1 5006# INFO: Storage engine used for t1 seems to be transactional. 5007COMMIT; 5008 5009# check transactions-7 success: 1 5010DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5011COMMIT WORK; 5012SET @@session.sql_mode = 'traditional'; 5013Warnings: 5014Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 5015SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 5016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5017SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 5018'', '', 'was inserted' FROM t0_template 5019WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5020ERROR 22012: Division by 0 5021COMMIT; 5022 5023# check transactions-8 success: 1 5024# INFO: Storage engine used for t1 seems to be able to revert 5025# changes made by the failing statement. 5026SET @@session.sql_mode = ''; 5027Warnings: 5028Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 5029SET AUTOCOMMIT= 1; 5030DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5031COMMIT WORK; 5032UPDATE t1 SET f_charbig = REPEAT('b', 1000); 5033 5034# check special-1 success: 1 5035UPDATE t1 SET f_charbig = ''; 5036 5037# check special-2 success: 1 5038UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 5039INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5040SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 5041WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5042INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5043SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5044'just inserted' FROM t0_template 5045WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5046CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 5047BEGIN 5048UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5049f_charbig = 'updated by trigger' 5050 WHERE f_int1 = new.f_int1; 5051END| 5052INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5053SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5054WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5055 5056# check trigger-1 success: 1 5057DROP TRIGGER trg_1; 5058UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5059f_int2 = CAST(f_char1 AS SIGNED INT), 5060f_charbig = 'just inserted' 5061 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5062DELETE FROM t0_aux 5063WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5064INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5065SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5066'just inserted' FROM t0_template 5067WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5068CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 5069BEGIN 5070UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5071f_charbig = 'updated by trigger' 5072 WHERE f_int1 = new.f_int1; 5073END| 5074INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5075SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5076WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5077 5078# check trigger-2 success: 1 5079DROP TRIGGER trg_1; 5080UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5081f_int2 = CAST(f_char1 AS SIGNED INT), 5082f_charbig = 'just inserted' 5083 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5084DELETE FROM t0_aux 5085WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5086INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5087SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5088'just inserted' FROM t0_template 5089WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5090CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5091BEGIN 5092UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5093f_charbig = 'updated by trigger' 5094 WHERE f_int1 = new.f_int1; 5095END| 5096UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5097WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5098 5099# check trigger-3 success: 1 5100DROP TRIGGER trg_1; 5101UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5102f_int2 = CAST(f_char1 AS SIGNED INT), 5103f_charbig = 'just inserted' 5104 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5105DELETE FROM t0_aux 5106WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5108SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5109'just inserted' FROM t0_template 5110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5111CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5112BEGIN 5113UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5114f_charbig = 'updated by trigger' 5115 WHERE f_int1 = - old.f_int1; 5116END| 5117UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5118WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5119 5120# check trigger-4 success: 1 5121DROP TRIGGER trg_1; 5122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5123f_int2 = CAST(f_char1 AS SIGNED INT), 5124f_charbig = 'just inserted' 5125 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5126DELETE FROM t0_aux 5127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5130'just inserted' FROM t0_template 5131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5132CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5133BEGIN 5134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5135f_charbig = 'updated by trigger' 5136 WHERE f_int1 = new.f_int1; 5137END| 5138UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5140 5141# check trigger-5 success: 1 5142DROP TRIGGER trg_1; 5143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5144f_int2 = CAST(f_char1 AS SIGNED INT), 5145f_charbig = 'just inserted' 5146 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5147DELETE FROM t0_aux 5148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5151'just inserted' FROM t0_template 5152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5153CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5154BEGIN 5155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5156f_charbig = 'updated by trigger' 5157 WHERE f_int1 = - old.f_int1; 5158END| 5159UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5160WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5161 5162# check trigger-6 success: 1 5163DROP TRIGGER trg_1; 5164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5165f_int2 = CAST(f_char1 AS SIGNED INT), 5166f_charbig = 'just inserted' 5167 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5168DELETE FROM t0_aux 5169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5172'just inserted' FROM t0_template 5173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5174CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 5175BEGIN 5176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5177f_charbig = 'updated by trigger' 5178 WHERE f_int1 = - old.f_int1; 5179END| 5180DELETE FROM t0_aux 5181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5182 5183# check trigger-7 success: 1 5184DROP TRIGGER trg_1; 5185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5186f_int2 = CAST(f_char1 AS SIGNED INT), 5187f_charbig = 'just inserted' 5188 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5189DELETE FROM t0_aux 5190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5193'just inserted' FROM t0_template 5194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5195CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 5196BEGIN 5197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5198f_charbig = 'updated by trigger' 5199 WHERE f_int1 = - old.f_int1; 5200END| 5201DELETE FROM t0_aux 5202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5203 5204# check trigger-8 success: 1 5205DROP TRIGGER trg_1; 5206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5207f_int2 = CAST(f_char1 AS SIGNED INT), 5208f_charbig = 'just inserted' 5209 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5210DELETE FROM t0_aux 5211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5212DELETE FROM t1 5213WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5214CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5215BEGIN 5216SET new.f_int1 = old.f_int1 + @max_row, 5217new.f_int2 = old.f_int2 - @max_row, 5218new.f_charbig = '####updated per update trigger####'; 5219END| 5220UPDATE t1 5221SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5222f_charbig = '####updated per update statement itself####'; 5223 5224# check trigger-9 success: 1 5225DROP TRIGGER trg_2; 5226UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5227f_int2 = CAST(f_char1 AS SIGNED INT), 5228f_charbig = CONCAT('===',f_char1,'==='); 5229CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5230BEGIN 5231SET new.f_int1 = new.f_int1 + @max_row, 5232new.f_int2 = new.f_int2 - @max_row, 5233new.f_charbig = '####updated per update trigger####'; 5234END| 5235UPDATE t1 5236SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5237f_charbig = '####updated per update statement itself####'; 5238 5239# check trigger-10 success: 1 5240DROP TRIGGER trg_2; 5241UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5242f_int2 = CAST(f_char1 AS SIGNED INT), 5243f_charbig = CONCAT('===',f_char1,'==='); 5244CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5245BEGIN 5246SET new.f_int1 = @my_max1 + @counter, 5247new.f_int2 = @my_min2 - @counter, 5248new.f_charbig = '####updated per insert trigger####'; 5249SET @counter = @counter + 1; 5250END| 5251SET @counter = 1; 5252SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5253INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5254SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5255CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5256WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5257ORDER BY f_int1; 5258DROP TRIGGER trg_3; 5259 5260# check trigger-11 success: 1 5261DELETE FROM t1 5262WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5263AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5264AND f_charbig = '####updated per insert trigger####'; 5265CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5266BEGIN 5267SET new.f_int1 = @my_max1 + @counter, 5268new.f_int2 = @my_min2 - @counter, 5269new.f_charbig = '####updated per insert trigger####'; 5270SET @counter = @counter + 1; 5271END| 5272SET @counter = 1; 5273SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5274INSERT INTO t1 (f_char1, f_char2, f_charbig) 5275SELECT CAST(f_int1 AS CHAR), 5276CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5277WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5278ORDER BY f_int1; 5279DROP TRIGGER trg_3; 5280 5281# check trigger-12 success: 1 5282DELETE FROM t1 5283WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5284AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5285AND f_charbig = '####updated per insert trigger####'; 5286ANALYZE TABLE t1; 5287Table Op Msg_type Msg_text 5288test.t1 analyze status OK 5289CHECK TABLE t1 EXTENDED; 5290Table Op Msg_type Msg_text 5291test.t1 check status OK 5292CHECKSUM TABLE t1 EXTENDED; 5293Table Checksum 5294test.t1 <some_value> 5295OPTIMIZE TABLE t1; 5296Table Op Msg_type Msg_text 5297test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 5298test.t1 optimize status OK 5299# check layout success: 1 5300REPAIR TABLE t1 EXTENDED; 5301Table Op Msg_type Msg_text 5302test.t1 repair status OK 5303# check layout success: 1 5304TRUNCATE t1; 5305 5306# check TRUNCATE success: 1 5307# check layout success: 1 5308# End usability test (inc/partition_check.inc) 5309DROP TABLE t1; 5310CREATE TABLE t1 ( 5311f_int1 INTEGER, 5312f_int2 INTEGER, 5313f_char1 CHAR(20), 5314f_char2 CHAR(20), 5315f_charbig VARCHAR(1000) 5316, PRIMARY KEY (f_int1,f_int2) 5317) 5318PARTITION BY RANGE((f_int1 + f_int2) DIV 2) 5319(PARTITION parta VALUES LESS THAN (0), 5320PARTITION partb VALUES LESS THAN (5), 5321PARTITION partc VALUES LESS THAN (10), 5322PARTITION partd VALUES LESS THAN (10 + 5), 5323PARTITION parte VALUES LESS THAN (20), 5324PARTITION partf VALUES LESS THAN (2147483646)); 5325INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5326SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5327WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 5328ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 5329INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5330SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5331WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 5332# Start usability test (inc/partition_check.inc) 5333create_command 5334SHOW CREATE TABLE t1; 5335Table Create Table 5336t1 CREATE TABLE `t1` ( 5337 `f_int1` bigint(20) NOT NULL, 5338 `f_int2` bigint(20) NOT NULL, 5339 `f_char1` char(20) DEFAULT NULL, 5340 `f_char2` char(20) DEFAULT NULL, 5341 `f_charbig` varchar(1000) DEFAULT NULL, 5342 PRIMARY KEY (`f_int1`,`f_int2`) 5343) ENGINE=InnoDB DEFAULT CHARSET=latin1 5344/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) 5345(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 5346 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 5347 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 5348 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, 5349 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, 5350 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 5351 5352# check prerequisites-1 success: 1 5353# check COUNT(*) success: 1 5354# check MIN/MAX(f_int1) success: 1 5355# check MIN/MAX(f_int2) success: 1 5356INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5357SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5358CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 5359WHERE f_int1 IN (2,3); 5360ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 5361# check prerequisites-3 success: 1 5362# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 5363INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5364SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5365CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5366WHERE f_int1 IN (2,3); 5367DELETE FROM t1 WHERE f_charbig = 'delete me'; 5368INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5369SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5370CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5371WHERE f_int1 IN (2,3); 5372DELETE FROM t1 WHERE f_charbig = 'delete me'; 5373# check read via f_int1 success: 1 5374# check read via f_int2 success: 1 5375 5376# check multiple-1 success: 1 5377DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 5378 5379# check multiple-2 success: 1 5380INSERT INTO t1 SELECT * FROM t0_template 5381WHERE MOD(f_int1,3) = 0; 5382 5383# check multiple-3 success: 1 5384UPDATE t1 SET f_int1 = f_int1 + @max_row 5385WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 5386AND @max_row_div2 + @max_row_div4; 5387 5388# check multiple-4 success: 1 5389DELETE FROM t1 5390WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 5391AND @max_row_div2 + @max_row_div4 + @max_row; 5392 5393# check multiple-5 success: 1 5394SELECT COUNT(*) INTO @try_count FROM t0_template 5395WHERE MOD(f_int1,3) = 0 5396AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5397SELECT COUNT(*) INTO @clash_count 5398FROM t1 INNER JOIN t0_template USING(f_int1) 5399WHERE MOD(f_int1,3) = 0 5400AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5401SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 5402INSERT INTO t1 5403SET f_int1 = @cur_value , f_int2 = @cur_value, 5404f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5405f_charbig = '#SINGLE#'; 5406 5407# check single-1 success: 1 5408SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 5409INSERT INTO t1 5410SET f_int1 = @cur_value , f_int2 = @cur_value, 5411f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5412f_charbig = '#SINGLE#'; 5413 5414# check single-2 success: 1 5415SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 5416SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 5417UPDATE t1 SET f_int1 = @cur_value2 5418WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 5419 5420# check single-3 success: 1 5421SET @cur_value1= -1; 5422SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 5423UPDATE t1 SET f_int1 = @cur_value1 5424WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 5425 5426# check single-4 success: 1 5427SELECT MAX(f_int1) INTO @cur_value FROM t1; 5428DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 5429 5430# check single-5 success: 1 5431DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 5432 5433# check single-6 success: 1 5434INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 5435ERROR HY000: Table has no partition for value 2147483647 5436DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 5437INSERT t1 SET f_int1 = 0 , f_int2 = 0, 5438f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 5439f_charbig = '#NULL#'; 5440INSERT INTO t1 5441SET f_int1 = NULL , f_int2 = -@max_row, 5442f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 5443f_charbig = '#NULL#'; 5444ERROR 23000: Column 'f_int1' cannot be null 5445# check null success: 1 5446DELETE FROM t1 5447WHERE f_int1 = 0 AND f_int2 = 0 5448AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 5449AND f_charbig = '#NULL#'; 5450INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5451SELECT f_int1, f_int1, '', '', 'was inserted' 5452 FROM t0_template source_tab 5453WHERE MOD(f_int1,3) = 0 5454AND f_int1 BETWEEN @max_row_div2 AND @max_row 5455ON DUPLICATE KEY 5456UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 5457f_int2 = 2 * @max_row + source_tab.f_int1, 5458f_charbig = 'was updated'; 5459 5460# check unique-1-a success: 1 5461 5462# check unique-1-b success: 1 5463DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5464UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5465f_int2 = CAST(f_char1 AS SIGNED INT), 5466f_charbig = CONCAT('===',f_char1,'===') 5467WHERE f_charbig = 'was updated'; 5468REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5469SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 5470 FROM t0_template source_tab 5471WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5472 5473# check replace success: 1 5474DELETE FROM t1 5475WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 5476DELETE FROM t1 5477WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 5478f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 5479UPDATE t1 SET f_int2 = f_int1, 5480f_char1 = CAST(f_int1 AS CHAR), 5481f_char2 = CAST(f_int1 AS CHAR), 5482f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 5483WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 5484SET AUTOCOMMIT= 0; 5485INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5486SELECT f_int1, f_int1, '', '', 'was inserted' 5487FROM t0_template source_tab 5488WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5489 5490# check transactions-1 success: 1 5491COMMIT WORK; 5492 5493# check transactions-2 success: 1 5494ROLLBACK WORK; 5495 5496# check transactions-3 success: 1 5497DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5498COMMIT WORK; 5499ROLLBACK WORK; 5500 5501# check transactions-4 success: 1 5502INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5503SELECT f_int1, f_int1, '', '', 'was inserted' 5504FROM t0_template source_tab 5505WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5506 5507# check transactions-5 success: 1 5508ROLLBACK WORK; 5509 5510# check transactions-6 success: 1 5511# INFO: Storage engine used for t1 seems to be transactional. 5512COMMIT; 5513 5514# check transactions-7 success: 1 5515DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5516COMMIT WORK; 5517SET @@session.sql_mode = 'traditional'; 5518Warnings: 5519Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 5520SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 5521INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5522SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 5523'', '', 'was inserted' FROM t0_template 5524WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5525ERROR 22012: Division by 0 5526COMMIT; 5527 5528# check transactions-8 success: 1 5529# INFO: Storage engine used for t1 seems to be able to revert 5530# changes made by the failing statement. 5531SET @@session.sql_mode = ''; 5532Warnings: 5533Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 5534SET AUTOCOMMIT= 1; 5535DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5536COMMIT WORK; 5537UPDATE t1 SET f_charbig = REPEAT('b', 1000); 5538 5539# check special-1 success: 1 5540UPDATE t1 SET f_charbig = ''; 5541 5542# check special-2 success: 1 5543UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 5544INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5545SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 5546WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5548SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5549'just inserted' FROM t0_template 5550WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5551CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 5552BEGIN 5553UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5554f_charbig = 'updated by trigger' 5555 WHERE f_int1 = new.f_int1; 5556END| 5557INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5558SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5559WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5560 5561# check trigger-1 success: 1 5562DROP TRIGGER trg_1; 5563UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5564f_int2 = CAST(f_char1 AS SIGNED INT), 5565f_charbig = 'just inserted' 5566 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5567DELETE FROM t0_aux 5568WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5570SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5571'just inserted' FROM t0_template 5572WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5573CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 5574BEGIN 5575UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5576f_charbig = 'updated by trigger' 5577 WHERE f_int1 = new.f_int1; 5578END| 5579INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5580SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 5581WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5582 5583# check trigger-2 success: 1 5584DROP TRIGGER trg_1; 5585UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5586f_int2 = CAST(f_char1 AS SIGNED INT), 5587f_charbig = 'just inserted' 5588 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5589DELETE FROM t0_aux 5590WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5591INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5592SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5593'just inserted' FROM t0_template 5594WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5595CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5596BEGIN 5597UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5598f_charbig = 'updated by trigger' 5599 WHERE f_int1 = new.f_int1; 5600END| 5601UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5602WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5603 5604# check trigger-3 success: 1 5605DROP TRIGGER trg_1; 5606UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5607f_int2 = CAST(f_char1 AS SIGNED INT), 5608f_charbig = 'just inserted' 5609 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5610DELETE FROM t0_aux 5611WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5612INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5613SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5614'just inserted' FROM t0_template 5615WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5616CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 5617BEGIN 5618UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5619f_charbig = 'updated by trigger' 5620 WHERE f_int1 = - old.f_int1; 5621END| 5622UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5623WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5624 5625# check trigger-4 success: 1 5626DROP TRIGGER trg_1; 5627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5628f_int2 = CAST(f_char1 AS SIGNED INT), 5629f_charbig = 'just inserted' 5630 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5631DELETE FROM t0_aux 5632WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5634SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5635'just inserted' FROM t0_template 5636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5637CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5638BEGIN 5639UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5640f_charbig = 'updated by trigger' 5641 WHERE f_int1 = new.f_int1; 5642END| 5643UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5644WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5645 5646# check trigger-5 success: 1 5647DROP TRIGGER trg_1; 5648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5649f_int2 = CAST(f_char1 AS SIGNED INT), 5650f_charbig = 'just inserted' 5651 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5652DELETE FROM t0_aux 5653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5656'just inserted' FROM t0_template 5657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5658CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 5659BEGIN 5660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5661f_charbig = 'updated by trigger' 5662 WHERE f_int1 = - old.f_int1; 5663END| 5664UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 5665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5666 5667# check trigger-6 success: 1 5668DROP TRIGGER trg_1; 5669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5670f_int2 = CAST(f_char1 AS SIGNED INT), 5671f_charbig = 'just inserted' 5672 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5673DELETE FROM t0_aux 5674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5677'just inserted' FROM t0_template 5678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5679CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 5680BEGIN 5681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5682f_charbig = 'updated by trigger' 5683 WHERE f_int1 = - old.f_int1; 5684END| 5685DELETE FROM t0_aux 5686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5687 5688# check trigger-7 success: 1 5689DROP TRIGGER trg_1; 5690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5691f_int2 = CAST(f_char1 AS SIGNED INT), 5692f_charbig = 'just inserted' 5693 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5694DELETE FROM t0_aux 5695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 5697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 5698'just inserted' FROM t0_template 5699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5700CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 5701BEGIN 5702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 5703f_charbig = 'updated by trigger' 5704 WHERE f_int1 = - old.f_int1; 5705END| 5706DELETE FROM t0_aux 5707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 5708 5709# check trigger-8 success: 1 5710DROP TRIGGER trg_1; 5711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5712f_int2 = CAST(f_char1 AS SIGNED INT), 5713f_charbig = 'just inserted' 5714 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 5715DELETE FROM t0_aux 5716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5717DELETE FROM t1 5718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 5719CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5720BEGIN 5721SET new.f_int1 = old.f_int1 + @max_row, 5722new.f_int2 = old.f_int2 - @max_row, 5723new.f_charbig = '####updated per update trigger####'; 5724END| 5725UPDATE t1 5726SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5727f_charbig = '####updated per update statement itself####'; 5728 5729# check trigger-9 success: 1 5730DROP TRIGGER trg_2; 5731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5732f_int2 = CAST(f_char1 AS SIGNED INT), 5733f_charbig = CONCAT('===',f_char1,'==='); 5734CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 5735BEGIN 5736SET new.f_int1 = new.f_int1 + @max_row, 5737new.f_int2 = new.f_int2 - @max_row, 5738new.f_charbig = '####updated per update trigger####'; 5739END| 5740UPDATE t1 5741SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 5742f_charbig = '####updated per update statement itself####'; 5743 5744# check trigger-10 success: 1 5745DROP TRIGGER trg_2; 5746UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5747f_int2 = CAST(f_char1 AS SIGNED INT), 5748f_charbig = CONCAT('===',f_char1,'==='); 5749CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5750BEGIN 5751SET new.f_int1 = @my_max1 + @counter, 5752new.f_int2 = @my_min2 - @counter, 5753new.f_charbig = '####updated per insert trigger####'; 5754SET @counter = @counter + 1; 5755END| 5756SET @counter = 1; 5757SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5758INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5759SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5760CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5762ORDER BY f_int1; 5763DROP TRIGGER trg_3; 5764 5765# check trigger-11 success: 1 5766DELETE FROM t1 5767WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5768AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5769AND f_charbig = '####updated per insert trigger####'; 5770CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 5771BEGIN 5772SET new.f_int1 = @my_max1 + @counter, 5773new.f_int2 = @my_min2 - @counter, 5774new.f_charbig = '####updated per insert trigger####'; 5775SET @counter = @counter + 1; 5776END| 5777SET @counter = 1; 5778SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 5779INSERT INTO t1 (f_char1, f_char2, f_charbig) 5780SELECT CAST(f_int1 AS CHAR), 5781CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 5782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 5783ORDER BY f_int1; 5784DROP TRIGGER trg_3; 5785 5786# check trigger-12 success: 1 5787DELETE FROM t1 5788WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 5789AND f_int2 <> CAST(f_char1 AS SIGNED INT) 5790AND f_charbig = '####updated per insert trigger####'; 5791ANALYZE TABLE t1; 5792Table Op Msg_type Msg_text 5793test.t1 analyze status OK 5794CHECK TABLE t1 EXTENDED; 5795Table Op Msg_type Msg_text 5796test.t1 check status OK 5797CHECKSUM TABLE t1 EXTENDED; 5798Table Checksum 5799test.t1 <some_value> 5800OPTIMIZE TABLE t1; 5801Table Op Msg_type Msg_text 5802test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 5803test.t1 optimize status OK 5804# check layout success: 1 5805REPAIR TABLE t1 EXTENDED; 5806Table Op Msg_type Msg_text 5807test.t1 repair status OK 5808# check layout success: 1 5809TRUNCATE t1; 5810 5811# check TRUNCATE success: 1 5812# check layout success: 1 5813# End usability test (inc/partition_check.inc) 5814DROP TABLE t1; 5815CREATE TABLE t1 ( 5816f_int1 INTEGER, 5817f_int2 INTEGER, 5818f_char1 CHAR(20), 5819f_char2 CHAR(20), 5820f_charbig VARCHAR(1000) 5821, PRIMARY KEY (f_int1,f_int2) 5822) 5823PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 5824(PARTITION parta VALUES LESS THAN (0), 5825PARTITION partb VALUES LESS THAN (5), 5826PARTITION partc VALUES LESS THAN (10), 5827PARTITION partd VALUES LESS THAN (2147483646)); 5828INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5829SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5830WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 5831ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 5832INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 5833SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 5834WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 5835# Start usability test (inc/partition_check.inc) 5836create_command 5837SHOW CREATE TABLE t1; 5838Table Create Table 5839t1 CREATE TABLE `t1` ( 5840 `f_int1` bigint(20) NOT NULL, 5841 `f_int2` bigint(20) NOT NULL, 5842 `f_char1` char(20) DEFAULT NULL, 5843 `f_char2` char(20) DEFAULT NULL, 5844 `f_charbig` varchar(1000) DEFAULT NULL, 5845 PRIMARY KEY (`f_int1`,`f_int2`) 5846) ENGINE=InnoDB DEFAULT CHARSET=latin1 5847/*!50100 PARTITION BY RANGE (f_int1) 5848SUBPARTITION BY HASH (f_int2) 5849SUBPARTITIONS 2 5850(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 5851 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 5852 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 5853 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 5854 5855# check prerequisites-1 success: 1 5856# check COUNT(*) success: 1 5857# check MIN/MAX(f_int1) success: 1 5858# check MIN/MAX(f_int2) success: 1 5859INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5860SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 5861CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 5862WHERE f_int1 IN (2,3); 5863ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 5864# check prerequisites-3 success: 1 5865# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 5866INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5867SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5868CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5869WHERE f_int1 IN (2,3); 5870DELETE FROM t1 WHERE f_charbig = 'delete me'; 5871INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5872SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 5873CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 5874WHERE f_int1 IN (2,3); 5875DELETE FROM t1 WHERE f_charbig = 'delete me'; 5876# check read via f_int1 success: 1 5877# check read via f_int2 success: 1 5878 5879# check multiple-1 success: 1 5880DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 5881 5882# check multiple-2 success: 1 5883INSERT INTO t1 SELECT * FROM t0_template 5884WHERE MOD(f_int1,3) = 0; 5885 5886# check multiple-3 success: 1 5887UPDATE t1 SET f_int1 = f_int1 + @max_row 5888WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 5889AND @max_row_div2 + @max_row_div4; 5890 5891# check multiple-4 success: 1 5892DELETE FROM t1 5893WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 5894AND @max_row_div2 + @max_row_div4 + @max_row; 5895 5896# check multiple-5 success: 1 5897SELECT COUNT(*) INTO @try_count FROM t0_template 5898WHERE MOD(f_int1,3) = 0 5899AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5900SELECT COUNT(*) INTO @clash_count 5901FROM t1 INNER JOIN t0_template USING(f_int1) 5902WHERE MOD(f_int1,3) = 0 5903AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5904SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 5905INSERT INTO t1 5906SET f_int1 = @cur_value , f_int2 = @cur_value, 5907f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5908f_charbig = '#SINGLE#'; 5909 5910# check single-1 success: 1 5911SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 5912INSERT INTO t1 5913SET f_int1 = @cur_value , f_int2 = @cur_value, 5914f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 5915f_charbig = '#SINGLE#'; 5916 5917# check single-2 success: 1 5918SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 5919SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 5920UPDATE t1 SET f_int1 = @cur_value2 5921WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 5922 5923# check single-3 success: 1 5924SET @cur_value1= -1; 5925SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 5926UPDATE t1 SET f_int1 = @cur_value1 5927WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 5928 5929# check single-4 success: 1 5930SELECT MAX(f_int1) INTO @cur_value FROM t1; 5931DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 5932 5933# check single-5 success: 1 5934DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 5935 5936# check single-6 success: 1 5937INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 5938ERROR HY000: Table has no partition for value 2147483647 5939DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 5940INSERT t1 SET f_int1 = 0 , f_int2 = 0, 5941f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 5942f_charbig = '#NULL#'; 5943INSERT INTO t1 5944SET f_int1 = NULL , f_int2 = -@max_row, 5945f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 5946f_charbig = '#NULL#'; 5947ERROR 23000: Column 'f_int1' cannot be null 5948# check null success: 1 5949DELETE FROM t1 5950WHERE f_int1 = 0 AND f_int2 = 0 5951AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 5952AND f_charbig = '#NULL#'; 5953INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5954SELECT f_int1, f_int1, '', '', 'was inserted' 5955 FROM t0_template source_tab 5956WHERE MOD(f_int1,3) = 0 5957AND f_int1 BETWEEN @max_row_div2 AND @max_row 5958ON DUPLICATE KEY 5959UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 5960f_int2 = 2 * @max_row + source_tab.f_int1, 5961f_charbig = 'was updated'; 5962 5963# check unique-1-a success: 1 5964 5965# check unique-1-b success: 1 5966DELETE FROM t1 WHERE f_charbig = 'was inserted'; 5967UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 5968f_int2 = CAST(f_char1 AS SIGNED INT), 5969f_charbig = CONCAT('===',f_char1,'===') 5970WHERE f_charbig = 'was updated'; 5971REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5972SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 5973 FROM t0_template source_tab 5974WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 5975 5976# check replace success: 1 5977DELETE FROM t1 5978WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 5979DELETE FROM t1 5980WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 5981f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 5982UPDATE t1 SET f_int2 = f_int1, 5983f_char1 = CAST(f_int1 AS CHAR), 5984f_char2 = CAST(f_int1 AS CHAR), 5985f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 5986WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 5987SET AUTOCOMMIT= 0; 5988INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 5989SELECT f_int1, f_int1, '', '', 'was inserted' 5990FROM t0_template source_tab 5991WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 5992 5993# check transactions-1 success: 1 5994COMMIT WORK; 5995 5996# check transactions-2 success: 1 5997ROLLBACK WORK; 5998 5999# check transactions-3 success: 1 6000DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6001COMMIT WORK; 6002ROLLBACK WORK; 6003 6004# check transactions-4 success: 1 6005INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6006SELECT f_int1, f_int1, '', '', 'was inserted' 6007FROM t0_template source_tab 6008WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6009 6010# check transactions-5 success: 1 6011ROLLBACK WORK; 6012 6013# check transactions-6 success: 1 6014# INFO: Storage engine used for t1 seems to be transactional. 6015COMMIT; 6016 6017# check transactions-7 success: 1 6018DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6019COMMIT WORK; 6020SET @@session.sql_mode = 'traditional'; 6021Warnings: 6022Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 6023SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 6024INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6025SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 6026'', '', 'was inserted' FROM t0_template 6027WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6028ERROR 22012: Division by 0 6029COMMIT; 6030 6031# check transactions-8 success: 1 6032# INFO: Storage engine used for t1 seems to be able to revert 6033# changes made by the failing statement. 6034SET @@session.sql_mode = ''; 6035Warnings: 6036Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 6037SET AUTOCOMMIT= 1; 6038DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6039COMMIT WORK; 6040UPDATE t1 SET f_charbig = REPEAT('b', 1000); 6041 6042# check special-1 success: 1 6043UPDATE t1 SET f_charbig = ''; 6044 6045# check special-2 success: 1 6046UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 6047INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6048SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 6049WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6050INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6051SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6052'just inserted' FROM t0_template 6053WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6054CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 6055BEGIN 6056UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6057f_charbig = 'updated by trigger' 6058 WHERE f_int1 = new.f_int1; 6059END| 6060INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6061SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6062WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6063 6064# check trigger-1 success: 1 6065DROP TRIGGER trg_1; 6066UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6067f_int2 = CAST(f_char1 AS SIGNED INT), 6068f_charbig = 'just inserted' 6069 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6070DELETE FROM t0_aux 6071WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6072INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6073SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6074'just inserted' FROM t0_template 6075WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6076CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 6077BEGIN 6078UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6079f_charbig = 'updated by trigger' 6080 WHERE f_int1 = new.f_int1; 6081END| 6082INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6083SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6084WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6085 6086# check trigger-2 success: 1 6087DROP TRIGGER trg_1; 6088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6089f_int2 = CAST(f_char1 AS SIGNED INT), 6090f_charbig = 'just inserted' 6091 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6092DELETE FROM t0_aux 6093WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6094INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6095SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6096'just inserted' FROM t0_template 6097WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6098CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6099BEGIN 6100UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6101f_charbig = 'updated by trigger' 6102 WHERE f_int1 = new.f_int1; 6103END| 6104UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6105WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6106 6107# check trigger-3 success: 1 6108DROP TRIGGER trg_1; 6109UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6110f_int2 = CAST(f_char1 AS SIGNED INT), 6111f_charbig = 'just inserted' 6112 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6113DELETE FROM t0_aux 6114WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6115INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6116SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6117'just inserted' FROM t0_template 6118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6119CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6120BEGIN 6121UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6122f_charbig = 'updated by trigger' 6123 WHERE f_int1 = - old.f_int1; 6124END| 6125UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6126WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6127 6128# check trigger-4 success: 1 6129DROP TRIGGER trg_1; 6130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6131f_int2 = CAST(f_char1 AS SIGNED INT), 6132f_charbig = 'just inserted' 6133 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6134DELETE FROM t0_aux 6135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6138'just inserted' FROM t0_template 6139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6140CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6141BEGIN 6142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6143f_charbig = 'updated by trigger' 6144 WHERE f_int1 = new.f_int1; 6145END| 6146UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6148 6149# check trigger-5 success: 1 6150DROP TRIGGER trg_1; 6151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6152f_int2 = CAST(f_char1 AS SIGNED INT), 6153f_charbig = 'just inserted' 6154 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6155DELETE FROM t0_aux 6156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6157INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6158SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6159'just inserted' FROM t0_template 6160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6161CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6162BEGIN 6163UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6164f_charbig = 'updated by trigger' 6165 WHERE f_int1 = - old.f_int1; 6166END| 6167UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6168WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6169 6170# check trigger-6 success: 1 6171DROP TRIGGER trg_1; 6172UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6173f_int2 = CAST(f_char1 AS SIGNED INT), 6174f_charbig = 'just inserted' 6175 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6176DELETE FROM t0_aux 6177WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6178INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6179SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6180'just inserted' FROM t0_template 6181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6182CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 6183BEGIN 6184UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6185f_charbig = 'updated by trigger' 6186 WHERE f_int1 = - old.f_int1; 6187END| 6188DELETE FROM t0_aux 6189WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6190 6191# check trigger-7 success: 1 6192DROP TRIGGER trg_1; 6193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6194f_int2 = CAST(f_char1 AS SIGNED INT), 6195f_charbig = 'just inserted' 6196 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6197DELETE FROM t0_aux 6198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6201'just inserted' FROM t0_template 6202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6203CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 6204BEGIN 6205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6206f_charbig = 'updated by trigger' 6207 WHERE f_int1 = - old.f_int1; 6208END| 6209DELETE FROM t0_aux 6210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6211 6212# check trigger-8 success: 1 6213DROP TRIGGER trg_1; 6214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6215f_int2 = CAST(f_char1 AS SIGNED INT), 6216f_charbig = 'just inserted' 6217 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6218DELETE FROM t0_aux 6219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6220DELETE FROM t1 6221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6222CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6223BEGIN 6224SET new.f_int1 = old.f_int1 + @max_row, 6225new.f_int2 = old.f_int2 - @max_row, 6226new.f_charbig = '####updated per update trigger####'; 6227END| 6228UPDATE t1 6229SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6230f_charbig = '####updated per update statement itself####'; 6231 6232# check trigger-9 success: 1 6233DROP TRIGGER trg_2; 6234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6235f_int2 = CAST(f_char1 AS SIGNED INT), 6236f_charbig = CONCAT('===',f_char1,'==='); 6237CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6238BEGIN 6239SET new.f_int1 = new.f_int1 + @max_row, 6240new.f_int2 = new.f_int2 - @max_row, 6241new.f_charbig = '####updated per update trigger####'; 6242END| 6243UPDATE t1 6244SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6245f_charbig = '####updated per update statement itself####'; 6246 6247# check trigger-10 success: 1 6248DROP TRIGGER trg_2; 6249UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6250f_int2 = CAST(f_char1 AS SIGNED INT), 6251f_charbig = CONCAT('===',f_char1,'==='); 6252CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6253BEGIN 6254SET new.f_int1 = @my_max1 + @counter, 6255new.f_int2 = @my_min2 - @counter, 6256new.f_charbig = '####updated per insert trigger####'; 6257SET @counter = @counter + 1; 6258END| 6259SET @counter = 1; 6260SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6261INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6262SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6263CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6264WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6265ORDER BY f_int1; 6266DROP TRIGGER trg_3; 6267 6268# check trigger-11 success: 1 6269DELETE FROM t1 6270WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6271AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6272AND f_charbig = '####updated per insert trigger####'; 6273CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6274BEGIN 6275SET new.f_int1 = @my_max1 + @counter, 6276new.f_int2 = @my_min2 - @counter, 6277new.f_charbig = '####updated per insert trigger####'; 6278SET @counter = @counter + 1; 6279END| 6280SET @counter = 1; 6281SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6282INSERT INTO t1 (f_char1, f_char2, f_charbig) 6283SELECT CAST(f_int1 AS CHAR), 6284CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6286ORDER BY f_int1; 6287DROP TRIGGER trg_3; 6288 6289# check trigger-12 success: 1 6290DELETE FROM t1 6291WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6292AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6293AND f_charbig = '####updated per insert trigger####'; 6294ANALYZE TABLE t1; 6295Table Op Msg_type Msg_text 6296test.t1 analyze status OK 6297CHECK TABLE t1 EXTENDED; 6298Table Op Msg_type Msg_text 6299test.t1 check status OK 6300CHECKSUM TABLE t1 EXTENDED; 6301Table Checksum 6302test.t1 <some_value> 6303OPTIMIZE TABLE t1; 6304Table Op Msg_type Msg_text 6305test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 6306test.t1 optimize status OK 6307# check layout success: 1 6308REPAIR TABLE t1 EXTENDED; 6309Table Op Msg_type Msg_text 6310test.t1 repair status OK 6311# check layout success: 1 6312TRUNCATE t1; 6313 6314# check TRUNCATE success: 1 6315# check layout success: 1 6316# End usability test (inc/partition_check.inc) 6317DROP TABLE t1; 6318CREATE TABLE t1 ( 6319f_int1 INTEGER, 6320f_int2 INTEGER, 6321f_char1 CHAR(20), 6322f_char2 CHAR(20), 6323f_charbig VARCHAR(1000) 6324, PRIMARY KEY (f_int1,f_int2) 6325) 6326PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) 6327(PARTITION part1 VALUES LESS THAN (0) 6328(SUBPARTITION subpart11, SUBPARTITION subpart12), 6329PARTITION part2 VALUES LESS THAN (5) 6330(SUBPARTITION subpart21, SUBPARTITION subpart22), 6331PARTITION part3 VALUES LESS THAN (10) 6332(SUBPARTITION subpart31, SUBPARTITION subpart32), 6333PARTITION part4 VALUES LESS THAN (2147483646) 6334(SUBPARTITION subpart41, SUBPARTITION subpart42)); 6335INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6336SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6337WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 6338ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 6339INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6340SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6341WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 6342# Start usability test (inc/partition_check.inc) 6343create_command 6344SHOW CREATE TABLE t1; 6345Table Create Table 6346t1 CREATE TABLE `t1` ( 6347 `f_int1` bigint(20) NOT NULL, 6348 `f_int2` bigint(20) NOT NULL, 6349 `f_char1` char(20) DEFAULT NULL, 6350 `f_char2` char(20) DEFAULT NULL, 6351 `f_charbig` varchar(1000) DEFAULT NULL, 6352 PRIMARY KEY (`f_int1`,`f_int2`) 6353) ENGINE=InnoDB DEFAULT CHARSET=latin1 6354/*!50100 PARTITION BY RANGE (f_int1) 6355SUBPARTITION BY KEY (f_int2) 6356(PARTITION part1 VALUES LESS THAN (0) 6357 (SUBPARTITION subpart11 ENGINE = InnoDB, 6358 SUBPARTITION subpart12 ENGINE = InnoDB), 6359 PARTITION part2 VALUES LESS THAN (5) 6360 (SUBPARTITION subpart21 ENGINE = InnoDB, 6361 SUBPARTITION subpart22 ENGINE = InnoDB), 6362 PARTITION part3 VALUES LESS THAN (10) 6363 (SUBPARTITION subpart31 ENGINE = InnoDB, 6364 SUBPARTITION subpart32 ENGINE = InnoDB), 6365 PARTITION part4 VALUES LESS THAN (2147483646) 6366 (SUBPARTITION subpart41 ENGINE = InnoDB, 6367 SUBPARTITION subpart42 ENGINE = InnoDB)) */ 6368 6369# check prerequisites-1 success: 1 6370# check COUNT(*) success: 1 6371# check MIN/MAX(f_int1) success: 1 6372# check MIN/MAX(f_int2) success: 1 6373INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6374SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6375CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 6376WHERE f_int1 IN (2,3); 6377ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 6378# check prerequisites-3 success: 1 6379# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 6380INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6381SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6382CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6383WHERE f_int1 IN (2,3); 6384DELETE FROM t1 WHERE f_charbig = 'delete me'; 6385INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6386SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6387CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6388WHERE f_int1 IN (2,3); 6389DELETE FROM t1 WHERE f_charbig = 'delete me'; 6390# check read via f_int1 success: 1 6391# check read via f_int2 success: 1 6392 6393# check multiple-1 success: 1 6394DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 6395 6396# check multiple-2 success: 1 6397INSERT INTO t1 SELECT * FROM t0_template 6398WHERE MOD(f_int1,3) = 0; 6399 6400# check multiple-3 success: 1 6401UPDATE t1 SET f_int1 = f_int1 + @max_row 6402WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 6403AND @max_row_div2 + @max_row_div4; 6404 6405# check multiple-4 success: 1 6406DELETE FROM t1 6407WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 6408AND @max_row_div2 + @max_row_div4 + @max_row; 6409 6410# check multiple-5 success: 1 6411SELECT COUNT(*) INTO @try_count FROM t0_template 6412WHERE MOD(f_int1,3) = 0 6413AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6414SELECT COUNT(*) INTO @clash_count 6415FROM t1 INNER JOIN t0_template USING(f_int1) 6416WHERE MOD(f_int1,3) = 0 6417AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6418SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 6419INSERT INTO t1 6420SET f_int1 = @cur_value , f_int2 = @cur_value, 6421f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6422f_charbig = '#SINGLE#'; 6423 6424# check single-1 success: 1 6425SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 6426INSERT INTO t1 6427SET f_int1 = @cur_value , f_int2 = @cur_value, 6428f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6429f_charbig = '#SINGLE#'; 6430 6431# check single-2 success: 1 6432SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 6433SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 6434UPDATE t1 SET f_int1 = @cur_value2 6435WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 6436 6437# check single-3 success: 1 6438SET @cur_value1= -1; 6439SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 6440UPDATE t1 SET f_int1 = @cur_value1 6441WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 6442 6443# check single-4 success: 1 6444SELECT MAX(f_int1) INTO @cur_value FROM t1; 6445DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 6446 6447# check single-5 success: 1 6448DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 6449 6450# check single-6 success: 1 6451INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 6452ERROR HY000: Table has no partition for value 2147483647 6453DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 6454INSERT t1 SET f_int1 = 0 , f_int2 = 0, 6455f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 6456f_charbig = '#NULL#'; 6457INSERT INTO t1 6458SET f_int1 = NULL , f_int2 = -@max_row, 6459f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 6460f_charbig = '#NULL#'; 6461ERROR 23000: Column 'f_int1' cannot be null 6462# check null success: 1 6463DELETE FROM t1 6464WHERE f_int1 = 0 AND f_int2 = 0 6465AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 6466AND f_charbig = '#NULL#'; 6467INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6468SELECT f_int1, f_int1, '', '', 'was inserted' 6469 FROM t0_template source_tab 6470WHERE MOD(f_int1,3) = 0 6471AND f_int1 BETWEEN @max_row_div2 AND @max_row 6472ON DUPLICATE KEY 6473UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 6474f_int2 = 2 * @max_row + source_tab.f_int1, 6475f_charbig = 'was updated'; 6476 6477# check unique-1-a success: 1 6478 6479# check unique-1-b success: 1 6480DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6481UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6482f_int2 = CAST(f_char1 AS SIGNED INT), 6483f_charbig = CONCAT('===',f_char1,'===') 6484WHERE f_charbig = 'was updated'; 6485REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6486SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 6487 FROM t0_template source_tab 6488WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6489 6490# check replace success: 1 6491DELETE FROM t1 6492WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 6493DELETE FROM t1 6494WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 6495f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 6496UPDATE t1 SET f_int2 = f_int1, 6497f_char1 = CAST(f_int1 AS CHAR), 6498f_char2 = CAST(f_int1 AS CHAR), 6499f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 6500WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 6501SET AUTOCOMMIT= 0; 6502INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6503SELECT f_int1, f_int1, '', '', 'was inserted' 6504FROM t0_template source_tab 6505WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6506 6507# check transactions-1 success: 1 6508COMMIT WORK; 6509 6510# check transactions-2 success: 1 6511ROLLBACK WORK; 6512 6513# check transactions-3 success: 1 6514DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6515COMMIT WORK; 6516ROLLBACK WORK; 6517 6518# check transactions-4 success: 1 6519INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6520SELECT f_int1, f_int1, '', '', 'was inserted' 6521FROM t0_template source_tab 6522WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6523 6524# check transactions-5 success: 1 6525ROLLBACK WORK; 6526 6527# check transactions-6 success: 1 6528# INFO: Storage engine used for t1 seems to be transactional. 6529COMMIT; 6530 6531# check transactions-7 success: 1 6532DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6533COMMIT WORK; 6534SET @@session.sql_mode = 'traditional'; 6535Warnings: 6536Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 6537SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 6538INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6539SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 6540'', '', 'was inserted' FROM t0_template 6541WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 6542ERROR 22012: Division by 0 6543COMMIT; 6544 6545# check transactions-8 success: 1 6546# INFO: Storage engine used for t1 seems to be able to revert 6547# changes made by the failing statement. 6548SET @@session.sql_mode = ''; 6549Warnings: 6550Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 6551SET AUTOCOMMIT= 1; 6552DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6553COMMIT WORK; 6554UPDATE t1 SET f_charbig = REPEAT('b', 1000); 6555 6556# check special-1 success: 1 6557UPDATE t1 SET f_charbig = ''; 6558 6559# check special-2 success: 1 6560UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 6561INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6562SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 6563WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6564INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6565SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6566'just inserted' FROM t0_template 6567WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6568CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 6569BEGIN 6570UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6571f_charbig = 'updated by trigger' 6572 WHERE f_int1 = new.f_int1; 6573END| 6574INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6575SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6576WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6577 6578# check trigger-1 success: 1 6579DROP TRIGGER trg_1; 6580UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6581f_int2 = CAST(f_char1 AS SIGNED INT), 6582f_charbig = 'just inserted' 6583 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6584DELETE FROM t0_aux 6585WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6586INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6587SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6588'just inserted' FROM t0_template 6589WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6590CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 6591BEGIN 6592UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6593f_charbig = 'updated by trigger' 6594 WHERE f_int1 = new.f_int1; 6595END| 6596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6597SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 6598WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6599 6600# check trigger-2 success: 1 6601DROP TRIGGER trg_1; 6602UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6603f_int2 = CAST(f_char1 AS SIGNED INT), 6604f_charbig = 'just inserted' 6605 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6606DELETE FROM t0_aux 6607WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6610'just inserted' FROM t0_template 6611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6612CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6613BEGIN 6614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6615f_charbig = 'updated by trigger' 6616 WHERE f_int1 = new.f_int1; 6617END| 6618UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6619WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6620 6621# check trigger-3 success: 1 6622DROP TRIGGER trg_1; 6623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6624f_int2 = CAST(f_char1 AS SIGNED INT), 6625f_charbig = 'just inserted' 6626 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6627DELETE FROM t0_aux 6628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6631'just inserted' FROM t0_template 6632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6633CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 6634BEGIN 6635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6636f_charbig = 'updated by trigger' 6637 WHERE f_int1 = - old.f_int1; 6638END| 6639UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6640WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6641 6642# check trigger-4 success: 1 6643DROP TRIGGER trg_1; 6644UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6645f_int2 = CAST(f_char1 AS SIGNED INT), 6646f_charbig = 'just inserted' 6647 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6648DELETE FROM t0_aux 6649WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6651SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6652'just inserted' FROM t0_template 6653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6654CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6655BEGIN 6656UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6657f_charbig = 'updated by trigger' 6658 WHERE f_int1 = new.f_int1; 6659END| 6660UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6661WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6662 6663# check trigger-5 success: 1 6664DROP TRIGGER trg_1; 6665UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6666f_int2 = CAST(f_char1 AS SIGNED INT), 6667f_charbig = 'just inserted' 6668 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6669DELETE FROM t0_aux 6670WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6671INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6672SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6673'just inserted' FROM t0_template 6674WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6675CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 6676BEGIN 6677UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6678f_charbig = 'updated by trigger' 6679 WHERE f_int1 = - old.f_int1; 6680END| 6681UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 6682WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6683 6684# check trigger-6 success: 1 6685DROP TRIGGER trg_1; 6686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6687f_int2 = CAST(f_char1 AS SIGNED INT), 6688f_charbig = 'just inserted' 6689 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6690DELETE FROM t0_aux 6691WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6692INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6693SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6694'just inserted' FROM t0_template 6695WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6696CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 6697BEGIN 6698UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6699f_charbig = 'updated by trigger' 6700 WHERE f_int1 = - old.f_int1; 6701END| 6702DELETE FROM t0_aux 6703WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6704 6705# check trigger-7 success: 1 6706DROP TRIGGER trg_1; 6707UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6708f_int2 = CAST(f_char1 AS SIGNED INT), 6709f_charbig = 'just inserted' 6710 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6711DELETE FROM t0_aux 6712WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6713INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 6714SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 6715'just inserted' FROM t0_template 6716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6717CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 6718BEGIN 6719UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 6720f_charbig = 'updated by trigger' 6721 WHERE f_int1 = - old.f_int1; 6722END| 6723DELETE FROM t0_aux 6724WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 6725 6726# check trigger-8 success: 1 6727DROP TRIGGER trg_1; 6728UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6729f_int2 = CAST(f_char1 AS SIGNED INT), 6730f_charbig = 'just inserted' 6731 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 6732DELETE FROM t0_aux 6733WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6734DELETE FROM t1 6735WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 6736CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6737BEGIN 6738SET new.f_int1 = old.f_int1 + @max_row, 6739new.f_int2 = old.f_int2 - @max_row, 6740new.f_charbig = '####updated per update trigger####'; 6741END| 6742UPDATE t1 6743SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6744f_charbig = '####updated per update statement itself####'; 6745 6746# check trigger-9 success: 1 6747DROP TRIGGER trg_2; 6748UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6749f_int2 = CAST(f_char1 AS SIGNED INT), 6750f_charbig = CONCAT('===',f_char1,'==='); 6751CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 6752BEGIN 6753SET new.f_int1 = new.f_int1 + @max_row, 6754new.f_int2 = new.f_int2 - @max_row, 6755new.f_charbig = '####updated per update trigger####'; 6756END| 6757UPDATE t1 6758SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 6759f_charbig = '####updated per update statement itself####'; 6760 6761# check trigger-10 success: 1 6762DROP TRIGGER trg_2; 6763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6764f_int2 = CAST(f_char1 AS SIGNED INT), 6765f_charbig = CONCAT('===',f_char1,'==='); 6766CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6767BEGIN 6768SET new.f_int1 = @my_max1 + @counter, 6769new.f_int2 = @my_min2 - @counter, 6770new.f_charbig = '####updated per insert trigger####'; 6771SET @counter = @counter + 1; 6772END| 6773SET @counter = 1; 6774SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6775INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6776SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6777CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6779ORDER BY f_int1; 6780DROP TRIGGER trg_3; 6781 6782# check trigger-11 success: 1 6783DELETE FROM t1 6784WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6785AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6786AND f_charbig = '####updated per insert trigger####'; 6787CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 6788BEGIN 6789SET new.f_int1 = @my_max1 + @counter, 6790new.f_int2 = @my_min2 - @counter, 6791new.f_charbig = '####updated per insert trigger####'; 6792SET @counter = @counter + 1; 6793END| 6794SET @counter = 1; 6795SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 6796INSERT INTO t1 (f_char1, f_char2, f_charbig) 6797SELECT CAST(f_int1 AS CHAR), 6798CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 6799WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 6800ORDER BY f_int1; 6801DROP TRIGGER trg_3; 6802 6803# check trigger-12 success: 1 6804DELETE FROM t1 6805WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 6806AND f_int2 <> CAST(f_char1 AS SIGNED INT) 6807AND f_charbig = '####updated per insert trigger####'; 6808ANALYZE TABLE t1; 6809Table Op Msg_type Msg_text 6810test.t1 analyze status OK 6811CHECK TABLE t1 EXTENDED; 6812Table Op Msg_type Msg_text 6813test.t1 check status OK 6814CHECKSUM TABLE t1 EXTENDED; 6815Table Checksum 6816test.t1 <some_value> 6817OPTIMIZE TABLE t1; 6818Table Op Msg_type Msg_text 6819test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 6820test.t1 optimize status OK 6821# check layout success: 1 6822REPAIR TABLE t1 EXTENDED; 6823Table Op Msg_type Msg_text 6824test.t1 repair status OK 6825# check layout success: 1 6826TRUNCATE t1; 6827 6828# check TRUNCATE success: 1 6829# check layout success: 1 6830# End usability test (inc/partition_check.inc) 6831DROP TABLE t1; 6832CREATE TABLE t1 ( 6833f_int1 INTEGER, 6834f_int2 INTEGER, 6835f_char1 CHAR(20), 6836f_char2 CHAR(20), 6837f_charbig VARCHAR(1000) 6838, PRIMARY KEY (f_int1,f_int2) 6839) 6840PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) 6841(PARTITION part1 VALUES IN (0) 6842(SUBPARTITION sp11, SUBPARTITION sp12), 6843PARTITION part2 VALUES IN (1) 6844(SUBPARTITION sp21, SUBPARTITION sp22), 6845PARTITION part3 VALUES IN (2) 6846(SUBPARTITION sp31, SUBPARTITION sp32), 6847PARTITION part4 VALUES IN (NULL) 6848(SUBPARTITION sp41, SUBPARTITION sp42)); 6849INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6850SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6851WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 6852ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 6853INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 6854SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 6855WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 6856# Start usability test (inc/partition_check.inc) 6857create_command 6858SHOW CREATE TABLE t1; 6859Table Create Table 6860t1 CREATE TABLE `t1` ( 6861 `f_int1` bigint(20) NOT NULL, 6862 `f_int2` bigint(20) NOT NULL, 6863 `f_char1` char(20) DEFAULT NULL, 6864 `f_char2` char(20) DEFAULT NULL, 6865 `f_charbig` varchar(1000) DEFAULT NULL, 6866 PRIMARY KEY (`f_int1`,`f_int2`) 6867) ENGINE=InnoDB DEFAULT CHARSET=latin1 6868/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) 6869SUBPARTITION BY HASH (f_int2 + 1) 6870(PARTITION part1 VALUES IN (0) 6871 (SUBPARTITION sp11 ENGINE = InnoDB, 6872 SUBPARTITION sp12 ENGINE = InnoDB), 6873 PARTITION part2 VALUES IN (1) 6874 (SUBPARTITION sp21 ENGINE = InnoDB, 6875 SUBPARTITION sp22 ENGINE = InnoDB), 6876 PARTITION part3 VALUES IN (2) 6877 (SUBPARTITION sp31 ENGINE = InnoDB, 6878 SUBPARTITION sp32 ENGINE = InnoDB), 6879 PARTITION part4 VALUES IN (NULL) 6880 (SUBPARTITION sp41 ENGINE = InnoDB, 6881 SUBPARTITION sp42 ENGINE = InnoDB)) */ 6882 6883# check prerequisites-1 success: 1 6884# check COUNT(*) success: 1 6885# check MIN/MAX(f_int1) success: 1 6886# check MIN/MAX(f_int2) success: 1 6887INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6888SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 6889CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 6890WHERE f_int1 IN (2,3); 6891ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 6892# check prerequisites-3 success: 1 6893# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 6894INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6895SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6896CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6897WHERE f_int1 IN (2,3); 6898DELETE FROM t1 WHERE f_charbig = 'delete me'; 6899INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6900SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 6901CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 6902WHERE f_int1 IN (2,3); 6903DELETE FROM t1 WHERE f_charbig = 'delete me'; 6904# check read via f_int1 success: 1 6905# check read via f_int2 success: 1 6906 6907# check multiple-1 success: 1 6908DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 6909 6910# check multiple-2 success: 1 6911INSERT INTO t1 SELECT * FROM t0_template 6912WHERE MOD(f_int1,3) = 0; 6913 6914# check multiple-3 success: 1 6915UPDATE t1 SET f_int1 = f_int1 + @max_row 6916WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 6917AND @max_row_div2 + @max_row_div4; 6918 6919# check multiple-4 success: 1 6920DELETE FROM t1 6921WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 6922AND @max_row_div2 + @max_row_div4 + @max_row; 6923 6924# check multiple-5 success: 1 6925SELECT COUNT(*) INTO @try_count FROM t0_template 6926WHERE MOD(f_int1,3) = 0 6927AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6928SELECT COUNT(*) INTO @clash_count 6929FROM t1 INNER JOIN t0_template USING(f_int1) 6930WHERE MOD(f_int1,3) = 0 6931AND f_int1 BETWEEN @max_row_div2 AND @max_row; 6932SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 6933INSERT INTO t1 6934SET f_int1 = @cur_value , f_int2 = @cur_value, 6935f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6936f_charbig = '#SINGLE#'; 6937 6938# check single-1 success: 1 6939SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 6940INSERT INTO t1 6941SET f_int1 = @cur_value , f_int2 = @cur_value, 6942f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 6943f_charbig = '#SINGLE#'; 6944 6945# check single-2 success: 1 6946SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 6947SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 6948UPDATE t1 SET f_int1 = @cur_value2 6949WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 6950 6951# check single-3 success: 1 6952SET @cur_value1= -1; 6953SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 6954UPDATE t1 SET f_int1 = @cur_value1 6955WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 6956 6957# check single-4 success: 1 6958SELECT MAX(f_int1) INTO @cur_value FROM t1; 6959DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 6960 6961# check single-5 success: 1 6962DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 6963 6964# check single-6 success: 1 6965INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 6966 6967# check single-7 success: 1 6968DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 6969DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 6970INSERT t1 SET f_int1 = 0 , f_int2 = 0, 6971f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 6972f_charbig = '#NULL#'; 6973INSERT INTO t1 6974SET f_int1 = NULL , f_int2 = -@max_row, 6975f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 6976f_charbig = '#NULL#'; 6977ERROR 23000: Column 'f_int1' cannot be null 6978# check null success: 1 6979DELETE FROM t1 6980WHERE f_int1 = 0 AND f_int2 = 0 6981AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 6982AND f_charbig = '#NULL#'; 6983INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 6984SELECT f_int1, f_int1, '', '', 'was inserted' 6985 FROM t0_template source_tab 6986WHERE MOD(f_int1,3) = 0 6987AND f_int1 BETWEEN @max_row_div2 AND @max_row 6988ON DUPLICATE KEY 6989UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 6990f_int2 = 2 * @max_row + source_tab.f_int1, 6991f_charbig = 'was updated'; 6992 6993# check unique-1-a success: 1 6994 6995# check unique-1-b success: 1 6996DELETE FROM t1 WHERE f_charbig = 'was inserted'; 6997UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 6998f_int2 = CAST(f_char1 AS SIGNED INT), 6999f_charbig = CONCAT('===',f_char1,'===') 7000WHERE f_charbig = 'was updated'; 7001REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7002SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 7003 FROM t0_template source_tab 7004WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7005 7006# check replace success: 1 7007DELETE FROM t1 7008WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 7009DELETE FROM t1 7010WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 7011f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 7012UPDATE t1 SET f_int2 = f_int1, 7013f_char1 = CAST(f_int1 AS CHAR), 7014f_char2 = CAST(f_int1 AS CHAR), 7015f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 7016WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 7017SET AUTOCOMMIT= 0; 7018INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7019SELECT f_int1, f_int1, '', '', 'was inserted' 7020FROM t0_template source_tab 7021WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7022 7023# check transactions-1 success: 1 7024COMMIT WORK; 7025 7026# check transactions-2 success: 1 7027ROLLBACK WORK; 7028 7029# check transactions-3 success: 1 7030DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7031COMMIT WORK; 7032ROLLBACK WORK; 7033 7034# check transactions-4 success: 1 7035INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7036SELECT f_int1, f_int1, '', '', 'was inserted' 7037FROM t0_template source_tab 7038WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7039 7040# check transactions-5 success: 1 7041ROLLBACK WORK; 7042 7043# check transactions-6 success: 1 7044# INFO: Storage engine used for t1 seems to be transactional. 7045COMMIT; 7046 7047# check transactions-7 success: 1 7048DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7049COMMIT WORK; 7050SET @@session.sql_mode = 'traditional'; 7051Warnings: 7052Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 7053SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 7054INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7055SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 7056'', '', 'was inserted' FROM t0_template 7057WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7058ERROR 22012: Division by 0 7059COMMIT; 7060 7061# check transactions-8 success: 1 7062# INFO: Storage engine used for t1 seems to be able to revert 7063# changes made by the failing statement. 7064SET @@session.sql_mode = ''; 7065Warnings: 7066Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 7067SET AUTOCOMMIT= 1; 7068DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7069COMMIT WORK; 7070UPDATE t1 SET f_charbig = REPEAT('b', 1000); 7071 7072# check special-1 success: 1 7073UPDATE t1 SET f_charbig = ''; 7074 7075# check special-2 success: 1 7076UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 7077INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7078SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 7079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7080INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7081SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7082'just inserted' FROM t0_template 7083WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7084CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 7085BEGIN 7086UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7087f_charbig = 'updated by trigger' 7088 WHERE f_int1 = new.f_int1; 7089END| 7090INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7091SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7093 7094# check trigger-1 success: 1 7095DROP TRIGGER trg_1; 7096UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7097f_int2 = CAST(f_char1 AS SIGNED INT), 7098f_charbig = 'just inserted' 7099 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7100DELETE FROM t0_aux 7101WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7103SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7104'just inserted' FROM t0_template 7105WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7106CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 7107BEGIN 7108UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7109f_charbig = 'updated by trigger' 7110 WHERE f_int1 = new.f_int1; 7111END| 7112INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7113SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7115 7116# check trigger-2 success: 1 7117DROP TRIGGER trg_1; 7118UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7119f_int2 = CAST(f_char1 AS SIGNED INT), 7120f_charbig = 'just inserted' 7121 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7122DELETE FROM t0_aux 7123WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7125SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7126'just inserted' FROM t0_template 7127WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7128CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7129BEGIN 7130UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7131f_charbig = 'updated by trigger' 7132 WHERE f_int1 = new.f_int1; 7133END| 7134UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7135WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7136 7137# check trigger-3 success: 1 7138DROP TRIGGER trg_1; 7139UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7140f_int2 = CAST(f_char1 AS SIGNED INT), 7141f_charbig = 'just inserted' 7142 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7143DELETE FROM t0_aux 7144WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7145INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7146SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7147'just inserted' FROM t0_template 7148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7149CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7150BEGIN 7151UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7152f_charbig = 'updated by trigger' 7153 WHERE f_int1 = - old.f_int1; 7154END| 7155UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7156WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7157 7158# check trigger-4 success: 1 7159DROP TRIGGER trg_1; 7160UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7161f_int2 = CAST(f_char1 AS SIGNED INT), 7162f_charbig = 'just inserted' 7163 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7164DELETE FROM t0_aux 7165WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7166INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7167SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7168'just inserted' FROM t0_template 7169WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7170CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7171BEGIN 7172UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7173f_charbig = 'updated by trigger' 7174 WHERE f_int1 = new.f_int1; 7175END| 7176UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7177WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7178 7179# check trigger-5 success: 1 7180DROP TRIGGER trg_1; 7181UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7182f_int2 = CAST(f_char1 AS SIGNED INT), 7183f_charbig = 'just inserted' 7184 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7185DELETE FROM t0_aux 7186WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7187INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7188SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7189'just inserted' FROM t0_template 7190WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7191CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7192BEGIN 7193UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7194f_charbig = 'updated by trigger' 7195 WHERE f_int1 = - old.f_int1; 7196END| 7197UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7198WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7199 7200# check trigger-6 success: 1 7201DROP TRIGGER trg_1; 7202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7203f_int2 = CAST(f_char1 AS SIGNED INT), 7204f_charbig = 'just inserted' 7205 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7206DELETE FROM t0_aux 7207WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7208INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7209SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7210'just inserted' FROM t0_template 7211WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7212CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 7213BEGIN 7214UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7215f_charbig = 'updated by trigger' 7216 WHERE f_int1 = - old.f_int1; 7217END| 7218DELETE FROM t0_aux 7219WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7220 7221# check trigger-7 success: 1 7222DROP TRIGGER trg_1; 7223UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7224f_int2 = CAST(f_char1 AS SIGNED INT), 7225f_charbig = 'just inserted' 7226 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7227DELETE FROM t0_aux 7228WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7229INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7230SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7231'just inserted' FROM t0_template 7232WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7233CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 7234BEGIN 7235UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7236f_charbig = 'updated by trigger' 7237 WHERE f_int1 = - old.f_int1; 7238END| 7239DELETE FROM t0_aux 7240WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7241 7242# check trigger-8 success: 1 7243DROP TRIGGER trg_1; 7244UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7245f_int2 = CAST(f_char1 AS SIGNED INT), 7246f_charbig = 'just inserted' 7247 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7248DELETE FROM t0_aux 7249WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7250DELETE FROM t1 7251WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7252CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7253BEGIN 7254SET new.f_int1 = old.f_int1 + @max_row, 7255new.f_int2 = old.f_int2 - @max_row, 7256new.f_charbig = '####updated per update trigger####'; 7257END| 7258UPDATE t1 7259SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7260f_charbig = '####updated per update statement itself####'; 7261 7262# check trigger-9 success: 1 7263DROP TRIGGER trg_2; 7264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7265f_int2 = CAST(f_char1 AS SIGNED INT), 7266f_charbig = CONCAT('===',f_char1,'==='); 7267CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7268BEGIN 7269SET new.f_int1 = new.f_int1 + @max_row, 7270new.f_int2 = new.f_int2 - @max_row, 7271new.f_charbig = '####updated per update trigger####'; 7272END| 7273UPDATE t1 7274SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7275f_charbig = '####updated per update statement itself####'; 7276 7277# check trigger-10 success: 1 7278DROP TRIGGER trg_2; 7279UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7280f_int2 = CAST(f_char1 AS SIGNED INT), 7281f_charbig = CONCAT('===',f_char1,'==='); 7282CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7283BEGIN 7284SET new.f_int1 = @my_max1 + @counter, 7285new.f_int2 = @my_min2 - @counter, 7286new.f_charbig = '####updated per insert trigger####'; 7287SET @counter = @counter + 1; 7288END| 7289SET @counter = 1; 7290SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7291INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7292SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7293CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7294WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7295ORDER BY f_int1; 7296DROP TRIGGER trg_3; 7297 7298# check trigger-11 success: 1 7299DELETE FROM t1 7300WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7301AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7302AND f_charbig = '####updated per insert trigger####'; 7303CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7304BEGIN 7305SET new.f_int1 = @my_max1 + @counter, 7306new.f_int2 = @my_min2 - @counter, 7307new.f_charbig = '####updated per insert trigger####'; 7308SET @counter = @counter + 1; 7309END| 7310SET @counter = 1; 7311SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7312INSERT INTO t1 (f_char1, f_char2, f_charbig) 7313SELECT CAST(f_int1 AS CHAR), 7314CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7316ORDER BY f_int1; 7317DROP TRIGGER trg_3; 7318 7319# check trigger-12 success: 1 7320DELETE FROM t1 7321WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7322AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7323AND f_charbig = '####updated per insert trigger####'; 7324ANALYZE TABLE t1; 7325Table Op Msg_type Msg_text 7326test.t1 analyze status OK 7327CHECK TABLE t1 EXTENDED; 7328Table Op Msg_type Msg_text 7329test.t1 check status OK 7330CHECKSUM TABLE t1 EXTENDED; 7331Table Checksum 7332test.t1 <some_value> 7333OPTIMIZE TABLE t1; 7334Table Op Msg_type Msg_text 7335test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 7336test.t1 optimize status OK 7337# check layout success: 1 7338REPAIR TABLE t1 EXTENDED; 7339Table Op Msg_type Msg_text 7340test.t1 repair status OK 7341# check layout success: 1 7342TRUNCATE t1; 7343 7344# check TRUNCATE success: 1 7345# check layout success: 1 7346# End usability test (inc/partition_check.inc) 7347DROP TABLE t1; 7348CREATE TABLE t1 ( 7349f_int1 INTEGER, 7350f_int2 INTEGER, 7351f_char1 CHAR(20), 7352f_char2 CHAR(20), 7353f_charbig VARCHAR(1000) 7354, PRIMARY KEY (f_int1,f_int2) 7355) 7356PARTITION BY LIST(ABS(MOD(f_int1,2))) 7357SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 7358(PARTITION part1 VALUES IN (0), 7359PARTITION part2 VALUES IN (1), 7360PARTITION part3 VALUES IN (NULL)); 7361INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7362SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7363WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 7364ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 7365INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7366SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7367WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 7368# Start usability test (inc/partition_check.inc) 7369create_command 7370SHOW CREATE TABLE t1; 7371Table Create Table 7372t1 CREATE TABLE `t1` ( 7373 `f_int1` bigint(20) NOT NULL, 7374 `f_int2` bigint(20) NOT NULL, 7375 `f_char1` char(20) DEFAULT NULL, 7376 `f_char2` char(20) DEFAULT NULL, 7377 `f_charbig` varchar(1000) DEFAULT NULL, 7378 PRIMARY KEY (`f_int1`,`f_int2`) 7379) ENGINE=InnoDB DEFAULT CHARSET=latin1 7380/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) 7381SUBPARTITION BY KEY (f_int2) 7382SUBPARTITIONS 3 7383(PARTITION part1 VALUES IN (0) ENGINE = InnoDB, 7384 PARTITION part2 VALUES IN (1) ENGINE = InnoDB, 7385 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */ 7386 7387# check prerequisites-1 success: 1 7388# check COUNT(*) success: 1 7389# check MIN/MAX(f_int1) success: 1 7390# check MIN/MAX(f_int2) success: 1 7391INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7392SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7393CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 7394WHERE f_int1 IN (2,3); 7395ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 7396# check prerequisites-3 success: 1 7397# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 7398INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7399SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7400CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7401WHERE f_int1 IN (2,3); 7402DELETE FROM t1 WHERE f_charbig = 'delete me'; 7403INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7404SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7405CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7406WHERE f_int1 IN (2,3); 7407DELETE FROM t1 WHERE f_charbig = 'delete me'; 7408# check read via f_int1 success: 1 7409# check read via f_int2 success: 1 7410 7411# check multiple-1 success: 1 7412DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 7413 7414# check multiple-2 success: 1 7415INSERT INTO t1 SELECT * FROM t0_template 7416WHERE MOD(f_int1,3) = 0; 7417 7418# check multiple-3 success: 1 7419UPDATE t1 SET f_int1 = f_int1 + @max_row 7420WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 7421AND @max_row_div2 + @max_row_div4; 7422 7423# check multiple-4 success: 1 7424DELETE FROM t1 7425WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 7426AND @max_row_div2 + @max_row_div4 + @max_row; 7427 7428# check multiple-5 success: 1 7429SELECT COUNT(*) INTO @try_count FROM t0_template 7430WHERE MOD(f_int1,3) = 0 7431AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7432SELECT COUNT(*) INTO @clash_count 7433FROM t1 INNER JOIN t0_template USING(f_int1) 7434WHERE MOD(f_int1,3) = 0 7435AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7436SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 7437INSERT INTO t1 7438SET f_int1 = @cur_value , f_int2 = @cur_value, 7439f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7440f_charbig = '#SINGLE#'; 7441 7442# check single-1 success: 1 7443SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 7444INSERT INTO t1 7445SET f_int1 = @cur_value , f_int2 = @cur_value, 7446f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7447f_charbig = '#SINGLE#'; 7448 7449# check single-2 success: 1 7450SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 7451SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 7452UPDATE t1 SET f_int1 = @cur_value2 7453WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 7454 7455# check single-3 success: 1 7456SET @cur_value1= -1; 7457SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 7458UPDATE t1 SET f_int1 = @cur_value1 7459WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 7460 7461# check single-4 success: 1 7462SELECT MAX(f_int1) INTO @cur_value FROM t1; 7463DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 7464 7465# check single-5 success: 1 7466DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 7467 7468# check single-6 success: 1 7469INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 7470 7471# check single-7 success: 1 7472DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 7473DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 7474INSERT t1 SET f_int1 = 0 , f_int2 = 0, 7475f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 7476f_charbig = '#NULL#'; 7477INSERT INTO t1 7478SET f_int1 = NULL , f_int2 = -@max_row, 7479f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 7480f_charbig = '#NULL#'; 7481ERROR 23000: Column 'f_int1' cannot be null 7482# check null success: 1 7483DELETE FROM t1 7484WHERE f_int1 = 0 AND f_int2 = 0 7485AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 7486AND f_charbig = '#NULL#'; 7487INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7488SELECT f_int1, f_int1, '', '', 'was inserted' 7489 FROM t0_template source_tab 7490WHERE MOD(f_int1,3) = 0 7491AND f_int1 BETWEEN @max_row_div2 AND @max_row 7492ON DUPLICATE KEY 7493UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 7494f_int2 = 2 * @max_row + source_tab.f_int1, 7495f_charbig = 'was updated'; 7496 7497# check unique-1-a success: 1 7498 7499# check unique-1-b success: 1 7500DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7501UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7502f_int2 = CAST(f_char1 AS SIGNED INT), 7503f_charbig = CONCAT('===',f_char1,'===') 7504WHERE f_charbig = 'was updated'; 7505REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7506SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 7507 FROM t0_template source_tab 7508WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7509 7510# check replace success: 1 7511DELETE FROM t1 7512WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 7513DELETE FROM t1 7514WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 7515f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 7516UPDATE t1 SET f_int2 = f_int1, 7517f_char1 = CAST(f_int1 AS CHAR), 7518f_char2 = CAST(f_int1 AS CHAR), 7519f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 7520WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 7521SET AUTOCOMMIT= 0; 7522INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7523SELECT f_int1, f_int1, '', '', 'was inserted' 7524FROM t0_template source_tab 7525WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7526 7527# check transactions-1 success: 1 7528COMMIT WORK; 7529 7530# check transactions-2 success: 1 7531ROLLBACK WORK; 7532 7533# check transactions-3 success: 1 7534DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7535COMMIT WORK; 7536ROLLBACK WORK; 7537 7538# check transactions-4 success: 1 7539INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7540SELECT f_int1, f_int1, '', '', 'was inserted' 7541FROM t0_template source_tab 7542WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7543 7544# check transactions-5 success: 1 7545ROLLBACK WORK; 7546 7547# check transactions-6 success: 1 7548# INFO: Storage engine used for t1 seems to be transactional. 7549COMMIT; 7550 7551# check transactions-7 success: 1 7552DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7553COMMIT WORK; 7554SET @@session.sql_mode = 'traditional'; 7555Warnings: 7556Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 7557SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 7558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7559SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 7560'', '', 'was inserted' FROM t0_template 7561WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 7562ERROR 22012: Division by 0 7563COMMIT; 7564 7565# check transactions-8 success: 1 7566# INFO: Storage engine used for t1 seems to be able to revert 7567# changes made by the failing statement. 7568SET @@session.sql_mode = ''; 7569Warnings: 7570Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 7571SET AUTOCOMMIT= 1; 7572DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7573COMMIT WORK; 7574UPDATE t1 SET f_charbig = REPEAT('b', 1000); 7575 7576# check special-1 success: 1 7577UPDATE t1 SET f_charbig = ''; 7578 7579# check special-2 success: 1 7580UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 7581INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7582SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 7583WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7584INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7585SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7586'just inserted' FROM t0_template 7587WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7588CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 7589BEGIN 7590UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7591f_charbig = 'updated by trigger' 7592 WHERE f_int1 = new.f_int1; 7593END| 7594INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7595SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7597 7598# check trigger-1 success: 1 7599DROP TRIGGER trg_1; 7600UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7601f_int2 = CAST(f_char1 AS SIGNED INT), 7602f_charbig = 'just inserted' 7603 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7604DELETE FROM t0_aux 7605WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7606INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7607SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7608'just inserted' FROM t0_template 7609WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7610CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 7611BEGIN 7612UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7613f_charbig = 'updated by trigger' 7614 WHERE f_int1 = new.f_int1; 7615END| 7616INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7617SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 7618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7619 7620# check trigger-2 success: 1 7621DROP TRIGGER trg_1; 7622UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7623f_int2 = CAST(f_char1 AS SIGNED INT), 7624f_charbig = 'just inserted' 7625 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7626DELETE FROM t0_aux 7627WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7628INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7629SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7630'just inserted' FROM t0_template 7631WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7632CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7633BEGIN 7634UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7635f_charbig = 'updated by trigger' 7636 WHERE f_int1 = new.f_int1; 7637END| 7638UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7639WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7640 7641# check trigger-3 success: 1 7642DROP TRIGGER trg_1; 7643UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7644f_int2 = CAST(f_char1 AS SIGNED INT), 7645f_charbig = 'just inserted' 7646 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7647DELETE FROM t0_aux 7648WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7649INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7650SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7651'just inserted' FROM t0_template 7652WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7653CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 7654BEGIN 7655UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7656f_charbig = 'updated by trigger' 7657 WHERE f_int1 = - old.f_int1; 7658END| 7659UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7660WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7661 7662# check trigger-4 success: 1 7663DROP TRIGGER trg_1; 7664UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7665f_int2 = CAST(f_char1 AS SIGNED INT), 7666f_charbig = 'just inserted' 7667 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7668DELETE FROM t0_aux 7669WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7670INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7671SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7672'just inserted' FROM t0_template 7673WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7674CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7675BEGIN 7676UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7677f_charbig = 'updated by trigger' 7678 WHERE f_int1 = new.f_int1; 7679END| 7680UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7681WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7682 7683# check trigger-5 success: 1 7684DROP TRIGGER trg_1; 7685UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7686f_int2 = CAST(f_char1 AS SIGNED INT), 7687f_charbig = 'just inserted' 7688 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7689DELETE FROM t0_aux 7690WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7691INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7692SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7693'just inserted' FROM t0_template 7694WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7695CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 7696BEGIN 7697UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7698f_charbig = 'updated by trigger' 7699 WHERE f_int1 = - old.f_int1; 7700END| 7701UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 7702WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7703 7704# check trigger-6 success: 1 7705DROP TRIGGER trg_1; 7706UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7707f_int2 = CAST(f_char1 AS SIGNED INT), 7708f_charbig = 'just inserted' 7709 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7710DELETE FROM t0_aux 7711WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7712INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7713SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7714'just inserted' FROM t0_template 7715WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7716CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 7717BEGIN 7718UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7719f_charbig = 'updated by trigger' 7720 WHERE f_int1 = - old.f_int1; 7721END| 7722DELETE FROM t0_aux 7723WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7724 7725# check trigger-7 success: 1 7726DROP TRIGGER trg_1; 7727UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7728f_int2 = CAST(f_char1 AS SIGNED INT), 7729f_charbig = 'just inserted' 7730 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7731DELETE FROM t0_aux 7732WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7733INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 7734SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 7735'just inserted' FROM t0_template 7736WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7737CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 7738BEGIN 7739UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 7740f_charbig = 'updated by trigger' 7741 WHERE f_int1 = - old.f_int1; 7742END| 7743DELETE FROM t0_aux 7744WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 7745 7746# check trigger-8 success: 1 7747DROP TRIGGER trg_1; 7748UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7749f_int2 = CAST(f_char1 AS SIGNED INT), 7750f_charbig = 'just inserted' 7751 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 7752DELETE FROM t0_aux 7753WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7754DELETE FROM t1 7755WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 7756CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7757BEGIN 7758SET new.f_int1 = old.f_int1 + @max_row, 7759new.f_int2 = old.f_int2 - @max_row, 7760new.f_charbig = '####updated per update trigger####'; 7761END| 7762UPDATE t1 7763SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7764f_charbig = '####updated per update statement itself####'; 7765 7766# check trigger-9 success: 1 7767DROP TRIGGER trg_2; 7768UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7769f_int2 = CAST(f_char1 AS SIGNED INT), 7770f_charbig = CONCAT('===',f_char1,'==='); 7771CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 7772BEGIN 7773SET new.f_int1 = new.f_int1 + @max_row, 7774new.f_int2 = new.f_int2 - @max_row, 7775new.f_charbig = '####updated per update trigger####'; 7776END| 7777UPDATE t1 7778SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 7779f_charbig = '####updated per update statement itself####'; 7780 7781# check trigger-10 success: 1 7782DROP TRIGGER trg_2; 7783UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7784f_int2 = CAST(f_char1 AS SIGNED INT), 7785f_charbig = CONCAT('===',f_char1,'==='); 7786CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7787BEGIN 7788SET new.f_int1 = @my_max1 + @counter, 7789new.f_int2 = @my_min2 - @counter, 7790new.f_charbig = '####updated per insert trigger####'; 7791SET @counter = @counter + 1; 7792END| 7793SET @counter = 1; 7794SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7795INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7796SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7797CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7798WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7799ORDER BY f_int1; 7800DROP TRIGGER trg_3; 7801 7802# check trigger-11 success: 1 7803DELETE FROM t1 7804WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7805AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7806AND f_charbig = '####updated per insert trigger####'; 7807CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 7808BEGIN 7809SET new.f_int1 = @my_max1 + @counter, 7810new.f_int2 = @my_min2 - @counter, 7811new.f_charbig = '####updated per insert trigger####'; 7812SET @counter = @counter + 1; 7813END| 7814SET @counter = 1; 7815SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 7816INSERT INTO t1 (f_char1, f_char2, f_charbig) 7817SELECT CAST(f_int1 AS CHAR), 7818CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 7819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 7820ORDER BY f_int1; 7821DROP TRIGGER trg_3; 7822 7823# check trigger-12 success: 1 7824DELETE FROM t1 7825WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 7826AND f_int2 <> CAST(f_char1 AS SIGNED INT) 7827AND f_charbig = '####updated per insert trigger####'; 7828ANALYZE TABLE t1; 7829Table Op Msg_type Msg_text 7830test.t1 analyze status OK 7831CHECK TABLE t1 EXTENDED; 7832Table Op Msg_type Msg_text 7833test.t1 check status OK 7834CHECKSUM TABLE t1 EXTENDED; 7835Table Checksum 7836test.t1 <some_value> 7837OPTIMIZE TABLE t1; 7838Table Op Msg_type Msg_text 7839test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 7840test.t1 optimize status OK 7841# check layout success: 1 7842REPAIR TABLE t1 EXTENDED; 7843Table Op Msg_type Msg_text 7844test.t1 repair status OK 7845# check layout success: 1 7846TRUNCATE t1; 7847 7848# check TRUNCATE success: 1 7849# check layout success: 1 7850# End usability test (inc/partition_check.inc) 7851DROP TABLE t1; 7852DROP TABLE IF EXISTS t1; 7853CREATE TABLE t1 ( 7854f_int1 INTEGER, 7855f_int2 INTEGER, 7856f_char1 CHAR(20), 7857f_char2 CHAR(20), 7858f_charbig VARCHAR(1000) 7859, PRIMARY KEY (f_int2,f_int1) 7860) 7861PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; 7862INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7863SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7864WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 7865ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 7866INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 7867SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 7868WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 7869# Start usability test (inc/partition_check.inc) 7870create_command 7871SHOW CREATE TABLE t1; 7872Table Create Table 7873t1 CREATE TABLE `t1` ( 7874 `f_int1` bigint(20) NOT NULL, 7875 `f_int2` bigint(20) NOT NULL, 7876 `f_char1` char(20) DEFAULT NULL, 7877 `f_char2` char(20) DEFAULT NULL, 7878 `f_charbig` varchar(1000) DEFAULT NULL, 7879 PRIMARY KEY (`f_int2`,`f_int1`) 7880) ENGINE=InnoDB DEFAULT CHARSET=latin1 7881/*!50100 PARTITION BY HASH (f_int1 + f_int2) 7882PARTITIONS 2 */ 7883 7884# check prerequisites-1 success: 1 7885# check COUNT(*) success: 1 7886# check MIN/MAX(f_int1) success: 1 7887# check MIN/MAX(f_int2) success: 1 7888INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7889SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 7890CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 7891WHERE f_int1 IN (2,3); 7892ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 7893# check prerequisites-3 success: 1 7894# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 7895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7896SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7897CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7898WHERE f_int1 IN (2,3); 7899DELETE FROM t1 WHERE f_charbig = 'delete me'; 7900INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7901SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 7902CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 7903WHERE f_int1 IN (2,3); 7904DELETE FROM t1 WHERE f_charbig = 'delete me'; 7905# check read via f_int1 success: 1 7906# check read via f_int2 success: 1 7907 7908# check multiple-1 success: 1 7909DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 7910 7911# check multiple-2 success: 1 7912INSERT INTO t1 SELECT * FROM t0_template 7913WHERE MOD(f_int1,3) = 0; 7914 7915# check multiple-3 success: 1 7916UPDATE t1 SET f_int1 = f_int1 + @max_row 7917WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 7918AND @max_row_div2 + @max_row_div4; 7919 7920# check multiple-4 success: 1 7921DELETE FROM t1 7922WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 7923AND @max_row_div2 + @max_row_div4 + @max_row; 7924 7925# check multiple-5 success: 1 7926SELECT COUNT(*) INTO @try_count FROM t0_template 7927WHERE MOD(f_int1,3) = 0 7928AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7929SELECT COUNT(*) INTO @clash_count 7930FROM t1 INNER JOIN t0_template USING(f_int1) 7931WHERE MOD(f_int1,3) = 0 7932AND f_int1 BETWEEN @max_row_div2 AND @max_row; 7933SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 7934INSERT INTO t1 7935SET f_int1 = @cur_value , f_int2 = @cur_value, 7936f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7937f_charbig = '#SINGLE#'; 7938 7939# check single-1 success: 1 7940SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 7941INSERT INTO t1 7942SET f_int1 = @cur_value , f_int2 = @cur_value, 7943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 7944f_charbig = '#SINGLE#'; 7945 7946# check single-2 success: 1 7947SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 7948SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 7949UPDATE t1 SET f_int1 = @cur_value2 7950WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 7951 7952# check single-3 success: 1 7953SET @cur_value1= -1; 7954SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 7955UPDATE t1 SET f_int1 = @cur_value1 7956WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 7957 7958# check single-4 success: 1 7959SELECT MAX(f_int1) INTO @cur_value FROM t1; 7960DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 7961 7962# check single-5 success: 1 7963DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 7964 7965# check single-6 success: 1 7966INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 7967 7968# check single-7 success: 1 7969DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 7970DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 7971INSERT t1 SET f_int1 = 0 , f_int2 = 0, 7972f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 7973f_charbig = '#NULL#'; 7974INSERT INTO t1 7975SET f_int1 = NULL , f_int2 = -@max_row, 7976f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 7977f_charbig = '#NULL#'; 7978ERROR 23000: Column 'f_int1' cannot be null 7979# check null success: 1 7980DELETE FROM t1 7981WHERE f_int1 = 0 AND f_int2 = 0 7982AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 7983AND f_charbig = '#NULL#'; 7984INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 7985SELECT f_int1, f_int1, '', '', 'was inserted' 7986 FROM t0_template source_tab 7987WHERE MOD(f_int1,3) = 0 7988AND f_int1 BETWEEN @max_row_div2 AND @max_row 7989ON DUPLICATE KEY 7990UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 7991f_int2 = 2 * @max_row + source_tab.f_int1, 7992f_charbig = 'was updated'; 7993 7994# check unique-1-a success: 1 7995 7996# check unique-1-b success: 1 7997DELETE FROM t1 WHERE f_charbig = 'was inserted'; 7998UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 7999f_int2 = CAST(f_char1 AS SIGNED INT), 8000f_charbig = CONCAT('===',f_char1,'===') 8001WHERE f_charbig = 'was updated'; 8002REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8003SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 8004 FROM t0_template source_tab 8005WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8006 8007# check replace success: 1 8008DELETE FROM t1 8009WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 8010DELETE FROM t1 8011WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 8012f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 8013UPDATE t1 SET f_int2 = f_int1, 8014f_char1 = CAST(f_int1 AS CHAR), 8015f_char2 = CAST(f_int1 AS CHAR), 8016f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 8017WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 8018SET AUTOCOMMIT= 0; 8019INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8020SELECT f_int1, f_int1, '', '', 'was inserted' 8021FROM t0_template source_tab 8022WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8023 8024# check transactions-1 success: 1 8025COMMIT WORK; 8026 8027# check transactions-2 success: 1 8028ROLLBACK WORK; 8029 8030# check transactions-3 success: 1 8031DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8032COMMIT WORK; 8033ROLLBACK WORK; 8034 8035# check transactions-4 success: 1 8036INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8037SELECT f_int1, f_int1, '', '', 'was inserted' 8038FROM t0_template source_tab 8039WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8040 8041# check transactions-5 success: 1 8042ROLLBACK WORK; 8043 8044# check transactions-6 success: 1 8045# INFO: Storage engine used for t1 seems to be transactional. 8046COMMIT; 8047 8048# check transactions-7 success: 1 8049DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8050COMMIT WORK; 8051SET @@session.sql_mode = 'traditional'; 8052Warnings: 8053Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 8054SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 8055INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8056SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 8057'', '', 'was inserted' FROM t0_template 8058WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8059ERROR 22012: Division by 0 8060COMMIT; 8061 8062# check transactions-8 success: 1 8063# INFO: Storage engine used for t1 seems to be able to revert 8064# changes made by the failing statement. 8065SET @@session.sql_mode = ''; 8066Warnings: 8067Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 8068SET AUTOCOMMIT= 1; 8069DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8070COMMIT WORK; 8071UPDATE t1 SET f_charbig = REPEAT('b', 1000); 8072 8073# check special-1 success: 1 8074UPDATE t1 SET f_charbig = ''; 8075 8076# check special-2 success: 1 8077UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 8078INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8079SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 8080WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8081INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8082SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8083'just inserted' FROM t0_template 8084WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8085CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 8086BEGIN 8087UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8088f_charbig = 'updated by trigger' 8089 WHERE f_int1 = new.f_int1; 8090END| 8091INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8092SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8093WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8094 8095# check trigger-1 success: 1 8096DROP TRIGGER trg_1; 8097UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8098f_int2 = CAST(f_char1 AS SIGNED INT), 8099f_charbig = 'just inserted' 8100 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8101DELETE FROM t0_aux 8102WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8103INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8104SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8105'just inserted' FROM t0_template 8106WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8107CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 8108BEGIN 8109UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8110f_charbig = 'updated by trigger' 8111 WHERE f_int1 = new.f_int1; 8112END| 8113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8114SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8115WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8116 8117# check trigger-2 success: 1 8118DROP TRIGGER trg_1; 8119UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8120f_int2 = CAST(f_char1 AS SIGNED INT), 8121f_charbig = 'just inserted' 8122 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8123DELETE FROM t0_aux 8124WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8126SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8127'just inserted' FROM t0_template 8128WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8129CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8130BEGIN 8131UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8132f_charbig = 'updated by trigger' 8133 WHERE f_int1 = new.f_int1; 8134END| 8135UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8136WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8137 8138# check trigger-3 success: 1 8139DROP TRIGGER trg_1; 8140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8141f_int2 = CAST(f_char1 AS SIGNED INT), 8142f_charbig = 'just inserted' 8143 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8144DELETE FROM t0_aux 8145WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8146INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8147SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8148'just inserted' FROM t0_template 8149WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8150CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8151BEGIN 8152UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8153f_charbig = 'updated by trigger' 8154 WHERE f_int1 = - old.f_int1; 8155END| 8156UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8157WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8158 8159# check trigger-4 success: 1 8160DROP TRIGGER trg_1; 8161UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8162f_int2 = CAST(f_char1 AS SIGNED INT), 8163f_charbig = 'just inserted' 8164 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8165DELETE FROM t0_aux 8166WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8167INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8168SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8169'just inserted' FROM t0_template 8170WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8171CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8172BEGIN 8173UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8174f_charbig = 'updated by trigger' 8175 WHERE f_int1 = new.f_int1; 8176END| 8177UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8178WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8179 8180# check trigger-5 success: 1 8181DROP TRIGGER trg_1; 8182UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8183f_int2 = CAST(f_char1 AS SIGNED INT), 8184f_charbig = 'just inserted' 8185 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8186DELETE FROM t0_aux 8187WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8188INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8189SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8190'just inserted' FROM t0_template 8191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8192CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8193BEGIN 8194UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8195f_charbig = 'updated by trigger' 8196 WHERE f_int1 = - old.f_int1; 8197END| 8198UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8199WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8200 8201# check trigger-6 success: 1 8202DROP TRIGGER trg_1; 8203UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8204f_int2 = CAST(f_char1 AS SIGNED INT), 8205f_charbig = 'just inserted' 8206 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8207DELETE FROM t0_aux 8208WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8209INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8210SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8211'just inserted' FROM t0_template 8212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8213CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 8214BEGIN 8215UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8216f_charbig = 'updated by trigger' 8217 WHERE f_int1 = - old.f_int1; 8218END| 8219DELETE FROM t0_aux 8220WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8221 8222# check trigger-7 success: 1 8223DROP TRIGGER trg_1; 8224UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8225f_int2 = CAST(f_char1 AS SIGNED INT), 8226f_charbig = 'just inserted' 8227 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8228DELETE FROM t0_aux 8229WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8230INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8231SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8232'just inserted' FROM t0_template 8233WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8234CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 8235BEGIN 8236UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8237f_charbig = 'updated by trigger' 8238 WHERE f_int1 = - old.f_int1; 8239END| 8240DELETE FROM t0_aux 8241WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8242 8243# check trigger-8 success: 1 8244DROP TRIGGER trg_1; 8245UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8246f_int2 = CAST(f_char1 AS SIGNED INT), 8247f_charbig = 'just inserted' 8248 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8249DELETE FROM t0_aux 8250WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8251DELETE FROM t1 8252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8253CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8254BEGIN 8255SET new.f_int1 = old.f_int1 + @max_row, 8256new.f_int2 = old.f_int2 - @max_row, 8257new.f_charbig = '####updated per update trigger####'; 8258END| 8259UPDATE t1 8260SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8261f_charbig = '####updated per update statement itself####'; 8262 8263# check trigger-9 success: 1 8264DROP TRIGGER trg_2; 8265UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8266f_int2 = CAST(f_char1 AS SIGNED INT), 8267f_charbig = CONCAT('===',f_char1,'==='); 8268CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8269BEGIN 8270SET new.f_int1 = new.f_int1 + @max_row, 8271new.f_int2 = new.f_int2 - @max_row, 8272new.f_charbig = '####updated per update trigger####'; 8273END| 8274UPDATE t1 8275SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8276f_charbig = '####updated per update statement itself####'; 8277 8278# check trigger-10 success: 1 8279DROP TRIGGER trg_2; 8280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8281f_int2 = CAST(f_char1 AS SIGNED INT), 8282f_charbig = CONCAT('===',f_char1,'==='); 8283CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8284BEGIN 8285SET new.f_int1 = @my_max1 + @counter, 8286new.f_int2 = @my_min2 - @counter, 8287new.f_charbig = '####updated per insert trigger####'; 8288SET @counter = @counter + 1; 8289END| 8290SET @counter = 1; 8291SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8293SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8294CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8295WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8296ORDER BY f_int1; 8297DROP TRIGGER trg_3; 8298 8299# check trigger-11 success: 1 8300DELETE FROM t1 8301WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8302AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8303AND f_charbig = '####updated per insert trigger####'; 8304CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8305BEGIN 8306SET new.f_int1 = @my_max1 + @counter, 8307new.f_int2 = @my_min2 - @counter, 8308new.f_charbig = '####updated per insert trigger####'; 8309SET @counter = @counter + 1; 8310END| 8311SET @counter = 1; 8312SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8313INSERT INTO t1 (f_char1, f_char2, f_charbig) 8314SELECT CAST(f_int1 AS CHAR), 8315CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8316WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8317ORDER BY f_int1; 8318DROP TRIGGER trg_3; 8319 8320# check trigger-12 success: 1 8321DELETE FROM t1 8322WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8323AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8324AND f_charbig = '####updated per insert trigger####'; 8325ANALYZE TABLE t1; 8326Table Op Msg_type Msg_text 8327test.t1 analyze status OK 8328CHECK TABLE t1 EXTENDED; 8329Table Op Msg_type Msg_text 8330test.t1 check status OK 8331CHECKSUM TABLE t1 EXTENDED; 8332Table Checksum 8333test.t1 <some_value> 8334OPTIMIZE TABLE t1; 8335Table Op Msg_type Msg_text 8336test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 8337test.t1 optimize status OK 8338# check layout success: 1 8339REPAIR TABLE t1 EXTENDED; 8340Table Op Msg_type Msg_text 8341test.t1 repair status OK 8342# check layout success: 1 8343TRUNCATE t1; 8344 8345# check TRUNCATE success: 1 8346# check layout success: 1 8347# End usability test (inc/partition_check.inc) 8348DROP TABLE t1; 8349CREATE TABLE t1 ( 8350f_int1 INTEGER, 8351f_int2 INTEGER, 8352f_char1 CHAR(20), 8353f_char2 CHAR(20), 8354f_charbig VARCHAR(1000) 8355, PRIMARY KEY (f_int2,f_int1) 8356) 8357PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5; 8358INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8359SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8360WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 8361ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 8362INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8363SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8364WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 8365# Start usability test (inc/partition_check.inc) 8366create_command 8367SHOW CREATE TABLE t1; 8368Table Create Table 8369t1 CREATE TABLE `t1` ( 8370 `f_int1` bigint(20) NOT NULL, 8371 `f_int2` bigint(20) NOT NULL, 8372 `f_char1` char(20) DEFAULT NULL, 8373 `f_char2` char(20) DEFAULT NULL, 8374 `f_charbig` varchar(1000) DEFAULT NULL, 8375 PRIMARY KEY (`f_int2`,`f_int1`) 8376) ENGINE=InnoDB DEFAULT CHARSET=latin1 8377/*!50100 PARTITION BY KEY (f_int1,f_int2) 8378PARTITIONS 5 */ 8379 8380# check prerequisites-1 success: 1 8381# check COUNT(*) success: 1 8382# check MIN/MAX(f_int1) success: 1 8383# check MIN/MAX(f_int2) success: 1 8384INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8385SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8386CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 8387WHERE f_int1 IN (2,3); 8388ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 8389# check prerequisites-3 success: 1 8390# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 8391INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8392SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8393CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8394WHERE f_int1 IN (2,3); 8395DELETE FROM t1 WHERE f_charbig = 'delete me'; 8396INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8397SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8398CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8399WHERE f_int1 IN (2,3); 8400DELETE FROM t1 WHERE f_charbig = 'delete me'; 8401# check read via f_int1 success: 1 8402# check read via f_int2 success: 1 8403 8404# check multiple-1 success: 1 8405DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 8406 8407# check multiple-2 success: 1 8408INSERT INTO t1 SELECT * FROM t0_template 8409WHERE MOD(f_int1,3) = 0; 8410 8411# check multiple-3 success: 1 8412UPDATE t1 SET f_int1 = f_int1 + @max_row 8413WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 8414AND @max_row_div2 + @max_row_div4; 8415 8416# check multiple-4 success: 1 8417DELETE FROM t1 8418WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 8419AND @max_row_div2 + @max_row_div4 + @max_row; 8420 8421# check multiple-5 success: 1 8422SELECT COUNT(*) INTO @try_count FROM t0_template 8423WHERE MOD(f_int1,3) = 0 8424AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8425SELECT COUNT(*) INTO @clash_count 8426FROM t1 INNER JOIN t0_template USING(f_int1) 8427WHERE MOD(f_int1,3) = 0 8428AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8429SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 8430INSERT INTO t1 8431SET f_int1 = @cur_value , f_int2 = @cur_value, 8432f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8433f_charbig = '#SINGLE#'; 8434 8435# check single-1 success: 1 8436SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 8437INSERT INTO t1 8438SET f_int1 = @cur_value , f_int2 = @cur_value, 8439f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8440f_charbig = '#SINGLE#'; 8441 8442# check single-2 success: 1 8443SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 8444SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 8445UPDATE t1 SET f_int1 = @cur_value2 8446WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 8447 8448# check single-3 success: 1 8449SET @cur_value1= -1; 8450SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 8451UPDATE t1 SET f_int1 = @cur_value1 8452WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 8453 8454# check single-4 success: 1 8455SELECT MAX(f_int1) INTO @cur_value FROM t1; 8456DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 8457 8458# check single-5 success: 1 8459DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 8460 8461# check single-6 success: 1 8462INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 8463 8464# check single-7 success: 1 8465DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 8466DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 8467INSERT t1 SET f_int1 = 0 , f_int2 = 0, 8468f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 8469f_charbig = '#NULL#'; 8470INSERT INTO t1 8471SET f_int1 = NULL , f_int2 = -@max_row, 8472f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 8473f_charbig = '#NULL#'; 8474ERROR 23000: Column 'f_int1' cannot be null 8475# check null success: 1 8476DELETE FROM t1 8477WHERE f_int1 = 0 AND f_int2 = 0 8478AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 8479AND f_charbig = '#NULL#'; 8480INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8481SELECT f_int1, f_int1, '', '', 'was inserted' 8482 FROM t0_template source_tab 8483WHERE MOD(f_int1,3) = 0 8484AND f_int1 BETWEEN @max_row_div2 AND @max_row 8485ON DUPLICATE KEY 8486UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 8487f_int2 = 2 * @max_row + source_tab.f_int1, 8488f_charbig = 'was updated'; 8489 8490# check unique-1-a success: 1 8491 8492# check unique-1-b success: 1 8493DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8494UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8495f_int2 = CAST(f_char1 AS SIGNED INT), 8496f_charbig = CONCAT('===',f_char1,'===') 8497WHERE f_charbig = 'was updated'; 8498REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8499SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 8500 FROM t0_template source_tab 8501WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8502 8503# check replace success: 1 8504DELETE FROM t1 8505WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 8506DELETE FROM t1 8507WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 8508f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 8509UPDATE t1 SET f_int2 = f_int1, 8510f_char1 = CAST(f_int1 AS CHAR), 8511f_char2 = CAST(f_int1 AS CHAR), 8512f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 8513WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 8514SET AUTOCOMMIT= 0; 8515INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8516SELECT f_int1, f_int1, '', '', 'was inserted' 8517FROM t0_template source_tab 8518WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8519 8520# check transactions-1 success: 1 8521COMMIT WORK; 8522 8523# check transactions-2 success: 1 8524ROLLBACK WORK; 8525 8526# check transactions-3 success: 1 8527DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8528COMMIT WORK; 8529ROLLBACK WORK; 8530 8531# check transactions-4 success: 1 8532INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8533SELECT f_int1, f_int1, '', '', 'was inserted' 8534FROM t0_template source_tab 8535WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8536 8537# check transactions-5 success: 1 8538ROLLBACK WORK; 8539 8540# check transactions-6 success: 1 8541# INFO: Storage engine used for t1 seems to be transactional. 8542COMMIT; 8543 8544# check transactions-7 success: 1 8545DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8546COMMIT WORK; 8547SET @@session.sql_mode = 'traditional'; 8548Warnings: 8549Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 8550SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 8551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8552SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 8553'', '', 'was inserted' FROM t0_template 8554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 8555ERROR 22012: Division by 0 8556COMMIT; 8557 8558# check transactions-8 success: 1 8559# INFO: Storage engine used for t1 seems to be able to revert 8560# changes made by the failing statement. 8561SET @@session.sql_mode = ''; 8562Warnings: 8563Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 8564SET AUTOCOMMIT= 1; 8565DELETE FROM t1 WHERE f_charbig = 'was inserted'; 8566COMMIT WORK; 8567UPDATE t1 SET f_charbig = REPEAT('b', 1000); 8568 8569# check special-1 success: 1 8570UPDATE t1 SET f_charbig = ''; 8571 8572# check special-2 success: 1 8573UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 8574INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8575SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 8576WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8577INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8578SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8579'just inserted' FROM t0_template 8580WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8581CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 8582BEGIN 8583UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8584f_charbig = 'updated by trigger' 8585 WHERE f_int1 = new.f_int1; 8586END| 8587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8588SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8589WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8590 8591# check trigger-1 success: 1 8592DROP TRIGGER trg_1; 8593UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8594f_int2 = CAST(f_char1 AS SIGNED INT), 8595f_charbig = 'just inserted' 8596 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8597DELETE FROM t0_aux 8598WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8600SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8601'just inserted' FROM t0_template 8602WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8603CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 8604BEGIN 8605UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8606f_charbig = 'updated by trigger' 8607 WHERE f_int1 = new.f_int1; 8608END| 8609INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8610SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 8611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8612 8613# check trigger-2 success: 1 8614DROP TRIGGER trg_1; 8615UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8616f_int2 = CAST(f_char1 AS SIGNED INT), 8617f_charbig = 'just inserted' 8618 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8619DELETE FROM t0_aux 8620WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8622SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8623'just inserted' FROM t0_template 8624WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8625CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8626BEGIN 8627UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8628f_charbig = 'updated by trigger' 8629 WHERE f_int1 = new.f_int1; 8630END| 8631UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8632WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8633 8634# check trigger-3 success: 1 8635DROP TRIGGER trg_1; 8636UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8637f_int2 = CAST(f_char1 AS SIGNED INT), 8638f_charbig = 'just inserted' 8639 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8640DELETE FROM t0_aux 8641WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8643SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8644'just inserted' FROM t0_template 8645WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8646CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 8647BEGIN 8648UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8649f_charbig = 'updated by trigger' 8650 WHERE f_int1 = - old.f_int1; 8651END| 8652UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8653WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8654 8655# check trigger-4 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 UPDATE 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| 8673UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8674WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8675 8676# check trigger-5 success: 1 8677DROP TRIGGER trg_1; 8678UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8679f_int2 = CAST(f_char1 AS SIGNED INT), 8680f_charbig = 'just inserted' 8681 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8682DELETE FROM t0_aux 8683WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8684INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8685SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8686'just inserted' FROM t0_template 8687WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8688CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 8689BEGIN 8690UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8691f_charbig = 'updated by trigger' 8692 WHERE f_int1 = - old.f_int1; 8693END| 8694UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 8695WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8696 8697# check trigger-6 success: 1 8698DROP TRIGGER trg_1; 8699UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8700f_int2 = CAST(f_char1 AS SIGNED INT), 8701f_charbig = 'just inserted' 8702 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8703DELETE FROM t0_aux 8704WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8705INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8706SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8707'just inserted' FROM t0_template 8708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8709CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 8710BEGIN 8711UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8712f_charbig = 'updated by trigger' 8713 WHERE f_int1 = - old.f_int1; 8714END| 8715DELETE FROM t0_aux 8716WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8717 8718# check trigger-7 success: 1 8719DROP TRIGGER trg_1; 8720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8721f_int2 = CAST(f_char1 AS SIGNED INT), 8722f_charbig = 'just inserted' 8723 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8724DELETE FROM t0_aux 8725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 8727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 8728'just inserted' FROM t0_template 8729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8730CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 8731BEGIN 8732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 8733f_charbig = 'updated by trigger' 8734 WHERE f_int1 = - old.f_int1; 8735END| 8736DELETE FROM t0_aux 8737WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 8738 8739# check trigger-8 success: 1 8740DROP TRIGGER trg_1; 8741UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8742f_int2 = CAST(f_char1 AS SIGNED INT), 8743f_charbig = 'just inserted' 8744 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 8745DELETE FROM t0_aux 8746WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8747DELETE FROM t1 8748WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 8749CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8750BEGIN 8751SET new.f_int1 = old.f_int1 + @max_row, 8752new.f_int2 = old.f_int2 - @max_row, 8753new.f_charbig = '####updated per update trigger####'; 8754END| 8755UPDATE t1 8756SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8757f_charbig = '####updated per update statement itself####'; 8758 8759# check trigger-9 success: 1 8760DROP TRIGGER trg_2; 8761UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8762f_int2 = CAST(f_char1 AS SIGNED INT), 8763f_charbig = CONCAT('===',f_char1,'==='); 8764CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 8765BEGIN 8766SET new.f_int1 = new.f_int1 + @max_row, 8767new.f_int2 = new.f_int2 - @max_row, 8768new.f_charbig = '####updated per update trigger####'; 8769END| 8770UPDATE t1 8771SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 8772f_charbig = '####updated per update statement itself####'; 8773 8774# check trigger-10 success: 1 8775DROP TRIGGER trg_2; 8776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 8777f_int2 = CAST(f_char1 AS SIGNED INT), 8778f_charbig = CONCAT('===',f_char1,'==='); 8779CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8780BEGIN 8781SET new.f_int1 = @my_max1 + @counter, 8782new.f_int2 = @my_min2 - @counter, 8783new.f_charbig = '####updated per insert trigger####'; 8784SET @counter = @counter + 1; 8785END| 8786SET @counter = 1; 8787SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8788INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8789SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8790CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8791WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8792ORDER BY f_int1; 8793DROP TRIGGER trg_3; 8794 8795# check trigger-11 success: 1 8796DELETE FROM t1 8797WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8798AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8799AND f_charbig = '####updated per insert trigger####'; 8800CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 8801BEGIN 8802SET new.f_int1 = @my_max1 + @counter, 8803new.f_int2 = @my_min2 - @counter, 8804new.f_charbig = '####updated per insert trigger####'; 8805SET @counter = @counter + 1; 8806END| 8807SET @counter = 1; 8808SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 8809INSERT INTO t1 (f_char1, f_char2, f_charbig) 8810SELECT CAST(f_int1 AS CHAR), 8811CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 8812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 8813ORDER BY f_int1; 8814DROP TRIGGER trg_3; 8815 8816# check trigger-12 success: 1 8817DELETE FROM t1 8818WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 8819AND f_int2 <> CAST(f_char1 AS SIGNED INT) 8820AND f_charbig = '####updated per insert trigger####'; 8821ANALYZE TABLE t1; 8822Table Op Msg_type Msg_text 8823test.t1 analyze status OK 8824CHECK TABLE t1 EXTENDED; 8825Table Op Msg_type Msg_text 8826test.t1 check status OK 8827CHECKSUM TABLE t1 EXTENDED; 8828Table Checksum 8829test.t1 <some_value> 8830OPTIMIZE TABLE t1; 8831Table Op Msg_type Msg_text 8832test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 8833test.t1 optimize status OK 8834# check layout success: 1 8835REPAIR TABLE t1 EXTENDED; 8836Table Op Msg_type Msg_text 8837test.t1 repair status OK 8838# check layout success: 1 8839TRUNCATE t1; 8840 8841# check TRUNCATE success: 1 8842# check layout success: 1 8843# End usability test (inc/partition_check.inc) 8844DROP TABLE t1; 8845CREATE TABLE t1 ( 8846f_int1 INTEGER, 8847f_int2 INTEGER, 8848f_char1 CHAR(20), 8849f_char2 CHAR(20), 8850f_charbig VARCHAR(1000) 8851, PRIMARY KEY (f_int2,f_int1) 8852) 8853PARTITION BY LIST(MOD(f_int1 + f_int2,4)) 8854(PARTITION part_3 VALUES IN (-3), 8855PARTITION part_2 VALUES IN (-2), 8856PARTITION part_1 VALUES IN (-1), 8857PARTITION part_N VALUES IN (NULL), 8858PARTITION part0 VALUES IN (0), 8859PARTITION part1 VALUES IN (1), 8860PARTITION part2 VALUES IN (2), 8861PARTITION part3 VALUES IN (3)); 8862INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8863SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8864WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 8865ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 8866INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 8867SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 8868WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 8869# Start usability test (inc/partition_check.inc) 8870create_command 8871SHOW CREATE TABLE t1; 8872Table Create Table 8873t1 CREATE TABLE `t1` ( 8874 `f_int1` bigint(20) NOT NULL, 8875 `f_int2` bigint(20) NOT NULL, 8876 `f_char1` char(20) DEFAULT NULL, 8877 `f_char2` char(20) DEFAULT NULL, 8878 `f_charbig` varchar(1000) DEFAULT NULL, 8879 PRIMARY KEY (`f_int2`,`f_int1`) 8880) ENGINE=InnoDB DEFAULT CHARSET=latin1 8881/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) 8882(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, 8883 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, 8884 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, 8885 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, 8886 PARTITION part0 VALUES IN (0) ENGINE = InnoDB, 8887 PARTITION part1 VALUES IN (1) ENGINE = InnoDB, 8888 PARTITION part2 VALUES IN (2) ENGINE = InnoDB, 8889 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */ 8890 8891# check prerequisites-1 success: 1 8892# check COUNT(*) success: 1 8893# check MIN/MAX(f_int1) success: 1 8894# check MIN/MAX(f_int2) success: 1 8895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8896SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 8897CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 8898WHERE f_int1 IN (2,3); 8899ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 8900# check prerequisites-3 success: 1 8901# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 8902INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8903SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8904CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8905WHERE f_int1 IN (2,3); 8906DELETE FROM t1 WHERE f_charbig = 'delete me'; 8907INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8908SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 8909CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 8910WHERE f_int1 IN (2,3); 8911DELETE FROM t1 WHERE f_charbig = 'delete me'; 8912# check read via f_int1 success: 1 8913# check read via f_int2 success: 1 8914 8915# check multiple-1 success: 1 8916DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 8917 8918# check multiple-2 success: 1 8919INSERT INTO t1 SELECT * FROM t0_template 8920WHERE MOD(f_int1,3) = 0; 8921 8922# check multiple-3 success: 1 8923UPDATE t1 SET f_int1 = f_int1 + @max_row 8924WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 8925AND @max_row_div2 + @max_row_div4; 8926 8927# check multiple-4 success: 1 8928DELETE FROM t1 8929WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 8930AND @max_row_div2 + @max_row_div4 + @max_row; 8931 8932# check multiple-5 success: 1 8933SELECT COUNT(*) INTO @try_count FROM t0_template 8934WHERE MOD(f_int1,3) = 0 8935AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8936SELECT COUNT(*) INTO @clash_count 8937FROM t1 INNER JOIN t0_template USING(f_int1) 8938WHERE MOD(f_int1,3) = 0 8939AND f_int1 BETWEEN @max_row_div2 AND @max_row; 8940SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 8941INSERT INTO t1 8942SET f_int1 = @cur_value , f_int2 = @cur_value, 8943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8944f_charbig = '#SINGLE#'; 8945 8946# check single-1 success: 1 8947SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 8948INSERT INTO t1 8949SET f_int1 = @cur_value , f_int2 = @cur_value, 8950f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 8951f_charbig = '#SINGLE#'; 8952 8953# check single-2 success: 1 8954SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 8955SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 8956UPDATE t1 SET f_int1 = @cur_value2 8957WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 8958 8959# check single-3 success: 1 8960SET @cur_value1= -1; 8961SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 8962UPDATE t1 SET f_int1 = @cur_value1 8963WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 8964 8965# check single-4 success: 1 8966SELECT MAX(f_int1) INTO @cur_value FROM t1; 8967DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 8968 8969# check single-5 success: 1 8970DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 8971 8972# check single-6 success: 1 8973INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 8974 8975# check single-7 success: 1 8976DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 8977DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 8978INSERT t1 SET f_int1 = 0 , f_int2 = 0, 8979f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 8980f_charbig = '#NULL#'; 8981INSERT INTO t1 8982SET f_int1 = NULL , f_int2 = -@max_row, 8983f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 8984f_charbig = '#NULL#'; 8985ERROR 23000: Column 'f_int1' cannot be null 8986# check null success: 1 8987DELETE FROM t1 8988WHERE f_int1 = 0 AND f_int2 = 0 8989AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 8990AND f_charbig = '#NULL#'; 8991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 8992SELECT f_int1, f_int1, '', '', 'was inserted' 8993 FROM t0_template source_tab 8994WHERE MOD(f_int1,3) = 0 8995AND f_int1 BETWEEN @max_row_div2 AND @max_row 8996ON DUPLICATE KEY 8997UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 8998f_int2 = 2 * @max_row + source_tab.f_int1, 8999f_charbig = 'was updated'; 9000 9001# check unique-1-a success: 1 9002 9003# check unique-1-b success: 1 9004DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9006f_int2 = CAST(f_char1 AS SIGNED INT), 9007f_charbig = CONCAT('===',f_char1,'===') 9008WHERE f_charbig = 'was updated'; 9009REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9010SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 9011 FROM t0_template source_tab 9012WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9013 9014# check replace success: 1 9015DELETE FROM t1 9016WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 9017DELETE FROM t1 9018WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 9019f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 9020UPDATE t1 SET f_int2 = f_int1, 9021f_char1 = CAST(f_int1 AS CHAR), 9022f_char2 = CAST(f_int1 AS CHAR), 9023f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 9024WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 9025SET AUTOCOMMIT= 0; 9026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9027SELECT f_int1, f_int1, '', '', 'was inserted' 9028FROM t0_template source_tab 9029WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9030 9031# check transactions-1 success: 1 9032COMMIT WORK; 9033 9034# check transactions-2 success: 1 9035ROLLBACK WORK; 9036 9037# check transactions-3 success: 1 9038DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9039COMMIT WORK; 9040ROLLBACK WORK; 9041 9042# check transactions-4 success: 1 9043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9044SELECT f_int1, f_int1, '', '', 'was inserted' 9045FROM t0_template source_tab 9046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9047 9048# check transactions-5 success: 1 9049ROLLBACK WORK; 9050 9051# check transactions-6 success: 1 9052# INFO: Storage engine used for t1 seems to be transactional. 9053COMMIT; 9054 9055# check transactions-7 success: 1 9056DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9057COMMIT WORK; 9058SET @@session.sql_mode = 'traditional'; 9059Warnings: 9060Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 9061SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 9062INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9063SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 9064'', '', 'was inserted' FROM t0_template 9065WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9066ERROR 22012: Division by 0 9067COMMIT; 9068 9069# check transactions-8 success: 1 9070# INFO: Storage engine used for t1 seems to be able to revert 9071# changes made by the failing statement. 9072SET @@session.sql_mode = ''; 9073Warnings: 9074Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 9075SET AUTOCOMMIT= 1; 9076DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9077COMMIT WORK; 9078UPDATE t1 SET f_charbig = REPEAT('b', 1000); 9079 9080# check special-1 success: 1 9081UPDATE t1 SET f_charbig = ''; 9082 9083# check special-2 success: 1 9084UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 9085INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9086SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 9087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9088INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9089SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9090'just inserted' FROM t0_template 9091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9092CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 9093BEGIN 9094UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9095f_charbig = 'updated by trigger' 9096 WHERE f_int1 = new.f_int1; 9097END| 9098INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9099SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9101 9102# check trigger-1 success: 1 9103DROP TRIGGER trg_1; 9104UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9105f_int2 = CAST(f_char1 AS SIGNED INT), 9106f_charbig = 'just inserted' 9107 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9108DELETE FROM t0_aux 9109WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9110INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9111SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9112'just inserted' FROM t0_template 9113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9114CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 9115BEGIN 9116UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9117f_charbig = 'updated by trigger' 9118 WHERE f_int1 = new.f_int1; 9119END| 9120INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9121SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9123 9124# check trigger-2 success: 1 9125DROP TRIGGER trg_1; 9126UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9127f_int2 = CAST(f_char1 AS SIGNED INT), 9128f_charbig = 'just inserted' 9129 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9130DELETE FROM t0_aux 9131WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9132INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9133SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9134'just inserted' FROM t0_template 9135WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9136CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9137BEGIN 9138UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9139f_charbig = 'updated by trigger' 9140 WHERE f_int1 = new.f_int1; 9141END| 9142UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9143WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9144 9145# check trigger-3 success: 1 9146DROP TRIGGER trg_1; 9147UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9148f_int2 = CAST(f_char1 AS SIGNED INT), 9149f_charbig = 'just inserted' 9150 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9151DELETE FROM t0_aux 9152WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9153INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9154SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9155'just inserted' FROM t0_template 9156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9157CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9158BEGIN 9159UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9160f_charbig = 'updated by trigger' 9161 WHERE f_int1 = - old.f_int1; 9162END| 9163UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9164WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9165 9166# check trigger-4 success: 1 9167DROP TRIGGER trg_1; 9168UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9169f_int2 = CAST(f_char1 AS SIGNED INT), 9170f_charbig = 'just inserted' 9171 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9172DELETE FROM t0_aux 9173WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9174INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9175SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9176'just inserted' FROM t0_template 9177WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9178CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9179BEGIN 9180UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9181f_charbig = 'updated by trigger' 9182 WHERE f_int1 = new.f_int1; 9183END| 9184UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9185WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9186 9187# check trigger-5 success: 1 9188DROP TRIGGER trg_1; 9189UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9190f_int2 = CAST(f_char1 AS SIGNED INT), 9191f_charbig = 'just inserted' 9192 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9193DELETE FROM t0_aux 9194WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9195INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9196SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9197'just inserted' FROM t0_template 9198WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9199CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9200BEGIN 9201UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9202f_charbig = 'updated by trigger' 9203 WHERE f_int1 = - old.f_int1; 9204END| 9205UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9206WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9207 9208# check trigger-6 success: 1 9209DROP TRIGGER trg_1; 9210UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9211f_int2 = CAST(f_char1 AS SIGNED INT), 9212f_charbig = 'just inserted' 9213 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9214DELETE FROM t0_aux 9215WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9216INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9217SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9218'just inserted' FROM t0_template 9219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9220CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 9221BEGIN 9222UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9223f_charbig = 'updated by trigger' 9224 WHERE f_int1 = - old.f_int1; 9225END| 9226DELETE FROM t0_aux 9227WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9228 9229# check trigger-7 success: 1 9230DROP TRIGGER trg_1; 9231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9232f_int2 = CAST(f_char1 AS SIGNED INT), 9233f_charbig = 'just inserted' 9234 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9235DELETE FROM t0_aux 9236WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9238SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9239'just inserted' FROM t0_template 9240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9241CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 9242BEGIN 9243UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9244f_charbig = 'updated by trigger' 9245 WHERE f_int1 = - old.f_int1; 9246END| 9247DELETE FROM t0_aux 9248WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9249 9250# check trigger-8 success: 1 9251DROP TRIGGER trg_1; 9252UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9253f_int2 = CAST(f_char1 AS SIGNED INT), 9254f_charbig = 'just inserted' 9255 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9256DELETE FROM t0_aux 9257WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9258DELETE FROM t1 9259WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9260CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9261BEGIN 9262SET new.f_int1 = old.f_int1 + @max_row, 9263new.f_int2 = old.f_int2 - @max_row, 9264new.f_charbig = '####updated per update trigger####'; 9265END| 9266UPDATE t1 9267SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9268f_charbig = '####updated per update statement itself####'; 9269 9270# check trigger-9 success: 1 9271DROP TRIGGER trg_2; 9272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9273f_int2 = CAST(f_char1 AS SIGNED INT), 9274f_charbig = CONCAT('===',f_char1,'==='); 9275CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9276BEGIN 9277SET new.f_int1 = new.f_int1 + @max_row, 9278new.f_int2 = new.f_int2 - @max_row, 9279new.f_charbig = '####updated per update trigger####'; 9280END| 9281UPDATE t1 9282SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9283f_charbig = '####updated per update statement itself####'; 9284 9285# check trigger-10 success: 1 9286DROP TRIGGER trg_2; 9287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9288f_int2 = CAST(f_char1 AS SIGNED INT), 9289f_charbig = CONCAT('===',f_char1,'==='); 9290CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9291BEGIN 9292SET new.f_int1 = @my_max1 + @counter, 9293new.f_int2 = @my_min2 - @counter, 9294new.f_charbig = '####updated per insert trigger####'; 9295SET @counter = @counter + 1; 9296END| 9297SET @counter = 1; 9298SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9299INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9300SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9301CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9303ORDER BY f_int1; 9304DROP TRIGGER trg_3; 9305 9306# check trigger-11 success: 1 9307DELETE FROM t1 9308WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9309AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9310AND f_charbig = '####updated per insert trigger####'; 9311CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9312BEGIN 9313SET new.f_int1 = @my_max1 + @counter, 9314new.f_int2 = @my_min2 - @counter, 9315new.f_charbig = '####updated per insert trigger####'; 9316SET @counter = @counter + 1; 9317END| 9318SET @counter = 1; 9319SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9320INSERT INTO t1 (f_char1, f_char2, f_charbig) 9321SELECT CAST(f_int1 AS CHAR), 9322CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9324ORDER BY f_int1; 9325DROP TRIGGER trg_3; 9326 9327# check trigger-12 success: 1 9328DELETE FROM t1 9329WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9330AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9331AND f_charbig = '####updated per insert trigger####'; 9332ANALYZE TABLE t1; 9333Table Op Msg_type Msg_text 9334test.t1 analyze status OK 9335CHECK TABLE t1 EXTENDED; 9336Table Op Msg_type Msg_text 9337test.t1 check status OK 9338CHECKSUM TABLE t1 EXTENDED; 9339Table Checksum 9340test.t1 <some_value> 9341OPTIMIZE TABLE t1; 9342Table Op Msg_type Msg_text 9343test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 9344test.t1 optimize status OK 9345# check layout success: 1 9346REPAIR TABLE t1 EXTENDED; 9347Table Op Msg_type Msg_text 9348test.t1 repair status OK 9349# check layout success: 1 9350TRUNCATE t1; 9351 9352# check TRUNCATE success: 1 9353# check layout success: 1 9354# End usability test (inc/partition_check.inc) 9355DROP TABLE t1; 9356CREATE TABLE t1 ( 9357f_int1 INTEGER, 9358f_int2 INTEGER, 9359f_char1 CHAR(20), 9360f_char2 CHAR(20), 9361f_charbig VARCHAR(1000) 9362, PRIMARY KEY (f_int2,f_int1) 9363) 9364PARTITION BY RANGE((f_int1 + f_int2) DIV 2) 9365(PARTITION parta VALUES LESS THAN (0), 9366PARTITION partb VALUES LESS THAN (5), 9367PARTITION partc VALUES LESS THAN (10), 9368PARTITION partd VALUES LESS THAN (10 + 5), 9369PARTITION parte VALUES LESS THAN (20), 9370PARTITION partf VALUES LESS THAN (2147483646)); 9371INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9372SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9373WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 9374ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 9375INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9376SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9377WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 9378# Start usability test (inc/partition_check.inc) 9379create_command 9380SHOW CREATE TABLE t1; 9381Table Create Table 9382t1 CREATE TABLE `t1` ( 9383 `f_int1` bigint(20) NOT NULL, 9384 `f_int2` bigint(20) NOT NULL, 9385 `f_char1` char(20) DEFAULT NULL, 9386 `f_char2` char(20) DEFAULT NULL, 9387 `f_charbig` varchar(1000) DEFAULT NULL, 9388 PRIMARY KEY (`f_int2`,`f_int1`) 9389) ENGINE=InnoDB DEFAULT CHARSET=latin1 9390/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) 9391(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 9392 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 9393 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 9394 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, 9395 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, 9396 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 9397 9398# check prerequisites-1 success: 1 9399# check COUNT(*) success: 1 9400# check MIN/MAX(f_int1) success: 1 9401# check MIN/MAX(f_int2) success: 1 9402INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9403SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9404CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 9405WHERE f_int1 IN (2,3); 9406ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 9407# check prerequisites-3 success: 1 9408# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 9409INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9410SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9411CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9412WHERE f_int1 IN (2,3); 9413DELETE FROM t1 WHERE f_charbig = 'delete me'; 9414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9415SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9416CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9417WHERE f_int1 IN (2,3); 9418DELETE FROM t1 WHERE f_charbig = 'delete me'; 9419# check read via f_int1 success: 1 9420# check read via f_int2 success: 1 9421 9422# check multiple-1 success: 1 9423DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 9424 9425# check multiple-2 success: 1 9426INSERT INTO t1 SELECT * FROM t0_template 9427WHERE MOD(f_int1,3) = 0; 9428 9429# check multiple-3 success: 1 9430UPDATE t1 SET f_int1 = f_int1 + @max_row 9431WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 9432AND @max_row_div2 + @max_row_div4; 9433 9434# check multiple-4 success: 1 9435DELETE FROM t1 9436WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 9437AND @max_row_div2 + @max_row_div4 + @max_row; 9438 9439# check multiple-5 success: 1 9440SELECT COUNT(*) INTO @try_count FROM t0_template 9441WHERE MOD(f_int1,3) = 0 9442AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9443SELECT COUNT(*) INTO @clash_count 9444FROM t1 INNER JOIN t0_template USING(f_int1) 9445WHERE MOD(f_int1,3) = 0 9446AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9447SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 9448INSERT INTO t1 9449SET f_int1 = @cur_value , f_int2 = @cur_value, 9450f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9451f_charbig = '#SINGLE#'; 9452 9453# check single-1 success: 1 9454SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 9455INSERT INTO t1 9456SET f_int1 = @cur_value , f_int2 = @cur_value, 9457f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9458f_charbig = '#SINGLE#'; 9459 9460# check single-2 success: 1 9461SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 9462SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 9463UPDATE t1 SET f_int1 = @cur_value2 9464WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 9465 9466# check single-3 success: 1 9467SET @cur_value1= -1; 9468SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 9469UPDATE t1 SET f_int1 = @cur_value1 9470WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 9471 9472# check single-4 success: 1 9473SELECT MAX(f_int1) INTO @cur_value FROM t1; 9474DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 9475 9476# check single-5 success: 1 9477DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 9478 9479# check single-6 success: 1 9480INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 9481ERROR HY000: Table has no partition for value 2147483647 9482DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 9483INSERT t1 SET f_int1 = 0 , f_int2 = 0, 9484f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 9485f_charbig = '#NULL#'; 9486INSERT INTO t1 9487SET f_int1 = NULL , f_int2 = -@max_row, 9488f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 9489f_charbig = '#NULL#'; 9490ERROR 23000: Column 'f_int1' cannot be null 9491# check null success: 1 9492DELETE FROM t1 9493WHERE f_int1 = 0 AND f_int2 = 0 9494AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 9495AND f_charbig = '#NULL#'; 9496INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9497SELECT f_int1, f_int1, '', '', 'was inserted' 9498 FROM t0_template source_tab 9499WHERE MOD(f_int1,3) = 0 9500AND f_int1 BETWEEN @max_row_div2 AND @max_row 9501ON DUPLICATE KEY 9502UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 9503f_int2 = 2 * @max_row + source_tab.f_int1, 9504f_charbig = 'was updated'; 9505 9506# check unique-1-a success: 1 9507 9508# check unique-1-b success: 1 9509DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9510UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9511f_int2 = CAST(f_char1 AS SIGNED INT), 9512f_charbig = CONCAT('===',f_char1,'===') 9513WHERE f_charbig = 'was updated'; 9514REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9515SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 9516 FROM t0_template source_tab 9517WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9518 9519# check replace success: 1 9520DELETE FROM t1 9521WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 9522DELETE FROM t1 9523WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 9524f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 9525UPDATE t1 SET f_int2 = f_int1, 9526f_char1 = CAST(f_int1 AS CHAR), 9527f_char2 = CAST(f_int1 AS CHAR), 9528f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 9529WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 9530SET AUTOCOMMIT= 0; 9531INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9532SELECT f_int1, f_int1, '', '', 'was inserted' 9533FROM t0_template source_tab 9534WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9535 9536# check transactions-1 success: 1 9537COMMIT WORK; 9538 9539# check transactions-2 success: 1 9540ROLLBACK WORK; 9541 9542# check transactions-3 success: 1 9543DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9544COMMIT WORK; 9545ROLLBACK WORK; 9546 9547# check transactions-4 success: 1 9548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9549SELECT f_int1, f_int1, '', '', 'was inserted' 9550FROM t0_template source_tab 9551WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9552 9553# check transactions-5 success: 1 9554ROLLBACK WORK; 9555 9556# check transactions-6 success: 1 9557# INFO: Storage engine used for t1 seems to be transactional. 9558COMMIT; 9559 9560# check transactions-7 success: 1 9561DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9562COMMIT WORK; 9563SET @@session.sql_mode = 'traditional'; 9564Warnings: 9565Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 9566SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 9567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9568SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 9569'', '', 'was inserted' FROM t0_template 9570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 9571ERROR 22012: Division by 0 9572COMMIT; 9573 9574# check transactions-8 success: 1 9575# INFO: Storage engine used for t1 seems to be able to revert 9576# changes made by the failing statement. 9577SET @@session.sql_mode = ''; 9578Warnings: 9579Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 9580SET AUTOCOMMIT= 1; 9581DELETE FROM t1 WHERE f_charbig = 'was inserted'; 9582COMMIT WORK; 9583UPDATE t1 SET f_charbig = REPEAT('b', 1000); 9584 9585# check special-1 success: 1 9586UPDATE t1 SET f_charbig = ''; 9587 9588# check special-2 success: 1 9589UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 9590INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9591SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 9592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9593INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9594SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9595'just inserted' FROM t0_template 9596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9597CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 9598BEGIN 9599UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9600f_charbig = 'updated by trigger' 9601 WHERE f_int1 = new.f_int1; 9602END| 9603INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9604SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9606 9607# check trigger-1 success: 1 9608DROP TRIGGER trg_1; 9609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9610f_int2 = CAST(f_char1 AS SIGNED INT), 9611f_charbig = 'just inserted' 9612 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9613DELETE FROM t0_aux 9614WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9617'just inserted' FROM t0_template 9618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9619CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 9620BEGIN 9621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9622f_charbig = 'updated by trigger' 9623 WHERE f_int1 = new.f_int1; 9624END| 9625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 9627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9628 9629# check trigger-2 success: 1 9630DROP TRIGGER trg_1; 9631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9632f_int2 = CAST(f_char1 AS SIGNED INT), 9633f_charbig = 'just inserted' 9634 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9635DELETE FROM t0_aux 9636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9639'just inserted' FROM t0_template 9640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9641CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9642BEGIN 9643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9644f_charbig = 'updated by trigger' 9645 WHERE f_int1 = new.f_int1; 9646END| 9647UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9648WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9649 9650# check trigger-3 success: 1 9651DROP TRIGGER trg_1; 9652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9653f_int2 = CAST(f_char1 AS SIGNED INT), 9654f_charbig = 'just inserted' 9655 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9656DELETE FROM t0_aux 9657WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9659SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9660'just inserted' FROM t0_template 9661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9662CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 9663BEGIN 9664UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9665f_charbig = 'updated by trigger' 9666 WHERE f_int1 = - old.f_int1; 9667END| 9668UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9669WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9670 9671# check trigger-4 success: 1 9672DROP TRIGGER trg_1; 9673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9674f_int2 = CAST(f_char1 AS SIGNED INT), 9675f_charbig = 'just inserted' 9676 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9677DELETE FROM t0_aux 9678WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9679INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9680SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9681'just inserted' FROM t0_template 9682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9683CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9684BEGIN 9685UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9686f_charbig = 'updated by trigger' 9687 WHERE f_int1 = new.f_int1; 9688END| 9689UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9690WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9691 9692# check trigger-5 success: 1 9693DROP TRIGGER trg_1; 9694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9695f_int2 = CAST(f_char1 AS SIGNED INT), 9696f_charbig = 'just inserted' 9697 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9698DELETE FROM t0_aux 9699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9702'just inserted' FROM t0_template 9703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9704CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 9705BEGIN 9706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9707f_charbig = 'updated by trigger' 9708 WHERE f_int1 = - old.f_int1; 9709END| 9710UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 9711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9712 9713# check trigger-6 success: 1 9714DROP TRIGGER trg_1; 9715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9716f_int2 = CAST(f_char1 AS SIGNED INT), 9717f_charbig = 'just inserted' 9718 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9719DELETE FROM t0_aux 9720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9723'just inserted' FROM t0_template 9724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9725CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 9726BEGIN 9727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9728f_charbig = 'updated by trigger' 9729 WHERE f_int1 = - old.f_int1; 9730END| 9731DELETE FROM t0_aux 9732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9733 9734# check trigger-7 success: 1 9735DROP TRIGGER trg_1; 9736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9737f_int2 = CAST(f_char1 AS SIGNED INT), 9738f_charbig = 'just inserted' 9739 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9740DELETE FROM t0_aux 9741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 9743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 9744'just inserted' FROM t0_template 9745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9746CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 9747BEGIN 9748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 9749f_charbig = 'updated by trigger' 9750 WHERE f_int1 = - old.f_int1; 9751END| 9752DELETE FROM t0_aux 9753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 9754 9755# check trigger-8 success: 1 9756DROP TRIGGER trg_1; 9757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9758f_int2 = CAST(f_char1 AS SIGNED INT), 9759f_charbig = 'just inserted' 9760 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 9761DELETE FROM t0_aux 9762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9763DELETE FROM t1 9764WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 9765CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9766BEGIN 9767SET new.f_int1 = old.f_int1 + @max_row, 9768new.f_int2 = old.f_int2 - @max_row, 9769new.f_charbig = '####updated per update trigger####'; 9770END| 9771UPDATE t1 9772SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9773f_charbig = '####updated per update statement itself####'; 9774 9775# check trigger-9 success: 1 9776DROP TRIGGER trg_2; 9777UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9778f_int2 = CAST(f_char1 AS SIGNED INT), 9779f_charbig = CONCAT('===',f_char1,'==='); 9780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 9781BEGIN 9782SET new.f_int1 = new.f_int1 + @max_row, 9783new.f_int2 = new.f_int2 - @max_row, 9784new.f_charbig = '####updated per update trigger####'; 9785END| 9786UPDATE t1 9787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 9788f_charbig = '####updated per update statement itself####'; 9789 9790# check trigger-10 success: 1 9791DROP TRIGGER trg_2; 9792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 9793f_int2 = CAST(f_char1 AS SIGNED INT), 9794f_charbig = CONCAT('===',f_char1,'==='); 9795CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9796BEGIN 9797SET new.f_int1 = @my_max1 + @counter, 9798new.f_int2 = @my_min2 - @counter, 9799new.f_charbig = '####updated per insert trigger####'; 9800SET @counter = @counter + 1; 9801END| 9802SET @counter = 1; 9803SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9805SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9806CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9808ORDER BY f_int1; 9809DROP TRIGGER trg_3; 9810 9811# check trigger-11 success: 1 9812DELETE FROM t1 9813WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9814AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9815AND f_charbig = '####updated per insert trigger####'; 9816CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 9817BEGIN 9818SET new.f_int1 = @my_max1 + @counter, 9819new.f_int2 = @my_min2 - @counter, 9820new.f_charbig = '####updated per insert trigger####'; 9821SET @counter = @counter + 1; 9822END| 9823SET @counter = 1; 9824SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 9825INSERT INTO t1 (f_char1, f_char2, f_charbig) 9826SELECT CAST(f_int1 AS CHAR), 9827CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 9828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 9829ORDER BY f_int1; 9830DROP TRIGGER trg_3; 9831 9832# check trigger-12 success: 1 9833DELETE FROM t1 9834WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 9835AND f_int2 <> CAST(f_char1 AS SIGNED INT) 9836AND f_charbig = '####updated per insert trigger####'; 9837ANALYZE TABLE t1; 9838Table Op Msg_type Msg_text 9839test.t1 analyze status OK 9840CHECK TABLE t1 EXTENDED; 9841Table Op Msg_type Msg_text 9842test.t1 check status OK 9843CHECKSUM TABLE t1 EXTENDED; 9844Table Checksum 9845test.t1 <some_value> 9846OPTIMIZE TABLE t1; 9847Table Op Msg_type Msg_text 9848test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 9849test.t1 optimize status OK 9850# check layout success: 1 9851REPAIR TABLE t1 EXTENDED; 9852Table Op Msg_type Msg_text 9853test.t1 repair status OK 9854# check layout success: 1 9855TRUNCATE t1; 9856 9857# check TRUNCATE success: 1 9858# check layout success: 1 9859# End usability test (inc/partition_check.inc) 9860DROP TABLE t1; 9861CREATE TABLE t1 ( 9862f_int1 INTEGER, 9863f_int2 INTEGER, 9864f_char1 CHAR(20), 9865f_char2 CHAR(20), 9866f_charbig VARCHAR(1000) 9867, PRIMARY KEY (f_int2,f_int1) 9868) 9869PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 9870(PARTITION parta VALUES LESS THAN (0), 9871PARTITION partb VALUES LESS THAN (5), 9872PARTITION partc VALUES LESS THAN (10), 9873PARTITION partd VALUES LESS THAN (2147483646)); 9874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 9877ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 9878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 9879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 9880WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 9881# Start usability test (inc/partition_check.inc) 9882create_command 9883SHOW CREATE TABLE t1; 9884Table Create Table 9885t1 CREATE TABLE `t1` ( 9886 `f_int1` bigint(20) NOT NULL, 9887 `f_int2` bigint(20) NOT NULL, 9888 `f_char1` char(20) DEFAULT NULL, 9889 `f_char2` char(20) DEFAULT NULL, 9890 `f_charbig` varchar(1000) DEFAULT NULL, 9891 PRIMARY KEY (`f_int2`,`f_int1`) 9892) ENGINE=InnoDB DEFAULT CHARSET=latin1 9893/*!50100 PARTITION BY RANGE (f_int1) 9894SUBPARTITION BY HASH (f_int2) 9895SUBPARTITIONS 2 9896(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 9897 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 9898 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 9899 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 9900 9901# check prerequisites-1 success: 1 9902# check COUNT(*) success: 1 9903# check MIN/MAX(f_int1) success: 1 9904# check MIN/MAX(f_int2) success: 1 9905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9906SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 9907CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 9908WHERE f_int1 IN (2,3); 9909ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 9910# check prerequisites-3 success: 1 9911# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 9912INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9913SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9914CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9915WHERE f_int1 IN (2,3); 9916DELETE FROM t1 WHERE f_charbig = 'delete me'; 9917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 9918SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 9919CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 9920WHERE f_int1 IN (2,3); 9921DELETE FROM t1 WHERE f_charbig = 'delete me'; 9922# check read via f_int1 success: 1 9923# check read via f_int2 success: 1 9924 9925# check multiple-1 success: 1 9926DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 9927 9928# check multiple-2 success: 1 9929INSERT INTO t1 SELECT * FROM t0_template 9930WHERE MOD(f_int1,3) = 0; 9931 9932# check multiple-3 success: 1 9933UPDATE t1 SET f_int1 = f_int1 + @max_row 9934WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 9935AND @max_row_div2 + @max_row_div4; 9936 9937# check multiple-4 success: 1 9938DELETE FROM t1 9939WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 9940AND @max_row_div2 + @max_row_div4 + @max_row; 9941 9942# check multiple-5 success: 1 9943SELECT COUNT(*) INTO @try_count FROM t0_template 9944WHERE MOD(f_int1,3) = 0 9945AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9946SELECT COUNT(*) INTO @clash_count 9947FROM t1 INNER JOIN t0_template USING(f_int1) 9948WHERE MOD(f_int1,3) = 0 9949AND f_int1 BETWEEN @max_row_div2 AND @max_row; 9950SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 9951INSERT INTO t1 9952SET f_int1 = @cur_value , f_int2 = @cur_value, 9953f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9954f_charbig = '#SINGLE#'; 9955 9956# check single-1 success: 1 9957SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 9958INSERT INTO t1 9959SET f_int1 = @cur_value , f_int2 = @cur_value, 9960f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 9961f_charbig = '#SINGLE#'; 9962 9963# check single-2 success: 1 9964SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 9965SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 9966UPDATE t1 SET f_int1 = @cur_value2 9967WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 9968 9969# check single-3 success: 1 9970SET @cur_value1= -1; 9971SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 9972UPDATE t1 SET f_int1 = @cur_value1 9973WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 9974 9975# check single-4 success: 1 9976SELECT MAX(f_int1) INTO @cur_value FROM t1; 9977DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 9978 9979# check single-5 success: 1 9980DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 9981 9982# check single-6 success: 1 9983INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 9984ERROR HY000: Table has no partition for value 2147483647 9985DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 9986INSERT t1 SET f_int1 = 0 , f_int2 = 0, 9987f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 9988f_charbig = '#NULL#'; 9989INSERT INTO t1 9990SET f_int1 = NULL , f_int2 = -@max_row, 9991f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 9992f_charbig = '#NULL#'; 9993ERROR 23000: Column 'f_int1' cannot be null 9994# check null success: 1 9995DELETE FROM t1 9996WHERE f_int1 = 0 AND f_int2 = 0 9997AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 9998AND f_charbig = '#NULL#'; 9999INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10000SELECT f_int1, f_int1, '', '', 'was inserted' 10001 FROM t0_template source_tab 10002WHERE MOD(f_int1,3) = 0 10003AND f_int1 BETWEEN @max_row_div2 AND @max_row 10004ON DUPLICATE KEY 10005UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 10006f_int2 = 2 * @max_row + source_tab.f_int1, 10007f_charbig = 'was updated'; 10008 10009# check unique-1-a success: 1 10010 10011# check unique-1-b success: 1 10012DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10013UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10014f_int2 = CAST(f_char1 AS SIGNED INT), 10015f_charbig = CONCAT('===',f_char1,'===') 10016WHERE f_charbig = 'was updated'; 10017REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10018SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 10019 FROM t0_template source_tab 10020WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10021 10022# check replace success: 1 10023DELETE FROM t1 10024WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 10025DELETE FROM t1 10026WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 10027f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 10028UPDATE t1 SET f_int2 = f_int1, 10029f_char1 = CAST(f_int1 AS CHAR), 10030f_char2 = CAST(f_int1 AS CHAR), 10031f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 10032WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 10033SET AUTOCOMMIT= 0; 10034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10035SELECT f_int1, f_int1, '', '', 'was inserted' 10036FROM t0_template source_tab 10037WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10038 10039# check transactions-1 success: 1 10040COMMIT WORK; 10041 10042# check transactions-2 success: 1 10043ROLLBACK WORK; 10044 10045# check transactions-3 success: 1 10046DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10047COMMIT WORK; 10048ROLLBACK WORK; 10049 10050# check transactions-4 success: 1 10051INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10052SELECT f_int1, f_int1, '', '', 'was inserted' 10053FROM t0_template source_tab 10054WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10055 10056# check transactions-5 success: 1 10057ROLLBACK WORK; 10058 10059# check transactions-6 success: 1 10060# INFO: Storage engine used for t1 seems to be transactional. 10061COMMIT; 10062 10063# check transactions-7 success: 1 10064DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10065COMMIT WORK; 10066SET @@session.sql_mode = 'traditional'; 10067Warnings: 10068Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 10069SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 10070INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10071SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 10072'', '', 'was inserted' FROM t0_template 10073WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10074ERROR 22012: Division by 0 10075COMMIT; 10076 10077# check transactions-8 success: 1 10078# INFO: Storage engine used for t1 seems to be able to revert 10079# changes made by the failing statement. 10080SET @@session.sql_mode = ''; 10081Warnings: 10082Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 10083SET AUTOCOMMIT= 1; 10084DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10085COMMIT WORK; 10086UPDATE t1 SET f_charbig = REPEAT('b', 1000); 10087 10088# check special-1 success: 1 10089UPDATE t1 SET f_charbig = ''; 10090 10091# check special-2 success: 1 10092UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 10093INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10094SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 10095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10096INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10097SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10098'just inserted' FROM t0_template 10099WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10100CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 10101BEGIN 10102UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10103f_charbig = 'updated by trigger' 10104 WHERE f_int1 = new.f_int1; 10105END| 10106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10107SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10108WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10109 10110# check trigger-1 success: 1 10111DROP TRIGGER trg_1; 10112UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10113f_int2 = CAST(f_char1 AS SIGNED INT), 10114f_charbig = 'just inserted' 10115 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10116DELETE FROM t0_aux 10117WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10119SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10120'just inserted' FROM t0_template 10121WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10122CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 10123BEGIN 10124UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10125f_charbig = 'updated by trigger' 10126 WHERE f_int1 = new.f_int1; 10127END| 10128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10129SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10131 10132# check trigger-2 success: 1 10133DROP TRIGGER trg_1; 10134UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10135f_int2 = CAST(f_char1 AS SIGNED INT), 10136f_charbig = 'just inserted' 10137 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10138DELETE FROM t0_aux 10139WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10142'just inserted' FROM t0_template 10143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10144CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10145BEGIN 10146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10147f_charbig = 'updated by trigger' 10148 WHERE f_int1 = new.f_int1; 10149END| 10150UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10151WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10152 10153# check trigger-3 success: 1 10154DROP TRIGGER trg_1; 10155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10156f_int2 = CAST(f_char1 AS SIGNED INT), 10157f_charbig = 'just inserted' 10158 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10159DELETE FROM t0_aux 10160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10163'just inserted' FROM t0_template 10164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10165CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10166BEGIN 10167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10168f_charbig = 'updated by trigger' 10169 WHERE f_int1 = - old.f_int1; 10170END| 10171UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10173 10174# check trigger-4 success: 1 10175DROP TRIGGER trg_1; 10176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10177f_int2 = CAST(f_char1 AS SIGNED INT), 10178f_charbig = 'just inserted' 10179 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10180DELETE FROM t0_aux 10181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10184'just inserted' FROM t0_template 10185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10186CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10187BEGIN 10188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10189f_charbig = 'updated by trigger' 10190 WHERE f_int1 = new.f_int1; 10191END| 10192UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10194 10195# check trigger-5 success: 1 10196DROP TRIGGER trg_1; 10197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10198f_int2 = CAST(f_char1 AS SIGNED INT), 10199f_charbig = 'just inserted' 10200 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10201DELETE FROM t0_aux 10202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10205'just inserted' FROM t0_template 10206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10207CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10208BEGIN 10209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10210f_charbig = 'updated by trigger' 10211 WHERE f_int1 = - old.f_int1; 10212END| 10213UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10215 10216# check trigger-6 success: 1 10217DROP TRIGGER trg_1; 10218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10219f_int2 = CAST(f_char1 AS SIGNED INT), 10220f_charbig = 'just inserted' 10221 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10222DELETE FROM t0_aux 10223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10226'just inserted' FROM t0_template 10227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10228CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 10229BEGIN 10230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10231f_charbig = 'updated by trigger' 10232 WHERE f_int1 = - old.f_int1; 10233END| 10234DELETE FROM t0_aux 10235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10236 10237# check trigger-7 success: 1 10238DROP TRIGGER trg_1; 10239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10240f_int2 = CAST(f_char1 AS SIGNED INT), 10241f_charbig = 'just inserted' 10242 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10243DELETE FROM t0_aux 10244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10247'just inserted' FROM t0_template 10248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10249CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 10250BEGIN 10251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10252f_charbig = 'updated by trigger' 10253 WHERE f_int1 = - old.f_int1; 10254END| 10255DELETE FROM t0_aux 10256WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10257 10258# check trigger-8 success: 1 10259DROP TRIGGER trg_1; 10260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10261f_int2 = CAST(f_char1 AS SIGNED INT), 10262f_charbig = 'just inserted' 10263 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10264DELETE FROM t0_aux 10265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10266DELETE FROM t1 10267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10268CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10269BEGIN 10270SET new.f_int1 = old.f_int1 + @max_row, 10271new.f_int2 = old.f_int2 - @max_row, 10272new.f_charbig = '####updated per update trigger####'; 10273END| 10274UPDATE t1 10275SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10276f_charbig = '####updated per update statement itself####'; 10277 10278# check trigger-9 success: 1 10279DROP TRIGGER trg_2; 10280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10281f_int2 = CAST(f_char1 AS SIGNED INT), 10282f_charbig = CONCAT('===',f_char1,'==='); 10283CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10284BEGIN 10285SET new.f_int1 = new.f_int1 + @max_row, 10286new.f_int2 = new.f_int2 - @max_row, 10287new.f_charbig = '####updated per update trigger####'; 10288END| 10289UPDATE t1 10290SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10291f_charbig = '####updated per update statement itself####'; 10292 10293# check trigger-10 success: 1 10294DROP TRIGGER trg_2; 10295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10296f_int2 = CAST(f_char1 AS SIGNED INT), 10297f_charbig = CONCAT('===',f_char1,'==='); 10298CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10299BEGIN 10300SET new.f_int1 = @my_max1 + @counter, 10301new.f_int2 = @my_min2 - @counter, 10302new.f_charbig = '####updated per insert trigger####'; 10303SET @counter = @counter + 1; 10304END| 10305SET @counter = 1; 10306SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10307INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10308SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10309CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10311ORDER BY f_int1; 10312DROP TRIGGER trg_3; 10313 10314# check trigger-11 success: 1 10315DELETE FROM t1 10316WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10317AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10318AND f_charbig = '####updated per insert trigger####'; 10319CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10320BEGIN 10321SET new.f_int1 = @my_max1 + @counter, 10322new.f_int2 = @my_min2 - @counter, 10323new.f_charbig = '####updated per insert trigger####'; 10324SET @counter = @counter + 1; 10325END| 10326SET @counter = 1; 10327SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10328INSERT INTO t1 (f_char1, f_char2, f_charbig) 10329SELECT CAST(f_int1 AS CHAR), 10330CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10332ORDER BY f_int1; 10333DROP TRIGGER trg_3; 10334 10335# check trigger-12 success: 1 10336DELETE FROM t1 10337WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10338AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10339AND f_charbig = '####updated per insert trigger####'; 10340ANALYZE TABLE t1; 10341Table Op Msg_type Msg_text 10342test.t1 analyze status OK 10343CHECK TABLE t1 EXTENDED; 10344Table Op Msg_type Msg_text 10345test.t1 check status OK 10346CHECKSUM TABLE t1 EXTENDED; 10347Table Checksum 10348test.t1 <some_value> 10349OPTIMIZE TABLE t1; 10350Table Op Msg_type Msg_text 10351test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 10352test.t1 optimize status OK 10353# check layout success: 1 10354REPAIR TABLE t1 EXTENDED; 10355Table Op Msg_type Msg_text 10356test.t1 repair status OK 10357# check layout success: 1 10358TRUNCATE t1; 10359 10360# check TRUNCATE success: 1 10361# check layout success: 1 10362# End usability test (inc/partition_check.inc) 10363DROP TABLE t1; 10364CREATE TABLE t1 ( 10365f_int1 INTEGER, 10366f_int2 INTEGER, 10367f_char1 CHAR(20), 10368f_char2 CHAR(20), 10369f_charbig VARCHAR(1000) 10370, PRIMARY KEY (f_int2,f_int1) 10371) 10372PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) 10373(PARTITION part1 VALUES LESS THAN (0) 10374(SUBPARTITION subpart11, SUBPARTITION subpart12), 10375PARTITION part2 VALUES LESS THAN (5) 10376(SUBPARTITION subpart21, SUBPARTITION subpart22), 10377PARTITION part3 VALUES LESS THAN (10) 10378(SUBPARTITION subpart31, SUBPARTITION subpart32), 10379PARTITION part4 VALUES LESS THAN (2147483646) 10380(SUBPARTITION subpart41, SUBPARTITION subpart42)); 10381INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10382SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10383WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 10384ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 10385INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10386SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10387WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 10388# Start usability test (inc/partition_check.inc) 10389create_command 10390SHOW CREATE TABLE t1; 10391Table Create Table 10392t1 CREATE TABLE `t1` ( 10393 `f_int1` bigint(20) NOT NULL, 10394 `f_int2` bigint(20) NOT NULL, 10395 `f_char1` char(20) DEFAULT NULL, 10396 `f_char2` char(20) DEFAULT NULL, 10397 `f_charbig` varchar(1000) DEFAULT NULL, 10398 PRIMARY KEY (`f_int2`,`f_int1`) 10399) ENGINE=InnoDB DEFAULT CHARSET=latin1 10400/*!50100 PARTITION BY RANGE (f_int1) 10401SUBPARTITION BY KEY (f_int2) 10402(PARTITION part1 VALUES LESS THAN (0) 10403 (SUBPARTITION subpart11 ENGINE = InnoDB, 10404 SUBPARTITION subpart12 ENGINE = InnoDB), 10405 PARTITION part2 VALUES LESS THAN (5) 10406 (SUBPARTITION subpart21 ENGINE = InnoDB, 10407 SUBPARTITION subpart22 ENGINE = InnoDB), 10408 PARTITION part3 VALUES LESS THAN (10) 10409 (SUBPARTITION subpart31 ENGINE = InnoDB, 10410 SUBPARTITION subpart32 ENGINE = InnoDB), 10411 PARTITION part4 VALUES LESS THAN (2147483646) 10412 (SUBPARTITION subpart41 ENGINE = InnoDB, 10413 SUBPARTITION subpart42 ENGINE = InnoDB)) */ 10414 10415# check prerequisites-1 success: 1 10416# check COUNT(*) success: 1 10417# check MIN/MAX(f_int1) success: 1 10418# check MIN/MAX(f_int2) success: 1 10419INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10420SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10421CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 10422WHERE f_int1 IN (2,3); 10423ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 10424# check prerequisites-3 success: 1 10425# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 10426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10427SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10428CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10429WHERE f_int1 IN (2,3); 10430DELETE FROM t1 WHERE f_charbig = 'delete me'; 10431INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10432SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10433CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10434WHERE f_int1 IN (2,3); 10435DELETE FROM t1 WHERE f_charbig = 'delete me'; 10436# check read via f_int1 success: 1 10437# check read via f_int2 success: 1 10438 10439# check multiple-1 success: 1 10440DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 10441 10442# check multiple-2 success: 1 10443INSERT INTO t1 SELECT * FROM t0_template 10444WHERE MOD(f_int1,3) = 0; 10445 10446# check multiple-3 success: 1 10447UPDATE t1 SET f_int1 = f_int1 + @max_row 10448WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 10449AND @max_row_div2 + @max_row_div4; 10450 10451# check multiple-4 success: 1 10452DELETE FROM t1 10453WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 10454AND @max_row_div2 + @max_row_div4 + @max_row; 10455 10456# check multiple-5 success: 1 10457SELECT COUNT(*) INTO @try_count FROM t0_template 10458WHERE MOD(f_int1,3) = 0 10459AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10460SELECT COUNT(*) INTO @clash_count 10461FROM t1 INNER JOIN t0_template USING(f_int1) 10462WHERE MOD(f_int1,3) = 0 10463AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10464SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 10465INSERT INTO t1 10466SET f_int1 = @cur_value , f_int2 = @cur_value, 10467f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10468f_charbig = '#SINGLE#'; 10469 10470# check single-1 success: 1 10471SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 10472INSERT INTO t1 10473SET f_int1 = @cur_value , f_int2 = @cur_value, 10474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10475f_charbig = '#SINGLE#'; 10476 10477# check single-2 success: 1 10478SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 10479SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 10480UPDATE t1 SET f_int1 = @cur_value2 10481WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 10482 10483# check single-3 success: 1 10484SET @cur_value1= -1; 10485SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 10486UPDATE t1 SET f_int1 = @cur_value1 10487WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 10488 10489# check single-4 success: 1 10490SELECT MAX(f_int1) INTO @cur_value FROM t1; 10491DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 10492 10493# check single-5 success: 1 10494DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 10495 10496# check single-6 success: 1 10497INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 10498ERROR HY000: Table has no partition for value 2147483647 10499DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 10500INSERT t1 SET f_int1 = 0 , f_int2 = 0, 10501f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 10502f_charbig = '#NULL#'; 10503INSERT INTO t1 10504SET f_int1 = NULL , f_int2 = -@max_row, 10505f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 10506f_charbig = '#NULL#'; 10507ERROR 23000: Column 'f_int1' cannot be null 10508# check null success: 1 10509DELETE FROM t1 10510WHERE f_int1 = 0 AND f_int2 = 0 10511AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 10512AND f_charbig = '#NULL#'; 10513INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10514SELECT f_int1, f_int1, '', '', 'was inserted' 10515 FROM t0_template source_tab 10516WHERE MOD(f_int1,3) = 0 10517AND f_int1 BETWEEN @max_row_div2 AND @max_row 10518ON DUPLICATE KEY 10519UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 10520f_int2 = 2 * @max_row + source_tab.f_int1, 10521f_charbig = 'was updated'; 10522 10523# check unique-1-a success: 1 10524 10525# check unique-1-b success: 1 10526DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10527UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10528f_int2 = CAST(f_char1 AS SIGNED INT), 10529f_charbig = CONCAT('===',f_char1,'===') 10530WHERE f_charbig = 'was updated'; 10531REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10532SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 10533 FROM t0_template source_tab 10534WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10535 10536# check replace success: 1 10537DELETE FROM t1 10538WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 10539DELETE FROM t1 10540WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 10541f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 10542UPDATE t1 SET f_int2 = f_int1, 10543f_char1 = CAST(f_int1 AS CHAR), 10544f_char2 = CAST(f_int1 AS CHAR), 10545f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 10546WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 10547SET AUTOCOMMIT= 0; 10548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10549SELECT f_int1, f_int1, '', '', 'was inserted' 10550FROM t0_template source_tab 10551WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10552 10553# check transactions-1 success: 1 10554COMMIT WORK; 10555 10556# check transactions-2 success: 1 10557ROLLBACK WORK; 10558 10559# check transactions-3 success: 1 10560DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10561COMMIT WORK; 10562ROLLBACK WORK; 10563 10564# check transactions-4 success: 1 10565INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10566SELECT f_int1, f_int1, '', '', 'was inserted' 10567FROM t0_template source_tab 10568WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10569 10570# check transactions-5 success: 1 10571ROLLBACK WORK; 10572 10573# check transactions-6 success: 1 10574# INFO: Storage engine used for t1 seems to be transactional. 10575COMMIT; 10576 10577# check transactions-7 success: 1 10578DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10579COMMIT WORK; 10580SET @@session.sql_mode = 'traditional'; 10581Warnings: 10582Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 10583SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 10584INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10585SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 10586'', '', 'was inserted' FROM t0_template 10587WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 10588ERROR 22012: Division by 0 10589COMMIT; 10590 10591# check transactions-8 success: 1 10592# INFO: Storage engine used for t1 seems to be able to revert 10593# changes made by the failing statement. 10594SET @@session.sql_mode = ''; 10595Warnings: 10596Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 10597SET AUTOCOMMIT= 1; 10598DELETE FROM t1 WHERE f_charbig = 'was inserted'; 10599COMMIT WORK; 10600UPDATE t1 SET f_charbig = REPEAT('b', 1000); 10601 10602# check special-1 success: 1 10603UPDATE t1 SET f_charbig = ''; 10604 10605# check special-2 success: 1 10606UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 10607INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10608SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 10609WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10610INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10611SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10612'just inserted' FROM t0_template 10613WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10614CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 10615BEGIN 10616UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10617f_charbig = 'updated by trigger' 10618 WHERE f_int1 = new.f_int1; 10619END| 10620INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10621SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10622WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10623 10624# check trigger-1 success: 1 10625DROP TRIGGER trg_1; 10626UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10627f_int2 = CAST(f_char1 AS SIGNED INT), 10628f_charbig = 'just inserted' 10629 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10630DELETE FROM t0_aux 10631WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10632INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10633SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10634'just inserted' FROM t0_template 10635WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10636CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 10637BEGIN 10638UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10639f_charbig = 'updated by trigger' 10640 WHERE f_int1 = new.f_int1; 10641END| 10642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10643SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 10644WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10645 10646# check trigger-2 success: 1 10647DROP TRIGGER trg_1; 10648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10649f_int2 = CAST(f_char1 AS SIGNED INT), 10650f_charbig = 'just inserted' 10651 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10652DELETE FROM t0_aux 10653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10656'just inserted' FROM t0_template 10657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10658CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10659BEGIN 10660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10661f_charbig = 'updated by trigger' 10662 WHERE f_int1 = new.f_int1; 10663END| 10664UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10666 10667# check trigger-3 success: 1 10668DROP TRIGGER trg_1; 10669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10670f_int2 = CAST(f_char1 AS SIGNED INT), 10671f_charbig = 'just inserted' 10672 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10673DELETE FROM t0_aux 10674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10677'just inserted' FROM t0_template 10678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10679CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 10680BEGIN 10681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10682f_charbig = 'updated by trigger' 10683 WHERE f_int1 = - old.f_int1; 10684END| 10685UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10687 10688# check trigger-4 success: 1 10689DROP TRIGGER trg_1; 10690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10691f_int2 = CAST(f_char1 AS SIGNED INT), 10692f_charbig = 'just inserted' 10693 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10694DELETE FROM t0_aux 10695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10698'just inserted' FROM t0_template 10699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10700CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10701BEGIN 10702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10703f_charbig = 'updated by trigger' 10704 WHERE f_int1 = new.f_int1; 10705END| 10706UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10708 10709# check trigger-5 success: 1 10710DROP TRIGGER trg_1; 10711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10712f_int2 = CAST(f_char1 AS SIGNED INT), 10713f_charbig = 'just inserted' 10714 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10715DELETE FROM t0_aux 10716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10719'just inserted' FROM t0_template 10720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10721CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 10722BEGIN 10723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10724f_charbig = 'updated by trigger' 10725 WHERE f_int1 = - old.f_int1; 10726END| 10727UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 10728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10729 10730# check trigger-6 success: 1 10731DROP TRIGGER trg_1; 10732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10733f_int2 = CAST(f_char1 AS SIGNED INT), 10734f_charbig = 'just inserted' 10735 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10736DELETE FROM t0_aux 10737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10740'just inserted' FROM t0_template 10741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10742CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 10743BEGIN 10744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10745f_charbig = 'updated by trigger' 10746 WHERE f_int1 = - old.f_int1; 10747END| 10748DELETE FROM t0_aux 10749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10750 10751# check trigger-7 success: 1 10752DROP TRIGGER trg_1; 10753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10754f_int2 = CAST(f_char1 AS SIGNED INT), 10755f_charbig = 'just inserted' 10756 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10757DELETE FROM t0_aux 10758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10759INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 10760SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 10761'just inserted' FROM t0_template 10762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10763CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 10764BEGIN 10765UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 10766f_charbig = 'updated by trigger' 10767 WHERE f_int1 = - old.f_int1; 10768END| 10769DELETE FROM t0_aux 10770WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 10771 10772# check trigger-8 success: 1 10773DROP TRIGGER trg_1; 10774UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10775f_int2 = CAST(f_char1 AS SIGNED INT), 10776f_charbig = 'just inserted' 10777 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 10778DELETE FROM t0_aux 10779WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10780DELETE FROM t1 10781WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 10782CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10783BEGIN 10784SET new.f_int1 = old.f_int1 + @max_row, 10785new.f_int2 = old.f_int2 - @max_row, 10786new.f_charbig = '####updated per update trigger####'; 10787END| 10788UPDATE t1 10789SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10790f_charbig = '####updated per update statement itself####'; 10791 10792# check trigger-9 success: 1 10793DROP TRIGGER trg_2; 10794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10795f_int2 = CAST(f_char1 AS SIGNED INT), 10796f_charbig = CONCAT('===',f_char1,'==='); 10797CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 10798BEGIN 10799SET new.f_int1 = new.f_int1 + @max_row, 10800new.f_int2 = new.f_int2 - @max_row, 10801new.f_charbig = '####updated per update trigger####'; 10802END| 10803UPDATE t1 10804SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 10805f_charbig = '####updated per update statement itself####'; 10806 10807# check trigger-10 success: 1 10808DROP TRIGGER trg_2; 10809UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 10810f_int2 = CAST(f_char1 AS SIGNED INT), 10811f_charbig = CONCAT('===',f_char1,'==='); 10812CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10813BEGIN 10814SET new.f_int1 = @my_max1 + @counter, 10815new.f_int2 = @my_min2 - @counter, 10816new.f_charbig = '####updated per insert trigger####'; 10817SET @counter = @counter + 1; 10818END| 10819SET @counter = 1; 10820SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10821INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10822SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10823CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10825ORDER BY f_int1; 10826DROP TRIGGER trg_3; 10827 10828# check trigger-11 success: 1 10829DELETE FROM t1 10830WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10831AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10832AND f_charbig = '####updated per insert trigger####'; 10833CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 10834BEGIN 10835SET new.f_int1 = @my_max1 + @counter, 10836new.f_int2 = @my_min2 - @counter, 10837new.f_charbig = '####updated per insert trigger####'; 10838SET @counter = @counter + 1; 10839END| 10840SET @counter = 1; 10841SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 10842INSERT INTO t1 (f_char1, f_char2, f_charbig) 10843SELECT CAST(f_int1 AS CHAR), 10844CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 10845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 10846ORDER BY f_int1; 10847DROP TRIGGER trg_3; 10848 10849# check trigger-12 success: 1 10850DELETE FROM t1 10851WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 10852AND f_int2 <> CAST(f_char1 AS SIGNED INT) 10853AND f_charbig = '####updated per insert trigger####'; 10854ANALYZE TABLE t1; 10855Table Op Msg_type Msg_text 10856test.t1 analyze status OK 10857CHECK TABLE t1 EXTENDED; 10858Table Op Msg_type Msg_text 10859test.t1 check status OK 10860CHECKSUM TABLE t1 EXTENDED; 10861Table Checksum 10862test.t1 <some_value> 10863OPTIMIZE TABLE t1; 10864Table Op Msg_type Msg_text 10865test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 10866test.t1 optimize status OK 10867# check layout success: 1 10868REPAIR TABLE t1 EXTENDED; 10869Table Op Msg_type Msg_text 10870test.t1 repair status OK 10871# check layout success: 1 10872TRUNCATE t1; 10873 10874# check TRUNCATE success: 1 10875# check layout success: 1 10876# End usability test (inc/partition_check.inc) 10877DROP TABLE t1; 10878CREATE TABLE t1 ( 10879f_int1 INTEGER, 10880f_int2 INTEGER, 10881f_char1 CHAR(20), 10882f_char2 CHAR(20), 10883f_charbig VARCHAR(1000) 10884, PRIMARY KEY (f_int2,f_int1) 10885) 10886PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) 10887(PARTITION part1 VALUES IN (0) 10888(SUBPARTITION sp11, SUBPARTITION sp12), 10889PARTITION part2 VALUES IN (1) 10890(SUBPARTITION sp21, SUBPARTITION sp22), 10891PARTITION part3 VALUES IN (2) 10892(SUBPARTITION sp31, SUBPARTITION sp32), 10893PARTITION part4 VALUES IN (NULL) 10894(SUBPARTITION sp41, SUBPARTITION sp42)); 10895INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10896SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10897WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 10898ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 10899INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 10900SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 10901WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 10902# Start usability test (inc/partition_check.inc) 10903create_command 10904SHOW CREATE TABLE t1; 10905Table Create Table 10906t1 CREATE TABLE `t1` ( 10907 `f_int1` bigint(20) NOT NULL, 10908 `f_int2` bigint(20) NOT NULL, 10909 `f_char1` char(20) DEFAULT NULL, 10910 `f_char2` char(20) DEFAULT NULL, 10911 `f_charbig` varchar(1000) DEFAULT NULL, 10912 PRIMARY KEY (`f_int2`,`f_int1`) 10913) ENGINE=InnoDB DEFAULT CHARSET=latin1 10914/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) 10915SUBPARTITION BY HASH (f_int2 + 1) 10916(PARTITION part1 VALUES IN (0) 10917 (SUBPARTITION sp11 ENGINE = InnoDB, 10918 SUBPARTITION sp12 ENGINE = InnoDB), 10919 PARTITION part2 VALUES IN (1) 10920 (SUBPARTITION sp21 ENGINE = InnoDB, 10921 SUBPARTITION sp22 ENGINE = InnoDB), 10922 PARTITION part3 VALUES IN (2) 10923 (SUBPARTITION sp31 ENGINE = InnoDB, 10924 SUBPARTITION sp32 ENGINE = InnoDB), 10925 PARTITION part4 VALUES IN (NULL) 10926 (SUBPARTITION sp41 ENGINE = InnoDB, 10927 SUBPARTITION sp42 ENGINE = InnoDB)) */ 10928 10929# check prerequisites-1 success: 1 10930# check COUNT(*) success: 1 10931# check MIN/MAX(f_int1) success: 1 10932# check MIN/MAX(f_int2) success: 1 10933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10934SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 10935CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 10936WHERE f_int1 IN (2,3); 10937ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 10938# check prerequisites-3 success: 1 10939# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 10940INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10941SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10942CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10943WHERE f_int1 IN (2,3); 10944DELETE FROM t1 WHERE f_charbig = 'delete me'; 10945INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 10946SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 10947CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 10948WHERE f_int1 IN (2,3); 10949DELETE FROM t1 WHERE f_charbig = 'delete me'; 10950# check read via f_int1 success: 1 10951# check read via f_int2 success: 1 10952 10953# check multiple-1 success: 1 10954DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 10955 10956# check multiple-2 success: 1 10957INSERT INTO t1 SELECT * FROM t0_template 10958WHERE MOD(f_int1,3) = 0; 10959 10960# check multiple-3 success: 1 10961UPDATE t1 SET f_int1 = f_int1 + @max_row 10962WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 10963AND @max_row_div2 + @max_row_div4; 10964 10965# check multiple-4 success: 1 10966DELETE FROM t1 10967WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 10968AND @max_row_div2 + @max_row_div4 + @max_row; 10969 10970# check multiple-5 success: 1 10971SELECT COUNT(*) INTO @try_count FROM t0_template 10972WHERE MOD(f_int1,3) = 0 10973AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10974SELECT COUNT(*) INTO @clash_count 10975FROM t1 INNER JOIN t0_template USING(f_int1) 10976WHERE MOD(f_int1,3) = 0 10977AND f_int1 BETWEEN @max_row_div2 AND @max_row; 10978SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 10979INSERT INTO t1 10980SET f_int1 = @cur_value , f_int2 = @cur_value, 10981f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10982f_charbig = '#SINGLE#'; 10983 10984# check single-1 success: 1 10985SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 10986INSERT INTO t1 10987SET f_int1 = @cur_value , f_int2 = @cur_value, 10988f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 10989f_charbig = '#SINGLE#'; 10990 10991# check single-2 success: 1 10992SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 10993SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 10994UPDATE t1 SET f_int1 = @cur_value2 10995WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 10996 10997# check single-3 success: 1 10998SET @cur_value1= -1; 10999SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 11000UPDATE t1 SET f_int1 = @cur_value1 11001WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 11002 11003# check single-4 success: 1 11004SELECT MAX(f_int1) INTO @cur_value FROM t1; 11005DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 11006 11007# check single-5 success: 1 11008DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 11009 11010# check single-6 success: 1 11011INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 11012 11013# check single-7 success: 1 11014DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 11015DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 11016INSERT t1 SET f_int1 = 0 , f_int2 = 0, 11017f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 11018f_charbig = '#NULL#'; 11019INSERT INTO t1 11020SET f_int1 = NULL , f_int2 = -@max_row, 11021f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 11022f_charbig = '#NULL#'; 11023ERROR 23000: Column 'f_int1' cannot be null 11024# check null success: 1 11025DELETE FROM t1 11026WHERE f_int1 = 0 AND f_int2 = 0 11027AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 11028AND f_charbig = '#NULL#'; 11029INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11030SELECT f_int1, f_int1, '', '', 'was inserted' 11031 FROM t0_template source_tab 11032WHERE MOD(f_int1,3) = 0 11033AND f_int1 BETWEEN @max_row_div2 AND @max_row 11034ON DUPLICATE KEY 11035UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 11036f_int2 = 2 * @max_row + source_tab.f_int1, 11037f_charbig = 'was updated'; 11038 11039# check unique-1-a success: 1 11040 11041# check unique-1-b success: 1 11042DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11043UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11044f_int2 = CAST(f_char1 AS SIGNED INT), 11045f_charbig = CONCAT('===',f_char1,'===') 11046WHERE f_charbig = 'was updated'; 11047REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11048SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 11049 FROM t0_template source_tab 11050WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11051 11052# check replace success: 1 11053DELETE FROM t1 11054WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 11055DELETE FROM t1 11056WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 11057f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 11058UPDATE t1 SET f_int2 = f_int1, 11059f_char1 = CAST(f_int1 AS CHAR), 11060f_char2 = CAST(f_int1 AS CHAR), 11061f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 11062WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 11063SET AUTOCOMMIT= 0; 11064INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11065SELECT f_int1, f_int1, '', '', 'was inserted' 11066FROM t0_template source_tab 11067WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11068 11069# check transactions-1 success: 1 11070COMMIT WORK; 11071 11072# check transactions-2 success: 1 11073ROLLBACK WORK; 11074 11075# check transactions-3 success: 1 11076DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11077COMMIT WORK; 11078ROLLBACK WORK; 11079 11080# check transactions-4 success: 1 11081INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11082SELECT f_int1, f_int1, '', '', 'was inserted' 11083FROM t0_template source_tab 11084WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11085 11086# check transactions-5 success: 1 11087ROLLBACK WORK; 11088 11089# check transactions-6 success: 1 11090# INFO: Storage engine used for t1 seems to be transactional. 11091COMMIT; 11092 11093# check transactions-7 success: 1 11094DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11095COMMIT WORK; 11096SET @@session.sql_mode = 'traditional'; 11097Warnings: 11098Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 11099SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 11100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11101SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 11102'', '', 'was inserted' FROM t0_template 11103WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11104ERROR 22012: Division by 0 11105COMMIT; 11106 11107# check transactions-8 success: 1 11108# INFO: Storage engine used for t1 seems to be able to revert 11109# changes made by the failing statement. 11110SET @@session.sql_mode = ''; 11111Warnings: 11112Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 11113SET AUTOCOMMIT= 1; 11114DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11115COMMIT WORK; 11116UPDATE t1 SET f_charbig = REPEAT('b', 1000); 11117 11118# check special-1 success: 1 11119UPDATE t1 SET f_charbig = ''; 11120 11121# check special-2 success: 1 11122UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 11123INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11124SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 11125WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11126INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11127SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11128'just inserted' FROM t0_template 11129WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11130CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 11131BEGIN 11132UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11133f_charbig = 'updated by trigger' 11134 WHERE f_int1 = new.f_int1; 11135END| 11136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11137SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11138WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11139 11140# check trigger-1 success: 1 11141DROP TRIGGER trg_1; 11142UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11143f_int2 = CAST(f_char1 AS SIGNED INT), 11144f_charbig = 'just inserted' 11145 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11146DELETE FROM t0_aux 11147WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11148INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11149SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11150'just inserted' FROM t0_template 11151WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11152CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 11153BEGIN 11154UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11155f_charbig = 'updated by trigger' 11156 WHERE f_int1 = new.f_int1; 11157END| 11158INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11159SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11161 11162# check trigger-2 success: 1 11163DROP TRIGGER trg_1; 11164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11165f_int2 = CAST(f_char1 AS SIGNED INT), 11166f_charbig = 'just inserted' 11167 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11168DELETE FROM t0_aux 11169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11172'just inserted' FROM t0_template 11173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11174CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11175BEGIN 11176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11177f_charbig = 'updated by trigger' 11178 WHERE f_int1 = new.f_int1; 11179END| 11180UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11182 11183# check trigger-3 success: 1 11184DROP TRIGGER trg_1; 11185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11186f_int2 = CAST(f_char1 AS SIGNED INT), 11187f_charbig = 'just inserted' 11188 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11189DELETE FROM t0_aux 11190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11193'just inserted' FROM t0_template 11194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11195CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11196BEGIN 11197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11198f_charbig = 'updated by trigger' 11199 WHERE f_int1 = - old.f_int1; 11200END| 11201UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11203 11204# check trigger-4 success: 1 11205DROP TRIGGER trg_1; 11206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11207f_int2 = CAST(f_char1 AS SIGNED INT), 11208f_charbig = 'just inserted' 11209 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11210DELETE FROM t0_aux 11211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11212INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11213SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11214'just inserted' FROM t0_template 11215WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11216CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11217BEGIN 11218UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11219f_charbig = 'updated by trigger' 11220 WHERE f_int1 = new.f_int1; 11221END| 11222UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11223WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11224 11225# check trigger-5 success: 1 11226DROP TRIGGER trg_1; 11227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11228f_int2 = CAST(f_char1 AS SIGNED INT), 11229f_charbig = 'just inserted' 11230 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11231DELETE FROM t0_aux 11232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11235'just inserted' FROM t0_template 11236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11237CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11238BEGIN 11239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11240f_charbig = 'updated by trigger' 11241 WHERE f_int1 = - old.f_int1; 11242END| 11243UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11245 11246# check trigger-6 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 BEFORE DELETE 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 = - old.f_int1; 11263END| 11264DELETE FROM t0_aux 11265WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11266 11267# check trigger-7 success: 1 11268DROP TRIGGER trg_1; 11269UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11270f_int2 = CAST(f_char1 AS SIGNED INT), 11271f_charbig = 'just inserted' 11272 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11273DELETE FROM t0_aux 11274WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11275INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11276SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11277'just inserted' FROM t0_template 11278WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11279CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 11280BEGIN 11281UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11282f_charbig = 'updated by trigger' 11283 WHERE f_int1 = - old.f_int1; 11284END| 11285DELETE FROM t0_aux 11286WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11287 11288# check trigger-8 success: 1 11289DROP TRIGGER trg_1; 11290UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11291f_int2 = CAST(f_char1 AS SIGNED INT), 11292f_charbig = 'just inserted' 11293 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11294DELETE FROM t0_aux 11295WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11296DELETE FROM t1 11297WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11298CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11299BEGIN 11300SET new.f_int1 = old.f_int1 + @max_row, 11301new.f_int2 = old.f_int2 - @max_row, 11302new.f_charbig = '####updated per update trigger####'; 11303END| 11304UPDATE t1 11305SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11306f_charbig = '####updated per update statement itself####'; 11307 11308# check trigger-9 success: 1 11309DROP TRIGGER trg_2; 11310UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11311f_int2 = CAST(f_char1 AS SIGNED INT), 11312f_charbig = CONCAT('===',f_char1,'==='); 11313CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11314BEGIN 11315SET new.f_int1 = new.f_int1 + @max_row, 11316new.f_int2 = new.f_int2 - @max_row, 11317new.f_charbig = '####updated per update trigger####'; 11318END| 11319UPDATE t1 11320SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11321f_charbig = '####updated per update statement itself####'; 11322 11323# check trigger-10 success: 1 11324DROP TRIGGER trg_2; 11325UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11326f_int2 = CAST(f_char1 AS SIGNED INT), 11327f_charbig = CONCAT('===',f_char1,'==='); 11328CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11329BEGIN 11330SET new.f_int1 = @my_max1 + @counter, 11331new.f_int2 = @my_min2 - @counter, 11332new.f_charbig = '####updated per insert trigger####'; 11333SET @counter = @counter + 1; 11334END| 11335SET @counter = 1; 11336SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11337INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11338SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11339CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11340WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11341ORDER BY f_int1; 11342DROP TRIGGER trg_3; 11343 11344# check trigger-11 success: 1 11345DELETE FROM t1 11346WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11347AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11348AND f_charbig = '####updated per insert trigger####'; 11349CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11350BEGIN 11351SET new.f_int1 = @my_max1 + @counter, 11352new.f_int2 = @my_min2 - @counter, 11353new.f_charbig = '####updated per insert trigger####'; 11354SET @counter = @counter + 1; 11355END| 11356SET @counter = 1; 11357SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11358INSERT INTO t1 (f_char1, f_char2, f_charbig) 11359SELECT CAST(f_int1 AS CHAR), 11360CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11361WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11362ORDER BY f_int1; 11363DROP TRIGGER trg_3; 11364 11365# check trigger-12 success: 1 11366DELETE FROM t1 11367WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11368AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11369AND f_charbig = '####updated per insert trigger####'; 11370ANALYZE TABLE t1; 11371Table Op Msg_type Msg_text 11372test.t1 analyze status OK 11373CHECK TABLE t1 EXTENDED; 11374Table Op Msg_type Msg_text 11375test.t1 check status OK 11376CHECKSUM TABLE t1 EXTENDED; 11377Table Checksum 11378test.t1 <some_value> 11379OPTIMIZE TABLE t1; 11380Table Op Msg_type Msg_text 11381test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 11382test.t1 optimize status OK 11383# check layout success: 1 11384REPAIR TABLE t1 EXTENDED; 11385Table Op Msg_type Msg_text 11386test.t1 repair status OK 11387# check layout success: 1 11388TRUNCATE t1; 11389 11390# check TRUNCATE success: 1 11391# check layout success: 1 11392# End usability test (inc/partition_check.inc) 11393DROP TABLE t1; 11394CREATE TABLE t1 ( 11395f_int1 INTEGER, 11396f_int2 INTEGER, 11397f_char1 CHAR(20), 11398f_char2 CHAR(20), 11399f_charbig VARCHAR(1000) 11400, PRIMARY KEY (f_int2,f_int1) 11401) 11402PARTITION BY LIST(ABS(MOD(f_int1,2))) 11403SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 11404(PARTITION part1 VALUES IN (0), 11405PARTITION part2 VALUES IN (1), 11406PARTITION part3 VALUES IN (NULL)); 11407INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11408SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11409WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 11410ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 11411INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11412SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11413WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 11414# Start usability test (inc/partition_check.inc) 11415create_command 11416SHOW CREATE TABLE t1; 11417Table Create Table 11418t1 CREATE TABLE `t1` ( 11419 `f_int1` bigint(20) NOT NULL, 11420 `f_int2` bigint(20) NOT NULL, 11421 `f_char1` char(20) DEFAULT NULL, 11422 `f_char2` char(20) DEFAULT NULL, 11423 `f_charbig` varchar(1000) DEFAULT NULL, 11424 PRIMARY KEY (`f_int2`,`f_int1`) 11425) ENGINE=InnoDB DEFAULT CHARSET=latin1 11426/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) 11427SUBPARTITION BY KEY (f_int2) 11428SUBPARTITIONS 3 11429(PARTITION part1 VALUES IN (0) ENGINE = InnoDB, 11430 PARTITION part2 VALUES IN (1) ENGINE = InnoDB, 11431 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */ 11432 11433# check prerequisites-1 success: 1 11434# check COUNT(*) success: 1 11435# check MIN/MAX(f_int1) success: 1 11436# check MIN/MAX(f_int2) success: 1 11437INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11438SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11439CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 11440WHERE f_int1 IN (2,3); 11441ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' 11442# check prerequisites-3 success: 1 11443# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 11444INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11445SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11446CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11447WHERE f_int1 IN (2,3); 11448DELETE FROM t1 WHERE f_charbig = 'delete me'; 11449INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11450SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11451CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11452WHERE f_int1 IN (2,3); 11453DELETE FROM t1 WHERE f_charbig = 'delete me'; 11454# check read via f_int1 success: 1 11455# check read via f_int2 success: 1 11456 11457# check multiple-1 success: 1 11458DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 11459 11460# check multiple-2 success: 1 11461INSERT INTO t1 SELECT * FROM t0_template 11462WHERE MOD(f_int1,3) = 0; 11463 11464# check multiple-3 success: 1 11465UPDATE t1 SET f_int1 = f_int1 + @max_row 11466WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 11467AND @max_row_div2 + @max_row_div4; 11468 11469# check multiple-4 success: 1 11470DELETE FROM t1 11471WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 11472AND @max_row_div2 + @max_row_div4 + @max_row; 11473 11474# check multiple-5 success: 1 11475SELECT COUNT(*) INTO @try_count FROM t0_template 11476WHERE MOD(f_int1,3) = 0 11477AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11478SELECT COUNT(*) INTO @clash_count 11479FROM t1 INNER JOIN t0_template USING(f_int1) 11480WHERE MOD(f_int1,3) = 0 11481AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11482SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 11483INSERT INTO t1 11484SET f_int1 = @cur_value , f_int2 = @cur_value, 11485f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11486f_charbig = '#SINGLE#'; 11487 11488# check single-1 success: 1 11489SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 11490INSERT INTO t1 11491SET f_int1 = @cur_value , f_int2 = @cur_value, 11492f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11493f_charbig = '#SINGLE#'; 11494 11495# check single-2 success: 1 11496SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 11497SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 11498UPDATE t1 SET f_int1 = @cur_value2 11499WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 11500 11501# check single-3 success: 1 11502SET @cur_value1= -1; 11503SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 11504UPDATE t1 SET f_int1 = @cur_value1 11505WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 11506 11507# check single-4 success: 1 11508SELECT MAX(f_int1) INTO @cur_value FROM t1; 11509DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 11510 11511# check single-5 success: 1 11512DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 11513 11514# check single-6 success: 1 11515INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 11516 11517# check single-7 success: 1 11518DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 11519DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 11520INSERT t1 SET f_int1 = 0 , f_int2 = 0, 11521f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 11522f_charbig = '#NULL#'; 11523INSERT INTO t1 11524SET f_int1 = NULL , f_int2 = -@max_row, 11525f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 11526f_charbig = '#NULL#'; 11527ERROR 23000: Column 'f_int1' cannot be null 11528# check null success: 1 11529DELETE FROM t1 11530WHERE f_int1 = 0 AND f_int2 = 0 11531AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 11532AND f_charbig = '#NULL#'; 11533INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11534SELECT f_int1, f_int1, '', '', 'was inserted' 11535 FROM t0_template source_tab 11536WHERE MOD(f_int1,3) = 0 11537AND f_int1 BETWEEN @max_row_div2 AND @max_row 11538ON DUPLICATE KEY 11539UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 11540f_int2 = 2 * @max_row + source_tab.f_int1, 11541f_charbig = 'was updated'; 11542 11543# check unique-1-a success: 1 11544 11545# check unique-1-b success: 1 11546DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11548f_int2 = CAST(f_char1 AS SIGNED INT), 11549f_charbig = CONCAT('===',f_char1,'===') 11550WHERE f_charbig = 'was updated'; 11551REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11552SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 11553 FROM t0_template source_tab 11554WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11555 11556# check replace success: 1 11557DELETE FROM t1 11558WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 11559DELETE FROM t1 11560WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 11561f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 11562UPDATE t1 SET f_int2 = f_int1, 11563f_char1 = CAST(f_int1 AS CHAR), 11564f_char2 = CAST(f_int1 AS CHAR), 11565f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 11566WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 11567SET AUTOCOMMIT= 0; 11568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11569SELECT f_int1, f_int1, '', '', 'was inserted' 11570FROM t0_template source_tab 11571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11572 11573# check transactions-1 success: 1 11574COMMIT WORK; 11575 11576# check transactions-2 success: 1 11577ROLLBACK WORK; 11578 11579# check transactions-3 success: 1 11580DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11581COMMIT WORK; 11582ROLLBACK WORK; 11583 11584# check transactions-4 success: 1 11585INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11586SELECT f_int1, f_int1, '', '', 'was inserted' 11587FROM t0_template source_tab 11588WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11589 11590# check transactions-5 success: 1 11591ROLLBACK WORK; 11592 11593# check transactions-6 success: 1 11594# INFO: Storage engine used for t1 seems to be transactional. 11595COMMIT; 11596 11597# check transactions-7 success: 1 11598DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11599COMMIT WORK; 11600SET @@session.sql_mode = 'traditional'; 11601Warnings: 11602Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 11603SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 11604INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11605SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 11606'', '', 'was inserted' FROM t0_template 11607WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 11608ERROR 22012: Division by 0 11609COMMIT; 11610 11611# check transactions-8 success: 1 11612# INFO: Storage engine used for t1 seems to be able to revert 11613# changes made by the failing statement. 11614SET @@session.sql_mode = ''; 11615Warnings: 11616Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 11617SET AUTOCOMMIT= 1; 11618DELETE FROM t1 WHERE f_charbig = 'was inserted'; 11619COMMIT WORK; 11620UPDATE t1 SET f_charbig = REPEAT('b', 1000); 11621 11622# check special-1 success: 1 11623UPDATE t1 SET f_charbig = ''; 11624 11625# check special-2 success: 1 11626UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 11627INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11628SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 11629WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11630INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11631SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11632'just inserted' FROM t0_template 11633WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11634CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 11635BEGIN 11636UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11637f_charbig = 'updated by trigger' 11638 WHERE f_int1 = new.f_int1; 11639END| 11640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11641SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11643 11644# check trigger-1 success: 1 11645DROP TRIGGER trg_1; 11646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11647f_int2 = CAST(f_char1 AS SIGNED INT), 11648f_charbig = 'just inserted' 11649 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11650DELETE FROM t0_aux 11651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11654'just inserted' FROM t0_template 11655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11656CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 11657BEGIN 11658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11659f_charbig = 'updated by trigger' 11660 WHERE f_int1 = new.f_int1; 11661END| 11662INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11663SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 11664WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11665 11666# check trigger-2 success: 1 11667DROP TRIGGER trg_1; 11668UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11669f_int2 = CAST(f_char1 AS SIGNED INT), 11670f_charbig = 'just inserted' 11671 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11672DELETE FROM t0_aux 11673WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11674INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11675SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11676'just inserted' FROM t0_template 11677WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11678CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11679BEGIN 11680UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11681f_charbig = 'updated by trigger' 11682 WHERE f_int1 = new.f_int1; 11683END| 11684UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11685WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11686 11687# check trigger-3 success: 1 11688DROP TRIGGER trg_1; 11689UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11690f_int2 = CAST(f_char1 AS SIGNED INT), 11691f_charbig = 'just inserted' 11692 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11693DELETE FROM t0_aux 11694WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11695INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11696SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11697'just inserted' FROM t0_template 11698WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11699CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 11700BEGIN 11701UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11702f_charbig = 'updated by trigger' 11703 WHERE f_int1 = - old.f_int1; 11704END| 11705UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11706WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11707 11708# check trigger-4 success: 1 11709DROP TRIGGER trg_1; 11710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11711f_int2 = CAST(f_char1 AS SIGNED INT), 11712f_charbig = 'just inserted' 11713 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11714DELETE FROM t0_aux 11715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11718'just inserted' FROM t0_template 11719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11720CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11721BEGIN 11722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11723f_charbig = 'updated by trigger' 11724 WHERE f_int1 = new.f_int1; 11725END| 11726UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11728 11729# check trigger-5 success: 1 11730DROP TRIGGER trg_1; 11731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11732f_int2 = CAST(f_char1 AS SIGNED INT), 11733f_charbig = 'just inserted' 11734 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11735DELETE FROM t0_aux 11736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11739'just inserted' FROM t0_template 11740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11741CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 11742BEGIN 11743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11744f_charbig = 'updated by trigger' 11745 WHERE f_int1 = - old.f_int1; 11746END| 11747UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 11748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11749 11750# check trigger-6 success: 1 11751DROP TRIGGER trg_1; 11752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11753f_int2 = CAST(f_char1 AS SIGNED INT), 11754f_charbig = 'just inserted' 11755 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11756DELETE FROM t0_aux 11757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11760'just inserted' FROM t0_template 11761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11762CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 11763BEGIN 11764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11765f_charbig = 'updated by trigger' 11766 WHERE f_int1 = - old.f_int1; 11767END| 11768DELETE FROM t0_aux 11769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11770 11771# check trigger-7 success: 1 11772DROP TRIGGER trg_1; 11773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11774f_int2 = CAST(f_char1 AS SIGNED INT), 11775f_charbig = 'just inserted' 11776 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11777DELETE FROM t0_aux 11778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11779INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 11780SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 11781'just inserted' FROM t0_template 11782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11783CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 11784BEGIN 11785UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 11786f_charbig = 'updated by trigger' 11787 WHERE f_int1 = - old.f_int1; 11788END| 11789DELETE FROM t0_aux 11790WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 11791 11792# check trigger-8 success: 1 11793DROP TRIGGER trg_1; 11794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11795f_int2 = CAST(f_char1 AS SIGNED INT), 11796f_charbig = 'just inserted' 11797 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 11798DELETE FROM t0_aux 11799WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11800DELETE FROM t1 11801WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 11802CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11803BEGIN 11804SET new.f_int1 = old.f_int1 + @max_row, 11805new.f_int2 = old.f_int2 - @max_row, 11806new.f_charbig = '####updated per update trigger####'; 11807END| 11808UPDATE t1 11809SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11810f_charbig = '####updated per update statement itself####'; 11811 11812# check trigger-9 success: 1 11813DROP TRIGGER trg_2; 11814UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11815f_int2 = CAST(f_char1 AS SIGNED INT), 11816f_charbig = CONCAT('===',f_char1,'==='); 11817CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 11818BEGIN 11819SET new.f_int1 = new.f_int1 + @max_row, 11820new.f_int2 = new.f_int2 - @max_row, 11821new.f_charbig = '####updated per update trigger####'; 11822END| 11823UPDATE t1 11824SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 11825f_charbig = '####updated per update statement itself####'; 11826 11827# check trigger-10 success: 1 11828DROP TRIGGER trg_2; 11829UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 11830f_int2 = CAST(f_char1 AS SIGNED INT), 11831f_charbig = CONCAT('===',f_char1,'==='); 11832CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11833BEGIN 11834SET new.f_int1 = @my_max1 + @counter, 11835new.f_int2 = @my_min2 - @counter, 11836new.f_charbig = '####updated per insert trigger####'; 11837SET @counter = @counter + 1; 11838END| 11839SET @counter = 1; 11840SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11841INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11842SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11843CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11844WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11845ORDER BY f_int1; 11846DROP TRIGGER trg_3; 11847 11848# check trigger-11 success: 1 11849DELETE FROM t1 11850WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11851AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11852AND f_charbig = '####updated per insert trigger####'; 11853CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 11854BEGIN 11855SET new.f_int1 = @my_max1 + @counter, 11856new.f_int2 = @my_min2 - @counter, 11857new.f_charbig = '####updated per insert trigger####'; 11858SET @counter = @counter + 1; 11859END| 11860SET @counter = 1; 11861SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 11862INSERT INTO t1 (f_char1, f_char2, f_charbig) 11863SELECT CAST(f_int1 AS CHAR), 11864CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 11865WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 11866ORDER BY f_int1; 11867DROP TRIGGER trg_3; 11868 11869# check trigger-12 success: 1 11870DELETE FROM t1 11871WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 11872AND f_int2 <> CAST(f_char1 AS SIGNED INT) 11873AND f_charbig = '####updated per insert trigger####'; 11874ANALYZE TABLE t1; 11875Table Op Msg_type Msg_text 11876test.t1 analyze status OK 11877CHECK TABLE t1 EXTENDED; 11878Table Op Msg_type Msg_text 11879test.t1 check status OK 11880CHECKSUM TABLE t1 EXTENDED; 11881Table Checksum 11882test.t1 <some_value> 11883OPTIMIZE TABLE t1; 11884Table Op Msg_type Msg_text 11885test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 11886test.t1 optimize status OK 11887# check layout success: 1 11888REPAIR TABLE t1 EXTENDED; 11889Table Op Msg_type Msg_text 11890test.t1 repair status OK 11891# check layout success: 1 11892TRUNCATE t1; 11893 11894# check TRUNCATE success: 1 11895# check layout success: 1 11896# End usability test (inc/partition_check.inc) 11897DROP TABLE t1; 11898# 1.3.3 UNIQUE INDEX exists 11899DROP TABLE IF EXISTS t1; 11900CREATE TABLE t1 ( 11901f_int1 INTEGER, 11902f_int2 INTEGER, 11903f_char1 CHAR(20), 11904f_char2 CHAR(20), 11905f_charbig VARCHAR(1000) 11906, UNIQUE INDEX uidx (f_int1,f_int2) 11907) 11908PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; 11909INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11910SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11911WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 11912ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 11913INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 11914SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 11915WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 11916# Start usability test (inc/partition_check.inc) 11917create_command 11918SHOW CREATE TABLE t1; 11919Table Create Table 11920t1 CREATE TABLE `t1` ( 11921 `f_int1` bigint(20) DEFAULT NULL, 11922 `f_int2` bigint(20) DEFAULT NULL, 11923 `f_char1` char(20) DEFAULT NULL, 11924 `f_char2` char(20) DEFAULT NULL, 11925 `f_charbig` varchar(1000) DEFAULT NULL, 11926 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 11927) ENGINE=InnoDB DEFAULT CHARSET=latin1 11928/*!50100 PARTITION BY HASH (f_int1 + f_int2) 11929PARTITIONS 2 */ 11930 11931# check prerequisites-1 success: 1 11932# check COUNT(*) success: 1 11933# check MIN/MAX(f_int1) success: 1 11934# check MIN/MAX(f_int2) success: 1 11935INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11936SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 11937CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 11938WHERE f_int1 IN (2,3); 11939ERROR 23000: Duplicate entry '2-2' for key 'uidx' 11940# check prerequisites-3 success: 1 11941# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 11942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11943SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11944CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11945WHERE f_int1 IN (2,3); 11946DELETE FROM t1 WHERE f_charbig = 'delete me'; 11947INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 11948SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 11949CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 11950WHERE f_int1 IN (2,3); 11951DELETE FROM t1 WHERE f_charbig = 'delete me'; 11952# check read via f_int1 success: 1 11953# check read via f_int2 success: 1 11954 11955# check multiple-1 success: 1 11956DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 11957 11958# check multiple-2 success: 1 11959INSERT INTO t1 SELECT * FROM t0_template 11960WHERE MOD(f_int1,3) = 0; 11961 11962# check multiple-3 success: 1 11963UPDATE t1 SET f_int1 = f_int1 + @max_row 11964WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 11965AND @max_row_div2 + @max_row_div4; 11966 11967# check multiple-4 success: 1 11968DELETE FROM t1 11969WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 11970AND @max_row_div2 + @max_row_div4 + @max_row; 11971 11972# check multiple-5 success: 1 11973SELECT COUNT(*) INTO @try_count FROM t0_template 11974WHERE MOD(f_int1,3) = 0 11975AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11976SELECT COUNT(*) INTO @clash_count 11977FROM t1 INNER JOIN t0_template USING(f_int1) 11978WHERE MOD(f_int1,3) = 0 11979AND f_int1 BETWEEN @max_row_div2 AND @max_row; 11980SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 11981INSERT INTO t1 11982SET f_int1 = @cur_value , f_int2 = @cur_value, 11983f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11984f_charbig = '#SINGLE#'; 11985 11986# check single-1 success: 1 11987SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 11988INSERT INTO t1 11989SET f_int1 = @cur_value , f_int2 = @cur_value, 11990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 11991f_charbig = '#SINGLE#'; 11992 11993# check single-2 success: 1 11994SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 11995SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 11996UPDATE t1 SET f_int1 = @cur_value2 11997WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 11998 11999# check single-3 success: 1 12000SET @cur_value1= -1; 12001SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 12002UPDATE t1 SET f_int1 = @cur_value1 12003WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 12004 12005# check single-4 success: 1 12006SELECT MAX(f_int1) INTO @cur_value FROM t1; 12007DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 12008 12009# check single-5 success: 1 12010DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 12011 12012# check single-6 success: 1 12013INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 12014 12015# check single-7 success: 1 12016DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 12017DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 12018INSERT t1 SET f_int1 = 0 , f_int2 = 0, 12019f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 12020f_charbig = '#NULL#'; 12021INSERT INTO t1 12022SET f_int1 = NULL , f_int2 = -@max_row, 12023f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 12024f_charbig = '#NULL#'; 12025# check null success: 1 12026 12027# check null-1 success: 1 12028UPDATE t1 SET f_int1 = -@max_row 12029WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12030AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12031 12032# check null-2 success: 1 12033UPDATE t1 SET f_int1 = NULL 12034WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12035AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12036 12037# check null-3 success: 1 12038DELETE FROM t1 12039WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12040AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12041 12042# check null-4 success: 1 12043DELETE FROM t1 12044WHERE f_int1 = 0 AND f_int2 = 0 12045AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 12046AND f_charbig = '#NULL#'; 12047INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12048SELECT f_int1, f_int1, '', '', 'was inserted' 12049 FROM t0_template source_tab 12050WHERE MOD(f_int1,3) = 0 12051AND f_int1 BETWEEN @max_row_div2 AND @max_row 12052ON DUPLICATE KEY 12053UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 12054f_int2 = 2 * @max_row + source_tab.f_int1, 12055f_charbig = 'was updated'; 12056 12057# check unique-1-a success: 1 12058 12059# check unique-1-b success: 1 12060DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12061UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12062f_int2 = CAST(f_char1 AS SIGNED INT), 12063f_charbig = CONCAT('===',f_char1,'===') 12064WHERE f_charbig = 'was updated'; 12065REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12066SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 12067 FROM t0_template source_tab 12068WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12069 12070# check replace success: 1 12071DELETE FROM t1 12072WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 12073DELETE FROM t1 12074WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 12075f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 12076UPDATE t1 SET f_int2 = f_int1, 12077f_char1 = CAST(f_int1 AS CHAR), 12078f_char2 = CAST(f_int1 AS CHAR), 12079f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 12080WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 12081SET AUTOCOMMIT= 0; 12082INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12083SELECT f_int1, f_int1, '', '', 'was inserted' 12084FROM t0_template source_tab 12085WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12086 12087# check transactions-1 success: 1 12088COMMIT WORK; 12089 12090# check transactions-2 success: 1 12091ROLLBACK WORK; 12092 12093# check transactions-3 success: 1 12094DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12095COMMIT WORK; 12096ROLLBACK WORK; 12097 12098# check transactions-4 success: 1 12099INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12100SELECT f_int1, f_int1, '', '', 'was inserted' 12101FROM t0_template source_tab 12102WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12103 12104# check transactions-5 success: 1 12105ROLLBACK WORK; 12106 12107# check transactions-6 success: 1 12108# INFO: Storage engine used for t1 seems to be transactional. 12109COMMIT; 12110 12111# check transactions-7 success: 1 12112DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12113COMMIT WORK; 12114SET @@session.sql_mode = 'traditional'; 12115Warnings: 12116Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 12117SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 12118INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12119SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 12120'', '', 'was inserted' FROM t0_template 12121WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12122ERROR 22012: Division by 0 12123COMMIT; 12124 12125# check transactions-8 success: 1 12126# INFO: Storage engine used for t1 seems to be able to revert 12127# changes made by the failing statement. 12128SET @@session.sql_mode = ''; 12129Warnings: 12130Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 12131SET AUTOCOMMIT= 1; 12132DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12133COMMIT WORK; 12134UPDATE t1 SET f_charbig = REPEAT('b', 1000); 12135 12136# check special-1 success: 1 12137UPDATE t1 SET f_charbig = ''; 12138 12139# check special-2 success: 1 12140UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 12141INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12142SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 12143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12144INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12145SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12146'just inserted' FROM t0_template 12147WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12148CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 12149BEGIN 12150UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12151f_charbig = 'updated by trigger' 12152 WHERE f_int1 = new.f_int1; 12153END| 12154INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12155SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12157 12158# check trigger-1 success: 1 12159DROP TRIGGER trg_1; 12160UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12161f_int2 = CAST(f_char1 AS SIGNED INT), 12162f_charbig = 'just inserted' 12163 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12164DELETE FROM t0_aux 12165WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12166INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12167SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12168'just inserted' FROM t0_template 12169WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12170CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 12171BEGIN 12172UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12173f_charbig = 'updated by trigger' 12174 WHERE f_int1 = new.f_int1; 12175END| 12176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12177SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12179 12180# check trigger-2 success: 1 12181DROP TRIGGER trg_1; 12182UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12183f_int2 = CAST(f_char1 AS SIGNED INT), 12184f_charbig = 'just inserted' 12185 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12186DELETE FROM t0_aux 12187WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12188INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12189SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12190'just inserted' FROM t0_template 12191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12192CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12193BEGIN 12194UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12195f_charbig = 'updated by trigger' 12196 WHERE f_int1 = new.f_int1; 12197END| 12198UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12199WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12200 12201# check trigger-3 success: 1 12202DROP TRIGGER trg_1; 12203UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12204f_int2 = CAST(f_char1 AS SIGNED INT), 12205f_charbig = 'just inserted' 12206 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12207DELETE FROM t0_aux 12208WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12209INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12210SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12211'just inserted' FROM t0_template 12212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12213CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12214BEGIN 12215UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12216f_charbig = 'updated by trigger' 12217 WHERE f_int1 = - old.f_int1; 12218END| 12219UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12220WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12221 12222# check trigger-4 success: 1 12223DROP TRIGGER trg_1; 12224UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12225f_int2 = CAST(f_char1 AS SIGNED INT), 12226f_charbig = 'just inserted' 12227 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12228DELETE FROM t0_aux 12229WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12230INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12231SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12232'just inserted' FROM t0_template 12233WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12234CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12235BEGIN 12236UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12237f_charbig = 'updated by trigger' 12238 WHERE f_int1 = new.f_int1; 12239END| 12240UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12241WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12242 12243# check trigger-5 success: 1 12244DROP TRIGGER trg_1; 12245UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12246f_int2 = CAST(f_char1 AS SIGNED INT), 12247f_charbig = 'just inserted' 12248 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12249DELETE FROM t0_aux 12250WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12251INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12252SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12253'just inserted' FROM t0_template 12254WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12255CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12256BEGIN 12257UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12258f_charbig = 'updated by trigger' 12259 WHERE f_int1 = - old.f_int1; 12260END| 12261UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12262WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12263 12264# check trigger-6 success: 1 12265DROP TRIGGER trg_1; 12266UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12267f_int2 = CAST(f_char1 AS SIGNED INT), 12268f_charbig = 'just inserted' 12269 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12270DELETE FROM t0_aux 12271WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12272INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12273SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12274'just inserted' FROM t0_template 12275WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12276CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 12277BEGIN 12278UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12279f_charbig = 'updated by trigger' 12280 WHERE f_int1 = - old.f_int1; 12281END| 12282DELETE FROM t0_aux 12283WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12284 12285# check trigger-7 success: 1 12286DROP TRIGGER trg_1; 12287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12288f_int2 = CAST(f_char1 AS SIGNED INT), 12289f_charbig = 'just inserted' 12290 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12291DELETE FROM t0_aux 12292WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12293INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12294SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12295'just inserted' FROM t0_template 12296WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12297CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 12298BEGIN 12299UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12300f_charbig = 'updated by trigger' 12301 WHERE f_int1 = - old.f_int1; 12302END| 12303DELETE FROM t0_aux 12304WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12305 12306# check trigger-8 success: 1 12307DROP TRIGGER trg_1; 12308UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12309f_int2 = CAST(f_char1 AS SIGNED INT), 12310f_charbig = 'just inserted' 12311 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12312DELETE FROM t0_aux 12313WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12314DELETE FROM t1 12315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12316CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12317BEGIN 12318SET new.f_int1 = old.f_int1 + @max_row, 12319new.f_int2 = old.f_int2 - @max_row, 12320new.f_charbig = '####updated per update trigger####'; 12321END| 12322UPDATE t1 12323SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12324f_charbig = '####updated per update statement itself####'; 12325 12326# check trigger-9 success: 1 12327DROP TRIGGER trg_2; 12328UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12329f_int2 = CAST(f_char1 AS SIGNED INT), 12330f_charbig = CONCAT('===',f_char1,'==='); 12331CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12332BEGIN 12333SET new.f_int1 = new.f_int1 + @max_row, 12334new.f_int2 = new.f_int2 - @max_row, 12335new.f_charbig = '####updated per update trigger####'; 12336END| 12337UPDATE t1 12338SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12339f_charbig = '####updated per update statement itself####'; 12340 12341# check trigger-10 success: 1 12342DROP TRIGGER trg_2; 12343UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12344f_int2 = CAST(f_char1 AS SIGNED INT), 12345f_charbig = CONCAT('===',f_char1,'==='); 12346CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12347BEGIN 12348SET new.f_int1 = @my_max1 + @counter, 12349new.f_int2 = @my_min2 - @counter, 12350new.f_charbig = '####updated per insert trigger####'; 12351SET @counter = @counter + 1; 12352END| 12353SET @counter = 1; 12354SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12355INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12356SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12357CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12358WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12359ORDER BY f_int1; 12360DROP TRIGGER trg_3; 12361 12362# check trigger-11 success: 1 12363DELETE FROM t1 12364WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12365AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12366AND f_charbig = '####updated per insert trigger####'; 12367CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12368BEGIN 12369SET new.f_int1 = @my_max1 + @counter, 12370new.f_int2 = @my_min2 - @counter, 12371new.f_charbig = '####updated per insert trigger####'; 12372SET @counter = @counter + 1; 12373END| 12374SET @counter = 1; 12375SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12376INSERT INTO t1 (f_char1, f_char2, f_charbig) 12377SELECT CAST(f_int1 AS CHAR), 12378CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12380ORDER BY f_int1; 12381DROP TRIGGER trg_3; 12382 12383# check trigger-12 success: 1 12384DELETE FROM t1 12385WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12386AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12387AND f_charbig = '####updated per insert trigger####'; 12388ANALYZE TABLE t1; 12389Table Op Msg_type Msg_text 12390test.t1 analyze status OK 12391CHECK TABLE t1 EXTENDED; 12392Table Op Msg_type Msg_text 12393test.t1 check status OK 12394CHECKSUM TABLE t1 EXTENDED; 12395Table Checksum 12396test.t1 <some_value> 12397OPTIMIZE TABLE t1; 12398Table Op Msg_type Msg_text 12399test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 12400test.t1 optimize status OK 12401# check layout success: 1 12402REPAIR TABLE t1 EXTENDED; 12403Table Op Msg_type Msg_text 12404test.t1 repair status OK 12405# check layout success: 1 12406TRUNCATE t1; 12407 12408# check TRUNCATE success: 1 12409# check layout success: 1 12410# End usability test (inc/partition_check.inc) 12411DROP TABLE t1; 12412CREATE TABLE t1 ( 12413f_int1 INTEGER, 12414f_int2 INTEGER, 12415f_char1 CHAR(20), 12416f_char2 CHAR(20), 12417f_charbig VARCHAR(1000) 12418, UNIQUE INDEX uidx (f_int1,f_int2) 12419) 12420PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5; 12421INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12422SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12423WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 12424ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 12425INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12426SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12427WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 12428# Start usability test (inc/partition_check.inc) 12429create_command 12430SHOW CREATE TABLE t1; 12431Table Create Table 12432t1 CREATE TABLE `t1` ( 12433 `f_int1` bigint(20) DEFAULT NULL, 12434 `f_int2` bigint(20) DEFAULT NULL, 12435 `f_char1` char(20) DEFAULT NULL, 12436 `f_char2` char(20) DEFAULT NULL, 12437 `f_charbig` varchar(1000) DEFAULT NULL, 12438 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 12439) ENGINE=InnoDB DEFAULT CHARSET=latin1 12440/*!50100 PARTITION BY KEY (f_int1,f_int2) 12441PARTITIONS 5 */ 12442 12443# check prerequisites-1 success: 1 12444# check COUNT(*) success: 1 12445# check MIN/MAX(f_int1) success: 1 12446# check MIN/MAX(f_int2) success: 1 12447INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12448SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12449CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 12450WHERE f_int1 IN (2,3); 12451ERROR 23000: Duplicate entry '2-2' for key 'uidx' 12452# check prerequisites-3 success: 1 12453# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 12454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12455SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12456CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12457WHERE f_int1 IN (2,3); 12458DELETE FROM t1 WHERE f_charbig = 'delete me'; 12459INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12460SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12461CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12462WHERE f_int1 IN (2,3); 12463DELETE FROM t1 WHERE f_charbig = 'delete me'; 12464# check read via f_int1 success: 1 12465# check read via f_int2 success: 1 12466 12467# check multiple-1 success: 1 12468DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 12469 12470# check multiple-2 success: 1 12471INSERT INTO t1 SELECT * FROM t0_template 12472WHERE MOD(f_int1,3) = 0; 12473 12474# check multiple-3 success: 1 12475UPDATE t1 SET f_int1 = f_int1 + @max_row 12476WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 12477AND @max_row_div2 + @max_row_div4; 12478 12479# check multiple-4 success: 1 12480DELETE FROM t1 12481WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 12482AND @max_row_div2 + @max_row_div4 + @max_row; 12483 12484# check multiple-5 success: 1 12485SELECT COUNT(*) INTO @try_count FROM t0_template 12486WHERE MOD(f_int1,3) = 0 12487AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12488SELECT COUNT(*) INTO @clash_count 12489FROM t1 INNER JOIN t0_template USING(f_int1) 12490WHERE MOD(f_int1,3) = 0 12491AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12492SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 12493INSERT INTO t1 12494SET f_int1 = @cur_value , f_int2 = @cur_value, 12495f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12496f_charbig = '#SINGLE#'; 12497 12498# check single-1 success: 1 12499SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 12500INSERT INTO t1 12501SET f_int1 = @cur_value , f_int2 = @cur_value, 12502f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 12503f_charbig = '#SINGLE#'; 12504 12505# check single-2 success: 1 12506SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 12507SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 12508UPDATE t1 SET f_int1 = @cur_value2 12509WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 12510 12511# check single-3 success: 1 12512SET @cur_value1= -1; 12513SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 12514UPDATE t1 SET f_int1 = @cur_value1 12515WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 12516 12517# check single-4 success: 1 12518SELECT MAX(f_int1) INTO @cur_value FROM t1; 12519DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 12520 12521# check single-5 success: 1 12522DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 12523 12524# check single-6 success: 1 12525INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 12526 12527# check single-7 success: 1 12528DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 12529DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 12530INSERT t1 SET f_int1 = 0 , f_int2 = 0, 12531f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 12532f_charbig = '#NULL#'; 12533INSERT INTO t1 12534SET f_int1 = NULL , f_int2 = -@max_row, 12535f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 12536f_charbig = '#NULL#'; 12537# check null success: 1 12538 12539# check null-1 success: 1 12540UPDATE t1 SET f_int1 = -@max_row 12541WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12542AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12543 12544# check null-2 success: 1 12545UPDATE t1 SET f_int1 = NULL 12546WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12547AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12548 12549# check null-3 success: 1 12550DELETE FROM t1 12551WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 12552AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 12553 12554# check null-4 success: 1 12555DELETE FROM t1 12556WHERE f_int1 = 0 AND f_int2 = 0 12557AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 12558AND f_charbig = '#NULL#'; 12559INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12560SELECT f_int1, f_int1, '', '', 'was inserted' 12561 FROM t0_template source_tab 12562WHERE MOD(f_int1,3) = 0 12563AND f_int1 BETWEEN @max_row_div2 AND @max_row 12564ON DUPLICATE KEY 12565UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 12566f_int2 = 2 * @max_row + source_tab.f_int1, 12567f_charbig = 'was updated'; 12568 12569# check unique-1-a success: 1 12570 12571# check unique-1-b success: 1 12572DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12573UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12574f_int2 = CAST(f_char1 AS SIGNED INT), 12575f_charbig = CONCAT('===',f_char1,'===') 12576WHERE f_charbig = 'was updated'; 12577REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12578SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 12579 FROM t0_template source_tab 12580WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 12581 12582# check replace success: 1 12583DELETE FROM t1 12584WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 12585DELETE FROM t1 12586WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 12587f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 12588UPDATE t1 SET f_int2 = f_int1, 12589f_char1 = CAST(f_int1 AS CHAR), 12590f_char2 = CAST(f_int1 AS CHAR), 12591f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 12592WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 12593SET AUTOCOMMIT= 0; 12594INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12595SELECT f_int1, f_int1, '', '', 'was inserted' 12596FROM t0_template source_tab 12597WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12598 12599# check transactions-1 success: 1 12600COMMIT WORK; 12601 12602# check transactions-2 success: 1 12603ROLLBACK WORK; 12604 12605# check transactions-3 success: 1 12606DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12607COMMIT WORK; 12608ROLLBACK WORK; 12609 12610# check transactions-4 success: 1 12611INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12612SELECT f_int1, f_int1, '', '', 'was inserted' 12613FROM t0_template source_tab 12614WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12615 12616# check transactions-5 success: 1 12617ROLLBACK WORK; 12618 12619# check transactions-6 success: 1 12620# INFO: Storage engine used for t1 seems to be transactional. 12621COMMIT; 12622 12623# check transactions-7 success: 1 12624DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12625COMMIT WORK; 12626SET @@session.sql_mode = 'traditional'; 12627Warnings: 12628Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 12629SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 12630INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12631SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 12632'', '', 'was inserted' FROM t0_template 12633WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 12634ERROR 22012: Division by 0 12635COMMIT; 12636 12637# check transactions-8 success: 1 12638# INFO: Storage engine used for t1 seems to be able to revert 12639# changes made by the failing statement. 12640SET @@session.sql_mode = ''; 12641Warnings: 12642Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 12643SET AUTOCOMMIT= 1; 12644DELETE FROM t1 WHERE f_charbig = 'was inserted'; 12645COMMIT WORK; 12646UPDATE t1 SET f_charbig = REPEAT('b', 1000); 12647 12648# check special-1 success: 1 12649UPDATE t1 SET f_charbig = ''; 12650 12651# check special-2 success: 1 12652UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 12653INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12654SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 12655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12656INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12657SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12658'just inserted' FROM t0_template 12659WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12660CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 12661BEGIN 12662UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12663f_charbig = 'updated by trigger' 12664 WHERE f_int1 = new.f_int1; 12665END| 12666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12667SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12669 12670# check trigger-1 success: 1 12671DROP TRIGGER trg_1; 12672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12673f_int2 = CAST(f_char1 AS SIGNED INT), 12674f_charbig = 'just inserted' 12675 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12676DELETE FROM t0_aux 12677WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12678INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12679SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12680'just inserted' FROM t0_template 12681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12682CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 12683BEGIN 12684UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12685f_charbig = 'updated by trigger' 12686 WHERE f_int1 = new.f_int1; 12687END| 12688INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12689SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 12690WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12691 12692# check trigger-2 success: 1 12693DROP TRIGGER trg_1; 12694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12695f_int2 = CAST(f_char1 AS SIGNED INT), 12696f_charbig = 'just inserted' 12697 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12698DELETE FROM t0_aux 12699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12702'just inserted' FROM t0_template 12703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12704CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12705BEGIN 12706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12707f_charbig = 'updated by trigger' 12708 WHERE f_int1 = new.f_int1; 12709END| 12710UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12712 12713# check trigger-3 success: 1 12714DROP TRIGGER trg_1; 12715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12716f_int2 = CAST(f_char1 AS SIGNED INT), 12717f_charbig = 'just inserted' 12718 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12719DELETE FROM t0_aux 12720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12723'just inserted' FROM t0_template 12724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12725CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 12726BEGIN 12727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12728f_charbig = 'updated by trigger' 12729 WHERE f_int1 = - old.f_int1; 12730END| 12731UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12733 12734# check trigger-4 success: 1 12735DROP TRIGGER trg_1; 12736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12737f_int2 = CAST(f_char1 AS SIGNED INT), 12738f_charbig = 'just inserted' 12739 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12740DELETE FROM t0_aux 12741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12744'just inserted' FROM t0_template 12745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12746CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12747BEGIN 12748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12749f_charbig = 'updated by trigger' 12750 WHERE f_int1 = new.f_int1; 12751END| 12752UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12754 12755# check trigger-5 success: 1 12756DROP TRIGGER trg_1; 12757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12758f_int2 = CAST(f_char1 AS SIGNED INT), 12759f_charbig = 'just inserted' 12760 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12761DELETE FROM t0_aux 12762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12763INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12764SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12765'just inserted' FROM t0_template 12766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12767CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 12768BEGIN 12769UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12770f_charbig = 'updated by trigger' 12771 WHERE f_int1 = - old.f_int1; 12772END| 12773UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 12774WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12775 12776# check trigger-6 success: 1 12777DROP TRIGGER trg_1; 12778UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12779f_int2 = CAST(f_char1 AS SIGNED INT), 12780f_charbig = 'just inserted' 12781 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12782DELETE FROM t0_aux 12783WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12784INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12785SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12786'just inserted' FROM t0_template 12787WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12788CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 12789BEGIN 12790UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12791f_charbig = 'updated by trigger' 12792 WHERE f_int1 = - old.f_int1; 12793END| 12794DELETE FROM t0_aux 12795WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12796 12797# check trigger-7 success: 1 12798DROP TRIGGER trg_1; 12799UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12800f_int2 = CAST(f_char1 AS SIGNED INT), 12801f_charbig = 'just inserted' 12802 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12803DELETE FROM t0_aux 12804WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12805INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 12806SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 12807'just inserted' FROM t0_template 12808WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12809CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 12810BEGIN 12811UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 12812f_charbig = 'updated by trigger' 12813 WHERE f_int1 = - old.f_int1; 12814END| 12815DELETE FROM t0_aux 12816WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 12817 12818# check trigger-8 success: 1 12819DROP TRIGGER trg_1; 12820UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12821f_int2 = CAST(f_char1 AS SIGNED INT), 12822f_charbig = 'just inserted' 12823 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 12824DELETE FROM t0_aux 12825WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12826DELETE FROM t1 12827WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 12828CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12829BEGIN 12830SET new.f_int1 = old.f_int1 + @max_row, 12831new.f_int2 = old.f_int2 - @max_row, 12832new.f_charbig = '####updated per update trigger####'; 12833END| 12834UPDATE t1 12835SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12836f_charbig = '####updated per update statement itself####'; 12837 12838# check trigger-9 success: 1 12839DROP TRIGGER trg_2; 12840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12841f_int2 = CAST(f_char1 AS SIGNED INT), 12842f_charbig = CONCAT('===',f_char1,'==='); 12843CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 12844BEGIN 12845SET new.f_int1 = new.f_int1 + @max_row, 12846new.f_int2 = new.f_int2 - @max_row, 12847new.f_charbig = '####updated per update trigger####'; 12848END| 12849UPDATE t1 12850SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 12851f_charbig = '####updated per update statement itself####'; 12852 12853# check trigger-10 success: 1 12854DROP TRIGGER trg_2; 12855UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 12856f_int2 = CAST(f_char1 AS SIGNED INT), 12857f_charbig = CONCAT('===',f_char1,'==='); 12858CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12859BEGIN 12860SET new.f_int1 = @my_max1 + @counter, 12861new.f_int2 = @my_min2 - @counter, 12862new.f_charbig = '####updated per insert trigger####'; 12863SET @counter = @counter + 1; 12864END| 12865SET @counter = 1; 12866SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12867INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12868SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12869CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12870WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12871ORDER BY f_int1; 12872DROP TRIGGER trg_3; 12873 12874# check trigger-11 success: 1 12875DELETE FROM t1 12876WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12877AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12878AND f_charbig = '####updated per insert trigger####'; 12879CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 12880BEGIN 12881SET new.f_int1 = @my_max1 + @counter, 12882new.f_int2 = @my_min2 - @counter, 12883new.f_charbig = '####updated per insert trigger####'; 12884SET @counter = @counter + 1; 12885END| 12886SET @counter = 1; 12887SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 12888INSERT INTO t1 (f_char1, f_char2, f_charbig) 12889SELECT CAST(f_int1 AS CHAR), 12890CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 12891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 12892ORDER BY f_int1; 12893DROP TRIGGER trg_3; 12894 12895# check trigger-12 success: 1 12896DELETE FROM t1 12897WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 12898AND f_int2 <> CAST(f_char1 AS SIGNED INT) 12899AND f_charbig = '####updated per insert trigger####'; 12900ANALYZE TABLE t1; 12901Table Op Msg_type Msg_text 12902test.t1 analyze status OK 12903CHECK TABLE t1 EXTENDED; 12904Table Op Msg_type Msg_text 12905test.t1 check status OK 12906CHECKSUM TABLE t1 EXTENDED; 12907Table Checksum 12908test.t1 <some_value> 12909OPTIMIZE TABLE t1; 12910Table Op Msg_type Msg_text 12911test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 12912test.t1 optimize status OK 12913# check layout success: 1 12914REPAIR TABLE t1 EXTENDED; 12915Table Op Msg_type Msg_text 12916test.t1 repair status OK 12917# check layout success: 1 12918TRUNCATE t1; 12919 12920# check TRUNCATE success: 1 12921# check layout success: 1 12922# End usability test (inc/partition_check.inc) 12923DROP TABLE t1; 12924CREATE TABLE t1 ( 12925f_int1 INTEGER, 12926f_int2 INTEGER, 12927f_char1 CHAR(20), 12928f_char2 CHAR(20), 12929f_charbig VARCHAR(1000) 12930, UNIQUE INDEX uidx (f_int1,f_int2) 12931) 12932PARTITION BY LIST(MOD(f_int1 + f_int2,4)) 12933(PARTITION part_3 VALUES IN (-3), 12934PARTITION part_2 VALUES IN (-2), 12935PARTITION part_1 VALUES IN (-1), 12936PARTITION part_N VALUES IN (NULL), 12937PARTITION part0 VALUES IN (0), 12938PARTITION part1 VALUES IN (1), 12939PARTITION part2 VALUES IN (2), 12940PARTITION part3 VALUES IN (3)); 12941INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12942SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12943WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 12944ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 12945INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 12946SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 12947WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 12948# Start usability test (inc/partition_check.inc) 12949create_command 12950SHOW CREATE TABLE t1; 12951Table Create Table 12952t1 CREATE TABLE `t1` ( 12953 `f_int1` bigint(20) DEFAULT NULL, 12954 `f_int2` bigint(20) DEFAULT NULL, 12955 `f_char1` char(20) DEFAULT NULL, 12956 `f_char2` char(20) DEFAULT NULL, 12957 `f_charbig` varchar(1000) DEFAULT NULL, 12958 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 12959) ENGINE=InnoDB DEFAULT CHARSET=latin1 12960/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) 12961(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, 12962 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, 12963 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, 12964 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, 12965 PARTITION part0 VALUES IN (0) ENGINE = InnoDB, 12966 PARTITION part1 VALUES IN (1) ENGINE = InnoDB, 12967 PARTITION part2 VALUES IN (2) ENGINE = InnoDB, 12968 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */ 12969 12970# check prerequisites-1 success: 1 12971# check COUNT(*) success: 1 12972# check MIN/MAX(f_int1) success: 1 12973# check MIN/MAX(f_int2) success: 1 12974INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12975SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 12976CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 12977WHERE f_int1 IN (2,3); 12978ERROR 23000: Duplicate entry '2-2' for key 'uidx' 12979# check prerequisites-3 success: 1 12980# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 12981INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12982SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12983CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12984WHERE f_int1 IN (2,3); 12985DELETE FROM t1 WHERE f_charbig = 'delete me'; 12986INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 12987SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 12988CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 12989WHERE f_int1 IN (2,3); 12990DELETE FROM t1 WHERE f_charbig = 'delete me'; 12991# check read via f_int1 success: 1 12992# check read via f_int2 success: 1 12993 12994# check multiple-1 success: 1 12995DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 12996 12997# check multiple-2 success: 1 12998INSERT INTO t1 SELECT * FROM t0_template 12999WHERE MOD(f_int1,3) = 0; 13000 13001# check multiple-3 success: 1 13002UPDATE t1 SET f_int1 = f_int1 + @max_row 13003WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 13004AND @max_row_div2 + @max_row_div4; 13005 13006# check multiple-4 success: 1 13007DELETE FROM t1 13008WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 13009AND @max_row_div2 + @max_row_div4 + @max_row; 13010 13011# check multiple-5 success: 1 13012SELECT COUNT(*) INTO @try_count FROM t0_template 13013WHERE MOD(f_int1,3) = 0 13014AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13015SELECT COUNT(*) INTO @clash_count 13016FROM t1 INNER JOIN t0_template USING(f_int1) 13017WHERE MOD(f_int1,3) = 0 13018AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13019SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 13020INSERT INTO t1 13021SET f_int1 = @cur_value , f_int2 = @cur_value, 13022f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13023f_charbig = '#SINGLE#'; 13024 13025# check single-1 success: 1 13026SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 13027INSERT INTO t1 13028SET f_int1 = @cur_value , f_int2 = @cur_value, 13029f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13030f_charbig = '#SINGLE#'; 13031 13032# check single-2 success: 1 13033SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 13034SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 13035UPDATE t1 SET f_int1 = @cur_value2 13036WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 13037 13038# check single-3 success: 1 13039SET @cur_value1= -1; 13040SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 13041UPDATE t1 SET f_int1 = @cur_value1 13042WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 13043 13044# check single-4 success: 1 13045SELECT MAX(f_int1) INTO @cur_value FROM t1; 13046DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 13047 13048# check single-5 success: 1 13049DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 13050 13051# check single-6 success: 1 13052INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 13053 13054# check single-7 success: 1 13055DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 13056DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 13057INSERT t1 SET f_int1 = 0 , f_int2 = 0, 13058f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 13059f_charbig = '#NULL#'; 13060INSERT INTO t1 13061SET f_int1 = NULL , f_int2 = -@max_row, 13062f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 13063f_charbig = '#NULL#'; 13064# check null success: 1 13065 13066# check null-1 success: 1 13067UPDATE t1 SET f_int1 = -@max_row 13068WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13069AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13070 13071# check null-2 success: 1 13072UPDATE t1 SET f_int1 = NULL 13073WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13074AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13075 13076# check null-3 success: 1 13077DELETE FROM t1 13078WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13079AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13080 13081# check null-4 success: 1 13082DELETE FROM t1 13083WHERE f_int1 = 0 AND f_int2 = 0 13084AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 13085AND f_charbig = '#NULL#'; 13086INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13087SELECT f_int1, f_int1, '', '', 'was inserted' 13088 FROM t0_template source_tab 13089WHERE MOD(f_int1,3) = 0 13090AND f_int1 BETWEEN @max_row_div2 AND @max_row 13091ON DUPLICATE KEY 13092UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 13093f_int2 = 2 * @max_row + source_tab.f_int1, 13094f_charbig = 'was updated'; 13095 13096# check unique-1-a success: 1 13097 13098# check unique-1-b success: 1 13099DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13101f_int2 = CAST(f_char1 AS SIGNED INT), 13102f_charbig = CONCAT('===',f_char1,'===') 13103WHERE f_charbig = 'was updated'; 13104REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13105SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 13106 FROM t0_template source_tab 13107WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13108 13109# check replace success: 1 13110DELETE FROM t1 13111WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 13112DELETE FROM t1 13113WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 13114f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 13115UPDATE t1 SET f_int2 = f_int1, 13116f_char1 = CAST(f_int1 AS CHAR), 13117f_char2 = CAST(f_int1 AS CHAR), 13118f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 13119WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 13120SET AUTOCOMMIT= 0; 13121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13122SELECT f_int1, f_int1, '', '', 'was inserted' 13123FROM t0_template source_tab 13124WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13125 13126# check transactions-1 success: 1 13127COMMIT WORK; 13128 13129# check transactions-2 success: 1 13130ROLLBACK WORK; 13131 13132# check transactions-3 success: 1 13133DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13134COMMIT WORK; 13135ROLLBACK WORK; 13136 13137# check transactions-4 success: 1 13138INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13139SELECT f_int1, f_int1, '', '', 'was inserted' 13140FROM t0_template source_tab 13141WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13142 13143# check transactions-5 success: 1 13144ROLLBACK WORK; 13145 13146# check transactions-6 success: 1 13147# INFO: Storage engine used for t1 seems to be transactional. 13148COMMIT; 13149 13150# check transactions-7 success: 1 13151DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13152COMMIT WORK; 13153SET @@session.sql_mode = 'traditional'; 13154Warnings: 13155Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 13156SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 13157INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13158SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 13159'', '', 'was inserted' FROM t0_template 13160WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13161ERROR 22012: Division by 0 13162COMMIT; 13163 13164# check transactions-8 success: 1 13165# INFO: Storage engine used for t1 seems to be able to revert 13166# changes made by the failing statement. 13167SET @@session.sql_mode = ''; 13168Warnings: 13169Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 13170SET AUTOCOMMIT= 1; 13171DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13172COMMIT WORK; 13173UPDATE t1 SET f_charbig = REPEAT('b', 1000); 13174 13175# check special-1 success: 1 13176UPDATE t1 SET f_charbig = ''; 13177 13178# check special-2 success: 1 13179UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 13180INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13181SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 13182WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13183INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13184SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13185'just inserted' FROM t0_template 13186WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13187CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 13188BEGIN 13189UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13190f_charbig = 'updated by trigger' 13191 WHERE f_int1 = new.f_int1; 13192END| 13193INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13194SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13195WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13196 13197# check trigger-1 success: 1 13198DROP TRIGGER trg_1; 13199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13200f_int2 = CAST(f_char1 AS SIGNED INT), 13201f_charbig = 'just inserted' 13202 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13203DELETE FROM t0_aux 13204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13207'just inserted' FROM t0_template 13208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13209CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 13210BEGIN 13211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13212f_charbig = 'updated by trigger' 13213 WHERE f_int1 = new.f_int1; 13214END| 13215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13216SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13218 13219# check trigger-2 success: 1 13220DROP TRIGGER trg_1; 13221UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13222f_int2 = CAST(f_char1 AS SIGNED INT), 13223f_charbig = 'just inserted' 13224 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13225DELETE FROM t0_aux 13226WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13227INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13228SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13229'just inserted' FROM t0_template 13230WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13231CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13232BEGIN 13233UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13234f_charbig = 'updated by trigger' 13235 WHERE f_int1 = new.f_int1; 13236END| 13237UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13238WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13239 13240# check trigger-3 success: 1 13241DROP TRIGGER trg_1; 13242UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13243f_int2 = CAST(f_char1 AS SIGNED INT), 13244f_charbig = 'just inserted' 13245 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13246DELETE FROM t0_aux 13247WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13248INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13249SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13250'just inserted' FROM t0_template 13251WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13252CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13253BEGIN 13254UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13255f_charbig = 'updated by trigger' 13256 WHERE f_int1 = - old.f_int1; 13257END| 13258UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13259WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13260 13261# check trigger-4 success: 1 13262DROP TRIGGER trg_1; 13263UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13264f_int2 = CAST(f_char1 AS SIGNED INT), 13265f_charbig = 'just inserted' 13266 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13267DELETE FROM t0_aux 13268WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13269INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13270SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13271'just inserted' FROM t0_template 13272WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13273CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13274BEGIN 13275UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13276f_charbig = 'updated by trigger' 13277 WHERE f_int1 = new.f_int1; 13278END| 13279UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13280WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13281 13282# check trigger-5 success: 1 13283DROP TRIGGER trg_1; 13284UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13285f_int2 = CAST(f_char1 AS SIGNED INT), 13286f_charbig = 'just inserted' 13287 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13288DELETE FROM t0_aux 13289WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13290INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13291SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13292'just inserted' FROM t0_template 13293WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13294CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13295BEGIN 13296UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13297f_charbig = 'updated by trigger' 13298 WHERE f_int1 = - old.f_int1; 13299END| 13300UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13301WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13302 13303# check trigger-6 success: 1 13304DROP TRIGGER trg_1; 13305UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13306f_int2 = CAST(f_char1 AS SIGNED INT), 13307f_charbig = 'just inserted' 13308 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13309DELETE FROM t0_aux 13310WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13311INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13312SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13313'just inserted' FROM t0_template 13314WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13315CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 13316BEGIN 13317UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13318f_charbig = 'updated by trigger' 13319 WHERE f_int1 = - old.f_int1; 13320END| 13321DELETE FROM t0_aux 13322WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13323 13324# check trigger-7 success: 1 13325DROP TRIGGER trg_1; 13326UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13327f_int2 = CAST(f_char1 AS SIGNED INT), 13328f_charbig = 'just inserted' 13329 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13330DELETE FROM t0_aux 13331WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13332INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13333SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13334'just inserted' FROM t0_template 13335WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13336CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 13337BEGIN 13338UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13339f_charbig = 'updated by trigger' 13340 WHERE f_int1 = - old.f_int1; 13341END| 13342DELETE FROM t0_aux 13343WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13344 13345# check trigger-8 success: 1 13346DROP TRIGGER trg_1; 13347UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13348f_int2 = CAST(f_char1 AS SIGNED INT), 13349f_charbig = 'just inserted' 13350 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13351DELETE FROM t0_aux 13352WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13353DELETE FROM t1 13354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13355CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13356BEGIN 13357SET new.f_int1 = old.f_int1 + @max_row, 13358new.f_int2 = old.f_int2 - @max_row, 13359new.f_charbig = '####updated per update trigger####'; 13360END| 13361UPDATE t1 13362SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13363f_charbig = '####updated per update statement itself####'; 13364 13365# check trigger-9 success: 1 13366DROP TRIGGER trg_2; 13367UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13368f_int2 = CAST(f_char1 AS SIGNED INT), 13369f_charbig = CONCAT('===',f_char1,'==='); 13370CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13371BEGIN 13372SET new.f_int1 = new.f_int1 + @max_row, 13373new.f_int2 = new.f_int2 - @max_row, 13374new.f_charbig = '####updated per update trigger####'; 13375END| 13376UPDATE t1 13377SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13378f_charbig = '####updated per update statement itself####'; 13379 13380# check trigger-10 success: 1 13381DROP TRIGGER trg_2; 13382UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13383f_int2 = CAST(f_char1 AS SIGNED INT), 13384f_charbig = CONCAT('===',f_char1,'==='); 13385CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13386BEGIN 13387SET new.f_int1 = @my_max1 + @counter, 13388new.f_int2 = @my_min2 - @counter, 13389new.f_charbig = '####updated per insert trigger####'; 13390SET @counter = @counter + 1; 13391END| 13392SET @counter = 1; 13393SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13394INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13395SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13396CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13397WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13398ORDER BY f_int1; 13399DROP TRIGGER trg_3; 13400 13401# check trigger-11 success: 1 13402DELETE FROM t1 13403WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13404AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13405AND f_charbig = '####updated per insert trigger####'; 13406CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13407BEGIN 13408SET new.f_int1 = @my_max1 + @counter, 13409new.f_int2 = @my_min2 - @counter, 13410new.f_charbig = '####updated per insert trigger####'; 13411SET @counter = @counter + 1; 13412END| 13413SET @counter = 1; 13414SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13415INSERT INTO t1 (f_char1, f_char2, f_charbig) 13416SELECT CAST(f_int1 AS CHAR), 13417CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13418WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13419ORDER BY f_int1; 13420DROP TRIGGER trg_3; 13421 13422# check trigger-12 success: 1 13423DELETE FROM t1 13424WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13425AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13426AND f_charbig = '####updated per insert trigger####'; 13427ANALYZE TABLE t1; 13428Table Op Msg_type Msg_text 13429test.t1 analyze status OK 13430CHECK TABLE t1 EXTENDED; 13431Table Op Msg_type Msg_text 13432test.t1 check status OK 13433CHECKSUM TABLE t1 EXTENDED; 13434Table Checksum 13435test.t1 <some_value> 13436OPTIMIZE TABLE t1; 13437Table Op Msg_type Msg_text 13438test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 13439test.t1 optimize status OK 13440# check layout success: 1 13441REPAIR TABLE t1 EXTENDED; 13442Table Op Msg_type Msg_text 13443test.t1 repair status OK 13444# check layout success: 1 13445TRUNCATE t1; 13446 13447# check TRUNCATE success: 1 13448# check layout success: 1 13449# End usability test (inc/partition_check.inc) 13450DROP TABLE t1; 13451CREATE TABLE t1 ( 13452f_int1 INTEGER, 13453f_int2 INTEGER, 13454f_char1 CHAR(20), 13455f_char2 CHAR(20), 13456f_charbig VARCHAR(1000) 13457, UNIQUE INDEX uidx (f_int1,f_int2) 13458) 13459PARTITION BY RANGE((f_int1 + f_int2) DIV 2) 13460(PARTITION parta VALUES LESS THAN (0), 13461PARTITION partb VALUES LESS THAN (5), 13462PARTITION partc VALUES LESS THAN (10), 13463PARTITION partd VALUES LESS THAN (10 + 5), 13464PARTITION parte VALUES LESS THAN (20), 13465PARTITION partf VALUES LESS THAN (2147483646)); 13466INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13467SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13468WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 13469ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 13470INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13471SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13472WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 13473# Start usability test (inc/partition_check.inc) 13474create_command 13475SHOW CREATE TABLE t1; 13476Table Create Table 13477t1 CREATE TABLE `t1` ( 13478 `f_int1` bigint(20) DEFAULT NULL, 13479 `f_int2` bigint(20) DEFAULT NULL, 13480 `f_char1` char(20) DEFAULT NULL, 13481 `f_char2` char(20) DEFAULT NULL, 13482 `f_charbig` varchar(1000) DEFAULT NULL, 13483 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 13484) ENGINE=InnoDB DEFAULT CHARSET=latin1 13485/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) 13486(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 13487 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 13488 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 13489 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, 13490 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, 13491 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 13492 13493# check prerequisites-1 success: 1 13494# check COUNT(*) success: 1 13495# check MIN/MAX(f_int1) success: 1 13496# check MIN/MAX(f_int2) success: 1 13497INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13498SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13499CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 13500WHERE f_int1 IN (2,3); 13501ERROR 23000: Duplicate entry '2-2' for key 'uidx' 13502# check prerequisites-3 success: 1 13503# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 13504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13505SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13506CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13507WHERE f_int1 IN (2,3); 13508DELETE FROM t1 WHERE f_charbig = 'delete me'; 13509INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13510SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 13511CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 13512WHERE f_int1 IN (2,3); 13513DELETE FROM t1 WHERE f_charbig = 'delete me'; 13514# check read via f_int1 success: 1 13515# check read via f_int2 success: 1 13516 13517# check multiple-1 success: 1 13518DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 13519 13520# check multiple-2 success: 1 13521INSERT INTO t1 SELECT * FROM t0_template 13522WHERE MOD(f_int1,3) = 0; 13523 13524# check multiple-3 success: 1 13525UPDATE t1 SET f_int1 = f_int1 + @max_row 13526WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 13527AND @max_row_div2 + @max_row_div4; 13528 13529# check multiple-4 success: 1 13530DELETE FROM t1 13531WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 13532AND @max_row_div2 + @max_row_div4 + @max_row; 13533 13534# check multiple-5 success: 1 13535SELECT COUNT(*) INTO @try_count FROM t0_template 13536WHERE MOD(f_int1,3) = 0 13537AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13538SELECT COUNT(*) INTO @clash_count 13539FROM t1 INNER JOIN t0_template USING(f_int1) 13540WHERE MOD(f_int1,3) = 0 13541AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13542SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 13543INSERT INTO t1 13544SET f_int1 = @cur_value , f_int2 = @cur_value, 13545f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13546f_charbig = '#SINGLE#'; 13547 13548# check single-1 success: 1 13549SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 13550INSERT INTO t1 13551SET f_int1 = @cur_value , f_int2 = @cur_value, 13552f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 13553f_charbig = '#SINGLE#'; 13554 13555# check single-2 success: 1 13556SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 13557SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 13558UPDATE t1 SET f_int1 = @cur_value2 13559WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 13560 13561# check single-3 success: 1 13562SET @cur_value1= -1; 13563SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 13564UPDATE t1 SET f_int1 = @cur_value1 13565WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 13566 13567# check single-4 success: 1 13568SELECT MAX(f_int1) INTO @cur_value FROM t1; 13569DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 13570 13571# check single-5 success: 1 13572DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 13573 13574# check single-6 success: 1 13575INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 13576ERROR HY000: Table has no partition for value 2147483647 13577DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 13578INSERT t1 SET f_int1 = 0 , f_int2 = 0, 13579f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 13580f_charbig = '#NULL#'; 13581INSERT INTO t1 13582SET f_int1 = NULL , f_int2 = -@max_row, 13583f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 13584f_charbig = '#NULL#'; 13585# check null success: 1 13586 13587# check null-1 success: 1 13588UPDATE t1 SET f_int1 = -@max_row 13589WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13590AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13591 13592# check null-2 success: 1 13593UPDATE t1 SET f_int1 = NULL 13594WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13595AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13596 13597# check null-3 success: 1 13598DELETE FROM t1 13599WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 13600AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 13601 13602# check null-4 success: 1 13603DELETE FROM t1 13604WHERE f_int1 = 0 AND f_int2 = 0 13605AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 13606AND f_charbig = '#NULL#'; 13607INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13608SELECT f_int1, f_int1, '', '', 'was inserted' 13609 FROM t0_template source_tab 13610WHERE MOD(f_int1,3) = 0 13611AND f_int1 BETWEEN @max_row_div2 AND @max_row 13612ON DUPLICATE KEY 13613UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 13614f_int2 = 2 * @max_row + source_tab.f_int1, 13615f_charbig = 'was updated'; 13616 13617# check unique-1-a success: 1 13618 13619# check unique-1-b success: 1 13620DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13621UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13622f_int2 = CAST(f_char1 AS SIGNED INT), 13623f_charbig = CONCAT('===',f_char1,'===') 13624WHERE f_charbig = 'was updated'; 13625REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13626SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 13627 FROM t0_template source_tab 13628WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 13629 13630# check replace success: 1 13631DELETE FROM t1 13632WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 13633DELETE FROM t1 13634WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 13635f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 13636UPDATE t1 SET f_int2 = f_int1, 13637f_char1 = CAST(f_int1 AS CHAR), 13638f_char2 = CAST(f_int1 AS CHAR), 13639f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 13640WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 13641SET AUTOCOMMIT= 0; 13642INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13643SELECT f_int1, f_int1, '', '', 'was inserted' 13644FROM t0_template source_tab 13645WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13646 13647# check transactions-1 success: 1 13648COMMIT WORK; 13649 13650# check transactions-2 success: 1 13651ROLLBACK WORK; 13652 13653# check transactions-3 success: 1 13654DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13655COMMIT WORK; 13656ROLLBACK WORK; 13657 13658# check transactions-4 success: 1 13659INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13660SELECT f_int1, f_int1, '', '', 'was inserted' 13661FROM t0_template source_tab 13662WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13663 13664# check transactions-5 success: 1 13665ROLLBACK WORK; 13666 13667# check transactions-6 success: 1 13668# INFO: Storage engine used for t1 seems to be transactional. 13669COMMIT; 13670 13671# check transactions-7 success: 1 13672DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13673COMMIT WORK; 13674SET @@session.sql_mode = 'traditional'; 13675Warnings: 13676Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 13677SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 13678INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13679SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 13680'', '', 'was inserted' FROM t0_template 13681WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 13682ERROR 22012: Division by 0 13683COMMIT; 13684 13685# check transactions-8 success: 1 13686# INFO: Storage engine used for t1 seems to be able to revert 13687# changes made by the failing statement. 13688SET @@session.sql_mode = ''; 13689Warnings: 13690Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 13691SET AUTOCOMMIT= 1; 13692DELETE FROM t1 WHERE f_charbig = 'was inserted'; 13693COMMIT WORK; 13694UPDATE t1 SET f_charbig = REPEAT('b', 1000); 13695 13696# check special-1 success: 1 13697UPDATE t1 SET f_charbig = ''; 13698 13699# check special-2 success: 1 13700UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 13701INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13702SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 13703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13705SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13706'just inserted' FROM t0_template 13707WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13708CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 13709BEGIN 13710UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13711f_charbig = 'updated by trigger' 13712 WHERE f_int1 = new.f_int1; 13713END| 13714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13715SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13717 13718# check trigger-1 success: 1 13719DROP TRIGGER trg_1; 13720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13721f_int2 = CAST(f_char1 AS SIGNED INT), 13722f_charbig = 'just inserted' 13723 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13724DELETE FROM t0_aux 13725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13728'just inserted' FROM t0_template 13729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13730CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 13731BEGIN 13732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13733f_charbig = 'updated by trigger' 13734 WHERE f_int1 = new.f_int1; 13735END| 13736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13737SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 13738WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13739 13740# check trigger-2 success: 1 13741DROP TRIGGER trg_1; 13742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13743f_int2 = CAST(f_char1 AS SIGNED INT), 13744f_charbig = 'just inserted' 13745 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13746DELETE FROM t0_aux 13747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13750'just inserted' FROM t0_template 13751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13752CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13753BEGIN 13754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13755f_charbig = 'updated by trigger' 13756 WHERE f_int1 = new.f_int1; 13757END| 13758UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13760 13761# check trigger-3 success: 1 13762DROP TRIGGER trg_1; 13763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13764f_int2 = CAST(f_char1 AS SIGNED INT), 13765f_charbig = 'just inserted' 13766 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13767DELETE FROM t0_aux 13768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13771'just inserted' FROM t0_template 13772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13773CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 13774BEGIN 13775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13776f_charbig = 'updated by trigger' 13777 WHERE f_int1 = - old.f_int1; 13778END| 13779UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13781 13782# check trigger-4 success: 1 13783DROP TRIGGER trg_1; 13784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13785f_int2 = CAST(f_char1 AS SIGNED INT), 13786f_charbig = 'just inserted' 13787 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13788DELETE FROM t0_aux 13789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13790INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13791SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13792'just inserted' FROM t0_template 13793WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13794CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13795BEGIN 13796UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13797f_charbig = 'updated by trigger' 13798 WHERE f_int1 = new.f_int1; 13799END| 13800UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13801WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13802 13803# check trigger-5 success: 1 13804DROP TRIGGER trg_1; 13805UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13806f_int2 = CAST(f_char1 AS SIGNED INT), 13807f_charbig = 'just inserted' 13808 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13809DELETE FROM t0_aux 13810WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13811INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13812SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13813'just inserted' FROM t0_template 13814WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13815CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 13816BEGIN 13817UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13818f_charbig = 'updated by trigger' 13819 WHERE f_int1 = - old.f_int1; 13820END| 13821UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 13822WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13823 13824# check trigger-6 success: 1 13825DROP TRIGGER trg_1; 13826UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13827f_int2 = CAST(f_char1 AS SIGNED INT), 13828f_charbig = 'just inserted' 13829 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13830DELETE FROM t0_aux 13831WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13832INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13833SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13834'just inserted' FROM t0_template 13835WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13836CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 13837BEGIN 13838UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13839f_charbig = 'updated by trigger' 13840 WHERE f_int1 = - old.f_int1; 13841END| 13842DELETE FROM t0_aux 13843WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13844 13845# check trigger-7 success: 1 13846DROP TRIGGER trg_1; 13847UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13848f_int2 = CAST(f_char1 AS SIGNED INT), 13849f_charbig = 'just inserted' 13850 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13851DELETE FROM t0_aux 13852WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13853INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 13854SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 13855'just inserted' FROM t0_template 13856WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13857CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 13858BEGIN 13859UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 13860f_charbig = 'updated by trigger' 13861 WHERE f_int1 = - old.f_int1; 13862END| 13863DELETE FROM t0_aux 13864WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 13865 13866# check trigger-8 success: 1 13867DROP TRIGGER trg_1; 13868UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13869f_int2 = CAST(f_char1 AS SIGNED INT), 13870f_charbig = 'just inserted' 13871 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 13872DELETE FROM t0_aux 13873WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13874DELETE FROM t1 13875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 13876CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13877BEGIN 13878SET new.f_int1 = old.f_int1 + @max_row, 13879new.f_int2 = old.f_int2 - @max_row, 13880new.f_charbig = '####updated per update trigger####'; 13881END| 13882UPDATE t1 13883SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13884f_charbig = '####updated per update statement itself####'; 13885 13886# check trigger-9 success: 1 13887DROP TRIGGER trg_2; 13888UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13889f_int2 = CAST(f_char1 AS SIGNED INT), 13890f_charbig = CONCAT('===',f_char1,'==='); 13891CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 13892BEGIN 13893SET new.f_int1 = new.f_int1 + @max_row, 13894new.f_int2 = new.f_int2 - @max_row, 13895new.f_charbig = '####updated per update trigger####'; 13896END| 13897UPDATE t1 13898SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 13899f_charbig = '####updated per update statement itself####'; 13900 13901# check trigger-10 success: 1 13902DROP TRIGGER trg_2; 13903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 13904f_int2 = CAST(f_char1 AS SIGNED INT), 13905f_charbig = CONCAT('===',f_char1,'==='); 13906CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13907BEGIN 13908SET new.f_int1 = @my_max1 + @counter, 13909new.f_int2 = @my_min2 - @counter, 13910new.f_charbig = '####updated per insert trigger####'; 13911SET @counter = @counter + 1; 13912END| 13913SET @counter = 1; 13914SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 13916SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 13917CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13918WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13919ORDER BY f_int1; 13920DROP TRIGGER trg_3; 13921 13922# check trigger-11 success: 1 13923DELETE FROM t1 13924WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13925AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13926AND f_charbig = '####updated per insert trigger####'; 13927CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 13928BEGIN 13929SET new.f_int1 = @my_max1 + @counter, 13930new.f_int2 = @my_min2 - @counter, 13931new.f_charbig = '####updated per insert trigger####'; 13932SET @counter = @counter + 1; 13933END| 13934SET @counter = 1; 13935SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 13936INSERT INTO t1 (f_char1, f_char2, f_charbig) 13937SELECT CAST(f_int1 AS CHAR), 13938CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 13939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 13940ORDER BY f_int1; 13941DROP TRIGGER trg_3; 13942 13943# check trigger-12 success: 1 13944DELETE FROM t1 13945WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 13946AND f_int2 <> CAST(f_char1 AS SIGNED INT) 13947AND f_charbig = '####updated per insert trigger####'; 13948ANALYZE TABLE t1; 13949Table Op Msg_type Msg_text 13950test.t1 analyze status OK 13951CHECK TABLE t1 EXTENDED; 13952Table Op Msg_type Msg_text 13953test.t1 check status OK 13954CHECKSUM TABLE t1 EXTENDED; 13955Table Checksum 13956test.t1 <some_value> 13957OPTIMIZE TABLE t1; 13958Table Op Msg_type Msg_text 13959test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 13960test.t1 optimize status OK 13961# check layout success: 1 13962REPAIR TABLE t1 EXTENDED; 13963Table Op Msg_type Msg_text 13964test.t1 repair status OK 13965# check layout success: 1 13966TRUNCATE t1; 13967 13968# check TRUNCATE success: 1 13969# check layout success: 1 13970# End usability test (inc/partition_check.inc) 13971DROP TABLE t1; 13972CREATE TABLE t1 ( 13973f_int1 INTEGER, 13974f_int2 INTEGER, 13975f_char1 CHAR(20), 13976f_char2 CHAR(20), 13977f_charbig VARCHAR(1000) 13978, UNIQUE INDEX uidx (f_int1,f_int2) 13979) 13980PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 13981(PARTITION parta VALUES LESS THAN (0), 13982PARTITION partb VALUES LESS THAN (5), 13983PARTITION partc VALUES LESS THAN (10), 13984PARTITION partd VALUES LESS THAN (2147483646)); 13985INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13986SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13987WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 13988ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 13989INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 13990SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 13991WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 13992# Start usability test (inc/partition_check.inc) 13993create_command 13994SHOW CREATE TABLE t1; 13995Table Create Table 13996t1 CREATE TABLE `t1` ( 13997 `f_int1` bigint(20) DEFAULT NULL, 13998 `f_int2` bigint(20) DEFAULT NULL, 13999 `f_char1` char(20) DEFAULT NULL, 14000 `f_char2` char(20) DEFAULT NULL, 14001 `f_charbig` varchar(1000) DEFAULT NULL, 14002 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 14003) ENGINE=InnoDB DEFAULT CHARSET=latin1 14004/*!50100 PARTITION BY RANGE (f_int1) 14005SUBPARTITION BY HASH (f_int2) 14006SUBPARTITIONS 2 14007(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 14008 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 14009 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 14010 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 14011 14012# check prerequisites-1 success: 1 14013# check COUNT(*) success: 1 14014# check MIN/MAX(f_int1) success: 1 14015# check MIN/MAX(f_int2) success: 1 14016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14017SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14018CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 14019WHERE f_int1 IN (2,3); 14020ERROR 23000: Duplicate entry '2-2' for key 'uidx' 14021# check prerequisites-3 success: 1 14022# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 14023INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14024SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14025CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14026WHERE f_int1 IN (2,3); 14027DELETE FROM t1 WHERE f_charbig = 'delete me'; 14028INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14029SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14030CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14031WHERE f_int1 IN (2,3); 14032DELETE FROM t1 WHERE f_charbig = 'delete me'; 14033# check read via f_int1 success: 1 14034# check read via f_int2 success: 1 14035 14036# check multiple-1 success: 1 14037DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 14038 14039# check multiple-2 success: 1 14040INSERT INTO t1 SELECT * FROM t0_template 14041WHERE MOD(f_int1,3) = 0; 14042 14043# check multiple-3 success: 1 14044UPDATE t1 SET f_int1 = f_int1 + @max_row 14045WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 14046AND @max_row_div2 + @max_row_div4; 14047 14048# check multiple-4 success: 1 14049DELETE FROM t1 14050WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 14051AND @max_row_div2 + @max_row_div4 + @max_row; 14052 14053# check multiple-5 success: 1 14054SELECT COUNT(*) INTO @try_count FROM t0_template 14055WHERE MOD(f_int1,3) = 0 14056AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14057SELECT COUNT(*) INTO @clash_count 14058FROM t1 INNER JOIN t0_template USING(f_int1) 14059WHERE MOD(f_int1,3) = 0 14060AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14061SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 14062INSERT INTO t1 14063SET f_int1 = @cur_value , f_int2 = @cur_value, 14064f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14065f_charbig = '#SINGLE#'; 14066 14067# check single-1 success: 1 14068SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 14069INSERT INTO t1 14070SET f_int1 = @cur_value , f_int2 = @cur_value, 14071f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14072f_charbig = '#SINGLE#'; 14073 14074# check single-2 success: 1 14075SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 14076SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 14077UPDATE t1 SET f_int1 = @cur_value2 14078WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 14079 14080# check single-3 success: 1 14081SET @cur_value1= -1; 14082SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 14083UPDATE t1 SET f_int1 = @cur_value1 14084WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 14085 14086# check single-4 success: 1 14087SELECT MAX(f_int1) INTO @cur_value FROM t1; 14088DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 14089 14090# check single-5 success: 1 14091DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 14092 14093# check single-6 success: 1 14094INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 14095ERROR HY000: Table has no partition for value 2147483647 14096DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 14097INSERT t1 SET f_int1 = 0 , f_int2 = 0, 14098f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 14099f_charbig = '#NULL#'; 14100INSERT INTO t1 14101SET f_int1 = NULL , f_int2 = -@max_row, 14102f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 14103f_charbig = '#NULL#'; 14104# check null success: 1 14105 14106# check null-1 success: 1 14107UPDATE t1 SET f_int1 = -@max_row 14108WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14109AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14110 14111# check null-2 success: 1 14112UPDATE t1 SET f_int1 = NULL 14113WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14114AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14115 14116# check null-3 success: 1 14117DELETE FROM t1 14118WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14119AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14120 14121# check null-4 success: 1 14122DELETE FROM t1 14123WHERE f_int1 = 0 AND f_int2 = 0 14124AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 14125AND f_charbig = '#NULL#'; 14126INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14127SELECT f_int1, f_int1, '', '', 'was inserted' 14128 FROM t0_template source_tab 14129WHERE MOD(f_int1,3) = 0 14130AND f_int1 BETWEEN @max_row_div2 AND @max_row 14131ON DUPLICATE KEY 14132UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 14133f_int2 = 2 * @max_row + source_tab.f_int1, 14134f_charbig = 'was updated'; 14135 14136# check unique-1-a success: 1 14137 14138# check unique-1-b success: 1 14139DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14141f_int2 = CAST(f_char1 AS SIGNED INT), 14142f_charbig = CONCAT('===',f_char1,'===') 14143WHERE f_charbig = 'was updated'; 14144REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14145SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 14146 FROM t0_template source_tab 14147WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14148 14149# check replace success: 1 14150DELETE FROM t1 14151WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 14152DELETE FROM t1 14153WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 14154f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 14155UPDATE t1 SET f_int2 = f_int1, 14156f_char1 = CAST(f_int1 AS CHAR), 14157f_char2 = CAST(f_int1 AS CHAR), 14158f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 14159WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 14160SET AUTOCOMMIT= 0; 14161INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14162SELECT f_int1, f_int1, '', '', 'was inserted' 14163FROM t0_template source_tab 14164WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14165 14166# check transactions-1 success: 1 14167COMMIT WORK; 14168 14169# check transactions-2 success: 1 14170ROLLBACK WORK; 14171 14172# check transactions-3 success: 1 14173DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14174COMMIT WORK; 14175ROLLBACK WORK; 14176 14177# check transactions-4 success: 1 14178INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14179SELECT f_int1, f_int1, '', '', 'was inserted' 14180FROM t0_template source_tab 14181WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14182 14183# check transactions-5 success: 1 14184ROLLBACK WORK; 14185 14186# check transactions-6 success: 1 14187# INFO: Storage engine used for t1 seems to be transactional. 14188COMMIT; 14189 14190# check transactions-7 success: 1 14191DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14192COMMIT WORK; 14193SET @@session.sql_mode = 'traditional'; 14194Warnings: 14195Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 14196SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 14197INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14198SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 14199'', '', 'was inserted' FROM t0_template 14200WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14201ERROR 22012: Division by 0 14202COMMIT; 14203 14204# check transactions-8 success: 1 14205# INFO: Storage engine used for t1 seems to be able to revert 14206# changes made by the failing statement. 14207SET @@session.sql_mode = ''; 14208Warnings: 14209Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 14210SET AUTOCOMMIT= 1; 14211DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14212COMMIT WORK; 14213UPDATE t1 SET f_charbig = REPEAT('b', 1000); 14214 14215# check special-1 success: 1 14216UPDATE t1 SET f_charbig = ''; 14217 14218# check special-2 success: 1 14219UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 14220INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14221SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 14222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14223INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14224SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14225'just inserted' FROM t0_template 14226WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14227CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 14228BEGIN 14229UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14230f_charbig = 'updated by trigger' 14231 WHERE f_int1 = new.f_int1; 14232END| 14233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14234SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14235WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14236 14237# check trigger-1 success: 1 14238DROP TRIGGER trg_1; 14239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14240f_int2 = CAST(f_char1 AS SIGNED INT), 14241f_charbig = 'just inserted' 14242 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14243DELETE FROM t0_aux 14244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14247'just inserted' FROM t0_template 14248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14249CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 14250BEGIN 14251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14252f_charbig = 'updated by trigger' 14253 WHERE f_int1 = new.f_int1; 14254END| 14255INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14256SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14258 14259# check trigger-2 success: 1 14260DROP TRIGGER trg_1; 14261UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14262f_int2 = CAST(f_char1 AS SIGNED INT), 14263f_charbig = 'just inserted' 14264 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14265DELETE FROM t0_aux 14266WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14267INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14268SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14269'just inserted' FROM t0_template 14270WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14271CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14272BEGIN 14273UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14274f_charbig = 'updated by trigger' 14275 WHERE f_int1 = new.f_int1; 14276END| 14277UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14278WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14279 14280# check trigger-3 success: 1 14281DROP TRIGGER trg_1; 14282UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14283f_int2 = CAST(f_char1 AS SIGNED INT), 14284f_charbig = 'just inserted' 14285 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14286DELETE FROM t0_aux 14287WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14288INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14289SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14290'just inserted' FROM t0_template 14291WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14292CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14293BEGIN 14294UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14295f_charbig = 'updated by trigger' 14296 WHERE f_int1 = - old.f_int1; 14297END| 14298UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14299WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14300 14301# check trigger-4 success: 1 14302DROP TRIGGER trg_1; 14303UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14304f_int2 = CAST(f_char1 AS SIGNED INT), 14305f_charbig = 'just inserted' 14306 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14307DELETE FROM t0_aux 14308WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14309INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14310SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14311'just inserted' FROM t0_template 14312WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14313CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14314BEGIN 14315UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14316f_charbig = 'updated by trigger' 14317 WHERE f_int1 = new.f_int1; 14318END| 14319UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14320WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14321 14322# check trigger-5 success: 1 14323DROP TRIGGER trg_1; 14324UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14325f_int2 = CAST(f_char1 AS SIGNED INT), 14326f_charbig = 'just inserted' 14327 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14328DELETE FROM t0_aux 14329WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14330INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14331SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14332'just inserted' FROM t0_template 14333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14334CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14335BEGIN 14336UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14337f_charbig = 'updated by trigger' 14338 WHERE f_int1 = - old.f_int1; 14339END| 14340UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14341WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14342 14343# check trigger-6 success: 1 14344DROP TRIGGER trg_1; 14345UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14346f_int2 = CAST(f_char1 AS SIGNED INT), 14347f_charbig = 'just inserted' 14348 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14349DELETE FROM t0_aux 14350WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14351INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14352SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14353'just inserted' FROM t0_template 14354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14355CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 14356BEGIN 14357UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14358f_charbig = 'updated by trigger' 14359 WHERE f_int1 = - old.f_int1; 14360END| 14361DELETE FROM t0_aux 14362WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14363 14364# check trigger-7 success: 1 14365DROP TRIGGER trg_1; 14366UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14367f_int2 = CAST(f_char1 AS SIGNED INT), 14368f_charbig = 'just inserted' 14369 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14370DELETE FROM t0_aux 14371WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14372INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14373SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14374'just inserted' FROM t0_template 14375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14376CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 14377BEGIN 14378UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14379f_charbig = 'updated by trigger' 14380 WHERE f_int1 = - old.f_int1; 14381END| 14382DELETE FROM t0_aux 14383WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14384 14385# check trigger-8 success: 1 14386DROP TRIGGER trg_1; 14387UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14388f_int2 = CAST(f_char1 AS SIGNED INT), 14389f_charbig = 'just inserted' 14390 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14391DELETE FROM t0_aux 14392WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14393DELETE FROM t1 14394WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14395CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14396BEGIN 14397SET new.f_int1 = old.f_int1 + @max_row, 14398new.f_int2 = old.f_int2 - @max_row, 14399new.f_charbig = '####updated per update trigger####'; 14400END| 14401UPDATE t1 14402SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14403f_charbig = '####updated per update statement itself####'; 14404 14405# check trigger-9 success: 1 14406DROP TRIGGER trg_2; 14407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14408f_int2 = CAST(f_char1 AS SIGNED INT), 14409f_charbig = CONCAT('===',f_char1,'==='); 14410CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14411BEGIN 14412SET new.f_int1 = new.f_int1 + @max_row, 14413new.f_int2 = new.f_int2 - @max_row, 14414new.f_charbig = '####updated per update trigger####'; 14415END| 14416UPDATE t1 14417SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14418f_charbig = '####updated per update statement itself####'; 14419 14420# check trigger-10 success: 1 14421DROP TRIGGER trg_2; 14422UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14423f_int2 = CAST(f_char1 AS SIGNED INT), 14424f_charbig = CONCAT('===',f_char1,'==='); 14425CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14426BEGIN 14427SET new.f_int1 = @my_max1 + @counter, 14428new.f_int2 = @my_min2 - @counter, 14429new.f_charbig = '####updated per insert trigger####'; 14430SET @counter = @counter + 1; 14431END| 14432SET @counter = 1; 14433SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14434INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14435SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14436CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14438ORDER BY f_int1; 14439DROP TRIGGER trg_3; 14440 14441# check trigger-11 success: 1 14442DELETE FROM t1 14443WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14444AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14445AND f_charbig = '####updated per insert trigger####'; 14446CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14447BEGIN 14448SET new.f_int1 = @my_max1 + @counter, 14449new.f_int2 = @my_min2 - @counter, 14450new.f_charbig = '####updated per insert trigger####'; 14451SET @counter = @counter + 1; 14452END| 14453SET @counter = 1; 14454SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14455INSERT INTO t1 (f_char1, f_char2, f_charbig) 14456SELECT CAST(f_int1 AS CHAR), 14457CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14459ORDER BY f_int1; 14460DROP TRIGGER trg_3; 14461 14462# check trigger-12 success: 1 14463DELETE FROM t1 14464WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14465AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14466AND f_charbig = '####updated per insert trigger####'; 14467ANALYZE TABLE t1; 14468Table Op Msg_type Msg_text 14469test.t1 analyze status OK 14470CHECK TABLE t1 EXTENDED; 14471Table Op Msg_type Msg_text 14472test.t1 check status OK 14473CHECKSUM TABLE t1 EXTENDED; 14474Table Checksum 14475test.t1 <some_value> 14476OPTIMIZE TABLE t1; 14477Table Op Msg_type Msg_text 14478test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 14479test.t1 optimize status OK 14480# check layout success: 1 14481REPAIR TABLE t1 EXTENDED; 14482Table Op Msg_type Msg_text 14483test.t1 repair status OK 14484# check layout success: 1 14485TRUNCATE t1; 14486 14487# check TRUNCATE success: 1 14488# check layout success: 1 14489# End usability test (inc/partition_check.inc) 14490DROP TABLE t1; 14491CREATE TABLE t1 ( 14492f_int1 INTEGER, 14493f_int2 INTEGER, 14494f_char1 CHAR(20), 14495f_char2 CHAR(20), 14496f_charbig VARCHAR(1000) 14497, UNIQUE INDEX uidx (f_int1,f_int2) 14498) 14499PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) 14500(PARTITION part1 VALUES LESS THAN (0) 14501(SUBPARTITION subpart11, SUBPARTITION subpart12), 14502PARTITION part2 VALUES LESS THAN (5) 14503(SUBPARTITION subpart21, SUBPARTITION subpart22), 14504PARTITION part3 VALUES LESS THAN (10) 14505(SUBPARTITION subpart31, SUBPARTITION subpart32), 14506PARTITION part4 VALUES LESS THAN (2147483646) 14507(SUBPARTITION subpart41, SUBPARTITION subpart42)); 14508INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14509SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14510WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 14511ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 14512INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14513SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 14514WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 14515# Start usability test (inc/partition_check.inc) 14516create_command 14517SHOW CREATE TABLE t1; 14518Table Create Table 14519t1 CREATE TABLE `t1` ( 14520 `f_int1` bigint(20) DEFAULT NULL, 14521 `f_int2` bigint(20) DEFAULT NULL, 14522 `f_char1` char(20) DEFAULT NULL, 14523 `f_char2` char(20) DEFAULT NULL, 14524 `f_charbig` varchar(1000) DEFAULT NULL, 14525 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 14526) ENGINE=InnoDB DEFAULT CHARSET=latin1 14527/*!50100 PARTITION BY RANGE (f_int1) 14528SUBPARTITION BY KEY (f_int2) 14529(PARTITION part1 VALUES LESS THAN (0) 14530 (SUBPARTITION subpart11 ENGINE = InnoDB, 14531 SUBPARTITION subpart12 ENGINE = InnoDB), 14532 PARTITION part2 VALUES LESS THAN (5) 14533 (SUBPARTITION subpart21 ENGINE = InnoDB, 14534 SUBPARTITION subpart22 ENGINE = InnoDB), 14535 PARTITION part3 VALUES LESS THAN (10) 14536 (SUBPARTITION subpart31 ENGINE = InnoDB, 14537 SUBPARTITION subpart32 ENGINE = InnoDB), 14538 PARTITION part4 VALUES LESS THAN (2147483646) 14539 (SUBPARTITION subpart41 ENGINE = InnoDB, 14540 SUBPARTITION subpart42 ENGINE = InnoDB)) */ 14541 14542# check prerequisites-1 success: 1 14543# check COUNT(*) success: 1 14544# check MIN/MAX(f_int1) success: 1 14545# check MIN/MAX(f_int2) success: 1 14546INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14547SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14548CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 14549WHERE f_int1 IN (2,3); 14550ERROR 23000: Duplicate entry '2-2' for key 'uidx' 14551# check prerequisites-3 success: 1 14552# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 14553INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14554SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14555CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14556WHERE f_int1 IN (2,3); 14557DELETE FROM t1 WHERE f_charbig = 'delete me'; 14558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14559SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 14560CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 14561WHERE f_int1 IN (2,3); 14562DELETE FROM t1 WHERE f_charbig = 'delete me'; 14563# check read via f_int1 success: 1 14564# check read via f_int2 success: 1 14565 14566# check multiple-1 success: 1 14567DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 14568 14569# check multiple-2 success: 1 14570INSERT INTO t1 SELECT * FROM t0_template 14571WHERE MOD(f_int1,3) = 0; 14572 14573# check multiple-3 success: 1 14574UPDATE t1 SET f_int1 = f_int1 + @max_row 14575WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 14576AND @max_row_div2 + @max_row_div4; 14577 14578# check multiple-4 success: 1 14579DELETE FROM t1 14580WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 14581AND @max_row_div2 + @max_row_div4 + @max_row; 14582 14583# check multiple-5 success: 1 14584SELECT COUNT(*) INTO @try_count FROM t0_template 14585WHERE MOD(f_int1,3) = 0 14586AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14587SELECT COUNT(*) INTO @clash_count 14588FROM t1 INNER JOIN t0_template USING(f_int1) 14589WHERE MOD(f_int1,3) = 0 14590AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14591SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 14592INSERT INTO t1 14593SET f_int1 = @cur_value , f_int2 = @cur_value, 14594f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14595f_charbig = '#SINGLE#'; 14596 14597# check single-1 success: 1 14598SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 14599INSERT INTO t1 14600SET f_int1 = @cur_value , f_int2 = @cur_value, 14601f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 14602f_charbig = '#SINGLE#'; 14603 14604# check single-2 success: 1 14605SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 14606SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 14607UPDATE t1 SET f_int1 = @cur_value2 14608WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 14609 14610# check single-3 success: 1 14611SET @cur_value1= -1; 14612SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 14613UPDATE t1 SET f_int1 = @cur_value1 14614WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 14615 14616# check single-4 success: 1 14617SELECT MAX(f_int1) INTO @cur_value FROM t1; 14618DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 14619 14620# check single-5 success: 1 14621DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 14622 14623# check single-6 success: 1 14624INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 14625ERROR HY000: Table has no partition for value 2147483647 14626DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 14627INSERT t1 SET f_int1 = 0 , f_int2 = 0, 14628f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 14629f_charbig = '#NULL#'; 14630INSERT INTO t1 14631SET f_int1 = NULL , f_int2 = -@max_row, 14632f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 14633f_charbig = '#NULL#'; 14634# check null success: 1 14635 14636# check null-1 success: 1 14637UPDATE t1 SET f_int1 = -@max_row 14638WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14639AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14640 14641# check null-2 success: 1 14642UPDATE t1 SET f_int1 = NULL 14643WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14644AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14645 14646# check null-3 success: 1 14647DELETE FROM t1 14648WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 14649AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 14650 14651# check null-4 success: 1 14652DELETE FROM t1 14653WHERE f_int1 = 0 AND f_int2 = 0 14654AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 14655AND f_charbig = '#NULL#'; 14656INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14657SELECT f_int1, f_int1, '', '', 'was inserted' 14658 FROM t0_template source_tab 14659WHERE MOD(f_int1,3) = 0 14660AND f_int1 BETWEEN @max_row_div2 AND @max_row 14661ON DUPLICATE KEY 14662UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 14663f_int2 = 2 * @max_row + source_tab.f_int1, 14664f_charbig = 'was updated'; 14665 14666# check unique-1-a success: 1 14667 14668# check unique-1-b success: 1 14669DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14670UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14671f_int2 = CAST(f_char1 AS SIGNED INT), 14672f_charbig = CONCAT('===',f_char1,'===') 14673WHERE f_charbig = 'was updated'; 14674REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14675SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 14676 FROM t0_template source_tab 14677WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 14678 14679# check replace success: 1 14680DELETE FROM t1 14681WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 14682DELETE FROM t1 14683WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 14684f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 14685UPDATE t1 SET f_int2 = f_int1, 14686f_char1 = CAST(f_int1 AS CHAR), 14687f_char2 = CAST(f_int1 AS CHAR), 14688f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 14689WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 14690SET AUTOCOMMIT= 0; 14691INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14692SELECT f_int1, f_int1, '', '', 'was inserted' 14693FROM t0_template source_tab 14694WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14695 14696# check transactions-1 success: 1 14697COMMIT WORK; 14698 14699# check transactions-2 success: 1 14700ROLLBACK WORK; 14701 14702# check transactions-3 success: 1 14703DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14704COMMIT WORK; 14705ROLLBACK WORK; 14706 14707# check transactions-4 success: 1 14708INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14709SELECT f_int1, f_int1, '', '', 'was inserted' 14710FROM t0_template source_tab 14711WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14712 14713# check transactions-5 success: 1 14714ROLLBACK WORK; 14715 14716# check transactions-6 success: 1 14717# INFO: Storage engine used for t1 seems to be transactional. 14718COMMIT; 14719 14720# check transactions-7 success: 1 14721DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14722COMMIT WORK; 14723SET @@session.sql_mode = 'traditional'; 14724Warnings: 14725Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 14726SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 14727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14728SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 14729'', '', 'was inserted' FROM t0_template 14730WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 14731ERROR 22012: Division by 0 14732COMMIT; 14733 14734# check transactions-8 success: 1 14735# INFO: Storage engine used for t1 seems to be able to revert 14736# changes made by the failing statement. 14737SET @@session.sql_mode = ''; 14738Warnings: 14739Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 14740SET AUTOCOMMIT= 1; 14741DELETE FROM t1 WHERE f_charbig = 'was inserted'; 14742COMMIT WORK; 14743UPDATE t1 SET f_charbig = REPEAT('b', 1000); 14744 14745# check special-1 success: 1 14746UPDATE t1 SET f_charbig = ''; 14747 14748# check special-2 success: 1 14749UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 14750INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 14751SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 14752WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14753INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14754SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14755'just inserted' FROM t0_template 14756WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14757CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 14758BEGIN 14759UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14760f_charbig = 'updated by trigger' 14761 WHERE f_int1 = new.f_int1; 14762END| 14763INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14764SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14765WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14766 14767# check trigger-1 success: 1 14768DROP TRIGGER trg_1; 14769UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14770f_int2 = CAST(f_char1 AS SIGNED INT), 14771f_charbig = 'just inserted' 14772 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14773DELETE FROM t0_aux 14774WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14775INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14776SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14777'just inserted' FROM t0_template 14778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14779CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 14780BEGIN 14781UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14782f_charbig = 'updated by trigger' 14783 WHERE f_int1 = new.f_int1; 14784END| 14785INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14786SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 14787WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14788 14789# check trigger-2 success: 1 14790DROP TRIGGER trg_1; 14791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14792f_int2 = CAST(f_char1 AS SIGNED INT), 14793f_charbig = 'just inserted' 14794 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14795DELETE FROM t0_aux 14796WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14797INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14798SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14799'just inserted' FROM t0_template 14800WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14801CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14802BEGIN 14803UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14804f_charbig = 'updated by trigger' 14805 WHERE f_int1 = new.f_int1; 14806END| 14807UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14808WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14809 14810# check trigger-3 success: 1 14811DROP TRIGGER trg_1; 14812UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14813f_int2 = CAST(f_char1 AS SIGNED INT), 14814f_charbig = 'just inserted' 14815 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14816DELETE FROM t0_aux 14817WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14818INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14819SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14820'just inserted' FROM t0_template 14821WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14822CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 14823BEGIN 14824UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14825f_charbig = 'updated by trigger' 14826 WHERE f_int1 = - old.f_int1; 14827END| 14828UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14829WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14830 14831# check trigger-4 success: 1 14832DROP TRIGGER trg_1; 14833UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14834f_int2 = CAST(f_char1 AS SIGNED INT), 14835f_charbig = 'just inserted' 14836 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14837DELETE FROM t0_aux 14838WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14839INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14840SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14841'just inserted' FROM t0_template 14842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14843CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14844BEGIN 14845UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14846f_charbig = 'updated by trigger' 14847 WHERE f_int1 = new.f_int1; 14848END| 14849UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14850WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14851 14852# check trigger-5 success: 1 14853DROP TRIGGER trg_1; 14854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14855f_int2 = CAST(f_char1 AS SIGNED INT), 14856f_charbig = 'just inserted' 14857 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14858DELETE FROM t0_aux 14859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14862'just inserted' FROM t0_template 14863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14864CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 14865BEGIN 14866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14867f_charbig = 'updated by trigger' 14868 WHERE f_int1 = - old.f_int1; 14869END| 14870UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 14871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14872 14873# check trigger-6 success: 1 14874DROP TRIGGER trg_1; 14875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14876f_int2 = CAST(f_char1 AS SIGNED INT), 14877f_charbig = 'just inserted' 14878 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14879DELETE FROM t0_aux 14880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14881INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14882SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14883'just inserted' FROM t0_template 14884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14885CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 14886BEGIN 14887UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14888f_charbig = 'updated by trigger' 14889 WHERE f_int1 = - old.f_int1; 14890END| 14891DELETE FROM t0_aux 14892WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14893 14894# check trigger-7 success: 1 14895DROP TRIGGER trg_1; 14896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14897f_int2 = CAST(f_char1 AS SIGNED INT), 14898f_charbig = 'just inserted' 14899 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14900DELETE FROM t0_aux 14901WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14902INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 14903SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 14904'just inserted' FROM t0_template 14905WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14906CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 14907BEGIN 14908UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 14909f_charbig = 'updated by trigger' 14910 WHERE f_int1 = - old.f_int1; 14911END| 14912DELETE FROM t0_aux 14913WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 14914 14915# check trigger-8 success: 1 14916DROP TRIGGER trg_1; 14917UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14918f_int2 = CAST(f_char1 AS SIGNED INT), 14919f_charbig = 'just inserted' 14920 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 14921DELETE FROM t0_aux 14922WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14923DELETE FROM t1 14924WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 14925CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14926BEGIN 14927SET new.f_int1 = old.f_int1 + @max_row, 14928new.f_int2 = old.f_int2 - @max_row, 14929new.f_charbig = '####updated per update trigger####'; 14930END| 14931UPDATE t1 14932SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14933f_charbig = '####updated per update statement itself####'; 14934 14935# check trigger-9 success: 1 14936DROP TRIGGER trg_2; 14937UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14938f_int2 = CAST(f_char1 AS SIGNED INT), 14939f_charbig = CONCAT('===',f_char1,'==='); 14940CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 14941BEGIN 14942SET new.f_int1 = new.f_int1 + @max_row, 14943new.f_int2 = new.f_int2 - @max_row, 14944new.f_charbig = '####updated per update trigger####'; 14945END| 14946UPDATE t1 14947SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 14948f_charbig = '####updated per update statement itself####'; 14949 14950# check trigger-10 success: 1 14951DROP TRIGGER trg_2; 14952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 14953f_int2 = CAST(f_char1 AS SIGNED INT), 14954f_charbig = CONCAT('===',f_char1,'==='); 14955CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14956BEGIN 14957SET new.f_int1 = @my_max1 + @counter, 14958new.f_int2 = @my_min2 - @counter, 14959new.f_charbig = '####updated per insert trigger####'; 14960SET @counter = @counter + 1; 14961END| 14962SET @counter = 1; 14963SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14964INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 14965SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 14966CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14967WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14968ORDER BY f_int1; 14969DROP TRIGGER trg_3; 14970 14971# check trigger-11 success: 1 14972DELETE FROM t1 14973WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14974AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14975AND f_charbig = '####updated per insert trigger####'; 14976CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 14977BEGIN 14978SET new.f_int1 = @my_max1 + @counter, 14979new.f_int2 = @my_min2 - @counter, 14980new.f_charbig = '####updated per insert trigger####'; 14981SET @counter = @counter + 1; 14982END| 14983SET @counter = 1; 14984SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 14985INSERT INTO t1 (f_char1, f_char2, f_charbig) 14986SELECT CAST(f_int1 AS CHAR), 14987CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 14988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 14989ORDER BY f_int1; 14990DROP TRIGGER trg_3; 14991 14992# check trigger-12 success: 1 14993DELETE FROM t1 14994WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 14995AND f_int2 <> CAST(f_char1 AS SIGNED INT) 14996AND f_charbig = '####updated per insert trigger####'; 14997ANALYZE TABLE t1; 14998Table Op Msg_type Msg_text 14999test.t1 analyze status OK 15000CHECK TABLE t1 EXTENDED; 15001Table Op Msg_type Msg_text 15002test.t1 check status OK 15003CHECKSUM TABLE t1 EXTENDED; 15004Table Checksum 15005test.t1 <some_value> 15006OPTIMIZE TABLE t1; 15007Table Op Msg_type Msg_text 15008test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 15009test.t1 optimize status OK 15010# check layout success: 1 15011REPAIR TABLE t1 EXTENDED; 15012Table Op Msg_type Msg_text 15013test.t1 repair status OK 15014# check layout success: 1 15015TRUNCATE t1; 15016 15017# check TRUNCATE success: 1 15018# check layout success: 1 15019# End usability test (inc/partition_check.inc) 15020DROP TABLE t1; 15021CREATE TABLE t1 ( 15022f_int1 INTEGER, 15023f_int2 INTEGER, 15024f_char1 CHAR(20), 15025f_char2 CHAR(20), 15026f_charbig VARCHAR(1000) 15027, UNIQUE INDEX uidx (f_int1,f_int2) 15028) 15029PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) 15030(PARTITION part1 VALUES IN (0) 15031(SUBPARTITION sp11, SUBPARTITION sp12), 15032PARTITION part2 VALUES IN (1) 15033(SUBPARTITION sp21, SUBPARTITION sp22), 15034PARTITION part3 VALUES IN (2) 15035(SUBPARTITION sp31, SUBPARTITION sp32), 15036PARTITION part4 VALUES IN (NULL) 15037(SUBPARTITION sp41, SUBPARTITION sp42)); 15038INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15039SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15040WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 15041ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 15042INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15043SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15044WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 15045# Start usability test (inc/partition_check.inc) 15046create_command 15047SHOW CREATE TABLE t1; 15048Table Create Table 15049t1 CREATE TABLE `t1` ( 15050 `f_int1` bigint(20) DEFAULT NULL, 15051 `f_int2` bigint(20) DEFAULT NULL, 15052 `f_char1` char(20) DEFAULT NULL, 15053 `f_char2` char(20) DEFAULT NULL, 15054 `f_charbig` varchar(1000) DEFAULT NULL, 15055 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 15056) ENGINE=InnoDB DEFAULT CHARSET=latin1 15057/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) 15058SUBPARTITION BY HASH (f_int2 + 1) 15059(PARTITION part1 VALUES IN (0) 15060 (SUBPARTITION sp11 ENGINE = InnoDB, 15061 SUBPARTITION sp12 ENGINE = InnoDB), 15062 PARTITION part2 VALUES IN (1) 15063 (SUBPARTITION sp21 ENGINE = InnoDB, 15064 SUBPARTITION sp22 ENGINE = InnoDB), 15065 PARTITION part3 VALUES IN (2) 15066 (SUBPARTITION sp31 ENGINE = InnoDB, 15067 SUBPARTITION sp32 ENGINE = InnoDB), 15068 PARTITION part4 VALUES IN (NULL) 15069 (SUBPARTITION sp41 ENGINE = InnoDB, 15070 SUBPARTITION sp42 ENGINE = InnoDB)) */ 15071 15072# check prerequisites-1 success: 1 15073# check COUNT(*) success: 1 15074# check MIN/MAX(f_int1) success: 1 15075# check MIN/MAX(f_int2) success: 1 15076INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15077SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15078CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 15079WHERE f_int1 IN (2,3); 15080ERROR 23000: Duplicate entry '2-2' for key 'uidx' 15081# check prerequisites-3 success: 1 15082# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 15083INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15084SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15085CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15086WHERE f_int1 IN (2,3); 15087DELETE FROM t1 WHERE f_charbig = 'delete me'; 15088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15089SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15090CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15091WHERE f_int1 IN (2,3); 15092DELETE FROM t1 WHERE f_charbig = 'delete me'; 15093# check read via f_int1 success: 1 15094# check read via f_int2 success: 1 15095 15096# check multiple-1 success: 1 15097DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 15098 15099# check multiple-2 success: 1 15100INSERT INTO t1 SELECT * FROM t0_template 15101WHERE MOD(f_int1,3) = 0; 15102 15103# check multiple-3 success: 1 15104UPDATE t1 SET f_int1 = f_int1 + @max_row 15105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 15106AND @max_row_div2 + @max_row_div4; 15107 15108# check multiple-4 success: 1 15109DELETE FROM t1 15110WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 15111AND @max_row_div2 + @max_row_div4 + @max_row; 15112 15113# check multiple-5 success: 1 15114SELECT COUNT(*) INTO @try_count FROM t0_template 15115WHERE MOD(f_int1,3) = 0 15116AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15117SELECT COUNT(*) INTO @clash_count 15118FROM t1 INNER JOIN t0_template USING(f_int1) 15119WHERE MOD(f_int1,3) = 0 15120AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15121SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 15122INSERT INTO t1 15123SET f_int1 = @cur_value , f_int2 = @cur_value, 15124f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15125f_charbig = '#SINGLE#'; 15126 15127# check single-1 success: 1 15128SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 15129INSERT INTO t1 15130SET f_int1 = @cur_value , f_int2 = @cur_value, 15131f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15132f_charbig = '#SINGLE#'; 15133 15134# check single-2 success: 1 15135SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 15136SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 15137UPDATE t1 SET f_int1 = @cur_value2 15138WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 15139 15140# check single-3 success: 1 15141SET @cur_value1= -1; 15142SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 15143UPDATE t1 SET f_int1 = @cur_value1 15144WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 15145 15146# check single-4 success: 1 15147SELECT MAX(f_int1) INTO @cur_value FROM t1; 15148DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 15149 15150# check single-5 success: 1 15151DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 15152 15153# check single-6 success: 1 15154INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 15155 15156# check single-7 success: 1 15157DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 15158DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 15159INSERT t1 SET f_int1 = 0 , f_int2 = 0, 15160f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 15161f_charbig = '#NULL#'; 15162INSERT INTO t1 15163SET f_int1 = NULL , f_int2 = -@max_row, 15164f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 15165f_charbig = '#NULL#'; 15166# check null success: 1 15167 15168# check null-1 success: 1 15169UPDATE t1 SET f_int1 = -@max_row 15170WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15171AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15172 15173# check null-2 success: 1 15174UPDATE t1 SET f_int1 = NULL 15175WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15176AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15177 15178# check null-3 success: 1 15179DELETE FROM t1 15180WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15181AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15182 15183# check null-4 success: 1 15184DELETE FROM t1 15185WHERE f_int1 = 0 AND f_int2 = 0 15186AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 15187AND f_charbig = '#NULL#'; 15188INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15189SELECT f_int1, f_int1, '', '', 'was inserted' 15190 FROM t0_template source_tab 15191WHERE MOD(f_int1,3) = 0 15192AND f_int1 BETWEEN @max_row_div2 AND @max_row 15193ON DUPLICATE KEY 15194UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 15195f_int2 = 2 * @max_row + source_tab.f_int1, 15196f_charbig = 'was updated'; 15197 15198# check unique-1-a success: 1 15199 15200# check unique-1-b success: 1 15201DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15203f_int2 = CAST(f_char1 AS SIGNED INT), 15204f_charbig = CONCAT('===',f_char1,'===') 15205WHERE f_charbig = 'was updated'; 15206REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15207SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 15208 FROM t0_template source_tab 15209WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15210 15211# check replace success: 1 15212DELETE FROM t1 15213WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 15214DELETE FROM t1 15215WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 15216f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 15217UPDATE t1 SET f_int2 = f_int1, 15218f_char1 = CAST(f_int1 AS CHAR), 15219f_char2 = CAST(f_int1 AS CHAR), 15220f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 15221WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 15222SET AUTOCOMMIT= 0; 15223INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15224SELECT f_int1, f_int1, '', '', 'was inserted' 15225FROM t0_template source_tab 15226WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15227 15228# check transactions-1 success: 1 15229COMMIT WORK; 15230 15231# check transactions-2 success: 1 15232ROLLBACK WORK; 15233 15234# check transactions-3 success: 1 15235DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15236COMMIT WORK; 15237ROLLBACK WORK; 15238 15239# check transactions-4 success: 1 15240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15241SELECT f_int1, f_int1, '', '', 'was inserted' 15242FROM t0_template source_tab 15243WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15244 15245# check transactions-5 success: 1 15246ROLLBACK WORK; 15247 15248# check transactions-6 success: 1 15249# INFO: Storage engine used for t1 seems to be transactional. 15250COMMIT; 15251 15252# check transactions-7 success: 1 15253DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15254COMMIT WORK; 15255SET @@session.sql_mode = 'traditional'; 15256Warnings: 15257Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 15258SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 15259INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15260SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 15261'', '', 'was inserted' FROM t0_template 15262WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15263ERROR 22012: Division by 0 15264COMMIT; 15265 15266# check transactions-8 success: 1 15267# INFO: Storage engine used for t1 seems to be able to revert 15268# changes made by the failing statement. 15269SET @@session.sql_mode = ''; 15270Warnings: 15271Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 15272SET AUTOCOMMIT= 1; 15273DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15274COMMIT WORK; 15275UPDATE t1 SET f_charbig = REPEAT('b', 1000); 15276 15277# check special-1 success: 1 15278UPDATE t1 SET f_charbig = ''; 15279 15280# check special-2 success: 1 15281UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 15282INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15283SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 15284WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15285INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15286SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15287'just inserted' FROM t0_template 15288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15289CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 15290BEGIN 15291UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15292f_charbig = 'updated by trigger' 15293 WHERE f_int1 = new.f_int1; 15294END| 15295INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15296SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15297WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15298 15299# check trigger-1 success: 1 15300DROP TRIGGER trg_1; 15301UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15302f_int2 = CAST(f_char1 AS SIGNED INT), 15303f_charbig = 'just inserted' 15304 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15305DELETE FROM t0_aux 15306WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15307INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15308SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15309'just inserted' FROM t0_template 15310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15311CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 15312BEGIN 15313UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15314f_charbig = 'updated by trigger' 15315 WHERE f_int1 = new.f_int1; 15316END| 15317INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15318SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15320 15321# check trigger-2 success: 1 15322DROP TRIGGER trg_1; 15323UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15324f_int2 = CAST(f_char1 AS SIGNED INT), 15325f_charbig = 'just inserted' 15326 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15327DELETE FROM t0_aux 15328WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15329INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15330SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15331'just inserted' FROM t0_template 15332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15333CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15334BEGIN 15335UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15336f_charbig = 'updated by trigger' 15337 WHERE f_int1 = new.f_int1; 15338END| 15339UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15340WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15341 15342# check trigger-3 success: 1 15343DROP TRIGGER trg_1; 15344UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15345f_int2 = CAST(f_char1 AS SIGNED INT), 15346f_charbig = 'just inserted' 15347 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15348DELETE FROM t0_aux 15349WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15351SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15352'just inserted' FROM t0_template 15353WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15354CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15355BEGIN 15356UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15357f_charbig = 'updated by trigger' 15358 WHERE f_int1 = - old.f_int1; 15359END| 15360UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15361WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15362 15363# check trigger-4 success: 1 15364DROP TRIGGER trg_1; 15365UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15366f_int2 = CAST(f_char1 AS SIGNED INT), 15367f_charbig = 'just inserted' 15368 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15369DELETE FROM t0_aux 15370WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15371INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15372SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15373'just inserted' FROM t0_template 15374WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15375CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15376BEGIN 15377UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15378f_charbig = 'updated by trigger' 15379 WHERE f_int1 = new.f_int1; 15380END| 15381UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15382WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15383 15384# check trigger-5 success: 1 15385DROP TRIGGER trg_1; 15386UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15387f_int2 = CAST(f_char1 AS SIGNED INT), 15388f_charbig = 'just inserted' 15389 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15390DELETE FROM t0_aux 15391WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15392INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15393SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15394'just inserted' FROM t0_template 15395WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15396CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15397BEGIN 15398UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15399f_charbig = 'updated by trigger' 15400 WHERE f_int1 = - old.f_int1; 15401END| 15402UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15403WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15404 15405# check trigger-6 success: 1 15406DROP TRIGGER trg_1; 15407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15408f_int2 = CAST(f_char1 AS SIGNED INT), 15409f_charbig = 'just inserted' 15410 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15411DELETE FROM t0_aux 15412WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15413INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15414SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15415'just inserted' FROM t0_template 15416WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15417CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 15418BEGIN 15419UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15420f_charbig = 'updated by trigger' 15421 WHERE f_int1 = - old.f_int1; 15422END| 15423DELETE FROM t0_aux 15424WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15425 15426# check trigger-7 success: 1 15427DROP TRIGGER trg_1; 15428UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15429f_int2 = CAST(f_char1 AS SIGNED INT), 15430f_charbig = 'just inserted' 15431 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15432DELETE FROM t0_aux 15433WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15434INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15435SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15436'just inserted' FROM t0_template 15437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15438CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 15439BEGIN 15440UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15441f_charbig = 'updated by trigger' 15442 WHERE f_int1 = - old.f_int1; 15443END| 15444DELETE FROM t0_aux 15445WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15446 15447# check trigger-8 success: 1 15448DROP TRIGGER trg_1; 15449UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15450f_int2 = CAST(f_char1 AS SIGNED INT), 15451f_charbig = 'just inserted' 15452 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15453DELETE FROM t0_aux 15454WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15455DELETE FROM t1 15456WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15457CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15458BEGIN 15459SET new.f_int1 = old.f_int1 + @max_row, 15460new.f_int2 = old.f_int2 - @max_row, 15461new.f_charbig = '####updated per update trigger####'; 15462END| 15463UPDATE t1 15464SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15465f_charbig = '####updated per update statement itself####'; 15466 15467# check trigger-9 success: 1 15468DROP TRIGGER trg_2; 15469UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15470f_int2 = CAST(f_char1 AS SIGNED INT), 15471f_charbig = CONCAT('===',f_char1,'==='); 15472CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15473BEGIN 15474SET new.f_int1 = new.f_int1 + @max_row, 15475new.f_int2 = new.f_int2 - @max_row, 15476new.f_charbig = '####updated per update trigger####'; 15477END| 15478UPDATE t1 15479SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15480f_charbig = '####updated per update statement itself####'; 15481 15482# check trigger-10 success: 1 15483DROP TRIGGER trg_2; 15484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15485f_int2 = CAST(f_char1 AS SIGNED INT), 15486f_charbig = CONCAT('===',f_char1,'==='); 15487CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15488BEGIN 15489SET new.f_int1 = @my_max1 + @counter, 15490new.f_int2 = @my_min2 - @counter, 15491new.f_charbig = '####updated per insert trigger####'; 15492SET @counter = @counter + 1; 15493END| 15494SET @counter = 1; 15495SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15496INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15497SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15498CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15499WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15500ORDER BY f_int1; 15501DROP TRIGGER trg_3; 15502 15503# check trigger-11 success: 1 15504DELETE FROM t1 15505WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15506AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15507AND f_charbig = '####updated per insert trigger####'; 15508CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 15509BEGIN 15510SET new.f_int1 = @my_max1 + @counter, 15511new.f_int2 = @my_min2 - @counter, 15512new.f_charbig = '####updated per insert trigger####'; 15513SET @counter = @counter + 1; 15514END| 15515SET @counter = 1; 15516SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 15517INSERT INTO t1 (f_char1, f_char2, f_charbig) 15518SELECT CAST(f_int1 AS CHAR), 15519CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 15520WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 15521ORDER BY f_int1; 15522DROP TRIGGER trg_3; 15523 15524# check trigger-12 success: 1 15525DELETE FROM t1 15526WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 15527AND f_int2 <> CAST(f_char1 AS SIGNED INT) 15528AND f_charbig = '####updated per insert trigger####'; 15529ANALYZE TABLE t1; 15530Table Op Msg_type Msg_text 15531test.t1 analyze status OK 15532CHECK TABLE t1 EXTENDED; 15533Table Op Msg_type Msg_text 15534test.t1 check status OK 15535CHECKSUM TABLE t1 EXTENDED; 15536Table Checksum 15537test.t1 <some_value> 15538OPTIMIZE TABLE t1; 15539Table Op Msg_type Msg_text 15540test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 15541test.t1 optimize status OK 15542# check layout success: 1 15543REPAIR TABLE t1 EXTENDED; 15544Table Op Msg_type Msg_text 15545test.t1 repair status OK 15546# check layout success: 1 15547TRUNCATE t1; 15548 15549# check TRUNCATE success: 1 15550# check layout success: 1 15551# End usability test (inc/partition_check.inc) 15552DROP TABLE t1; 15553CREATE TABLE t1 ( 15554f_int1 INTEGER, 15555f_int2 INTEGER, 15556f_char1 CHAR(20), 15557f_char2 CHAR(20), 15558f_charbig VARCHAR(1000) 15559, UNIQUE INDEX uidx (f_int1,f_int2) 15560) 15561PARTITION BY LIST(ABS(MOD(f_int1,2))) 15562SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 15563(PARTITION part1 VALUES IN (0), 15564PARTITION part2 VALUES IN (1), 15565PARTITION part3 VALUES IN (NULL)); 15566INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15567SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15568WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 15569ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 15570INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15571SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 15572WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 15573# Start usability test (inc/partition_check.inc) 15574create_command 15575SHOW CREATE TABLE t1; 15576Table Create Table 15577t1 CREATE TABLE `t1` ( 15578 `f_int1` bigint(20) DEFAULT NULL, 15579 `f_int2` bigint(20) DEFAULT NULL, 15580 `f_char1` char(20) DEFAULT NULL, 15581 `f_char2` char(20) DEFAULT NULL, 15582 `f_charbig` varchar(1000) DEFAULT NULL, 15583 UNIQUE KEY `uidx` (`f_int1`,`f_int2`) 15584) ENGINE=InnoDB DEFAULT CHARSET=latin1 15585/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) 15586SUBPARTITION BY KEY (f_int2) 15587SUBPARTITIONS 3 15588(PARTITION part1 VALUES IN (0) ENGINE = InnoDB, 15589 PARTITION part2 VALUES IN (1) ENGINE = InnoDB, 15590 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */ 15591 15592# check prerequisites-1 success: 1 15593# check COUNT(*) success: 1 15594# check MIN/MAX(f_int1) success: 1 15595# check MIN/MAX(f_int2) success: 1 15596INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15597SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 15598CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 15599WHERE f_int1 IN (2,3); 15600ERROR 23000: Duplicate entry '2-2' for key 'uidx' 15601# check prerequisites-3 success: 1 15602# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 15603INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15604SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15605CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15606WHERE f_int1 IN (2,3); 15607DELETE FROM t1 WHERE f_charbig = 'delete me'; 15608INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15609SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 15610CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 15611WHERE f_int1 IN (2,3); 15612DELETE FROM t1 WHERE f_charbig = 'delete me'; 15613# check read via f_int1 success: 1 15614# check read via f_int2 success: 1 15615 15616# check multiple-1 success: 1 15617DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 15618 15619# check multiple-2 success: 1 15620INSERT INTO t1 SELECT * FROM t0_template 15621WHERE MOD(f_int1,3) = 0; 15622 15623# check multiple-3 success: 1 15624UPDATE t1 SET f_int1 = f_int1 + @max_row 15625WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 15626AND @max_row_div2 + @max_row_div4; 15627 15628# check multiple-4 success: 1 15629DELETE FROM t1 15630WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 15631AND @max_row_div2 + @max_row_div4 + @max_row; 15632 15633# check multiple-5 success: 1 15634SELECT COUNT(*) INTO @try_count FROM t0_template 15635WHERE MOD(f_int1,3) = 0 15636AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15637SELECT COUNT(*) INTO @clash_count 15638FROM t1 INNER JOIN t0_template USING(f_int1) 15639WHERE MOD(f_int1,3) = 0 15640AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15641SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 15642INSERT INTO t1 15643SET f_int1 = @cur_value , f_int2 = @cur_value, 15644f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15645f_charbig = '#SINGLE#'; 15646 15647# check single-1 success: 1 15648SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 15649INSERT INTO t1 15650SET f_int1 = @cur_value , f_int2 = @cur_value, 15651f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 15652f_charbig = '#SINGLE#'; 15653 15654# check single-2 success: 1 15655SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 15656SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 15657UPDATE t1 SET f_int1 = @cur_value2 15658WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 15659 15660# check single-3 success: 1 15661SET @cur_value1= -1; 15662SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 15663UPDATE t1 SET f_int1 = @cur_value1 15664WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 15665 15666# check single-4 success: 1 15667SELECT MAX(f_int1) INTO @cur_value FROM t1; 15668DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 15669 15670# check single-5 success: 1 15671DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 15672 15673# check single-6 success: 1 15674INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 15675 15676# check single-7 success: 1 15677DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 15678DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 15679INSERT t1 SET f_int1 = 0 , f_int2 = 0, 15680f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 15681f_charbig = '#NULL#'; 15682INSERT INTO t1 15683SET f_int1 = NULL , f_int2 = -@max_row, 15684f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 15685f_charbig = '#NULL#'; 15686# check null success: 1 15687 15688# check null-1 success: 1 15689UPDATE t1 SET f_int1 = -@max_row 15690WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15691AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15692 15693# check null-2 success: 1 15694UPDATE t1 SET f_int1 = NULL 15695WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15696AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15697 15698# check null-3 success: 1 15699DELETE FROM t1 15700WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 15701AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 15702 15703# check null-4 success: 1 15704DELETE FROM t1 15705WHERE f_int1 = 0 AND f_int2 = 0 15706AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 15707AND f_charbig = '#NULL#'; 15708INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15709SELECT f_int1, f_int1, '', '', 'was inserted' 15710 FROM t0_template source_tab 15711WHERE MOD(f_int1,3) = 0 15712AND f_int1 BETWEEN @max_row_div2 AND @max_row 15713ON DUPLICATE KEY 15714UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 15715f_int2 = 2 * @max_row + source_tab.f_int1, 15716f_charbig = 'was updated'; 15717 15718# check unique-1-a success: 1 15719 15720# check unique-1-b success: 1 15721DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15722UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15723f_int2 = CAST(f_char1 AS SIGNED INT), 15724f_charbig = CONCAT('===',f_char1,'===') 15725WHERE f_charbig = 'was updated'; 15726REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15727SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 15728 FROM t0_template source_tab 15729WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 15730 15731# check replace success: 1 15732DELETE FROM t1 15733WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 15734DELETE FROM t1 15735WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 15736f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 15737UPDATE t1 SET f_int2 = f_int1, 15738f_char1 = CAST(f_int1 AS CHAR), 15739f_char2 = CAST(f_int1 AS CHAR), 15740f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 15741WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 15742SET AUTOCOMMIT= 0; 15743INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15744SELECT f_int1, f_int1, '', '', 'was inserted' 15745FROM t0_template source_tab 15746WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15747 15748# check transactions-1 success: 1 15749COMMIT WORK; 15750 15751# check transactions-2 success: 1 15752ROLLBACK WORK; 15753 15754# check transactions-3 success: 1 15755DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15756COMMIT WORK; 15757ROLLBACK WORK; 15758 15759# check transactions-4 success: 1 15760INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15761SELECT f_int1, f_int1, '', '', 'was inserted' 15762FROM t0_template source_tab 15763WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15764 15765# check transactions-5 success: 1 15766ROLLBACK WORK; 15767 15768# check transactions-6 success: 1 15769# INFO: Storage engine used for t1 seems to be transactional. 15770COMMIT; 15771 15772# check transactions-7 success: 1 15773DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15774COMMIT WORK; 15775SET @@session.sql_mode = 'traditional'; 15776Warnings: 15777Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 15778SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 15779INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 15780SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 15781'', '', 'was inserted' FROM t0_template 15782WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 15783ERROR 22012: Division by 0 15784COMMIT; 15785 15786# check transactions-8 success: 1 15787# INFO: Storage engine used for t1 seems to be able to revert 15788# changes made by the failing statement. 15789SET @@session.sql_mode = ''; 15790Warnings: 15791Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 15792SET AUTOCOMMIT= 1; 15793DELETE FROM t1 WHERE f_charbig = 'was inserted'; 15794COMMIT WORK; 15795UPDATE t1 SET f_charbig = REPEAT('b', 1000); 15796 15797# check special-1 success: 1 15798UPDATE t1 SET f_charbig = ''; 15799 15800# check special-2 success: 1 15801UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 15802INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 15803SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 15804WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15805INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15806SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15807'just inserted' FROM t0_template 15808WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15809CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 15810BEGIN 15811UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15812f_charbig = 'updated by trigger' 15813 WHERE f_int1 = new.f_int1; 15814END| 15815INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15816SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15817WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15818 15819# check trigger-1 success: 1 15820DROP TRIGGER trg_1; 15821UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15822f_int2 = CAST(f_char1 AS SIGNED INT), 15823f_charbig = 'just inserted' 15824 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15825DELETE FROM t0_aux 15826WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15827INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15828SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15829'just inserted' FROM t0_template 15830WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15831CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 15832BEGIN 15833UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15834f_charbig = 'updated by trigger' 15835 WHERE f_int1 = new.f_int1; 15836END| 15837INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15838SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 15839WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15840 15841# check trigger-2 success: 1 15842DROP TRIGGER trg_1; 15843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15844f_int2 = CAST(f_char1 AS SIGNED INT), 15845f_charbig = 'just inserted' 15846 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15847DELETE FROM t0_aux 15848WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15850SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15851'just inserted' FROM t0_template 15852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15853CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15854BEGIN 15855UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15856f_charbig = 'updated by trigger' 15857 WHERE f_int1 = new.f_int1; 15858END| 15859UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15860WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15861 15862# check trigger-3 success: 1 15863DROP TRIGGER trg_1; 15864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15865f_int2 = CAST(f_char1 AS SIGNED INT), 15866f_charbig = 'just inserted' 15867 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15868DELETE FROM t0_aux 15869WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15870INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15871SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15872'just inserted' FROM t0_template 15873WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15874CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 15875BEGIN 15876UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15877f_charbig = 'updated by trigger' 15878 WHERE f_int1 = - old.f_int1; 15879END| 15880UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15881WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15882 15883# check trigger-4 success: 1 15884DROP TRIGGER trg_1; 15885UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15886f_int2 = CAST(f_char1 AS SIGNED INT), 15887f_charbig = 'just inserted' 15888 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15889DELETE FROM t0_aux 15890WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15891INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15892SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15893'just inserted' FROM t0_template 15894WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15895CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15896BEGIN 15897UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15898f_charbig = 'updated by trigger' 15899 WHERE f_int1 = new.f_int1; 15900END| 15901UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15902WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15903 15904# check trigger-5 success: 1 15905DROP TRIGGER trg_1; 15906UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15907f_int2 = CAST(f_char1 AS SIGNED INT), 15908f_charbig = 'just inserted' 15909 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15910DELETE FROM t0_aux 15911WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15912INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15913SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15914'just inserted' FROM t0_template 15915WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15916CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 15917BEGIN 15918UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15919f_charbig = 'updated by trigger' 15920 WHERE f_int1 = - old.f_int1; 15921END| 15922UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 15923WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15924 15925# check trigger-6 success: 1 15926DROP TRIGGER trg_1; 15927UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15928f_int2 = CAST(f_char1 AS SIGNED INT), 15929f_charbig = 'just inserted' 15930 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15931DELETE FROM t0_aux 15932WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15933INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15934SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15935'just inserted' FROM t0_template 15936WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15937CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 15938BEGIN 15939UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15940f_charbig = 'updated by trigger' 15941 WHERE f_int1 = - old.f_int1; 15942END| 15943DELETE FROM t0_aux 15944WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15945 15946# check trigger-7 success: 1 15947DROP TRIGGER trg_1; 15948UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15949f_int2 = CAST(f_char1 AS SIGNED INT), 15950f_charbig = 'just inserted' 15951 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15952DELETE FROM t0_aux 15953WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15954INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 15955SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 15956'just inserted' FROM t0_template 15957WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15958CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 15959BEGIN 15960UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 15961f_charbig = 'updated by trigger' 15962 WHERE f_int1 = - old.f_int1; 15963END| 15964DELETE FROM t0_aux 15965WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 15966 15967# check trigger-8 success: 1 15968DROP TRIGGER trg_1; 15969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15970f_int2 = CAST(f_char1 AS SIGNED INT), 15971f_charbig = 'just inserted' 15972 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 15973DELETE FROM t0_aux 15974WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15975DELETE FROM t1 15976WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 15977CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15978BEGIN 15979SET new.f_int1 = old.f_int1 + @max_row, 15980new.f_int2 = old.f_int2 - @max_row, 15981new.f_charbig = '####updated per update trigger####'; 15982END| 15983UPDATE t1 15984SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 15985f_charbig = '####updated per update statement itself####'; 15986 15987# check trigger-9 success: 1 15988DROP TRIGGER trg_2; 15989UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 15990f_int2 = CAST(f_char1 AS SIGNED INT), 15991f_charbig = CONCAT('===',f_char1,'==='); 15992CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 15993BEGIN 15994SET new.f_int1 = new.f_int1 + @max_row, 15995new.f_int2 = new.f_int2 - @max_row, 15996new.f_charbig = '####updated per update trigger####'; 15997END| 15998UPDATE t1 15999SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16000f_charbig = '####updated per update statement itself####'; 16001 16002# check trigger-10 success: 1 16003DROP TRIGGER trg_2; 16004UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16005f_int2 = CAST(f_char1 AS SIGNED INT), 16006f_charbig = CONCAT('===',f_char1,'==='); 16007CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16008BEGIN 16009SET new.f_int1 = @my_max1 + @counter, 16010new.f_int2 = @my_min2 - @counter, 16011new.f_charbig = '####updated per insert trigger####'; 16012SET @counter = @counter + 1; 16013END| 16014SET @counter = 1; 16015SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16017SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16018CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16019WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16020ORDER BY f_int1; 16021DROP TRIGGER trg_3; 16022 16023# check trigger-11 success: 1 16024DELETE FROM t1 16025WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16026AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16027AND f_charbig = '####updated per insert trigger####'; 16028CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16029BEGIN 16030SET new.f_int1 = @my_max1 + @counter, 16031new.f_int2 = @my_min2 - @counter, 16032new.f_charbig = '####updated per insert trigger####'; 16033SET @counter = @counter + 1; 16034END| 16035SET @counter = 1; 16036SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16037INSERT INTO t1 (f_char1, f_char2, f_charbig) 16038SELECT CAST(f_int1 AS CHAR), 16039CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16040WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16041ORDER BY f_int1; 16042DROP TRIGGER trg_3; 16043 16044# check trigger-12 success: 1 16045DELETE FROM t1 16046WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16047AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16048AND f_charbig = '####updated per insert trigger####'; 16049ANALYZE TABLE t1; 16050Table Op Msg_type Msg_text 16051test.t1 analyze status OK 16052CHECK TABLE t1 EXTENDED; 16053Table Op Msg_type Msg_text 16054test.t1 check status OK 16055CHECKSUM TABLE t1 EXTENDED; 16056Table Checksum 16057test.t1 <some_value> 16058OPTIMIZE TABLE t1; 16059Table Op Msg_type Msg_text 16060test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 16061test.t1 optimize status OK 16062# check layout success: 1 16063REPAIR TABLE t1 EXTENDED; 16064Table Op Msg_type Msg_text 16065test.t1 repair status OK 16066# check layout success: 1 16067TRUNCATE t1; 16068 16069# check TRUNCATE success: 1 16070# check layout success: 1 16071# End usability test (inc/partition_check.inc) 16072DROP TABLE t1; 16073DROP TABLE IF EXISTS t1; 16074CREATE TABLE t1 ( 16075f_int1 INTEGER, 16076f_int2 INTEGER, 16077f_char1 CHAR(20), 16078f_char2 CHAR(20), 16079f_charbig VARCHAR(1000) 16080, UNIQUE INDEX uidx (f_int2,f_int1) 16081) 16082PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; 16083INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16084SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16085WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 16086ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 16087INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16088SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16089WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 16090# Start usability test (inc/partition_check.inc) 16091create_command 16092SHOW CREATE TABLE t1; 16093Table Create Table 16094t1 CREATE TABLE `t1` ( 16095 `f_int1` bigint(20) DEFAULT NULL, 16096 `f_int2` bigint(20) DEFAULT NULL, 16097 `f_char1` char(20) DEFAULT NULL, 16098 `f_char2` char(20) DEFAULT NULL, 16099 `f_charbig` varchar(1000) DEFAULT NULL, 16100 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 16101) ENGINE=InnoDB DEFAULT CHARSET=latin1 16102/*!50100 PARTITION BY HASH (f_int1 + f_int2) 16103PARTITIONS 2 */ 16104 16105# check prerequisites-1 success: 1 16106# check COUNT(*) success: 1 16107# check MIN/MAX(f_int1) success: 1 16108# check MIN/MAX(f_int2) success: 1 16109INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16110SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16111CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 16112WHERE f_int1 IN (2,3); 16113ERROR 23000: Duplicate entry '2-2' for key 'uidx' 16114# check prerequisites-3 success: 1 16115# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 16116INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16117SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16118CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16119WHERE f_int1 IN (2,3); 16120DELETE FROM t1 WHERE f_charbig = 'delete me'; 16121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16122SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16123CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16124WHERE f_int1 IN (2,3); 16125DELETE FROM t1 WHERE f_charbig = 'delete me'; 16126# check read via f_int1 success: 1 16127# check read via f_int2 success: 1 16128 16129# check multiple-1 success: 1 16130DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 16131 16132# check multiple-2 success: 1 16133INSERT INTO t1 SELECT * FROM t0_template 16134WHERE MOD(f_int1,3) = 0; 16135 16136# check multiple-3 success: 1 16137UPDATE t1 SET f_int1 = f_int1 + @max_row 16138WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 16139AND @max_row_div2 + @max_row_div4; 16140 16141# check multiple-4 success: 1 16142DELETE FROM t1 16143WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 16144AND @max_row_div2 + @max_row_div4 + @max_row; 16145 16146# check multiple-5 success: 1 16147SELECT COUNT(*) INTO @try_count FROM t0_template 16148WHERE MOD(f_int1,3) = 0 16149AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16150SELECT COUNT(*) INTO @clash_count 16151FROM t1 INNER JOIN t0_template USING(f_int1) 16152WHERE MOD(f_int1,3) = 0 16153AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16154SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 16155INSERT INTO t1 16156SET f_int1 = @cur_value , f_int2 = @cur_value, 16157f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16158f_charbig = '#SINGLE#'; 16159 16160# check single-1 success: 1 16161SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 16162INSERT INTO t1 16163SET f_int1 = @cur_value , f_int2 = @cur_value, 16164f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16165f_charbig = '#SINGLE#'; 16166 16167# check single-2 success: 1 16168SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 16169SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 16170UPDATE t1 SET f_int1 = @cur_value2 16171WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 16172 16173# check single-3 success: 1 16174SET @cur_value1= -1; 16175SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 16176UPDATE t1 SET f_int1 = @cur_value1 16177WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 16178 16179# check single-4 success: 1 16180SELECT MAX(f_int1) INTO @cur_value FROM t1; 16181DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 16182 16183# check single-5 success: 1 16184DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 16185 16186# check single-6 success: 1 16187INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 16188 16189# check single-7 success: 1 16190DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 16191DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 16192INSERT t1 SET f_int1 = 0 , f_int2 = 0, 16193f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 16194f_charbig = '#NULL#'; 16195INSERT INTO t1 16196SET f_int1 = NULL , f_int2 = -@max_row, 16197f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 16198f_charbig = '#NULL#'; 16199# check null success: 1 16200 16201# check null-1 success: 1 16202UPDATE t1 SET f_int1 = -@max_row 16203WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16204AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16205 16206# check null-2 success: 1 16207UPDATE t1 SET f_int1 = NULL 16208WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16209AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16210 16211# check null-3 success: 1 16212DELETE FROM t1 16213WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16214AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16215 16216# check null-4 success: 1 16217DELETE FROM t1 16218WHERE f_int1 = 0 AND f_int2 = 0 16219AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 16220AND f_charbig = '#NULL#'; 16221INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16222SELECT f_int1, f_int1, '', '', 'was inserted' 16223 FROM t0_template source_tab 16224WHERE MOD(f_int1,3) = 0 16225AND f_int1 BETWEEN @max_row_div2 AND @max_row 16226ON DUPLICATE KEY 16227UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 16228f_int2 = 2 * @max_row + source_tab.f_int1, 16229f_charbig = 'was updated'; 16230 16231# check unique-1-a success: 1 16232 16233# check unique-1-b success: 1 16234DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16236f_int2 = CAST(f_char1 AS SIGNED INT), 16237f_charbig = CONCAT('===',f_char1,'===') 16238WHERE f_charbig = 'was updated'; 16239REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16240SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 16241 FROM t0_template source_tab 16242WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16243 16244# check replace success: 1 16245DELETE FROM t1 16246WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 16247DELETE FROM t1 16248WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 16249f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 16250UPDATE t1 SET f_int2 = f_int1, 16251f_char1 = CAST(f_int1 AS CHAR), 16252f_char2 = CAST(f_int1 AS CHAR), 16253f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 16254WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 16255SET AUTOCOMMIT= 0; 16256INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16257SELECT f_int1, f_int1, '', '', 'was inserted' 16258FROM t0_template source_tab 16259WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16260 16261# check transactions-1 success: 1 16262COMMIT WORK; 16263 16264# check transactions-2 success: 1 16265ROLLBACK WORK; 16266 16267# check transactions-3 success: 1 16268DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16269COMMIT WORK; 16270ROLLBACK WORK; 16271 16272# check transactions-4 success: 1 16273INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16274SELECT f_int1, f_int1, '', '', 'was inserted' 16275FROM t0_template source_tab 16276WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16277 16278# check transactions-5 success: 1 16279ROLLBACK WORK; 16280 16281# check transactions-6 success: 1 16282# INFO: Storage engine used for t1 seems to be transactional. 16283COMMIT; 16284 16285# check transactions-7 success: 1 16286DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16287COMMIT WORK; 16288SET @@session.sql_mode = 'traditional'; 16289Warnings: 16290Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 16291SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 16292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16293SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 16294'', '', 'was inserted' FROM t0_template 16295WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16296ERROR 22012: Division by 0 16297COMMIT; 16298 16299# check transactions-8 success: 1 16300# INFO: Storage engine used for t1 seems to be able to revert 16301# changes made by the failing statement. 16302SET @@session.sql_mode = ''; 16303Warnings: 16304Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 16305SET AUTOCOMMIT= 1; 16306DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16307COMMIT WORK; 16308UPDATE t1 SET f_charbig = REPEAT('b', 1000); 16309 16310# check special-1 success: 1 16311UPDATE t1 SET f_charbig = ''; 16312 16313# check special-2 success: 1 16314UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 16315INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16316SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 16317WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16318INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16319SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16320'just inserted' FROM t0_template 16321WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16322CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 16323BEGIN 16324UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16325f_charbig = 'updated by trigger' 16326 WHERE f_int1 = new.f_int1; 16327END| 16328INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16329SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16330WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16331 16332# check trigger-1 success: 1 16333DROP TRIGGER trg_1; 16334UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16335f_int2 = CAST(f_char1 AS SIGNED INT), 16336f_charbig = 'just inserted' 16337 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16338DELETE FROM t0_aux 16339WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16340INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16341SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16342'just inserted' FROM t0_template 16343WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16344CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 16345BEGIN 16346UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16347f_charbig = 'updated by trigger' 16348 WHERE f_int1 = new.f_int1; 16349END| 16350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16351SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16352WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16353 16354# check trigger-2 success: 1 16355DROP TRIGGER trg_1; 16356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16357f_int2 = CAST(f_char1 AS SIGNED INT), 16358f_charbig = 'just inserted' 16359 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16360DELETE FROM t0_aux 16361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16363SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16364'just inserted' FROM t0_template 16365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16366CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16367BEGIN 16368UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16369f_charbig = 'updated by trigger' 16370 WHERE f_int1 = new.f_int1; 16371END| 16372UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16373WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16374 16375# check trigger-3 success: 1 16376DROP TRIGGER trg_1; 16377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16378f_int2 = CAST(f_char1 AS SIGNED INT), 16379f_charbig = 'just inserted' 16380 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16381DELETE FROM t0_aux 16382WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16383INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16384SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16385'just inserted' FROM t0_template 16386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16387CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16388BEGIN 16389UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16390f_charbig = 'updated by trigger' 16391 WHERE f_int1 = - old.f_int1; 16392END| 16393UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16394WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16395 16396# check trigger-4 success: 1 16397DROP TRIGGER trg_1; 16398UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16399f_int2 = CAST(f_char1 AS SIGNED INT), 16400f_charbig = 'just inserted' 16401 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16402DELETE FROM t0_aux 16403WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16404INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16405SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16406'just inserted' FROM t0_template 16407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16408CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16409BEGIN 16410UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16411f_charbig = 'updated by trigger' 16412 WHERE f_int1 = new.f_int1; 16413END| 16414UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16415WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16416 16417# check trigger-5 success: 1 16418DROP TRIGGER trg_1; 16419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16420f_int2 = CAST(f_char1 AS SIGNED INT), 16421f_charbig = 'just inserted' 16422 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16423DELETE FROM t0_aux 16424WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16427'just inserted' FROM t0_template 16428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16429CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16430BEGIN 16431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16432f_charbig = 'updated by trigger' 16433 WHERE f_int1 = - old.f_int1; 16434END| 16435UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16436WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16437 16438# check trigger-6 success: 1 16439DROP TRIGGER trg_1; 16440UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16441f_int2 = CAST(f_char1 AS SIGNED INT), 16442f_charbig = 'just inserted' 16443 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16444DELETE FROM t0_aux 16445WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16446INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16447SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16448'just inserted' FROM t0_template 16449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16450CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 16451BEGIN 16452UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16453f_charbig = 'updated by trigger' 16454 WHERE f_int1 = - old.f_int1; 16455END| 16456DELETE FROM t0_aux 16457WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16458 16459# check trigger-7 success: 1 16460DROP TRIGGER trg_1; 16461UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16462f_int2 = CAST(f_char1 AS SIGNED INT), 16463f_charbig = 'just inserted' 16464 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16465DELETE FROM t0_aux 16466WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16467INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16468SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16469'just inserted' FROM t0_template 16470WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16471CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 16472BEGIN 16473UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16474f_charbig = 'updated by trigger' 16475 WHERE f_int1 = - old.f_int1; 16476END| 16477DELETE FROM t0_aux 16478WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16479 16480# check trigger-8 success: 1 16481DROP TRIGGER trg_1; 16482UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16483f_int2 = CAST(f_char1 AS SIGNED INT), 16484f_charbig = 'just inserted' 16485 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16486DELETE FROM t0_aux 16487WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16488DELETE FROM t1 16489WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16490CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16491BEGIN 16492SET new.f_int1 = old.f_int1 + @max_row, 16493new.f_int2 = old.f_int2 - @max_row, 16494new.f_charbig = '####updated per update trigger####'; 16495END| 16496UPDATE t1 16497SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16498f_charbig = '####updated per update statement itself####'; 16499 16500# check trigger-9 success: 1 16501DROP TRIGGER trg_2; 16502UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16503f_int2 = CAST(f_char1 AS SIGNED INT), 16504f_charbig = CONCAT('===',f_char1,'==='); 16505CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 16506BEGIN 16507SET new.f_int1 = new.f_int1 + @max_row, 16508new.f_int2 = new.f_int2 - @max_row, 16509new.f_charbig = '####updated per update trigger####'; 16510END| 16511UPDATE t1 16512SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 16513f_charbig = '####updated per update statement itself####'; 16514 16515# check trigger-10 success: 1 16516DROP TRIGGER trg_2; 16517UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16518f_int2 = CAST(f_char1 AS SIGNED INT), 16519f_charbig = CONCAT('===',f_char1,'==='); 16520CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16521BEGIN 16522SET new.f_int1 = @my_max1 + @counter, 16523new.f_int2 = @my_min2 - @counter, 16524new.f_charbig = '####updated per insert trigger####'; 16525SET @counter = @counter + 1; 16526END| 16527SET @counter = 1; 16528SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16529INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16530SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16531CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16532WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16533ORDER BY f_int1; 16534DROP TRIGGER trg_3; 16535 16536# check trigger-11 success: 1 16537DELETE FROM t1 16538WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16539AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16540AND f_charbig = '####updated per insert trigger####'; 16541CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 16542BEGIN 16543SET new.f_int1 = @my_max1 + @counter, 16544new.f_int2 = @my_min2 - @counter, 16545new.f_charbig = '####updated per insert trigger####'; 16546SET @counter = @counter + 1; 16547END| 16548SET @counter = 1; 16549SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 16550INSERT INTO t1 (f_char1, f_char2, f_charbig) 16551SELECT CAST(f_int1 AS CHAR), 16552CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 16553WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 16554ORDER BY f_int1; 16555DROP TRIGGER trg_3; 16556 16557# check trigger-12 success: 1 16558DELETE FROM t1 16559WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 16560AND f_int2 <> CAST(f_char1 AS SIGNED INT) 16561AND f_charbig = '####updated per insert trigger####'; 16562ANALYZE TABLE t1; 16563Table Op Msg_type Msg_text 16564test.t1 analyze status OK 16565CHECK TABLE t1 EXTENDED; 16566Table Op Msg_type Msg_text 16567test.t1 check status OK 16568CHECKSUM TABLE t1 EXTENDED; 16569Table Checksum 16570test.t1 <some_value> 16571OPTIMIZE TABLE t1; 16572Table Op Msg_type Msg_text 16573test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 16574test.t1 optimize status OK 16575# check layout success: 1 16576REPAIR TABLE t1 EXTENDED; 16577Table Op Msg_type Msg_text 16578test.t1 repair status OK 16579# check layout success: 1 16580TRUNCATE t1; 16581 16582# check TRUNCATE success: 1 16583# check layout success: 1 16584# End usability test (inc/partition_check.inc) 16585DROP TABLE t1; 16586CREATE TABLE t1 ( 16587f_int1 INTEGER, 16588f_int2 INTEGER, 16589f_char1 CHAR(20), 16590f_char2 CHAR(20), 16591f_charbig VARCHAR(1000) 16592, UNIQUE INDEX uidx (f_int2,f_int1) 16593) 16594PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5; 16595INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16596SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16597WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 16598ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 16599INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16600SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 16601WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 16602# Start usability test (inc/partition_check.inc) 16603create_command 16604SHOW CREATE TABLE t1; 16605Table Create Table 16606t1 CREATE TABLE `t1` ( 16607 `f_int1` bigint(20) DEFAULT NULL, 16608 `f_int2` bigint(20) DEFAULT NULL, 16609 `f_char1` char(20) DEFAULT NULL, 16610 `f_char2` char(20) DEFAULT NULL, 16611 `f_charbig` varchar(1000) DEFAULT NULL, 16612 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 16613) ENGINE=InnoDB DEFAULT CHARSET=latin1 16614/*!50100 PARTITION BY KEY (f_int1,f_int2) 16615PARTITIONS 5 */ 16616 16617# check prerequisites-1 success: 1 16618# check COUNT(*) success: 1 16619# check MIN/MAX(f_int1) success: 1 16620# check MIN/MAX(f_int2) success: 1 16621INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16622SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 16623CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 16624WHERE f_int1 IN (2,3); 16625ERROR 23000: Duplicate entry '2-2' for key 'uidx' 16626# check prerequisites-3 success: 1 16627# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 16628INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16629SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16630CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16631WHERE f_int1 IN (2,3); 16632DELETE FROM t1 WHERE f_charbig = 'delete me'; 16633INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16634SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 16635CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 16636WHERE f_int1 IN (2,3); 16637DELETE FROM t1 WHERE f_charbig = 'delete me'; 16638# check read via f_int1 success: 1 16639# check read via f_int2 success: 1 16640 16641# check multiple-1 success: 1 16642DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 16643 16644# check multiple-2 success: 1 16645INSERT INTO t1 SELECT * FROM t0_template 16646WHERE MOD(f_int1,3) = 0; 16647 16648# check multiple-3 success: 1 16649UPDATE t1 SET f_int1 = f_int1 + @max_row 16650WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 16651AND @max_row_div2 + @max_row_div4; 16652 16653# check multiple-4 success: 1 16654DELETE FROM t1 16655WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 16656AND @max_row_div2 + @max_row_div4 + @max_row; 16657 16658# check multiple-5 success: 1 16659SELECT COUNT(*) INTO @try_count FROM t0_template 16660WHERE MOD(f_int1,3) = 0 16661AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16662SELECT COUNT(*) INTO @clash_count 16663FROM t1 INNER JOIN t0_template USING(f_int1) 16664WHERE MOD(f_int1,3) = 0 16665AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16666SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 16667INSERT INTO t1 16668SET f_int1 = @cur_value , f_int2 = @cur_value, 16669f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16670f_charbig = '#SINGLE#'; 16671 16672# check single-1 success: 1 16673SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 16674INSERT INTO t1 16675SET f_int1 = @cur_value , f_int2 = @cur_value, 16676f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 16677f_charbig = '#SINGLE#'; 16678 16679# check single-2 success: 1 16680SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 16681SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 16682UPDATE t1 SET f_int1 = @cur_value2 16683WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 16684 16685# check single-3 success: 1 16686SET @cur_value1= -1; 16687SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 16688UPDATE t1 SET f_int1 = @cur_value1 16689WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 16690 16691# check single-4 success: 1 16692SELECT MAX(f_int1) INTO @cur_value FROM t1; 16693DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 16694 16695# check single-5 success: 1 16696DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 16697 16698# check single-6 success: 1 16699INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 16700 16701# check single-7 success: 1 16702DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 16703DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 16704INSERT t1 SET f_int1 = 0 , f_int2 = 0, 16705f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 16706f_charbig = '#NULL#'; 16707INSERT INTO t1 16708SET f_int1 = NULL , f_int2 = -@max_row, 16709f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 16710f_charbig = '#NULL#'; 16711# check null success: 1 16712 16713# check null-1 success: 1 16714UPDATE t1 SET f_int1 = -@max_row 16715WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16716AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16717 16718# check null-2 success: 1 16719UPDATE t1 SET f_int1 = NULL 16720WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16721AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16722 16723# check null-3 success: 1 16724DELETE FROM t1 16725WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 16726AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 16727 16728# check null-4 success: 1 16729DELETE FROM t1 16730WHERE f_int1 = 0 AND f_int2 = 0 16731AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 16732AND f_charbig = '#NULL#'; 16733INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16734SELECT f_int1, f_int1, '', '', 'was inserted' 16735 FROM t0_template source_tab 16736WHERE MOD(f_int1,3) = 0 16737AND f_int1 BETWEEN @max_row_div2 AND @max_row 16738ON DUPLICATE KEY 16739UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 16740f_int2 = 2 * @max_row + source_tab.f_int1, 16741f_charbig = 'was updated'; 16742 16743# check unique-1-a success: 1 16744 16745# check unique-1-b success: 1 16746DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16747UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16748f_int2 = CAST(f_char1 AS SIGNED INT), 16749f_charbig = CONCAT('===',f_char1,'===') 16750WHERE f_charbig = 'was updated'; 16751REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16752SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 16753 FROM t0_template source_tab 16754WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 16755 16756# check replace success: 1 16757DELETE FROM t1 16758WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 16759DELETE FROM t1 16760WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 16761f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 16762UPDATE t1 SET f_int2 = f_int1, 16763f_char1 = CAST(f_int1 AS CHAR), 16764f_char2 = CAST(f_int1 AS CHAR), 16765f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 16766WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 16767SET AUTOCOMMIT= 0; 16768INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16769SELECT f_int1, f_int1, '', '', 'was inserted' 16770FROM t0_template source_tab 16771WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16772 16773# check transactions-1 success: 1 16774COMMIT WORK; 16775 16776# check transactions-2 success: 1 16777ROLLBACK WORK; 16778 16779# check transactions-3 success: 1 16780DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16781COMMIT WORK; 16782ROLLBACK WORK; 16783 16784# check transactions-4 success: 1 16785INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16786SELECT f_int1, f_int1, '', '', 'was inserted' 16787FROM t0_template source_tab 16788WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16789 16790# check transactions-5 success: 1 16791ROLLBACK WORK; 16792 16793# check transactions-6 success: 1 16794# INFO: Storage engine used for t1 seems to be transactional. 16795COMMIT; 16796 16797# check transactions-7 success: 1 16798DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16799COMMIT WORK; 16800SET @@session.sql_mode = 'traditional'; 16801Warnings: 16802Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 16803SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 16804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 16805SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 16806'', '', 'was inserted' FROM t0_template 16807WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 16808ERROR 22012: Division by 0 16809COMMIT; 16810 16811# check transactions-8 success: 1 16812# INFO: Storage engine used for t1 seems to be able to revert 16813# changes made by the failing statement. 16814SET @@session.sql_mode = ''; 16815Warnings: 16816Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 16817SET AUTOCOMMIT= 1; 16818DELETE FROM t1 WHERE f_charbig = 'was inserted'; 16819COMMIT WORK; 16820UPDATE t1 SET f_charbig = REPEAT('b', 1000); 16821 16822# check special-1 success: 1 16823UPDATE t1 SET f_charbig = ''; 16824 16825# check special-2 success: 1 16826UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 16827INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 16828SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 16829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16830INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16831SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16832'just inserted' FROM t0_template 16833WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16834CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 16835BEGIN 16836UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16837f_charbig = 'updated by trigger' 16838 WHERE f_int1 = new.f_int1; 16839END| 16840INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16841SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16843 16844# check trigger-1 success: 1 16845DROP TRIGGER trg_1; 16846UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16847f_int2 = CAST(f_char1 AS SIGNED INT), 16848f_charbig = 'just inserted' 16849 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16850DELETE FROM t0_aux 16851WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16852INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16853SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16854'just inserted' FROM t0_template 16855WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16856CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 16857BEGIN 16858UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16859f_charbig = 'updated by trigger' 16860 WHERE f_int1 = new.f_int1; 16861END| 16862INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16863SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 16864WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16865 16866# check trigger-2 success: 1 16867DROP TRIGGER trg_1; 16868UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16869f_int2 = CAST(f_char1 AS SIGNED INT), 16870f_charbig = 'just inserted' 16871 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16872DELETE FROM t0_aux 16873WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16874INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16875SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16876'just inserted' FROM t0_template 16877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16878CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16879BEGIN 16880UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16881f_charbig = 'updated by trigger' 16882 WHERE f_int1 = new.f_int1; 16883END| 16884UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16885WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16886 16887# check trigger-3 success: 1 16888DROP TRIGGER trg_1; 16889UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16890f_int2 = CAST(f_char1 AS SIGNED INT), 16891f_charbig = 'just inserted' 16892 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16893DELETE FROM t0_aux 16894WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16895INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16896SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16897'just inserted' FROM t0_template 16898WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16899CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 16900BEGIN 16901UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16902f_charbig = 'updated by trigger' 16903 WHERE f_int1 = - old.f_int1; 16904END| 16905UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16906WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16907 16908# check trigger-4 success: 1 16909DROP TRIGGER trg_1; 16910UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16911f_int2 = CAST(f_char1 AS SIGNED INT), 16912f_charbig = 'just inserted' 16913 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16914DELETE FROM t0_aux 16915WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16916INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16917SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16918'just inserted' FROM t0_template 16919WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16920CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16921BEGIN 16922UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16923f_charbig = 'updated by trigger' 16924 WHERE f_int1 = new.f_int1; 16925END| 16926UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16927WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16928 16929# check trigger-5 success: 1 16930DROP TRIGGER trg_1; 16931UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16932f_int2 = CAST(f_char1 AS SIGNED INT), 16933f_charbig = 'just inserted' 16934 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16935DELETE FROM t0_aux 16936WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16937INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16938SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16939'just inserted' FROM t0_template 16940WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16941CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 16942BEGIN 16943UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16944f_charbig = 'updated by trigger' 16945 WHERE f_int1 = - old.f_int1; 16946END| 16947UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 16948WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16949 16950# check trigger-6 success: 1 16951DROP TRIGGER trg_1; 16952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16953f_int2 = CAST(f_char1 AS SIGNED INT), 16954f_charbig = 'just inserted' 16955 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16956DELETE FROM t0_aux 16957WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16958INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16959SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16960'just inserted' FROM t0_template 16961WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16962CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 16963BEGIN 16964UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16965f_charbig = 'updated by trigger' 16966 WHERE f_int1 = - old.f_int1; 16967END| 16968DELETE FROM t0_aux 16969WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16970 16971# check trigger-7 success: 1 16972DROP TRIGGER trg_1; 16973UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16974f_int2 = CAST(f_char1 AS SIGNED INT), 16975f_charbig = 'just inserted' 16976 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16977DELETE FROM t0_aux 16978WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16979INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 16980SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 16981'just inserted' FROM t0_template 16982WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 16983CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 16984BEGIN 16985UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 16986f_charbig = 'updated by trigger' 16987 WHERE f_int1 = - old.f_int1; 16988END| 16989DELETE FROM t0_aux 16990WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 16991 16992# check trigger-8 success: 1 16993DROP TRIGGER trg_1; 16994UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 16995f_int2 = CAST(f_char1 AS SIGNED INT), 16996f_charbig = 'just inserted' 16997 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 16998DELETE FROM t0_aux 16999WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17000DELETE FROM t1 17001WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17002CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 17003BEGIN 17004SET new.f_int1 = old.f_int1 + @max_row, 17005new.f_int2 = old.f_int2 - @max_row, 17006new.f_charbig = '####updated per update trigger####'; 17007END| 17008UPDATE t1 17009SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 17010f_charbig = '####updated per update statement itself####'; 17011 17012# check trigger-9 success: 1 17013DROP TRIGGER trg_2; 17014UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17015f_int2 = CAST(f_char1 AS SIGNED INT), 17016f_charbig = CONCAT('===',f_char1,'==='); 17017CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 17018BEGIN 17019SET new.f_int1 = new.f_int1 + @max_row, 17020new.f_int2 = new.f_int2 - @max_row, 17021new.f_charbig = '####updated per update trigger####'; 17022END| 17023UPDATE t1 17024SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 17025f_charbig = '####updated per update statement itself####'; 17026 17027# check trigger-10 success: 1 17028DROP TRIGGER trg_2; 17029UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17030f_int2 = CAST(f_char1 AS SIGNED INT), 17031f_charbig = CONCAT('===',f_char1,'==='); 17032CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 17033BEGIN 17034SET new.f_int1 = @my_max1 + @counter, 17035new.f_int2 = @my_min2 - @counter, 17036new.f_charbig = '####updated per insert trigger####'; 17037SET @counter = @counter + 1; 17038END| 17039SET @counter = 1; 17040SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 17041INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17042SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 17043CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 17044WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 17045ORDER BY f_int1; 17046DROP TRIGGER trg_3; 17047 17048# check trigger-11 success: 1 17049DELETE FROM t1 17050WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 17051AND f_int2 <> CAST(f_char1 AS SIGNED INT) 17052AND f_charbig = '####updated per insert trigger####'; 17053CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 17054BEGIN 17055SET new.f_int1 = @my_max1 + @counter, 17056new.f_int2 = @my_min2 - @counter, 17057new.f_charbig = '####updated per insert trigger####'; 17058SET @counter = @counter + 1; 17059END| 17060SET @counter = 1; 17061SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 17062INSERT INTO t1 (f_char1, f_char2, f_charbig) 17063SELECT CAST(f_int1 AS CHAR), 17064CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 17065WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 17066ORDER BY f_int1; 17067DROP TRIGGER trg_3; 17068 17069# check trigger-12 success: 1 17070DELETE FROM t1 17071WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 17072AND f_int2 <> CAST(f_char1 AS SIGNED INT) 17073AND f_charbig = '####updated per insert trigger####'; 17074ANALYZE TABLE t1; 17075Table Op Msg_type Msg_text 17076test.t1 analyze status OK 17077CHECK TABLE t1 EXTENDED; 17078Table Op Msg_type Msg_text 17079test.t1 check status OK 17080CHECKSUM TABLE t1 EXTENDED; 17081Table Checksum 17082test.t1 <some_value> 17083OPTIMIZE TABLE t1; 17084Table Op Msg_type Msg_text 17085test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 17086test.t1 optimize status OK 17087# check layout success: 1 17088REPAIR TABLE t1 EXTENDED; 17089Table Op Msg_type Msg_text 17090test.t1 repair status OK 17091# check layout success: 1 17092TRUNCATE t1; 17093 17094# check TRUNCATE success: 1 17095# check layout success: 1 17096# End usability test (inc/partition_check.inc) 17097DROP TABLE t1; 17098CREATE TABLE t1 ( 17099f_int1 INTEGER, 17100f_int2 INTEGER, 17101f_char1 CHAR(20), 17102f_char2 CHAR(20), 17103f_charbig VARCHAR(1000) 17104, UNIQUE INDEX uidx (f_int2,f_int1) 17105) 17106PARTITION BY LIST(MOD(f_int1 + f_int2,4)) 17107(PARTITION part_3 VALUES IN (-3), 17108PARTITION part_2 VALUES IN (-2), 17109PARTITION part_1 VALUES IN (-1), 17110PARTITION part_N VALUES IN (NULL), 17111PARTITION part0 VALUES IN (0), 17112PARTITION part1 VALUES IN (1), 17113PARTITION part2 VALUES IN (2), 17114PARTITION part3 VALUES IN (3)); 17115INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17116SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 17117WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 17118ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 17119INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17120SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 17121WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 17122# Start usability test (inc/partition_check.inc) 17123create_command 17124SHOW CREATE TABLE t1; 17125Table Create Table 17126t1 CREATE TABLE `t1` ( 17127 `f_int1` bigint(20) DEFAULT NULL, 17128 `f_int2` bigint(20) DEFAULT NULL, 17129 `f_char1` char(20) DEFAULT NULL, 17130 `f_char2` char(20) DEFAULT NULL, 17131 `f_charbig` varchar(1000) DEFAULT NULL, 17132 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 17133) ENGINE=InnoDB DEFAULT CHARSET=latin1 17134/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) 17135(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, 17136 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, 17137 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, 17138 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, 17139 PARTITION part0 VALUES IN (0) ENGINE = InnoDB, 17140 PARTITION part1 VALUES IN (1) ENGINE = InnoDB, 17141 PARTITION part2 VALUES IN (2) ENGINE = InnoDB, 17142 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */ 17143 17144# check prerequisites-1 success: 1 17145# check COUNT(*) success: 1 17146# check MIN/MAX(f_int1) success: 1 17147# check MIN/MAX(f_int2) success: 1 17148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17149SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 17150CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 17151WHERE f_int1 IN (2,3); 17152ERROR 23000: Duplicate entry '2-2' for key 'uidx' 17153# check prerequisites-3 success: 1 17154# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 17155INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17156SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 17157CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 17158WHERE f_int1 IN (2,3); 17159DELETE FROM t1 WHERE f_charbig = 'delete me'; 17160INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17161SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 17162CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 17163WHERE f_int1 IN (2,3); 17164DELETE FROM t1 WHERE f_charbig = 'delete me'; 17165# check read via f_int1 success: 1 17166# check read via f_int2 success: 1 17167 17168# check multiple-1 success: 1 17169DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 17170 17171# check multiple-2 success: 1 17172INSERT INTO t1 SELECT * FROM t0_template 17173WHERE MOD(f_int1,3) = 0; 17174 17175# check multiple-3 success: 1 17176UPDATE t1 SET f_int1 = f_int1 + @max_row 17177WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 17178AND @max_row_div2 + @max_row_div4; 17179 17180# check multiple-4 success: 1 17181DELETE FROM t1 17182WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 17183AND @max_row_div2 + @max_row_div4 + @max_row; 17184 17185# check multiple-5 success: 1 17186SELECT COUNT(*) INTO @try_count FROM t0_template 17187WHERE MOD(f_int1,3) = 0 17188AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17189SELECT COUNT(*) INTO @clash_count 17190FROM t1 INNER JOIN t0_template USING(f_int1) 17191WHERE MOD(f_int1,3) = 0 17192AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17193SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 17194INSERT INTO t1 17195SET f_int1 = @cur_value , f_int2 = @cur_value, 17196f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 17197f_charbig = '#SINGLE#'; 17198 17199# check single-1 success: 1 17200SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 17201INSERT INTO t1 17202SET f_int1 = @cur_value , f_int2 = @cur_value, 17203f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 17204f_charbig = '#SINGLE#'; 17205 17206# check single-2 success: 1 17207SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 17208SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 17209UPDATE t1 SET f_int1 = @cur_value2 17210WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 17211 17212# check single-3 success: 1 17213SET @cur_value1= -1; 17214SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 17215UPDATE t1 SET f_int1 = @cur_value1 17216WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 17217 17218# check single-4 success: 1 17219SELECT MAX(f_int1) INTO @cur_value FROM t1; 17220DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 17221 17222# check single-5 success: 1 17223DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 17224 17225# check single-6 success: 1 17226INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 17227 17228# check single-7 success: 1 17229DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 17230DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 17231INSERT t1 SET f_int1 = 0 , f_int2 = 0, 17232f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 17233f_charbig = '#NULL#'; 17234INSERT INTO t1 17235SET f_int1 = NULL , f_int2 = -@max_row, 17236f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 17237f_charbig = '#NULL#'; 17238# check null success: 1 17239 17240# check null-1 success: 1 17241UPDATE t1 SET f_int1 = -@max_row 17242WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17243AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17244 17245# check null-2 success: 1 17246UPDATE t1 SET f_int1 = NULL 17247WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17248AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17249 17250# check null-3 success: 1 17251DELETE FROM t1 17252WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17253AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17254 17255# check null-4 success: 1 17256DELETE FROM t1 17257WHERE f_int1 = 0 AND f_int2 = 0 17258AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 17259AND f_charbig = '#NULL#'; 17260INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17261SELECT f_int1, f_int1, '', '', 'was inserted' 17262 FROM t0_template source_tab 17263WHERE MOD(f_int1,3) = 0 17264AND f_int1 BETWEEN @max_row_div2 AND @max_row 17265ON DUPLICATE KEY 17266UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 17267f_int2 = 2 * @max_row + source_tab.f_int1, 17268f_charbig = 'was updated'; 17269 17270# check unique-1-a success: 1 17271 17272# check unique-1-b success: 1 17273DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17275f_int2 = CAST(f_char1 AS SIGNED INT), 17276f_charbig = CONCAT('===',f_char1,'===') 17277WHERE f_charbig = 'was updated'; 17278REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17279SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 17280 FROM t0_template source_tab 17281WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17282 17283# check replace success: 1 17284DELETE FROM t1 17285WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 17286DELETE FROM t1 17287WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 17288f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 17289UPDATE t1 SET f_int2 = f_int1, 17290f_char1 = CAST(f_int1 AS CHAR), 17291f_char2 = CAST(f_int1 AS CHAR), 17292f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 17293WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 17294SET AUTOCOMMIT= 0; 17295INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17296SELECT f_int1, f_int1, '', '', 'was inserted' 17297FROM t0_template source_tab 17298WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17299 17300# check transactions-1 success: 1 17301COMMIT WORK; 17302 17303# check transactions-2 success: 1 17304ROLLBACK WORK; 17305 17306# check transactions-3 success: 1 17307DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17308COMMIT WORK; 17309ROLLBACK WORK; 17310 17311# check transactions-4 success: 1 17312INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17313SELECT f_int1, f_int1, '', '', 'was inserted' 17314FROM t0_template source_tab 17315WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17316 17317# check transactions-5 success: 1 17318ROLLBACK WORK; 17319 17320# check transactions-6 success: 1 17321# INFO: Storage engine used for t1 seems to be transactional. 17322COMMIT; 17323 17324# check transactions-7 success: 1 17325DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17326COMMIT WORK; 17327SET @@session.sql_mode = 'traditional'; 17328Warnings: 17329Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 17330SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 17331INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17332SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 17333'', '', 'was inserted' FROM t0_template 17334WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17335ERROR 22012: Division by 0 17336COMMIT; 17337 17338# check transactions-8 success: 1 17339# INFO: Storage engine used for t1 seems to be able to revert 17340# changes made by the failing statement. 17341SET @@session.sql_mode = ''; 17342Warnings: 17343Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 17344SET AUTOCOMMIT= 1; 17345DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17346COMMIT WORK; 17347UPDATE t1 SET f_charbig = REPEAT('b', 1000); 17348 17349# check special-1 success: 1 17350UPDATE t1 SET f_charbig = ''; 17351 17352# check special-2 success: 1 17353UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 17354INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17355SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 17356WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17357INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17358SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17359'just inserted' FROM t0_template 17360WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17361CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 17362BEGIN 17363UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17364f_charbig = 'updated by trigger' 17365 WHERE f_int1 = new.f_int1; 17366END| 17367INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17368SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 17369WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17370 17371# check trigger-1 success: 1 17372DROP TRIGGER trg_1; 17373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17374f_int2 = CAST(f_char1 AS SIGNED INT), 17375f_charbig = 'just inserted' 17376 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17377DELETE FROM t0_aux 17378WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17379INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17380SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17381'just inserted' FROM t0_template 17382WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17383CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 17384BEGIN 17385UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17386f_charbig = 'updated by trigger' 17387 WHERE f_int1 = new.f_int1; 17388END| 17389INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17390SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 17391WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17392 17393# check trigger-2 success: 1 17394DROP TRIGGER trg_1; 17395UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17396f_int2 = CAST(f_char1 AS SIGNED INT), 17397f_charbig = 'just inserted' 17398 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17399DELETE FROM t0_aux 17400WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17401INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17402SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17403'just inserted' FROM t0_template 17404WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17405CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 17406BEGIN 17407UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17408f_charbig = 'updated by trigger' 17409 WHERE f_int1 = new.f_int1; 17410END| 17411UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17412WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17413 17414# check trigger-3 success: 1 17415DROP TRIGGER trg_1; 17416UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17417f_int2 = CAST(f_char1 AS SIGNED INT), 17418f_charbig = 'just inserted' 17419 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17420DELETE FROM t0_aux 17421WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17422INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17423SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17424'just inserted' FROM t0_template 17425WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17426CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 17427BEGIN 17428UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17429f_charbig = 'updated by trigger' 17430 WHERE f_int1 = - old.f_int1; 17431END| 17432UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17433WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17434 17435# check trigger-4 success: 1 17436DROP TRIGGER trg_1; 17437UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17438f_int2 = CAST(f_char1 AS SIGNED INT), 17439f_charbig = 'just inserted' 17440 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17441DELETE FROM t0_aux 17442WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17443INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17444SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17445'just inserted' FROM t0_template 17446WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17447CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 17448BEGIN 17449UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17450f_charbig = 'updated by trigger' 17451 WHERE f_int1 = new.f_int1; 17452END| 17453UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17454WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17455 17456# check trigger-5 success: 1 17457DROP TRIGGER trg_1; 17458UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17459f_int2 = CAST(f_char1 AS SIGNED INT), 17460f_charbig = 'just inserted' 17461 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17462DELETE FROM t0_aux 17463WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17464INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17465SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17466'just inserted' FROM t0_template 17467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17468CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 17469BEGIN 17470UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17471f_charbig = 'updated by trigger' 17472 WHERE f_int1 = - old.f_int1; 17473END| 17474UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17475WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17476 17477# check trigger-6 success: 1 17478DROP TRIGGER trg_1; 17479UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17480f_int2 = CAST(f_char1 AS SIGNED INT), 17481f_charbig = 'just inserted' 17482 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17483DELETE FROM t0_aux 17484WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17485INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17486SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17487'just inserted' FROM t0_template 17488WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17489CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 17490BEGIN 17491UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17492f_charbig = 'updated by trigger' 17493 WHERE f_int1 = - old.f_int1; 17494END| 17495DELETE FROM t0_aux 17496WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17497 17498# check trigger-7 success: 1 17499DROP TRIGGER trg_1; 17500UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17501f_int2 = CAST(f_char1 AS SIGNED INT), 17502f_charbig = 'just inserted' 17503 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17504DELETE FROM t0_aux 17505WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17506INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17507SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17508'just inserted' FROM t0_template 17509WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17510CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 17511BEGIN 17512UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17513f_charbig = 'updated by trigger' 17514 WHERE f_int1 = - old.f_int1; 17515END| 17516DELETE FROM t0_aux 17517WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17518 17519# check trigger-8 success: 1 17520DROP TRIGGER trg_1; 17521UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17522f_int2 = CAST(f_char1 AS SIGNED INT), 17523f_charbig = 'just inserted' 17524 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17525DELETE FROM t0_aux 17526WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17527DELETE FROM t1 17528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17529CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 17530BEGIN 17531SET new.f_int1 = old.f_int1 + @max_row, 17532new.f_int2 = old.f_int2 - @max_row, 17533new.f_charbig = '####updated per update trigger####'; 17534END| 17535UPDATE t1 17536SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 17537f_charbig = '####updated per update statement itself####'; 17538 17539# check trigger-9 success: 1 17540DROP TRIGGER trg_2; 17541UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17542f_int2 = CAST(f_char1 AS SIGNED INT), 17543f_charbig = CONCAT('===',f_char1,'==='); 17544CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 17545BEGIN 17546SET new.f_int1 = new.f_int1 + @max_row, 17547new.f_int2 = new.f_int2 - @max_row, 17548new.f_charbig = '####updated per update trigger####'; 17549END| 17550UPDATE t1 17551SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 17552f_charbig = '####updated per update statement itself####'; 17553 17554# check trigger-10 success: 1 17555DROP TRIGGER trg_2; 17556UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17557f_int2 = CAST(f_char1 AS SIGNED INT), 17558f_charbig = CONCAT('===',f_char1,'==='); 17559CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 17560BEGIN 17561SET new.f_int1 = @my_max1 + @counter, 17562new.f_int2 = @my_min2 - @counter, 17563new.f_charbig = '####updated per insert trigger####'; 17564SET @counter = @counter + 1; 17565END| 17566SET @counter = 1; 17567SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 17568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17569SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 17570CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 17571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 17572ORDER BY f_int1; 17573DROP TRIGGER trg_3; 17574 17575# check trigger-11 success: 1 17576DELETE FROM t1 17577WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 17578AND f_int2 <> CAST(f_char1 AS SIGNED INT) 17579AND f_charbig = '####updated per insert trigger####'; 17580CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 17581BEGIN 17582SET new.f_int1 = @my_max1 + @counter, 17583new.f_int2 = @my_min2 - @counter, 17584new.f_charbig = '####updated per insert trigger####'; 17585SET @counter = @counter + 1; 17586END| 17587SET @counter = 1; 17588SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 17589INSERT INTO t1 (f_char1, f_char2, f_charbig) 17590SELECT CAST(f_int1 AS CHAR), 17591CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 17592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 17593ORDER BY f_int1; 17594DROP TRIGGER trg_3; 17595 17596# check trigger-12 success: 1 17597DELETE FROM t1 17598WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 17599AND f_int2 <> CAST(f_char1 AS SIGNED INT) 17600AND f_charbig = '####updated per insert trigger####'; 17601ANALYZE TABLE t1; 17602Table Op Msg_type Msg_text 17603test.t1 analyze status OK 17604CHECK TABLE t1 EXTENDED; 17605Table Op Msg_type Msg_text 17606test.t1 check status OK 17607CHECKSUM TABLE t1 EXTENDED; 17608Table Checksum 17609test.t1 <some_value> 17610OPTIMIZE TABLE t1; 17611Table Op Msg_type Msg_text 17612test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 17613test.t1 optimize status OK 17614# check layout success: 1 17615REPAIR TABLE t1 EXTENDED; 17616Table Op Msg_type Msg_text 17617test.t1 repair status OK 17618# check layout success: 1 17619TRUNCATE t1; 17620 17621# check TRUNCATE success: 1 17622# check layout success: 1 17623# End usability test (inc/partition_check.inc) 17624DROP TABLE t1; 17625CREATE TABLE t1 ( 17626f_int1 INTEGER, 17627f_int2 INTEGER, 17628f_char1 CHAR(20), 17629f_char2 CHAR(20), 17630f_charbig VARCHAR(1000) 17631, UNIQUE INDEX uidx (f_int2,f_int1) 17632) 17633PARTITION BY RANGE((f_int1 + f_int2) DIV 2) 17634(PARTITION parta VALUES LESS THAN (0), 17635PARTITION partb VALUES LESS THAN (5), 17636PARTITION partc VALUES LESS THAN (10), 17637PARTITION partd VALUES LESS THAN (10 + 5), 17638PARTITION parte VALUES LESS THAN (20), 17639PARTITION partf VALUES LESS THAN (2147483646)); 17640INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17641SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 17642WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 17643ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 17644INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17645SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 17646WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 17647# Start usability test (inc/partition_check.inc) 17648create_command 17649SHOW CREATE TABLE t1; 17650Table Create Table 17651t1 CREATE TABLE `t1` ( 17652 `f_int1` bigint(20) DEFAULT NULL, 17653 `f_int2` bigint(20) DEFAULT NULL, 17654 `f_char1` char(20) DEFAULT NULL, 17655 `f_char2` char(20) DEFAULT NULL, 17656 `f_charbig` varchar(1000) DEFAULT NULL, 17657 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 17658) ENGINE=InnoDB DEFAULT CHARSET=latin1 17659/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) 17660(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 17661 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 17662 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 17663 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB, 17664 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB, 17665 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 17666 17667# check prerequisites-1 success: 1 17668# check COUNT(*) success: 1 17669# check MIN/MAX(f_int1) success: 1 17670# check MIN/MAX(f_int2) success: 1 17671INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17672SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 17673CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 17674WHERE f_int1 IN (2,3); 17675ERROR 23000: Duplicate entry '2-2' for key 'uidx' 17676# check prerequisites-3 success: 1 17677# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 17678INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17679SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 17680CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 17681WHERE f_int1 IN (2,3); 17682DELETE FROM t1 WHERE f_charbig = 'delete me'; 17683INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17684SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 17685CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 17686WHERE f_int1 IN (2,3); 17687DELETE FROM t1 WHERE f_charbig = 'delete me'; 17688# check read via f_int1 success: 1 17689# check read via f_int2 success: 1 17690 17691# check multiple-1 success: 1 17692DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 17693 17694# check multiple-2 success: 1 17695INSERT INTO t1 SELECT * FROM t0_template 17696WHERE MOD(f_int1,3) = 0; 17697 17698# check multiple-3 success: 1 17699UPDATE t1 SET f_int1 = f_int1 + @max_row 17700WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 17701AND @max_row_div2 + @max_row_div4; 17702 17703# check multiple-4 success: 1 17704DELETE FROM t1 17705WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 17706AND @max_row_div2 + @max_row_div4 + @max_row; 17707 17708# check multiple-5 success: 1 17709SELECT COUNT(*) INTO @try_count FROM t0_template 17710WHERE MOD(f_int1,3) = 0 17711AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17712SELECT COUNT(*) INTO @clash_count 17713FROM t1 INNER JOIN t0_template USING(f_int1) 17714WHERE MOD(f_int1,3) = 0 17715AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17716SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 17717INSERT INTO t1 17718SET f_int1 = @cur_value , f_int2 = @cur_value, 17719f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 17720f_charbig = '#SINGLE#'; 17721 17722# check single-1 success: 1 17723SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 17724INSERT INTO t1 17725SET f_int1 = @cur_value , f_int2 = @cur_value, 17726f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 17727f_charbig = '#SINGLE#'; 17728 17729# check single-2 success: 1 17730SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 17731SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 17732UPDATE t1 SET f_int1 = @cur_value2 17733WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 17734 17735# check single-3 success: 1 17736SET @cur_value1= -1; 17737SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 17738UPDATE t1 SET f_int1 = @cur_value1 17739WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 17740 17741# check single-4 success: 1 17742SELECT MAX(f_int1) INTO @cur_value FROM t1; 17743DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 17744 17745# check single-5 success: 1 17746DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 17747 17748# check single-6 success: 1 17749INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 17750ERROR HY000: Table has no partition for value 2147483647 17751DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 17752INSERT t1 SET f_int1 = 0 , f_int2 = 0, 17753f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 17754f_charbig = '#NULL#'; 17755INSERT INTO t1 17756SET f_int1 = NULL , f_int2 = -@max_row, 17757f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 17758f_charbig = '#NULL#'; 17759# check null success: 1 17760 17761# check null-1 success: 1 17762UPDATE t1 SET f_int1 = -@max_row 17763WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17764AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17765 17766# check null-2 success: 1 17767UPDATE t1 SET f_int1 = NULL 17768WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17769AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17770 17771# check null-3 success: 1 17772DELETE FROM t1 17773WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 17774AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 17775 17776# check null-4 success: 1 17777DELETE FROM t1 17778WHERE f_int1 = 0 AND f_int2 = 0 17779AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 17780AND f_charbig = '#NULL#'; 17781INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17782SELECT f_int1, f_int1, '', '', 'was inserted' 17783 FROM t0_template source_tab 17784WHERE MOD(f_int1,3) = 0 17785AND f_int1 BETWEEN @max_row_div2 AND @max_row 17786ON DUPLICATE KEY 17787UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 17788f_int2 = 2 * @max_row + source_tab.f_int1, 17789f_charbig = 'was updated'; 17790 17791# check unique-1-a success: 1 17792 17793# check unique-1-b success: 1 17794DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17795UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17796f_int2 = CAST(f_char1 AS SIGNED INT), 17797f_charbig = CONCAT('===',f_char1,'===') 17798WHERE f_charbig = 'was updated'; 17799REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17800SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 17801 FROM t0_template source_tab 17802WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 17803 17804# check replace success: 1 17805DELETE FROM t1 17806WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 17807DELETE FROM t1 17808WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 17809f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 17810UPDATE t1 SET f_int2 = f_int1, 17811f_char1 = CAST(f_int1 AS CHAR), 17812f_char2 = CAST(f_int1 AS CHAR), 17813f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 17814WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 17815SET AUTOCOMMIT= 0; 17816INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17817SELECT f_int1, f_int1, '', '', 'was inserted' 17818FROM t0_template source_tab 17819WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17820 17821# check transactions-1 success: 1 17822COMMIT WORK; 17823 17824# check transactions-2 success: 1 17825ROLLBACK WORK; 17826 17827# check transactions-3 success: 1 17828DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17829COMMIT WORK; 17830ROLLBACK WORK; 17831 17832# check transactions-4 success: 1 17833INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17834SELECT f_int1, f_int1, '', '', 'was inserted' 17835FROM t0_template source_tab 17836WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17837 17838# check transactions-5 success: 1 17839ROLLBACK WORK; 17840 17841# check transactions-6 success: 1 17842# INFO: Storage engine used for t1 seems to be transactional. 17843COMMIT; 17844 17845# check transactions-7 success: 1 17846DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17847COMMIT WORK; 17848SET @@session.sql_mode = 'traditional'; 17849Warnings: 17850Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 17851SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 17852INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 17853SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 17854'', '', 'was inserted' FROM t0_template 17855WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 17856ERROR 22012: Division by 0 17857COMMIT; 17858 17859# check transactions-8 success: 1 17860# INFO: Storage engine used for t1 seems to be able to revert 17861# changes made by the failing statement. 17862SET @@session.sql_mode = ''; 17863Warnings: 17864Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 17865SET AUTOCOMMIT= 1; 17866DELETE FROM t1 WHERE f_charbig = 'was inserted'; 17867COMMIT WORK; 17868UPDATE t1 SET f_charbig = REPEAT('b', 1000); 17869 17870# check special-1 success: 1 17871UPDATE t1 SET f_charbig = ''; 17872 17873# check special-2 success: 1 17874UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 17875INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 17876SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 17877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17878INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17879SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17880'just inserted' FROM t0_template 17881WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17882CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 17883BEGIN 17884UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17885f_charbig = 'updated by trigger' 17886 WHERE f_int1 = new.f_int1; 17887END| 17888INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17889SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 17890WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17891 17892# check trigger-1 success: 1 17893DROP TRIGGER trg_1; 17894UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17895f_int2 = CAST(f_char1 AS SIGNED INT), 17896f_charbig = 'just inserted' 17897 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17898DELETE FROM t0_aux 17899WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17900INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17901SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17902'just inserted' FROM t0_template 17903WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17904CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 17905BEGIN 17906UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17907f_charbig = 'updated by trigger' 17908 WHERE f_int1 = new.f_int1; 17909END| 17910INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17911SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 17912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17913 17914# check trigger-2 success: 1 17915DROP TRIGGER trg_1; 17916UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17917f_int2 = CAST(f_char1 AS SIGNED INT), 17918f_charbig = 'just inserted' 17919 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17920DELETE FROM t0_aux 17921WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17922INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17923SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17924'just inserted' FROM t0_template 17925WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17926CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 17927BEGIN 17928UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17929f_charbig = 'updated by trigger' 17930 WHERE f_int1 = new.f_int1; 17931END| 17932UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17933WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17934 17935# check trigger-3 success: 1 17936DROP TRIGGER trg_1; 17937UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17938f_int2 = CAST(f_char1 AS SIGNED INT), 17939f_charbig = 'just inserted' 17940 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17941DELETE FROM t0_aux 17942WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17943INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17944SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17945'just inserted' FROM t0_template 17946WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17947CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 17948BEGIN 17949UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17950f_charbig = 'updated by trigger' 17951 WHERE f_int1 = - old.f_int1; 17952END| 17953UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17954WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17955 17956# check trigger-4 success: 1 17957DROP TRIGGER trg_1; 17958UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17959f_int2 = CAST(f_char1 AS SIGNED INT), 17960f_charbig = 'just inserted' 17961 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17962DELETE FROM t0_aux 17963WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17964INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17965SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17966'just inserted' FROM t0_template 17967WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17968CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 17969BEGIN 17970UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17971f_charbig = 'updated by trigger' 17972 WHERE f_int1 = new.f_int1; 17973END| 17974UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17975WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17976 17977# check trigger-5 success: 1 17978DROP TRIGGER trg_1; 17979UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 17980f_int2 = CAST(f_char1 AS SIGNED INT), 17981f_charbig = 'just inserted' 17982 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 17983DELETE FROM t0_aux 17984WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17985INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 17986SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 17987'just inserted' FROM t0_template 17988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 17989CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 17990BEGIN 17991UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 17992f_charbig = 'updated by trigger' 17993 WHERE f_int1 = - old.f_int1; 17994END| 17995UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 17996WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 17997 17998# check trigger-6 success: 1 17999DROP TRIGGER trg_1; 18000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18001f_int2 = CAST(f_char1 AS SIGNED INT), 18002f_charbig = 'just inserted' 18003 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18004DELETE FROM t0_aux 18005WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18006INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18007SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18008'just inserted' FROM t0_template 18009WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18010CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 18011BEGIN 18012UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18013f_charbig = 'updated by trigger' 18014 WHERE f_int1 = - old.f_int1; 18015END| 18016DELETE FROM t0_aux 18017WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18018 18019# check trigger-7 success: 1 18020DROP TRIGGER trg_1; 18021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18022f_int2 = CAST(f_char1 AS SIGNED INT), 18023f_charbig = 'just inserted' 18024 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18025DELETE FROM t0_aux 18026WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18029'just inserted' FROM t0_template 18030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18031CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 18032BEGIN 18033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18034f_charbig = 'updated by trigger' 18035 WHERE f_int1 = - old.f_int1; 18036END| 18037DELETE FROM t0_aux 18038WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18039 18040# check trigger-8 success: 1 18041DROP TRIGGER trg_1; 18042UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18043f_int2 = CAST(f_char1 AS SIGNED INT), 18044f_charbig = 'just inserted' 18045 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18046DELETE FROM t0_aux 18047WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18048DELETE FROM t1 18049WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18050CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 18051BEGIN 18052SET new.f_int1 = old.f_int1 + @max_row, 18053new.f_int2 = old.f_int2 - @max_row, 18054new.f_charbig = '####updated per update trigger####'; 18055END| 18056UPDATE t1 18057SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 18058f_charbig = '####updated per update statement itself####'; 18059 18060# check trigger-9 success: 1 18061DROP TRIGGER trg_2; 18062UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18063f_int2 = CAST(f_char1 AS SIGNED INT), 18064f_charbig = CONCAT('===',f_char1,'==='); 18065CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 18066BEGIN 18067SET new.f_int1 = new.f_int1 + @max_row, 18068new.f_int2 = new.f_int2 - @max_row, 18069new.f_charbig = '####updated per update trigger####'; 18070END| 18071UPDATE t1 18072SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 18073f_charbig = '####updated per update statement itself####'; 18074 18075# check trigger-10 success: 1 18076DROP TRIGGER trg_2; 18077UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18078f_int2 = CAST(f_char1 AS SIGNED INT), 18079f_charbig = CONCAT('===',f_char1,'==='); 18080CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 18081BEGIN 18082SET new.f_int1 = @my_max1 + @counter, 18083new.f_int2 = @my_min2 - @counter, 18084new.f_charbig = '####updated per insert trigger####'; 18085SET @counter = @counter + 1; 18086END| 18087SET @counter = 1; 18088SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 18089INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18090SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 18091CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 18092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 18093ORDER BY f_int1; 18094DROP TRIGGER trg_3; 18095 18096# check trigger-11 success: 1 18097DELETE FROM t1 18098WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 18099AND f_int2 <> CAST(f_char1 AS SIGNED INT) 18100AND f_charbig = '####updated per insert trigger####'; 18101CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 18102BEGIN 18103SET new.f_int1 = @my_max1 + @counter, 18104new.f_int2 = @my_min2 - @counter, 18105new.f_charbig = '####updated per insert trigger####'; 18106SET @counter = @counter + 1; 18107END| 18108SET @counter = 1; 18109SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 18110INSERT INTO t1 (f_char1, f_char2, f_charbig) 18111SELECT CAST(f_int1 AS CHAR), 18112CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 18113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 18114ORDER BY f_int1; 18115DROP TRIGGER trg_3; 18116 18117# check trigger-12 success: 1 18118DELETE FROM t1 18119WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 18120AND f_int2 <> CAST(f_char1 AS SIGNED INT) 18121AND f_charbig = '####updated per insert trigger####'; 18122ANALYZE TABLE t1; 18123Table Op Msg_type Msg_text 18124test.t1 analyze status OK 18125CHECK TABLE t1 EXTENDED; 18126Table Op Msg_type Msg_text 18127test.t1 check status OK 18128CHECKSUM TABLE t1 EXTENDED; 18129Table Checksum 18130test.t1 <some_value> 18131OPTIMIZE TABLE t1; 18132Table Op Msg_type Msg_text 18133test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 18134test.t1 optimize status OK 18135# check layout success: 1 18136REPAIR TABLE t1 EXTENDED; 18137Table Op Msg_type Msg_text 18138test.t1 repair status OK 18139# check layout success: 1 18140TRUNCATE t1; 18141 18142# check TRUNCATE success: 1 18143# check layout success: 1 18144# End usability test (inc/partition_check.inc) 18145DROP TABLE t1; 18146CREATE TABLE t1 ( 18147f_int1 INTEGER, 18148f_int2 INTEGER, 18149f_char1 CHAR(20), 18150f_char2 CHAR(20), 18151f_charbig VARCHAR(1000) 18152, UNIQUE INDEX uidx (f_int2,f_int1) 18153) 18154PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 18155(PARTITION parta VALUES LESS THAN (0), 18156PARTITION partb VALUES LESS THAN (5), 18157PARTITION partc VALUES LESS THAN (10), 18158PARTITION partd VALUES LESS THAN (2147483646)); 18159INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18160SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 18161WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 18162ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 18163INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18164SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 18165WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 18166# Start usability test (inc/partition_check.inc) 18167create_command 18168SHOW CREATE TABLE t1; 18169Table Create Table 18170t1 CREATE TABLE `t1` ( 18171 `f_int1` bigint(20) DEFAULT NULL, 18172 `f_int2` bigint(20) DEFAULT NULL, 18173 `f_char1` char(20) DEFAULT NULL, 18174 `f_char2` char(20) DEFAULT NULL, 18175 `f_charbig` varchar(1000) DEFAULT NULL, 18176 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 18177) ENGINE=InnoDB DEFAULT CHARSET=latin1 18178/*!50100 PARTITION BY RANGE (f_int1) 18179SUBPARTITION BY HASH (f_int2) 18180SUBPARTITIONS 2 18181(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, 18182 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB, 18183 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB, 18184 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */ 18185 18186# check prerequisites-1 success: 1 18187# check COUNT(*) success: 1 18188# check MIN/MAX(f_int1) success: 1 18189# check MIN/MAX(f_int2) success: 1 18190INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18191SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 18192CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 18193WHERE f_int1 IN (2,3); 18194ERROR 23000: Duplicate entry '2-2' for key 'uidx' 18195# check prerequisites-3 success: 1 18196# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 18197INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18198SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 18199CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 18200WHERE f_int1 IN (2,3); 18201DELETE FROM t1 WHERE f_charbig = 'delete me'; 18202INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18203SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 18204CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 18205WHERE f_int1 IN (2,3); 18206DELETE FROM t1 WHERE f_charbig = 'delete me'; 18207# check read via f_int1 success: 1 18208# check read via f_int2 success: 1 18209 18210# check multiple-1 success: 1 18211DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 18212 18213# check multiple-2 success: 1 18214INSERT INTO t1 SELECT * FROM t0_template 18215WHERE MOD(f_int1,3) = 0; 18216 18217# check multiple-3 success: 1 18218UPDATE t1 SET f_int1 = f_int1 + @max_row 18219WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 18220AND @max_row_div2 + @max_row_div4; 18221 18222# check multiple-4 success: 1 18223DELETE FROM t1 18224WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 18225AND @max_row_div2 + @max_row_div4 + @max_row; 18226 18227# check multiple-5 success: 1 18228SELECT COUNT(*) INTO @try_count FROM t0_template 18229WHERE MOD(f_int1,3) = 0 18230AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18231SELECT COUNT(*) INTO @clash_count 18232FROM t1 INNER JOIN t0_template USING(f_int1) 18233WHERE MOD(f_int1,3) = 0 18234AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18235SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 18236INSERT INTO t1 18237SET f_int1 = @cur_value , f_int2 = @cur_value, 18238f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 18239f_charbig = '#SINGLE#'; 18240 18241# check single-1 success: 1 18242SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 18243INSERT INTO t1 18244SET f_int1 = @cur_value , f_int2 = @cur_value, 18245f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 18246f_charbig = '#SINGLE#'; 18247 18248# check single-2 success: 1 18249SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 18250SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 18251UPDATE t1 SET f_int1 = @cur_value2 18252WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 18253 18254# check single-3 success: 1 18255SET @cur_value1= -1; 18256SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 18257UPDATE t1 SET f_int1 = @cur_value1 18258WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 18259 18260# check single-4 success: 1 18261SELECT MAX(f_int1) INTO @cur_value FROM t1; 18262DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 18263 18264# check single-5 success: 1 18265DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 18266 18267# check single-6 success: 1 18268INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 18269ERROR HY000: Table has no partition for value 2147483647 18270DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 18271INSERT t1 SET f_int1 = 0 , f_int2 = 0, 18272f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 18273f_charbig = '#NULL#'; 18274INSERT INTO t1 18275SET f_int1 = NULL , f_int2 = -@max_row, 18276f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 18277f_charbig = '#NULL#'; 18278# check null success: 1 18279 18280# check null-1 success: 1 18281UPDATE t1 SET f_int1 = -@max_row 18282WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18283AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18284 18285# check null-2 success: 1 18286UPDATE t1 SET f_int1 = NULL 18287WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18288AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18289 18290# check null-3 success: 1 18291DELETE FROM t1 18292WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18293AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18294 18295# check null-4 success: 1 18296DELETE FROM t1 18297WHERE f_int1 = 0 AND f_int2 = 0 18298AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 18299AND f_charbig = '#NULL#'; 18300INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18301SELECT f_int1, f_int1, '', '', 'was inserted' 18302 FROM t0_template source_tab 18303WHERE MOD(f_int1,3) = 0 18304AND f_int1 BETWEEN @max_row_div2 AND @max_row 18305ON DUPLICATE KEY 18306UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 18307f_int2 = 2 * @max_row + source_tab.f_int1, 18308f_charbig = 'was updated'; 18309 18310# check unique-1-a success: 1 18311 18312# check unique-1-b success: 1 18313DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18315f_int2 = CAST(f_char1 AS SIGNED INT), 18316f_charbig = CONCAT('===',f_char1,'===') 18317WHERE f_charbig = 'was updated'; 18318REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18319SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 18320 FROM t0_template source_tab 18321WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18322 18323# check replace success: 1 18324DELETE FROM t1 18325WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 18326DELETE FROM t1 18327WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 18328f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 18329UPDATE t1 SET f_int2 = f_int1, 18330f_char1 = CAST(f_int1 AS CHAR), 18331f_char2 = CAST(f_int1 AS CHAR), 18332f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 18333WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 18334SET AUTOCOMMIT= 0; 18335INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18336SELECT f_int1, f_int1, '', '', 'was inserted' 18337FROM t0_template source_tab 18338WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18339 18340# check transactions-1 success: 1 18341COMMIT WORK; 18342 18343# check transactions-2 success: 1 18344ROLLBACK WORK; 18345 18346# check transactions-3 success: 1 18347DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18348COMMIT WORK; 18349ROLLBACK WORK; 18350 18351# check transactions-4 success: 1 18352INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18353SELECT f_int1, f_int1, '', '', 'was inserted' 18354FROM t0_template source_tab 18355WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18356 18357# check transactions-5 success: 1 18358ROLLBACK WORK; 18359 18360# check transactions-6 success: 1 18361# INFO: Storage engine used for t1 seems to be transactional. 18362COMMIT; 18363 18364# check transactions-7 success: 1 18365DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18366COMMIT WORK; 18367SET @@session.sql_mode = 'traditional'; 18368Warnings: 18369Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 18370SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 18371INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18372SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 18373'', '', 'was inserted' FROM t0_template 18374WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18375ERROR 22012: Division by 0 18376COMMIT; 18377 18378# check transactions-8 success: 1 18379# INFO: Storage engine used for t1 seems to be able to revert 18380# changes made by the failing statement. 18381SET @@session.sql_mode = ''; 18382Warnings: 18383Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 18384SET AUTOCOMMIT= 1; 18385DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18386COMMIT WORK; 18387UPDATE t1 SET f_charbig = REPEAT('b', 1000); 18388 18389# check special-1 success: 1 18390UPDATE t1 SET f_charbig = ''; 18391 18392# check special-2 success: 1 18393UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 18394INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18395SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 18396WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18397INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18398SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18399'just inserted' FROM t0_template 18400WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18401CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 18402BEGIN 18403UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18404f_charbig = 'updated by trigger' 18405 WHERE f_int1 = new.f_int1; 18406END| 18407INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18408SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 18409WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18410 18411# check trigger-1 success: 1 18412DROP TRIGGER trg_1; 18413UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18414f_int2 = CAST(f_char1 AS SIGNED INT), 18415f_charbig = 'just inserted' 18416 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18417DELETE FROM t0_aux 18418WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18419INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18420SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18421'just inserted' FROM t0_template 18422WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18423CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 18424BEGIN 18425UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18426f_charbig = 'updated by trigger' 18427 WHERE f_int1 = new.f_int1; 18428END| 18429INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18430SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 18431WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18432 18433# check trigger-2 success: 1 18434DROP TRIGGER trg_1; 18435UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18436f_int2 = CAST(f_char1 AS SIGNED INT), 18437f_charbig = 'just inserted' 18438 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18439DELETE FROM t0_aux 18440WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18441INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18442SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18443'just inserted' FROM t0_template 18444WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18445CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 18446BEGIN 18447UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18448f_charbig = 'updated by trigger' 18449 WHERE f_int1 = new.f_int1; 18450END| 18451UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 18452WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18453 18454# check trigger-3 success: 1 18455DROP TRIGGER trg_1; 18456UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18457f_int2 = CAST(f_char1 AS SIGNED INT), 18458f_charbig = 'just inserted' 18459 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18460DELETE FROM t0_aux 18461WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18462INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18463SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18464'just inserted' FROM t0_template 18465WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18466CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 18467BEGIN 18468UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18469f_charbig = 'updated by trigger' 18470 WHERE f_int1 = - old.f_int1; 18471END| 18472UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 18473WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18474 18475# check trigger-4 success: 1 18476DROP TRIGGER trg_1; 18477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18478f_int2 = CAST(f_char1 AS SIGNED INT), 18479f_charbig = 'just inserted' 18480 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18481DELETE FROM t0_aux 18482WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18484SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18485'just inserted' FROM t0_template 18486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18487CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 18488BEGIN 18489UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18490f_charbig = 'updated by trigger' 18491 WHERE f_int1 = new.f_int1; 18492END| 18493UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 18494WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18495 18496# check trigger-5 success: 1 18497DROP TRIGGER trg_1; 18498UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18499f_int2 = CAST(f_char1 AS SIGNED INT), 18500f_charbig = 'just inserted' 18501 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18502DELETE FROM t0_aux 18503WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18504INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18505SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18506'just inserted' FROM t0_template 18507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18508CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 18509BEGIN 18510UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18511f_charbig = 'updated by trigger' 18512 WHERE f_int1 = - old.f_int1; 18513END| 18514UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 18515WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18516 18517# check trigger-6 success: 1 18518DROP TRIGGER trg_1; 18519UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18520f_int2 = CAST(f_char1 AS SIGNED INT), 18521f_charbig = 'just inserted' 18522 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18523DELETE FROM t0_aux 18524WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18525INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18526SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18527'just inserted' FROM t0_template 18528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18529CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 18530BEGIN 18531UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18532f_charbig = 'updated by trigger' 18533 WHERE f_int1 = - old.f_int1; 18534END| 18535DELETE FROM t0_aux 18536WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18537 18538# check trigger-7 success: 1 18539DROP TRIGGER trg_1; 18540UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18541f_int2 = CAST(f_char1 AS SIGNED INT), 18542f_charbig = 'just inserted' 18543 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18544DELETE FROM t0_aux 18545WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18546INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18547SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18548'just inserted' FROM t0_template 18549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18550CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 18551BEGIN 18552UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18553f_charbig = 'updated by trigger' 18554 WHERE f_int1 = - old.f_int1; 18555END| 18556DELETE FROM t0_aux 18557WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18558 18559# check trigger-8 success: 1 18560DROP TRIGGER trg_1; 18561UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18562f_int2 = CAST(f_char1 AS SIGNED INT), 18563f_charbig = 'just inserted' 18564 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18565DELETE FROM t0_aux 18566WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18567DELETE FROM t1 18568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18569CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 18570BEGIN 18571SET new.f_int1 = old.f_int1 + @max_row, 18572new.f_int2 = old.f_int2 - @max_row, 18573new.f_charbig = '####updated per update trigger####'; 18574END| 18575UPDATE t1 18576SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 18577f_charbig = '####updated per update statement itself####'; 18578 18579# check trigger-9 success: 1 18580DROP TRIGGER trg_2; 18581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18582f_int2 = CAST(f_char1 AS SIGNED INT), 18583f_charbig = CONCAT('===',f_char1,'==='); 18584CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 18585BEGIN 18586SET new.f_int1 = new.f_int1 + @max_row, 18587new.f_int2 = new.f_int2 - @max_row, 18588new.f_charbig = '####updated per update trigger####'; 18589END| 18590UPDATE t1 18591SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 18592f_charbig = '####updated per update statement itself####'; 18593 18594# check trigger-10 success: 1 18595DROP TRIGGER trg_2; 18596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18597f_int2 = CAST(f_char1 AS SIGNED INT), 18598f_charbig = CONCAT('===',f_char1,'==='); 18599CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 18600BEGIN 18601SET new.f_int1 = @my_max1 + @counter, 18602new.f_int2 = @my_min2 - @counter, 18603new.f_charbig = '####updated per insert trigger####'; 18604SET @counter = @counter + 1; 18605END| 18606SET @counter = 1; 18607SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 18608INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18609SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 18610CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 18611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 18612ORDER BY f_int1; 18613DROP TRIGGER trg_3; 18614 18615# check trigger-11 success: 1 18616DELETE FROM t1 18617WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 18618AND f_int2 <> CAST(f_char1 AS SIGNED INT) 18619AND f_charbig = '####updated per insert trigger####'; 18620CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 18621BEGIN 18622SET new.f_int1 = @my_max1 + @counter, 18623new.f_int2 = @my_min2 - @counter, 18624new.f_charbig = '####updated per insert trigger####'; 18625SET @counter = @counter + 1; 18626END| 18627SET @counter = 1; 18628SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 18629INSERT INTO t1 (f_char1, f_char2, f_charbig) 18630SELECT CAST(f_int1 AS CHAR), 18631CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 18632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 18633ORDER BY f_int1; 18634DROP TRIGGER trg_3; 18635 18636# check trigger-12 success: 1 18637DELETE FROM t1 18638WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 18639AND f_int2 <> CAST(f_char1 AS SIGNED INT) 18640AND f_charbig = '####updated per insert trigger####'; 18641ANALYZE TABLE t1; 18642Table Op Msg_type Msg_text 18643test.t1 analyze status OK 18644CHECK TABLE t1 EXTENDED; 18645Table Op Msg_type Msg_text 18646test.t1 check status OK 18647CHECKSUM TABLE t1 EXTENDED; 18648Table Checksum 18649test.t1 <some_value> 18650OPTIMIZE TABLE t1; 18651Table Op Msg_type Msg_text 18652test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 18653test.t1 optimize status OK 18654# check layout success: 1 18655REPAIR TABLE t1 EXTENDED; 18656Table Op Msg_type Msg_text 18657test.t1 repair status OK 18658# check layout success: 1 18659TRUNCATE t1; 18660 18661# check TRUNCATE success: 1 18662# check layout success: 1 18663# End usability test (inc/partition_check.inc) 18664DROP TABLE t1; 18665CREATE TABLE t1 ( 18666f_int1 INTEGER, 18667f_int2 INTEGER, 18668f_char1 CHAR(20), 18669f_char2 CHAR(20), 18670f_charbig VARCHAR(1000) 18671, UNIQUE INDEX uidx (f_int2,f_int1) 18672) 18673PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) 18674(PARTITION part1 VALUES LESS THAN (0) 18675(SUBPARTITION subpart11, SUBPARTITION subpart12), 18676PARTITION part2 VALUES LESS THAN (5) 18677(SUBPARTITION subpart21, SUBPARTITION subpart22), 18678PARTITION part3 VALUES LESS THAN (10) 18679(SUBPARTITION subpart31, SUBPARTITION subpart32), 18680PARTITION part4 VALUES LESS THAN (2147483646) 18681(SUBPARTITION subpart41, SUBPARTITION subpart42)); 18682INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18683SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 18684WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 18685ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 18686INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18687SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 18688WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 18689# Start usability test (inc/partition_check.inc) 18690create_command 18691SHOW CREATE TABLE t1; 18692Table Create Table 18693t1 CREATE TABLE `t1` ( 18694 `f_int1` bigint(20) DEFAULT NULL, 18695 `f_int2` bigint(20) DEFAULT NULL, 18696 `f_char1` char(20) DEFAULT NULL, 18697 `f_char2` char(20) DEFAULT NULL, 18698 `f_charbig` varchar(1000) DEFAULT NULL, 18699 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 18700) ENGINE=InnoDB DEFAULT CHARSET=latin1 18701/*!50100 PARTITION BY RANGE (f_int1) 18702SUBPARTITION BY KEY (f_int2) 18703(PARTITION part1 VALUES LESS THAN (0) 18704 (SUBPARTITION subpart11 ENGINE = InnoDB, 18705 SUBPARTITION subpart12 ENGINE = InnoDB), 18706 PARTITION part2 VALUES LESS THAN (5) 18707 (SUBPARTITION subpart21 ENGINE = InnoDB, 18708 SUBPARTITION subpart22 ENGINE = InnoDB), 18709 PARTITION part3 VALUES LESS THAN (10) 18710 (SUBPARTITION subpart31 ENGINE = InnoDB, 18711 SUBPARTITION subpart32 ENGINE = InnoDB), 18712 PARTITION part4 VALUES LESS THAN (2147483646) 18713 (SUBPARTITION subpart41 ENGINE = InnoDB, 18714 SUBPARTITION subpart42 ENGINE = InnoDB)) */ 18715 18716# check prerequisites-1 success: 1 18717# check COUNT(*) success: 1 18718# check MIN/MAX(f_int1) success: 1 18719# check MIN/MAX(f_int2) success: 1 18720INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18721SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 18722CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 18723WHERE f_int1 IN (2,3); 18724ERROR 23000: Duplicate entry '2-2' for key 'uidx' 18725# check prerequisites-3 success: 1 18726# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 18727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18728SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 18729CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 18730WHERE f_int1 IN (2,3); 18731DELETE FROM t1 WHERE f_charbig = 'delete me'; 18732INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18733SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 18734CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 18735WHERE f_int1 IN (2,3); 18736DELETE FROM t1 WHERE f_charbig = 'delete me'; 18737# check read via f_int1 success: 1 18738# check read via f_int2 success: 1 18739 18740# check multiple-1 success: 1 18741DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 18742 18743# check multiple-2 success: 1 18744INSERT INTO t1 SELECT * FROM t0_template 18745WHERE MOD(f_int1,3) = 0; 18746 18747# check multiple-3 success: 1 18748UPDATE t1 SET f_int1 = f_int1 + @max_row 18749WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 18750AND @max_row_div2 + @max_row_div4; 18751 18752# check multiple-4 success: 1 18753DELETE FROM t1 18754WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 18755AND @max_row_div2 + @max_row_div4 + @max_row; 18756 18757# check multiple-5 success: 1 18758SELECT COUNT(*) INTO @try_count FROM t0_template 18759WHERE MOD(f_int1,3) = 0 18760AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18761SELECT COUNT(*) INTO @clash_count 18762FROM t1 INNER JOIN t0_template USING(f_int1) 18763WHERE MOD(f_int1,3) = 0 18764AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18765SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 18766INSERT INTO t1 18767SET f_int1 = @cur_value , f_int2 = @cur_value, 18768f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 18769f_charbig = '#SINGLE#'; 18770 18771# check single-1 success: 1 18772SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 18773INSERT INTO t1 18774SET f_int1 = @cur_value , f_int2 = @cur_value, 18775f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 18776f_charbig = '#SINGLE#'; 18777 18778# check single-2 success: 1 18779SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 18780SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 18781UPDATE t1 SET f_int1 = @cur_value2 18782WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 18783 18784# check single-3 success: 1 18785SET @cur_value1= -1; 18786SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 18787UPDATE t1 SET f_int1 = @cur_value1 18788WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 18789 18790# check single-4 success: 1 18791SELECT MAX(f_int1) INTO @cur_value FROM t1; 18792DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 18793 18794# check single-5 success: 1 18795DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 18796 18797# check single-6 success: 1 18798INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 18799ERROR HY000: Table has no partition for value 2147483647 18800DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 18801INSERT t1 SET f_int1 = 0 , f_int2 = 0, 18802f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 18803f_charbig = '#NULL#'; 18804INSERT INTO t1 18805SET f_int1 = NULL , f_int2 = -@max_row, 18806f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 18807f_charbig = '#NULL#'; 18808# check null success: 1 18809 18810# check null-1 success: 1 18811UPDATE t1 SET f_int1 = -@max_row 18812WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18813AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18814 18815# check null-2 success: 1 18816UPDATE t1 SET f_int1 = NULL 18817WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18818AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18819 18820# check null-3 success: 1 18821DELETE FROM t1 18822WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 18823AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 18824 18825# check null-4 success: 1 18826DELETE FROM t1 18827WHERE f_int1 = 0 AND f_int2 = 0 18828AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 18829AND f_charbig = '#NULL#'; 18830INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18831SELECT f_int1, f_int1, '', '', 'was inserted' 18832 FROM t0_template source_tab 18833WHERE MOD(f_int1,3) = 0 18834AND f_int1 BETWEEN @max_row_div2 AND @max_row 18835ON DUPLICATE KEY 18836UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 18837f_int2 = 2 * @max_row + source_tab.f_int1, 18838f_charbig = 'was updated'; 18839 18840# check unique-1-a success: 1 18841 18842# check unique-1-b success: 1 18843DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18844UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18845f_int2 = CAST(f_char1 AS SIGNED INT), 18846f_charbig = CONCAT('===',f_char1,'===') 18847WHERE f_charbig = 'was updated'; 18848REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18849SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 18850 FROM t0_template source_tab 18851WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 18852 18853# check replace success: 1 18854DELETE FROM t1 18855WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 18856DELETE FROM t1 18857WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 18858f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 18859UPDATE t1 SET f_int2 = f_int1, 18860f_char1 = CAST(f_int1 AS CHAR), 18861f_char2 = CAST(f_int1 AS CHAR), 18862f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 18863WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 18864SET AUTOCOMMIT= 0; 18865INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18866SELECT f_int1, f_int1, '', '', 'was inserted' 18867FROM t0_template source_tab 18868WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18869 18870# check transactions-1 success: 1 18871COMMIT WORK; 18872 18873# check transactions-2 success: 1 18874ROLLBACK WORK; 18875 18876# check transactions-3 success: 1 18877DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18878COMMIT WORK; 18879ROLLBACK WORK; 18880 18881# check transactions-4 success: 1 18882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18883SELECT f_int1, f_int1, '', '', 'was inserted' 18884FROM t0_template source_tab 18885WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18886 18887# check transactions-5 success: 1 18888ROLLBACK WORK; 18889 18890# check transactions-6 success: 1 18891# INFO: Storage engine used for t1 seems to be transactional. 18892COMMIT; 18893 18894# check transactions-7 success: 1 18895DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18896COMMIT WORK; 18897SET @@session.sql_mode = 'traditional'; 18898Warnings: 18899Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 18900SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 18901INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 18902SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 18903'', '', 'was inserted' FROM t0_template 18904WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 18905ERROR 22012: Division by 0 18906COMMIT; 18907 18908# check transactions-8 success: 1 18909# INFO: Storage engine used for t1 seems to be able to revert 18910# changes made by the failing statement. 18911SET @@session.sql_mode = ''; 18912Warnings: 18913Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 18914SET AUTOCOMMIT= 1; 18915DELETE FROM t1 WHERE f_charbig = 'was inserted'; 18916COMMIT WORK; 18917UPDATE t1 SET f_charbig = REPEAT('b', 1000); 18918 18919# check special-1 success: 1 18920UPDATE t1 SET f_charbig = ''; 18921 18922# check special-2 success: 1 18923UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 18924INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 18925SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 18926WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18927INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18928SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18929'just inserted' FROM t0_template 18930WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18931CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 18932BEGIN 18933UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18934f_charbig = 'updated by trigger' 18935 WHERE f_int1 = new.f_int1; 18936END| 18937INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18938SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 18939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18940 18941# check trigger-1 success: 1 18942DROP TRIGGER trg_1; 18943UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18944f_int2 = CAST(f_char1 AS SIGNED INT), 18945f_charbig = 'just inserted' 18946 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18947DELETE FROM t0_aux 18948WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18949INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18950SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18951'just inserted' FROM t0_template 18952WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18953CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 18954BEGIN 18955UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18956f_charbig = 'updated by trigger' 18957 WHERE f_int1 = new.f_int1; 18958END| 18959INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18960SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 18961WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18962 18963# check trigger-2 success: 1 18964DROP TRIGGER trg_1; 18965UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18966f_int2 = CAST(f_char1 AS SIGNED INT), 18967f_charbig = 'just inserted' 18968 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18969DELETE FROM t0_aux 18970WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18971INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18972SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18973'just inserted' FROM t0_template 18974WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18975CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 18976BEGIN 18977UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18978f_charbig = 'updated by trigger' 18979 WHERE f_int1 = new.f_int1; 18980END| 18981UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 18982WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 18983 18984# check trigger-3 success: 1 18985DROP TRIGGER trg_1; 18986UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 18987f_int2 = CAST(f_char1 AS SIGNED INT), 18988f_charbig = 'just inserted' 18989 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 18990DELETE FROM t0_aux 18991WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18992INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 18993SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 18994'just inserted' FROM t0_template 18995WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 18996CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 18997BEGIN 18998UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 18999f_charbig = 'updated by trigger' 19000 WHERE f_int1 = - old.f_int1; 19001END| 19002UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19003WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19004 19005# check trigger-4 success: 1 19006DROP TRIGGER trg_1; 19007UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19008f_int2 = CAST(f_char1 AS SIGNED INT), 19009f_charbig = 'just inserted' 19010 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19011DELETE FROM t0_aux 19012WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19013INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19014SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19015'just inserted' FROM t0_template 19016WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19017CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 19018BEGIN 19019UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19020f_charbig = 'updated by trigger' 19021 WHERE f_int1 = new.f_int1; 19022END| 19023UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19024WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19025 19026# check trigger-5 success: 1 19027DROP TRIGGER trg_1; 19028UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19029f_int2 = CAST(f_char1 AS SIGNED INT), 19030f_charbig = 'just inserted' 19031 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19032DELETE FROM t0_aux 19033WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19034INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19035SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19036'just inserted' FROM t0_template 19037WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19038CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 19039BEGIN 19040UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19041f_charbig = 'updated by trigger' 19042 WHERE f_int1 = - old.f_int1; 19043END| 19044UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19045WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19046 19047# check trigger-6 success: 1 19048DROP TRIGGER trg_1; 19049UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19050f_int2 = CAST(f_char1 AS SIGNED INT), 19051f_charbig = 'just inserted' 19052 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19053DELETE FROM t0_aux 19054WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19055INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19056SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19057'just inserted' FROM t0_template 19058WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19059CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 19060BEGIN 19061UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19062f_charbig = 'updated by trigger' 19063 WHERE f_int1 = - old.f_int1; 19064END| 19065DELETE FROM t0_aux 19066WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19067 19068# check trigger-7 success: 1 19069DROP TRIGGER trg_1; 19070UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19071f_int2 = CAST(f_char1 AS SIGNED INT), 19072f_charbig = 'just inserted' 19073 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19074DELETE FROM t0_aux 19075WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19076INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19077SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19078'just inserted' FROM t0_template 19079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19080CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 19081BEGIN 19082UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19083f_charbig = 'updated by trigger' 19084 WHERE f_int1 = - old.f_int1; 19085END| 19086DELETE FROM t0_aux 19087WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19088 19089# check trigger-8 success: 1 19090DROP TRIGGER trg_1; 19091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19092f_int2 = CAST(f_char1 AS SIGNED INT), 19093f_charbig = 'just inserted' 19094 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19095DELETE FROM t0_aux 19096WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19097DELETE FROM t1 19098WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19099CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 19100BEGIN 19101SET new.f_int1 = old.f_int1 + @max_row, 19102new.f_int2 = old.f_int2 - @max_row, 19103new.f_charbig = '####updated per update trigger####'; 19104END| 19105UPDATE t1 19106SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 19107f_charbig = '####updated per update statement itself####'; 19108 19109# check trigger-9 success: 1 19110DROP TRIGGER trg_2; 19111UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19112f_int2 = CAST(f_char1 AS SIGNED INT), 19113f_charbig = CONCAT('===',f_char1,'==='); 19114CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 19115BEGIN 19116SET new.f_int1 = new.f_int1 + @max_row, 19117new.f_int2 = new.f_int2 - @max_row, 19118new.f_charbig = '####updated per update trigger####'; 19119END| 19120UPDATE t1 19121SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 19122f_charbig = '####updated per update statement itself####'; 19123 19124# check trigger-10 success: 1 19125DROP TRIGGER trg_2; 19126UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19127f_int2 = CAST(f_char1 AS SIGNED INT), 19128f_charbig = CONCAT('===',f_char1,'==='); 19129CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 19130BEGIN 19131SET new.f_int1 = @my_max1 + @counter, 19132new.f_int2 = @my_min2 - @counter, 19133new.f_charbig = '####updated per insert trigger####'; 19134SET @counter = @counter + 1; 19135END| 19136SET @counter = 1; 19137SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 19138INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19139SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 19140CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 19141WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 19142ORDER BY f_int1; 19143DROP TRIGGER trg_3; 19144 19145# check trigger-11 success: 1 19146DELETE FROM t1 19147WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 19148AND f_int2 <> CAST(f_char1 AS SIGNED INT) 19149AND f_charbig = '####updated per insert trigger####'; 19150CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 19151BEGIN 19152SET new.f_int1 = @my_max1 + @counter, 19153new.f_int2 = @my_min2 - @counter, 19154new.f_charbig = '####updated per insert trigger####'; 19155SET @counter = @counter + 1; 19156END| 19157SET @counter = 1; 19158SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 19159INSERT INTO t1 (f_char1, f_char2, f_charbig) 19160SELECT CAST(f_int1 AS CHAR), 19161CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 19162WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 19163ORDER BY f_int1; 19164DROP TRIGGER trg_3; 19165 19166# check trigger-12 success: 1 19167DELETE FROM t1 19168WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 19169AND f_int2 <> CAST(f_char1 AS SIGNED INT) 19170AND f_charbig = '####updated per insert trigger####'; 19171ANALYZE TABLE t1; 19172Table Op Msg_type Msg_text 19173test.t1 analyze status OK 19174CHECK TABLE t1 EXTENDED; 19175Table Op Msg_type Msg_text 19176test.t1 check status OK 19177CHECKSUM TABLE t1 EXTENDED; 19178Table Checksum 19179test.t1 <some_value> 19180OPTIMIZE TABLE t1; 19181Table Op Msg_type Msg_text 19182test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 19183test.t1 optimize status OK 19184# check layout success: 1 19185REPAIR TABLE t1 EXTENDED; 19186Table Op Msg_type Msg_text 19187test.t1 repair status OK 19188# check layout success: 1 19189TRUNCATE t1; 19190 19191# check TRUNCATE success: 1 19192# check layout success: 1 19193# End usability test (inc/partition_check.inc) 19194DROP TABLE t1; 19195CREATE TABLE t1 ( 19196f_int1 INTEGER, 19197f_int2 INTEGER, 19198f_char1 CHAR(20), 19199f_char2 CHAR(20), 19200f_charbig VARCHAR(1000) 19201, UNIQUE INDEX uidx (f_int2,f_int1) 19202) 19203PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) 19204(PARTITION part1 VALUES IN (0) 19205(SUBPARTITION sp11, SUBPARTITION sp12), 19206PARTITION part2 VALUES IN (1) 19207(SUBPARTITION sp21, SUBPARTITION sp22), 19208PARTITION part3 VALUES IN (2) 19209(SUBPARTITION sp31, SUBPARTITION sp32), 19210PARTITION part4 VALUES IN (NULL) 19211(SUBPARTITION sp41, SUBPARTITION sp42)); 19212INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19213SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 19214WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 19215ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 19216INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19217SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 19218WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 19219# Start usability test (inc/partition_check.inc) 19220create_command 19221SHOW CREATE TABLE t1; 19222Table Create Table 19223t1 CREATE TABLE `t1` ( 19224 `f_int1` bigint(20) DEFAULT NULL, 19225 `f_int2` bigint(20) DEFAULT NULL, 19226 `f_char1` char(20) DEFAULT NULL, 19227 `f_char2` char(20) DEFAULT NULL, 19228 `f_charbig` varchar(1000) DEFAULT NULL, 19229 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 19230) ENGINE=InnoDB DEFAULT CHARSET=latin1 19231/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) 19232SUBPARTITION BY HASH (f_int2 + 1) 19233(PARTITION part1 VALUES IN (0) 19234 (SUBPARTITION sp11 ENGINE = InnoDB, 19235 SUBPARTITION sp12 ENGINE = InnoDB), 19236 PARTITION part2 VALUES IN (1) 19237 (SUBPARTITION sp21 ENGINE = InnoDB, 19238 SUBPARTITION sp22 ENGINE = InnoDB), 19239 PARTITION part3 VALUES IN (2) 19240 (SUBPARTITION sp31 ENGINE = InnoDB, 19241 SUBPARTITION sp32 ENGINE = InnoDB), 19242 PARTITION part4 VALUES IN (NULL) 19243 (SUBPARTITION sp41 ENGINE = InnoDB, 19244 SUBPARTITION sp42 ENGINE = InnoDB)) */ 19245 19246# check prerequisites-1 success: 1 19247# check COUNT(*) success: 1 19248# check MIN/MAX(f_int1) success: 1 19249# check MIN/MAX(f_int2) success: 1 19250INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19251SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 19252CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 19253WHERE f_int1 IN (2,3); 19254ERROR 23000: Duplicate entry '2-2' for key 'uidx' 19255# check prerequisites-3 success: 1 19256# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 19257INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19258SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 19259CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 19260WHERE f_int1 IN (2,3); 19261DELETE FROM t1 WHERE f_charbig = 'delete me'; 19262INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19263SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 19264CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 19265WHERE f_int1 IN (2,3); 19266DELETE FROM t1 WHERE f_charbig = 'delete me'; 19267# check read via f_int1 success: 1 19268# check read via f_int2 success: 1 19269 19270# check multiple-1 success: 1 19271DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 19272 19273# check multiple-2 success: 1 19274INSERT INTO t1 SELECT * FROM t0_template 19275WHERE MOD(f_int1,3) = 0; 19276 19277# check multiple-3 success: 1 19278UPDATE t1 SET f_int1 = f_int1 + @max_row 19279WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 19280AND @max_row_div2 + @max_row_div4; 19281 19282# check multiple-4 success: 1 19283DELETE FROM t1 19284WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 19285AND @max_row_div2 + @max_row_div4 + @max_row; 19286 19287# check multiple-5 success: 1 19288SELECT COUNT(*) INTO @try_count FROM t0_template 19289WHERE MOD(f_int1,3) = 0 19290AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19291SELECT COUNT(*) INTO @clash_count 19292FROM t1 INNER JOIN t0_template USING(f_int1) 19293WHERE MOD(f_int1,3) = 0 19294AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19295SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 19296INSERT INTO t1 19297SET f_int1 = @cur_value , f_int2 = @cur_value, 19298f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 19299f_charbig = '#SINGLE#'; 19300 19301# check single-1 success: 1 19302SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 19303INSERT INTO t1 19304SET f_int1 = @cur_value , f_int2 = @cur_value, 19305f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 19306f_charbig = '#SINGLE#'; 19307 19308# check single-2 success: 1 19309SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 19310SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 19311UPDATE t1 SET f_int1 = @cur_value2 19312WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 19313 19314# check single-3 success: 1 19315SET @cur_value1= -1; 19316SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 19317UPDATE t1 SET f_int1 = @cur_value1 19318WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 19319 19320# check single-4 success: 1 19321SELECT MAX(f_int1) INTO @cur_value FROM t1; 19322DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 19323 19324# check single-5 success: 1 19325DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 19326 19327# check single-6 success: 1 19328INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 19329 19330# check single-7 success: 1 19331DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 19332DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 19333INSERT t1 SET f_int1 = 0 , f_int2 = 0, 19334f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 19335f_charbig = '#NULL#'; 19336INSERT INTO t1 19337SET f_int1 = NULL , f_int2 = -@max_row, 19338f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 19339f_charbig = '#NULL#'; 19340# check null success: 1 19341 19342# check null-1 success: 1 19343UPDATE t1 SET f_int1 = -@max_row 19344WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19345AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19346 19347# check null-2 success: 1 19348UPDATE t1 SET f_int1 = NULL 19349WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19350AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19351 19352# check null-3 success: 1 19353DELETE FROM t1 19354WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19355AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19356 19357# check null-4 success: 1 19358DELETE FROM t1 19359WHERE f_int1 = 0 AND f_int2 = 0 19360AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 19361AND f_charbig = '#NULL#'; 19362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19363SELECT f_int1, f_int1, '', '', 'was inserted' 19364 FROM t0_template source_tab 19365WHERE MOD(f_int1,3) = 0 19366AND f_int1 BETWEEN @max_row_div2 AND @max_row 19367ON DUPLICATE KEY 19368UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 19369f_int2 = 2 * @max_row + source_tab.f_int1, 19370f_charbig = 'was updated'; 19371 19372# check unique-1-a success: 1 19373 19374# check unique-1-b success: 1 19375DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19376UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19377f_int2 = CAST(f_char1 AS SIGNED INT), 19378f_charbig = CONCAT('===',f_char1,'===') 19379WHERE f_charbig = 'was updated'; 19380REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19381SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 19382 FROM t0_template source_tab 19383WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19384 19385# check replace success: 1 19386DELETE FROM t1 19387WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 19388DELETE FROM t1 19389WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 19390f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 19391UPDATE t1 SET f_int2 = f_int1, 19392f_char1 = CAST(f_int1 AS CHAR), 19393f_char2 = CAST(f_int1 AS CHAR), 19394f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 19395WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 19396SET AUTOCOMMIT= 0; 19397INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19398SELECT f_int1, f_int1, '', '', 'was inserted' 19399FROM t0_template source_tab 19400WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19401 19402# check transactions-1 success: 1 19403COMMIT WORK; 19404 19405# check transactions-2 success: 1 19406ROLLBACK WORK; 19407 19408# check transactions-3 success: 1 19409DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19410COMMIT WORK; 19411ROLLBACK WORK; 19412 19413# check transactions-4 success: 1 19414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19415SELECT f_int1, f_int1, '', '', 'was inserted' 19416FROM t0_template source_tab 19417WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19418 19419# check transactions-5 success: 1 19420ROLLBACK WORK; 19421 19422# check transactions-6 success: 1 19423# INFO: Storage engine used for t1 seems to be transactional. 19424COMMIT; 19425 19426# check transactions-7 success: 1 19427DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19428COMMIT WORK; 19429SET @@session.sql_mode = 'traditional'; 19430Warnings: 19431Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 19432SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 19433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19434SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 19435'', '', 'was inserted' FROM t0_template 19436WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19437ERROR 22012: Division by 0 19438COMMIT; 19439 19440# check transactions-8 success: 1 19441# INFO: Storage engine used for t1 seems to be able to revert 19442# changes made by the failing statement. 19443SET @@session.sql_mode = ''; 19444Warnings: 19445Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 19446SET AUTOCOMMIT= 1; 19447DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19448COMMIT WORK; 19449UPDATE t1 SET f_charbig = REPEAT('b', 1000); 19450 19451# check special-1 success: 1 19452UPDATE t1 SET f_charbig = ''; 19453 19454# check special-2 success: 1 19455UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 19456INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19457SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 19458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19459INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19460SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19461'just inserted' FROM t0_template 19462WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19463CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 19464BEGIN 19465UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19466f_charbig = 'updated by trigger' 19467 WHERE f_int1 = new.f_int1; 19468END| 19469INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19470SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 19471WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19472 19473# check trigger-1 success: 1 19474DROP TRIGGER trg_1; 19475UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19476f_int2 = CAST(f_char1 AS SIGNED INT), 19477f_charbig = 'just inserted' 19478 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19479DELETE FROM t0_aux 19480WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19481INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19482SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19483'just inserted' FROM t0_template 19484WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19485CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 19486BEGIN 19487UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19488f_charbig = 'updated by trigger' 19489 WHERE f_int1 = new.f_int1; 19490END| 19491INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19492SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 19493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19494 19495# check trigger-2 success: 1 19496DROP TRIGGER trg_1; 19497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19498f_int2 = CAST(f_char1 AS SIGNED INT), 19499f_charbig = 'just inserted' 19500 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19501DELETE FROM t0_aux 19502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19503INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19504SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19505'just inserted' FROM t0_template 19506WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19507CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 19508BEGIN 19509UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19510f_charbig = 'updated by trigger' 19511 WHERE f_int1 = new.f_int1; 19512END| 19513UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19514WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19515 19516# check trigger-3 success: 1 19517DROP TRIGGER trg_1; 19518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19519f_int2 = CAST(f_char1 AS SIGNED INT), 19520f_charbig = 'just inserted' 19521 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19522DELETE FROM t0_aux 19523WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19524INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19525SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19526'just inserted' FROM t0_template 19527WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19528CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 19529BEGIN 19530UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19531f_charbig = 'updated by trigger' 19532 WHERE f_int1 = - old.f_int1; 19533END| 19534UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19535WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19536 19537# check trigger-4 success: 1 19538DROP TRIGGER trg_1; 19539UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19540f_int2 = CAST(f_char1 AS SIGNED INT), 19541f_charbig = 'just inserted' 19542 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19543DELETE FROM t0_aux 19544WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19545INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19546SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19547'just inserted' FROM t0_template 19548WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19549CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 19550BEGIN 19551UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19552f_charbig = 'updated by trigger' 19553 WHERE f_int1 = new.f_int1; 19554END| 19555UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19556WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19557 19558# check trigger-5 success: 1 19559DROP TRIGGER trg_1; 19560UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19561f_int2 = CAST(f_char1 AS SIGNED INT), 19562f_charbig = 'just inserted' 19563 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19564DELETE FROM t0_aux 19565WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19566INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19567SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19568'just inserted' FROM t0_template 19569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19570CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 19571BEGIN 19572UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19573f_charbig = 'updated by trigger' 19574 WHERE f_int1 = - old.f_int1; 19575END| 19576UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 19577WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19578 19579# check trigger-6 success: 1 19580DROP TRIGGER trg_1; 19581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19582f_int2 = CAST(f_char1 AS SIGNED INT), 19583f_charbig = 'just inserted' 19584 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19585DELETE FROM t0_aux 19586WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19588SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19589'just inserted' FROM t0_template 19590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19591CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 19592BEGIN 19593UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19594f_charbig = 'updated by trigger' 19595 WHERE f_int1 = - old.f_int1; 19596END| 19597DELETE FROM t0_aux 19598WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19599 19600# check trigger-7 success: 1 19601DROP TRIGGER trg_1; 19602UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19603f_int2 = CAST(f_char1 AS SIGNED INT), 19604f_charbig = 'just inserted' 19605 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19606DELETE FROM t0_aux 19607WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19610'just inserted' FROM t0_template 19611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19612CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 19613BEGIN 19614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19615f_charbig = 'updated by trigger' 19616 WHERE f_int1 = - old.f_int1; 19617END| 19618DELETE FROM t0_aux 19619WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 19620 19621# check trigger-8 success: 1 19622DROP TRIGGER trg_1; 19623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19624f_int2 = CAST(f_char1 AS SIGNED INT), 19625f_charbig = 'just inserted' 19626 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19627DELETE FROM t0_aux 19628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19629DELETE FROM t1 19630WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19631CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 19632BEGIN 19633SET new.f_int1 = old.f_int1 + @max_row, 19634new.f_int2 = old.f_int2 - @max_row, 19635new.f_charbig = '####updated per update trigger####'; 19636END| 19637UPDATE t1 19638SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 19639f_charbig = '####updated per update statement itself####'; 19640 19641# check trigger-9 success: 1 19642DROP TRIGGER trg_2; 19643UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19644f_int2 = CAST(f_char1 AS SIGNED INT), 19645f_charbig = CONCAT('===',f_char1,'==='); 19646CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 19647BEGIN 19648SET new.f_int1 = new.f_int1 + @max_row, 19649new.f_int2 = new.f_int2 - @max_row, 19650new.f_charbig = '####updated per update trigger####'; 19651END| 19652UPDATE t1 19653SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 19654f_charbig = '####updated per update statement itself####'; 19655 19656# check trigger-10 success: 1 19657DROP TRIGGER trg_2; 19658UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19659f_int2 = CAST(f_char1 AS SIGNED INT), 19660f_charbig = CONCAT('===',f_char1,'==='); 19661CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 19662BEGIN 19663SET new.f_int1 = @my_max1 + @counter, 19664new.f_int2 = @my_min2 - @counter, 19665new.f_charbig = '####updated per insert trigger####'; 19666SET @counter = @counter + 1; 19667END| 19668SET @counter = 1; 19669SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 19670INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19671SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 19672CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 19673WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 19674ORDER BY f_int1; 19675DROP TRIGGER trg_3; 19676 19677# check trigger-11 success: 1 19678DELETE FROM t1 19679WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 19680AND f_int2 <> CAST(f_char1 AS SIGNED INT) 19681AND f_charbig = '####updated per insert trigger####'; 19682CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 19683BEGIN 19684SET new.f_int1 = @my_max1 + @counter, 19685new.f_int2 = @my_min2 - @counter, 19686new.f_charbig = '####updated per insert trigger####'; 19687SET @counter = @counter + 1; 19688END| 19689SET @counter = 1; 19690SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 19691INSERT INTO t1 (f_char1, f_char2, f_charbig) 19692SELECT CAST(f_int1 AS CHAR), 19693CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 19694WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 19695ORDER BY f_int1; 19696DROP TRIGGER trg_3; 19697 19698# check trigger-12 success: 1 19699DELETE FROM t1 19700WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 19701AND f_int2 <> CAST(f_char1 AS SIGNED INT) 19702AND f_charbig = '####updated per insert trigger####'; 19703ANALYZE TABLE t1; 19704Table Op Msg_type Msg_text 19705test.t1 analyze status OK 19706CHECK TABLE t1 EXTENDED; 19707Table Op Msg_type Msg_text 19708test.t1 check status OK 19709CHECKSUM TABLE t1 EXTENDED; 19710Table Checksum 19711test.t1 <some_value> 19712OPTIMIZE TABLE t1; 19713Table Op Msg_type Msg_text 19714test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 19715test.t1 optimize status OK 19716# check layout success: 1 19717REPAIR TABLE t1 EXTENDED; 19718Table Op Msg_type Msg_text 19719test.t1 repair status OK 19720# check layout success: 1 19721TRUNCATE t1; 19722 19723# check TRUNCATE success: 1 19724# check layout success: 1 19725# End usability test (inc/partition_check.inc) 19726DROP TABLE t1; 19727CREATE TABLE t1 ( 19728f_int1 INTEGER, 19729f_int2 INTEGER, 19730f_char1 CHAR(20), 19731f_char2 CHAR(20), 19732f_charbig VARCHAR(1000) 19733, UNIQUE INDEX uidx (f_int2,f_int1) 19734) 19735PARTITION BY LIST(ABS(MOD(f_int1,2))) 19736SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 19737(PARTITION part1 VALUES IN (0), 19738PARTITION part2 VALUES IN (1), 19739PARTITION part3 VALUES IN (NULL)); 19740INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19741SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 19742WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; 19743ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT; 19744INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19745SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template 19746WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; 19747# Start usability test (inc/partition_check.inc) 19748create_command 19749SHOW CREATE TABLE t1; 19750Table Create Table 19751t1 CREATE TABLE `t1` ( 19752 `f_int1` bigint(20) DEFAULT NULL, 19753 `f_int2` bigint(20) DEFAULT NULL, 19754 `f_char1` char(20) DEFAULT NULL, 19755 `f_char2` char(20) DEFAULT NULL, 19756 `f_charbig` varchar(1000) DEFAULT NULL, 19757 UNIQUE KEY `uidx` (`f_int2`,`f_int1`) 19758) ENGINE=InnoDB DEFAULT CHARSET=latin1 19759/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) 19760SUBPARTITION BY KEY (f_int2) 19761SUBPARTITIONS 3 19762(PARTITION part1 VALUES IN (0) ENGINE = InnoDB, 19763 PARTITION part2 VALUES IN (1) ENGINE = InnoDB, 19764 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */ 19765 19766# check prerequisites-1 success: 1 19767# check COUNT(*) success: 1 19768# check MIN/MAX(f_int1) success: 1 19769# check MIN/MAX(f_int2) success: 1 19770INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19771SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 19772CAST(f_int1 AS CHAR), 'delete me' FROM t0_template 19773WHERE f_int1 IN (2,3); 19774ERROR 23000: Duplicate entry '2-2' for key 'uidx' 19775# check prerequisites-3 success: 1 19776# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE 19777INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19778SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 19779CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 19780WHERE f_int1 IN (2,3); 19781DELETE FROM t1 WHERE f_charbig = 'delete me'; 19782INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19783SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR), 19784CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template 19785WHERE f_int1 IN (2,3); 19786DELETE FROM t1 WHERE f_charbig = 'delete me'; 19787# check read via f_int1 success: 1 19788# check read via f_int2 success: 1 19789 19790# check multiple-1 success: 1 19791DELETE FROM t1 WHERE MOD(f_int1,3) = 0; 19792 19793# check multiple-2 success: 1 19794INSERT INTO t1 SELECT * FROM t0_template 19795WHERE MOD(f_int1,3) = 0; 19796 19797# check multiple-3 success: 1 19798UPDATE t1 SET f_int1 = f_int1 + @max_row 19799WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 19800AND @max_row_div2 + @max_row_div4; 19801 19802# check multiple-4 success: 1 19803DELETE FROM t1 19804WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row 19805AND @max_row_div2 + @max_row_div4 + @max_row; 19806 19807# check multiple-5 success: 1 19808SELECT COUNT(*) INTO @try_count FROM t0_template 19809WHERE MOD(f_int1,3) = 0 19810AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19811SELECT COUNT(*) INTO @clash_count 19812FROM t1 INNER JOIN t0_template USING(f_int1) 19813WHERE MOD(f_int1,3) = 0 19814AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19815SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; 19816INSERT INTO t1 19817SET f_int1 = @cur_value , f_int2 = @cur_value, 19818f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 19819f_charbig = '#SINGLE#'; 19820 19821# check single-1 success: 1 19822SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; 19823INSERT INTO t1 19824SET f_int1 = @cur_value , f_int2 = @cur_value, 19825f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), 19826f_charbig = '#SINGLE#'; 19827 19828# check single-2 success: 1 19829SELECT MIN(f_int1) INTO @cur_value1 FROM t1; 19830SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; 19831UPDATE t1 SET f_int1 = @cur_value2 19832WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; 19833 19834# check single-3 success: 1 19835SET @cur_value1= -1; 19836SELECT MAX(f_int1) INTO @cur_value2 FROM t1; 19837UPDATE t1 SET f_int1 = @cur_value1 19838WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; 19839 19840# check single-4 success: 1 19841SELECT MAX(f_int1) INTO @cur_value FROM t1; 19842DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; 19843 19844# check single-5 success: 1 19845DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; 19846 19847# check single-6 success: 1 19848INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; 19849 19850# check single-7 success: 1 19851DELETE FROM t1 WHERE f_charbig = '#2147483647##'; 19852DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; 19853INSERT t1 SET f_int1 = 0 , f_int2 = 0, 19854f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), 19855f_charbig = '#NULL#'; 19856INSERT INTO t1 19857SET f_int1 = NULL , f_int2 = -@max_row, 19858f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), 19859f_charbig = '#NULL#'; 19860# check null success: 1 19861 19862# check null-1 success: 1 19863UPDATE t1 SET f_int1 = -@max_row 19864WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19865AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19866 19867# check null-2 success: 1 19868UPDATE t1 SET f_int1 = NULL 19869WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19870AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19871 19872# check null-3 success: 1 19873DELETE FROM t1 19874WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) 19875AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; 19876 19877# check null-4 success: 1 19878DELETE FROM t1 19879WHERE f_int1 = 0 AND f_int2 = 0 19880AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) 19881AND f_charbig = '#NULL#'; 19882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19883SELECT f_int1, f_int1, '', '', 'was inserted' 19884 FROM t0_template source_tab 19885WHERE MOD(f_int1,3) = 0 19886AND f_int1 BETWEEN @max_row_div2 AND @max_row 19887ON DUPLICATE KEY 19888UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, 19889f_int2 = 2 * @max_row + source_tab.f_int1, 19890f_charbig = 'was updated'; 19891 19892# check unique-1-a success: 1 19893 19894# check unique-1-b success: 1 19895DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19897f_int2 = CAST(f_char1 AS SIGNED INT), 19898f_charbig = CONCAT('===',f_char1,'===') 19899WHERE f_charbig = 'was updated'; 19900REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19901SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' 19902 FROM t0_template source_tab 19903WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; 19904 19905# check replace success: 1 19906DELETE FROM t1 19907WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; 19908DELETE FROM t1 19909WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND 19910f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; 19911UPDATE t1 SET f_int2 = f_int1, 19912f_char1 = CAST(f_int1 AS CHAR), 19913f_char2 = CAST(f_int1 AS CHAR), 19914f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') 19915WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; 19916SET AUTOCOMMIT= 0; 19917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19918SELECT f_int1, f_int1, '', '', 'was inserted' 19919FROM t0_template source_tab 19920WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19921 19922# check transactions-1 success: 1 19923COMMIT WORK; 19924 19925# check transactions-2 success: 1 19926ROLLBACK WORK; 19927 19928# check transactions-3 success: 1 19929DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19930COMMIT WORK; 19931ROLLBACK WORK; 19932 19933# check transactions-4 success: 1 19934INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19935SELECT f_int1, f_int1, '', '', 'was inserted' 19936FROM t0_template source_tab 19937WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19938 19939# check transactions-5 success: 1 19940ROLLBACK WORK; 19941 19942# check transactions-6 success: 1 19943# INFO: Storage engine used for t1 seems to be transactional. 19944COMMIT; 19945 19946# check transactions-7 success: 1 19947DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19948COMMIT WORK; 19949SET @@session.sql_mode = 'traditional'; 19950Warnings: 19951Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 19952SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; 19953INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 19954SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, 19955'', '', 'was inserted' FROM t0_template 19956WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; 19957ERROR 22012: Division by 0 19958COMMIT; 19959 19960# check transactions-8 success: 1 19961# INFO: Storage engine used for t1 seems to be able to revert 19962# changes made by the failing statement. 19963SET @@session.sql_mode = ''; 19964Warnings: 19965Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. 19966SET AUTOCOMMIT= 1; 19967DELETE FROM t1 WHERE f_charbig = 'was inserted'; 19968COMMIT WORK; 19969UPDATE t1 SET f_charbig = REPEAT('b', 1000); 19970 19971# check special-1 success: 1 19972UPDATE t1 SET f_charbig = ''; 19973 19974# check special-2 success: 1 19975UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); 19976INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) 19977SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template 19978WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19979INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19980SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 19981'just inserted' FROM t0_template 19982WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19983CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW 19984BEGIN 19985UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 19986f_charbig = 'updated by trigger' 19987 WHERE f_int1 = new.f_int1; 19988END| 19989INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 19990SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 19991WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 19992 19993# check trigger-1 success: 1 19994DROP TRIGGER trg_1; 19995UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 19996f_int2 = CAST(f_char1 AS SIGNED INT), 19997f_charbig = 'just inserted' 19998 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 19999DELETE FROM t0_aux 20000WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20001INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20002SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20003'just inserted' FROM t0_template 20004WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20005CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW 20006BEGIN 20007UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20008f_charbig = 'updated by trigger' 20009 WHERE f_int1 = new.f_int1; 20010END| 20011INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20012SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template 20013WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20014 20015# check trigger-2 success: 1 20016DROP TRIGGER trg_1; 20017UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20018f_int2 = CAST(f_char1 AS SIGNED INT), 20019f_charbig = 'just inserted' 20020 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20021DELETE FROM t0_aux 20022WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20023INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20024SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20025'just inserted' FROM t0_template 20026WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20027CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 20028BEGIN 20029UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20030f_charbig = 'updated by trigger' 20031 WHERE f_int1 = new.f_int1; 20032END| 20033UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 20034WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20035 20036# check trigger-3 success: 1 20037DROP TRIGGER trg_1; 20038UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20039f_int2 = CAST(f_char1 AS SIGNED INT), 20040f_charbig = 'just inserted' 20041 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20042DELETE FROM t0_aux 20043WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20044INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20045SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20046'just inserted' FROM t0_template 20047WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20048CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW 20049BEGIN 20050UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20051f_charbig = 'updated by trigger' 20052 WHERE f_int1 = - old.f_int1; 20053END| 20054UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 20055WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20056 20057# check trigger-4 success: 1 20058DROP TRIGGER trg_1; 20059UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20060f_int2 = CAST(f_char1 AS SIGNED INT), 20061f_charbig = 'just inserted' 20062 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20063DELETE FROM t0_aux 20064WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20065INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20066SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20067'just inserted' FROM t0_template 20068WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20069CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 20070BEGIN 20071UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20072f_charbig = 'updated by trigger' 20073 WHERE f_int1 = new.f_int1; 20074END| 20075UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 20076WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20077 20078# check trigger-5 success: 1 20079DROP TRIGGER trg_1; 20080UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20081f_int2 = CAST(f_char1 AS SIGNED INT), 20082f_charbig = 'just inserted' 20083 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20084DELETE FROM t0_aux 20085WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20086INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20087SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20088'just inserted' FROM t0_template 20089WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20090CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW 20091BEGIN 20092UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20093f_charbig = 'updated by trigger' 20094 WHERE f_int1 = - old.f_int1; 20095END| 20096UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 20097WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20098 20099# check trigger-6 success: 1 20100DROP TRIGGER trg_1; 20101UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20102f_int2 = CAST(f_char1 AS SIGNED INT), 20103f_charbig = 'just inserted' 20104 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20105DELETE FROM t0_aux 20106WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20108SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20109'just inserted' FROM t0_template 20110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20111CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW 20112BEGIN 20113UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20114f_charbig = 'updated by trigger' 20115 WHERE f_int1 = - old.f_int1; 20116END| 20117DELETE FROM t0_aux 20118WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20119 20120# check trigger-7 success: 1 20121DROP TRIGGER trg_1; 20122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20123f_int2 = CAST(f_char1 AS SIGNED INT), 20124f_charbig = 'just inserted' 20125 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20126DELETE FROM t0_aux 20127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) 20129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 20130'just inserted' FROM t0_template 20131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20132CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW 20133BEGIN 20134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, 20135f_charbig = 'updated by trigger' 20136 WHERE f_int1 = - old.f_int1; 20137END| 20138DELETE FROM t0_aux 20139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); 20140 20141# check trigger-8 success: 1 20142DROP TRIGGER trg_1; 20143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20144f_int2 = CAST(f_char1 AS SIGNED INT), 20145f_charbig = 'just inserted' 20146 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); 20147DELETE FROM t0_aux 20148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20149DELETE FROM t1 20150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; 20151CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 20152BEGIN 20153SET new.f_int1 = old.f_int1 + @max_row, 20154new.f_int2 = old.f_int2 - @max_row, 20155new.f_charbig = '####updated per update trigger####'; 20156END| 20157UPDATE t1 20158SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 20159f_charbig = '####updated per update statement itself####'; 20160 20161# check trigger-9 success: 1 20162DROP TRIGGER trg_2; 20163UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20164f_int2 = CAST(f_char1 AS SIGNED INT), 20165f_charbig = CONCAT('===',f_char1,'==='); 20166CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW 20167BEGIN 20168SET new.f_int1 = new.f_int1 + @max_row, 20169new.f_int2 = new.f_int2 - @max_row, 20170new.f_charbig = '####updated per update trigger####'; 20171END| 20172UPDATE t1 20173SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, 20174f_charbig = '####updated per update statement itself####'; 20175 20176# check trigger-10 success: 1 20177DROP TRIGGER trg_2; 20178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), 20179f_int2 = CAST(f_char1 AS SIGNED INT), 20180f_charbig = CONCAT('===',f_char1,'==='); 20181CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 20182BEGIN 20183SET new.f_int1 = @my_max1 + @counter, 20184new.f_int2 = @my_min2 - @counter, 20185new.f_charbig = '####updated per insert trigger####'; 20186SET @counter = @counter + 1; 20187END| 20188SET @counter = 1; 20189SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 20190INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) 20191SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), 20192CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 20193WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 20194ORDER BY f_int1; 20195DROP TRIGGER trg_3; 20196 20197# check trigger-11 success: 1 20198DELETE FROM t1 20199WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 20200AND f_int2 <> CAST(f_char1 AS SIGNED INT) 20201AND f_charbig = '####updated per insert trigger####'; 20202CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW 20203BEGIN 20204SET new.f_int1 = @my_max1 + @counter, 20205new.f_int2 = @my_min2 - @counter, 20206new.f_charbig = '####updated per insert trigger####'; 20207SET @counter = @counter + 1; 20208END| 20209SET @counter = 1; 20210SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; 20211INSERT INTO t1 (f_char1, f_char2, f_charbig) 20212SELECT CAST(f_int1 AS CHAR), 20213CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template 20214WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 20215ORDER BY f_int1; 20216DROP TRIGGER trg_3; 20217 20218# check trigger-12 success: 1 20219DELETE FROM t1 20220WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) 20221AND f_int2 <> CAST(f_char1 AS SIGNED INT) 20222AND f_charbig = '####updated per insert trigger####'; 20223ANALYZE TABLE t1; 20224Table Op Msg_type Msg_text 20225test.t1 analyze status OK 20226CHECK TABLE t1 EXTENDED; 20227Table Op Msg_type Msg_text 20228test.t1 check status OK 20229CHECKSUM TABLE t1 EXTENDED; 20230Table Checksum 20231test.t1 <some_value> 20232OPTIMIZE TABLE t1; 20233Table Op Msg_type Msg_text 20234test.t1 optimize note Table does not support optimize, doing recreate + analyze instead 20235test.t1 optimize status OK 20236# check layout success: 1 20237REPAIR TABLE t1 EXTENDED; 20238Table Op Msg_type Msg_text 20239test.t1 repair status OK 20240# check layout success: 1 20241TRUNCATE t1; 20242 20243# check TRUNCATE success: 1 20244# check layout success: 1 20245# End usability test (inc/partition_check.inc) 20246DROP TABLE t1; 20247DROP VIEW IF EXISTS v1; 20248DROP TABLE IF EXISTS t1; 20249DROP TABLE IF EXISTS t0_aux; 20250DROP TABLE IF EXISTS t0_definition; 20251DROP TABLE IF EXISTS t0_template; 20252